【问题标题】:Watir webdriver not working as expectedWatir webdriver 没有按预期工作
【发布时间】:2016-11-29 21:36:14
【问题描述】:

我尝试执行一个简单的浏览器测试

require 'rubygems'
require 'watir-webdriver'
b = Watir::Browser.new :firefox
b.goto 'http://www.google.com/'

浏览器启动并立即关闭并抛出以下错误

c:/ruby22/lib/ruby/2.2.0/net/http/generic_request.rb:25:in `initialize': HTTP request path is empty (ArgumentError)
    from c:/ruby22/lib/ruby/2.2.0/net/http/request.rb:14:in `initialize'
    from c:/ruby22/lib/ruby/gems/2.2.0/gems/selenium-webdriver-2.53.4/lib/selenium/webdriver/remote/http/default.rb:95:in `new'
    from c:/ruby22/lib/ruby/gems/2.2.0/gems/selenium-webdriver-2.53.4/lib/selenium/webdriver/remote/http/default.rb:95:in `new_request_for'
    from c:/ruby22/lib/ruby/gems/2.2.0/gems/selenium-webdriver-2.53.4/lib/selenium/webdriver/remote/http/default.rb:57:in `request'
    from c:/ruby22/lib/ruby/gems/2.2.0/gems/selenium-webdriver-2.53.4/lib/selenium/webdriver/remote/http/default.rb:88:in `request'
    from c:/ruby22/lib/ruby/gems/2.2.0/gems/selenium-webdriver-2.53.4/lib/selenium/webdriver/remote/http/common.rb:59:in `call'
    from c:/ruby22/lib/ruby/gems/2.2.0/gems/selenium-webdriver-2.53.4/lib/selenium/webdriver/remote/bridge.rb:649:in `raw_execute'
    from c:/ruby22/lib/ruby/gems/2.2.0/gems/selenium-webdriver-2.53.4/lib/selenium/webdriver/remote/bridge.rb:123:in `create_session'
    from c:/ruby22/lib/ruby/gems/2.2.0/gems/selenium-webdriver-2.53.4/lib/selenium/webdriver/remote/bridge.rb:87:in `initialize'
    from c:/ruby22/lib/ruby/gems/2.2.0/gems/selenium-webdriver-2.53.4/lib/selenium/webdriver/firefox/bridge.rb:55:in `initialize'
    from c:/ruby22/lib/ruby/gems/2.2.0/gems/selenium-webdriver-2.53.4/lib/selenium/webdriver/common/driver.rb:53:in `new'
    from c:/ruby22/lib/ruby/gems/2.2.0/gems/selenium-webdriver-2.53.4/lib/selenium/webdriver/common/driver.rb:53:in `for'
    from c:/ruby22/lib/ruby/gems/2.2.0/gems/selenium-webdriver-2.53.4/lib/selenium/webdriver.rb:84:in `for'
    from c:/ruby22/lib/ruby/gems/2.2.0/gems/watir-webdriver-0.9.1/lib/watir-webdriver/browser.rb:46:in `initialize'
    from test.rb:3:in `new'
    from test.rb:3:in `<main>'

HTTP请求路径为空是什么意思?新版本的watir调用参数有变化吗?

有人遇到过类似的问题吗?

我的系统是 Windows 7 64 位,我在代理后面运行,浏览器已经配置了代理

---编辑---

我已经引入了一个斜杠,但我现在收到一个新错误,并且每次我必须更改代码并保存它以获得此错误时,我都会收到以前的错误

c:/ruby22/lib/ruby/gems/2.2.0/gems/selenium-webdriver-2.53.4/lib/selenium/webdriver/firefox/launcher.rb:90:in `connect_until_stable': unable to obtain stable firefox connection in 60 seconds (127.0.0.1:7055) (Selenium::WebDriver::Error::WebDriverError)
    from c:/ruby22/lib/ruby/gems/2.2.0/gems/selenium-webdriver-2.53.4/lib/selenium/webdriver/firefox/launcher.rb:55:in `block in launch'
    from c:/ruby22/lib/ruby/gems/2.2.0/gems/selenium-webdriver-2.53.4/lib/selenium/webdriver/common/socket_lock.rb:43:in `locked'
    from c:/ruby22/lib/ruby/gems/2.2.0/gems/selenium-webdriver-2.53.4/lib/selenium/webdriver/firefox/launcher.rb:51:in `launch'
    from c:/ruby22/lib/ruby/gems/2.2.0/gems/selenium-webdriver-2.53.4/lib/selenium/webdriver/firefox/bridge.rb:43:in `initialize'
    from c:/ruby22/lib/ruby/gems/2.2.0/gems/selenium-webdriver-2.53.4/lib/selenium/webdriver/common/driver.rb:53:in `new'
    from c:/ruby22/lib/ruby/gems/2.2.0/gems/selenium-webdriver-2.53.4/lib/selenium/webdriver/common/driver.rb:53:in `for'
    from c:/ruby22/lib/ruby/gems/2.2.0/gems/selenium-webdriver-2.53.4/lib/selenium/webdriver.rb:84:in `for'
    from c:/ruby22/lib/ruby/gems/2.2.0/gems/watir-webdriver-0.9.1/lib/watir-webdriver/browser.rb:46:in `initialize'
    from test.rb:8:in `new'
    from test.rb:8:in `<main>'

