首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >导致TypeError的硒和WebMock

导致TypeError的硒和WebMock
EN

Stack Overflow用户
提问于 2017-05-23 00:08:12
回答 2查看 342关注 0票数 0

在第一次调用visit时,WebMock和Selenium的组合会导致类型错误

代码语言:javascript
复制
 Failure/Error: id['ELEMENT'] || id['element-6066-11e4-a52e-4f735466cecf']
      TypeError:
        no implicit conversion of String into Integer
# /selenium-webdriver-3.4.0/lib/selenium/webdriver/common/bridge_helper.rb:43:in `[]'
# /selenium-webdriver-3.4.0/lib/selenium/webdriver/common/bridge_helper.rb:43:in `element_id_from'
# /selenium-webdriver-3.4.0/lib/selenium/webdriver/remote/bridge.rb:638:in `block in find_elements_by'
# /selenium-webdriver-3.4.0/lib/selenium/webdriver/remote/bridge.rb:638:in `each'
# /selenium-webdriver-3.4.0/lib/selenium/webdriver/remote/bridge.rb:638:in `map'
# /selenium-webdriver-3.4.0/lib/selenium/webdriver/remote/bridge.rb:638:in `find_elements_by'
# /selenium-webdriver-3.4.0/lib/selenium/webdriver/common/search_context.rb:79:in `find_elements'
# /capybara-2.14.0/lib/capybara/selenium/driver.rb:86:in `find_xpath'
# /capybara-2.14.0/lib/capybara/node/base.rb:108:in `find_xpath'
# /capybara-2.14.0/lib/capybara/queries/selector_query.rb:135:in `block in resolve_for'
# /capybara-2.14.0/lib/capybara/node/base.rb:81:in `synchronize'
# /capybara-2.14.0/lib/capybara/queries/selector_query.rb:131:in `resolve_for'
# /capybara-2.14.0/lib/capybara/node/finders.rb:40:in `block in find'
# /capybara-2.14.0/lib/capybara/node/base.rb:85:in `synchronize'
# /capybara-2.14.0/lib/capybara/node/finders.rb:38:in `find'
# /capybara-2.14.0/lib/capybara/node/actions.rb:92:in `fill_in'
# /capybara-2.14.0/lib/capybara/session.rb:784:in `block (2 levels) in <class:Session>'
# /capybara-angular-0.2.5/lib/capybara/angular/dsl.rb:8:in `block (2 levels) in <module:DSL>'
# ./spec/features/assesment_picker_spec.rb:34:in `block (3 levels) in <top (required)>'

但是,当我删除所有WebMock代码时,我的测试就会执行。我在我的WebMock异常中允许localhost,但是我的测试仍然无法执行。我不确定还需要做些什么才能让Selenium在使用WebMock的同时运行。此外,如果Selenium规范是第一个运行的,它们就会通过。

水豚设置

代码语言:javascript
复制
Capybara.configure do |config|
  config.run_server = false
  config.app_host = root_url #retrieved elsewhere

  Capybara.register_driver :chrome do |app|
    Capybara::Selenium::Driver.new(app, browser: :chrome)
  end

  config.save_path = File.join Dir.pwd, 'tmp', 'capybara'
end

Capybara.default_driver = :chrome
Capybara.current_driver = Capybara.default_driver
Capybara.javascript_driver = Capybara.default_driver

等级库辅助对象

代码语言:javascript
复制
require 'rspec/rails'
require 'rspec/autorun'
require 'factory_girl_rails'
require 'webmock/rspec'

WebMock.disable_net_connect!(allow_localhost: true, allow: [/browserstack.com/])

# Load support files
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }

RSpec.configure do |config|
  config.mock_with :rspec do |mocks|
    mocks.verify_partial_doubles = true
  end
end

从远程/桥接器中的find_elements返回的散列#find_elements_by

代码语言:javascript
复制
$ how
"css selector"
$ what
"a"
$ execute :find_elements, {}, {using: how, value: what}

{
              "acceptSslCerts" => true,
     "applicationCacheEnabled" => false,
    "browserConnectionEnabled" => false,
                 "browserName" => "chrome",
                      "chrome" => {
        "chromedriverVersion" => "2.29.461585 (0be2cd95f834e9ee7c46bcc7cf405b483f5ae83b)",
                "userDataDir" => "/var/folders/2h/ws89fb2s381c9_3fzy6f9gzm0000gn/T/.org.chromium.Chromium.RPWXqC"
    },
         "cssSelectorsEnabled" => true,
             "databaseEnabled" => false,
               "handlesAlerts" => true,
              "hasTouchScreen" => false,
           "javascriptEnabled" => true,
      "locationContextEnabled" => true,
      "mobileEmulationEnabled" => false,
                "nativeEvents" => true,
    "networkConnectionEnabled" => false,
            "pageLoadStrategy" => "normal",
                    "platform" => "Mac OS X",
                   "rotatable" => false,
           "takesHeapSnapshot" => true,
             "takesScreenshot" => true,
    "unexpectedAlertBehaviour" => "",
                     "version" => "57.0.2987.133",
           "webStorageEnabled" => true
}

工具

代码语言:javascript
复制
$ chromedriver -v
ChromeDriver 2.29.461585 (0be2cd95f834e9ee7c46bcc7cf405b483f5ae83b)
$ bundle list selenium-webdriver
/Users/aaron/.rvm/gems/ruby-2.3.4/gems/selenium-webdriver-3.4.0
EN

回答 2

Stack Overflow用户

发布于 2017-05-23 14:21:44

很可能您正在使用的selenium-webdriver与您正在使用的chromedriver版本不兼容。更新到最新的selenium-webdriver (我输入时为3.4.0)和chromedriver (2.29)。您可能还需要指示WebMock允许127.0.0.1上的连接用于selenium和chromedriver之间的通信,具体取决于您的配置。

票数 0
EN

Stack Overflow用户

发布于 2017-08-04 22:11:07

我总是为Browserstack和SauceLabs导入路缘模块,而不仅仅是在运行远程驱动程序的情况下。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44117487

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档