---编辑---

我已经从https://github.com/mozilla/geckodriver/releases 下载了geckodriver v0.10.0 并将geckodriver.exe 复制粘贴到firefox 文件夹中,并将firefox 文件夹添加到PATH

我安装了selenium-webdriver测试版3.0.0.beta2.1

但我仍然遇到同样的错误

c:/ruby22/lib/ruby/2.2.0/net/http/generic_request.rb:25:in `initialize': HTTP request path is empty (ArgumentError)

我也尝试安装 Firefox ESR 版本并添加到 PATH 中,但也无法正常工作

---编辑---

我打开了文件 c:/ruby22/lib/ruby/2.2.0/net/http/generic_request.rb

并引入print语句如下

print "\n"
print uri_or_path

if URI === uri_or_path then
  print "\ncoming to if part\n"
  @uri = uri_or_path.dup
  host = @uri.hostname.dup
  host << ":".freeze << @uri.port.to_s if @uri.port != @uri.default_port
  @path = uri_or_path.request_uri
  raise ArgumentError, "no HTTP request path given" unless @path
else
  print "\ncoming to else part\n"
  @uri = nil
  host = nil
  raise ArgumentError, "no HTTP request path given" unless uri_or_path
  raise ArgumentError, "HTTP request path is empty" if uri_or_path.empty?
  @path = uri_or_path.dup
end

我得到了以下输出

/session
coming to else part


coming to else part

/shutdown
coming to else part
c:/ruby22/lib/ruby/2.2.0/net/http/generic_request.rb:29:in `initialize': HTTP request path is empty (ArgumentError)

【问题讨论】:

标签: ruby selenium-webdriver watir watir-webdriver


【解决方案1】:

尝试在 IRB 中输入这些命令,一次一行。这将使故障发生的位置更清楚

您的初始错误表明它在第 3 行失败,在上面的代码中,它尝试创建浏览器对象的新实例(它也启动 Firefox,然后尝试将浏览器对象连接到实际浏览器)。如果这不起作用,通常是因为您没有使用支持浏览器的 webdriver 版本。也许你有一个全新的 Firefox,并且需要更新 webdriver。

有时在新的 FF 推出后(每 6 周)会有一个短暂的窗口,引入了重大更改,我们没有更新的 webdriver gem 支持该版本。

【讨论】:

    【解决方案2】:

    您很可能是由于 Firefox 47.0 中的一个错误而看到的。您需要更新到 Firefox 47.0.1 才能使用 Selenium 2.53.4。

    【讨论】:

    • 我尝试升级 Firefox,但我认为还有其他事情发生
    • 是的,Firefox 48+ 需要 geckodriver 才能工作。您可以降级到 47.0.1 或使用 Firefox ESR - mozilla.org/en-US/firefox/organizations
    • 我没有使用 48+ 我只使用 47.0.1
    • 我也尝试安装 ESR 版本并将 geckodriver.exe 复制粘贴到 firefox 文件夹中,并将 firefox 文件夹添加到路径,但我又得到了 path is empty (ArgumentError)
    • 48 岁以上需要 Geckodriver。如果您使用的是 47.0.1,Watir 0.9.3 和 Selenium 2.53.4 将在 Windows 上运行。如果该组合不起作用,请不要与 net/http 胡闹,只需设置 $DEBUG = true 并复制您的输出。
    猜你喜欢
    • 2017-12-13
    • 1970-01-01
    • 2013-11-24
    • 2021-10-19
    • 2020-03-18
    • 2012-06-14
    • 2014-11-15
    • 1970-01-01
    • 2012-07-02
    相关资源
    最近更新 更多