Ruby 尝试使用chromedriver运行测试时出现问题

Ruby 尝试使用chromedriver运行测试时出现问题,ruby,selenium-webdriver,cucumber,selenium-chromedriver,watir,Ruby,Selenium Webdriver,Cucumber,Selenium Chromedriver,Watir,我目前在尝试使用chromedriver运行Ruby测试时遇到了一个问题 我使用的是SeleniumWebDriver 3.14.0、Cucumber3.1.2和Windows10 require 'watir' chromedriver_path = 'c:\tmp\asd\chromedriver.exe' #interestingly, this also works #chromedriver_path = "/tmp/asd/chromedriver.exe"

我目前在尝试使用chromedriver运行Ruby测试时遇到了一个问题

我使用的是SeleniumWebDriver 3.14.0、Cucumber3.1.2和Windows10

require 'watir'            
chromedriver_path = 'c:\tmp\asd\chromedriver.exe'
#interestingly, this also works
#chromedriver_path = "/tmp/asd/chromedriver.exe"
Selenium::WebDriver::Chrome.driver_path= chromedriver_path  

begin    

  puts "Opening browser." 
  b = Watir::Browser.new :chrome     
  b.goto "www.google.com"  
  puts "Navigate to google, title is #{b.title}"
  b.text_field(:id => "lst-ib").set "hope this works"
  puts "setting search parameters "

rescue => e
  puts "error happened: #{e.backtrace.inspect}, #{e.class}, #{e.message}"  
ensure
 b.close unless b.nil? 
end
每当我使用firefox运行测试时,它们都会加载并正常运行,没有任何问题。但是,当我将其中一个更改为使用chromedriver并尝试运行它时,就会出现以下错误:

unable to connect to chromedriver 127.0.0.1:9515
我的路径上有chromedriver,正在使用以下代码尝试初始化ruby代码中的驱动程序:

require 'selenium-webdriver'

options = Selenium::WebDriver::Chrome::Options.new
options.add_argument('--ignore-certificate-errors')
options.add_argument('--disable-popup-blocking')
options.add_argument('--disable-translate')

driver1 = Selenium::WebDriver.for :chrome, options: options

Given (/^we navigate to the Timesheets area$/) do
driver1.navigate.to "test"
driver1.find_element(:id, 'EmailAddress').send_keys("test")
driver1.find_element(:id, 'Password').send_keys("test")
driver1.find_element(:css, 'button').click
wait = Selenium::WebDriver::Wait.new(:timeout => 5)
begin
    element = wait.until { driver1.find_element(:class => "name") }
end
    driver1.find_element(:css, 'i.fa.fa-clock-o').click
    begin
    element = wait.until { driver1.find_element(:class => "pull-left") }
    expect(element.text).to eq('Timesheets')
    end
end

    en (/^we click the Add New Timesheet Button$/) do
    driver1.find_element(:css, 'a.pull-right').click
   end

Then (/^we should be taken to the Add New Timesheet Page$/) do
wait = Selenium::WebDriver::Wait.new(:timeout => 5)
begin
    element = wait.until { driver1.find_element(:css => "h1.pull-left") }
    expect(element.text).to eq('Add Timesheet')
ensure
    driver1.quit
end
end
如果您能在这方面给予任何帮助,我们将不胜感激

编辑:更新为完整错误堆栈跟踪:

unable to connect to chromedriver 127.0.0.1:9515 
(Selenium::WebDriver::Error::WebDriverError)
C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/selenium-webdriver- 
3.14.0/lib/selenium/webdriver/common/service.rb:142:in `connect_until_stable'
C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/selenium-webdriver-3 
3.14.0/lib/selenium/webdriver/common/service.rb:72:in `block in start'
C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/selenium-webdriver- 
3.14.0/lib/selenium/webdriver/common/socket_lock.rb:39:in `locked'
C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/selenium-webdriver- 
3.14.0/lib/selenium/webdriver/common/service.rb:69:in `start'
C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/selenium-webdriver- 
3.14.0/lib/selenium/webdriver/chrome/driver.rb:43:in `initialize'
 C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/selenium-webdriver- 
3.14.0/lib/selenium/webdriver/common/driver.rb:44:in `new'
C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/selenium-webdriver- 
3.14.0/lib/selenium/webdriver/common/driver.rb:44:in `for'
C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/selenium-webdriver- 
3.14.0/lib/selenium/webdriver.rb:86:in `for'
C:/Ruby25-x64/features/step_definitions/timesheet_steps.rb:9:in `<top 
(required)>'
C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/cucumber- 
3.1.2/lib/cucumber/glue/registry_and_more.rb:107:in `load'
C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/cucumber- 
3.1.2/lib/cucumber/glue/registry_and_more.rb:107:in `load_code_file'
C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/cucumber- 
3.1.2/lib/cucumber/runtime/support_code.rb:144:in `load_file'
C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/cucumber- 
3.1.2/lib/cucumber/runtime/support_code.rb:85:in `block in load_files!'
C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/cucumber- 
3.1.2/lib/cucumber/runtime/support_code.rb:84:in `each'
C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/cucumber- 
3.1.2/lib/cucumber/runtime/support_code.rb:84:in `load_files!'
C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/cucumber- 
3.1.2/lib/cucumber/runtime.rb:272:in `load_step_definitions'
C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/cucumber- 
3.1.2/lib/cucumber/runtime.rb:68:in `run!'
C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/cucumber- 
3.1.2/lib/cucumber/cli/main.rb:34:in `execute!'
C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/cucumber-3.1.2/bin/cucumber:9:in `<top 
(required)>'
 C:/Ruby25-x64/bin/cucumber:23:in `load'
 C:/Ruby25-x64/bin/cucumber:23:in `<main>'
Traceback (most recent call last):
   12: from C:/Ruby25-x64/bin/irb.cmd:19:in `<main>'
   11: from (irb):3
   10: from (irb):3:in `new'
    9: from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/watir-6.12.0/lib/watir/browser.rb:48:in `initialize'
    8: from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/selenium-webdriver-3.14.0/lib/selenium/webdriver.rb:86:in `for'
    7: from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/selenium-webdriver-3.14.0/lib/selenium/webdriver/common/driver.rb:44:in `for'
    6: from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/selenium-webdriver-3.14.0/lib/selenium/webdriver/common/driver.rb:44:in `new'
    5: from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/selenium-webdriver-3.14.0/lib/selenium/webdriver/chrome/driver.rb:43:in `initialize'
    4: from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/selenium-webdriver-3.14.0/lib/selenium/webdriver/common/service.rb:69:in `start'
    3: from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/selenium-webdriver-3.14.0/lib/selenium/webdriver/common/socket_lock.rb:39:in `locked'
    2: from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/selenium-webdriver-3.14.0/lib/selenium/webdriver/common/service.rb:72:in `block in start'
    1: from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/selenium-webdriver-3.14.0/lib/selenium/webdriver/common/service.rb:142:in `connect_until_stable'
Selenium::WebDriver::Error::WebDriverError (unable to connect to chromedriver 127.0.0.1:9515)
然后,我得到以下堆栈跟踪:

unable to connect to chromedriver 127.0.0.1:9515 
(Selenium::WebDriver::Error::WebDriverError)
C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/selenium-webdriver- 
3.14.0/lib/selenium/webdriver/common/service.rb:142:in `connect_until_stable'
C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/selenium-webdriver-3 
3.14.0/lib/selenium/webdriver/common/service.rb:72:in `block in start'
C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/selenium-webdriver- 
3.14.0/lib/selenium/webdriver/common/socket_lock.rb:39:in `locked'
C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/selenium-webdriver- 
3.14.0/lib/selenium/webdriver/common/service.rb:69:in `start'
C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/selenium-webdriver- 
3.14.0/lib/selenium/webdriver/chrome/driver.rb:43:in `initialize'
 C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/selenium-webdriver- 
3.14.0/lib/selenium/webdriver/common/driver.rb:44:in `new'
C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/selenium-webdriver- 
3.14.0/lib/selenium/webdriver/common/driver.rb:44:in `for'
C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/selenium-webdriver- 
3.14.0/lib/selenium/webdriver.rb:86:in `for'
C:/Ruby25-x64/features/step_definitions/timesheet_steps.rb:9:in `<top 
(required)>'
C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/cucumber- 
3.1.2/lib/cucumber/glue/registry_and_more.rb:107:in `load'
C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/cucumber- 
3.1.2/lib/cucumber/glue/registry_and_more.rb:107:in `load_code_file'
C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/cucumber- 
3.1.2/lib/cucumber/runtime/support_code.rb:144:in `load_file'
C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/cucumber- 
3.1.2/lib/cucumber/runtime/support_code.rb:85:in `block in load_files!'
C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/cucumber- 
3.1.2/lib/cucumber/runtime/support_code.rb:84:in `each'
C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/cucumber- 
3.1.2/lib/cucumber/runtime/support_code.rb:84:in `load_files!'
C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/cucumber- 
3.1.2/lib/cucumber/runtime.rb:272:in `load_step_definitions'
C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/cucumber- 
3.1.2/lib/cucumber/runtime.rb:68:in `run!'
C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/cucumber- 
3.1.2/lib/cucumber/cli/main.rb:34:in `execute!'
C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/cucumber-3.1.2/bin/cucumber:9:in `<top 
(required)>'
 C:/Ruby25-x64/bin/cucumber:23:in `load'
 C:/Ruby25-x64/bin/cucumber:23:in `<main>'
Traceback (most recent call last):
   12: from C:/Ruby25-x64/bin/irb.cmd:19:in `<main>'
   11: from (irb):3
   10: from (irb):3:in `new'
    9: from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/watir-6.12.0/lib/watir/browser.rb:48:in `initialize'
    8: from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/selenium-webdriver-3.14.0/lib/selenium/webdriver.rb:86:in `for'
    7: from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/selenium-webdriver-3.14.0/lib/selenium/webdriver/common/driver.rb:44:in `for'
    6: from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/selenium-webdriver-3.14.0/lib/selenium/webdriver/common/driver.rb:44:in `new'
    5: from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/selenium-webdriver-3.14.0/lib/selenium/webdriver/chrome/driver.rb:43:in `initialize'
    4: from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/selenium-webdriver-3.14.0/lib/selenium/webdriver/common/service.rb:69:in `start'
    3: from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/selenium-webdriver-3.14.0/lib/selenium/webdriver/common/socket_lock.rb:39:in `locked'
    2: from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/selenium-webdriver-3.14.0/lib/selenium/webdriver/common/service.rb:72:in `block in start'
    1: from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/selenium-webdriver-3.14.0/lib/selenium/webdriver/common/service.rb:142:in `connect_until_stable'
Selenium::WebDriver::Error::WebDriverError (unable to connect to chromedriver 127.0.0.1:9515)
回溯(最近一次呼叫最后一次):
12:from C:/Ruby25-x64/bin/irb.cmd:19:in`'
11:from(irb):3
10:from(irb):3:in“new”
9:from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/watir-6.12.0/lib/watir/browser.rb:48:in'initialize'
8:from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/selenium-webdriver-3.14.0/lib/selenium/webdriver.rb:86:in'for'
7:from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/selenium-webdriver-3.14.0/lib/selenium/webdriver/common/driver.rb:44:in'for'
6:from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/selenium-webdriver-3.14.0/lib/selenium/webdriver/common/driver.rb:44:in'new'
5:from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/selenium-webdriver-3.14.0/lib/selenium/webdriver/chrome/driver.rb:43:in'initialize'
4:from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/selenium-webdriver-3.14.0/lib/selenium/webdriver/common/service.rb:69:in'start'
3:from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/selenium-webdriver-3.14.0/lib/selenium/webdriver/common/socket\u lock.rb:39:in'locked'
2:来自C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/selenium-webdriver-3.14.0/lib/selenium/webdriver/common/service.rb:72:在“开始时的块”中
1:从C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/selenium-webdriver-3.14.0/lib/selenium/webdriver/common/service.rb:142:在“连接”中直到“稳定”
Selenium::WebDriver::Error::WebDriverError(无法连接到chromedriver 127.0.0.1:9515)

我是否遗漏了一些东西,因为我在路径中设置了ChromeDriver,所以在我的脑海中,它应该可以毫无问题地运行,因为Firefox运行起来就像一个魔咒一样

问题在于ChromeDriver的旧版本。一些Selenium版本无法处理chromedriver的旧版本


请更新或安装最新的gem

尝试使用gem。

用于自动更新驱动程序。路径可能会变得复杂,因此WebDriversGem会忽略它,并指定Selenium应该独立查找驱动程序的位置。它也不像chromedriver helper那样使用垫片,因此不会干扰任何系统设置。只需将gem添加到gemfile/gempec中,然后在代码中
需要“webdrivers”

请检查是否有任何chromedriver实例已在运行,然后将其杀死。如果是,您可以尝试在命令提示符下运行此命令,或在任务管理器中手动检查

tasklist /v | find "chromedriver"
然后在测试中设置chromedriver的路径,这在Windows10上对我很有效

require 'watir'            
chromedriver_path = 'c:\tmp\asd\chromedriver.exe'
#interestingly, this also works
#chromedriver_path = "/tmp/asd/chromedriver.exe"
Selenium::WebDriver::Chrome.driver_path= chromedriver_path  

begin    

  puts "Opening browser." 
  b = Watir::Browser.new :chrome     
  b.goto "www.google.com"  
  puts "Navigate to google, title is #{b.title}"
  b.text_field(:id => "lst-ib").set "hope this works"
  puts "setting search parameters "

rescue => e
  puts "error happened: #{e.backtrace.inspect}, #{e.class}, #{e.message}"  
ensure
 b.close unless b.nil? 
end
如果这不起作用,请再次检查是否有任何chromedriver正在运行,然后从命令行手动运行它,它应该生成如下输出

C:\tmp\asd>chromedriver.exe
Starting ChromeDriver 2.41.578737 on port 9515
然后运行测试

我发现在每次测试之前设置chromedriver的路径很有用,这样你可以在一个文件夹中有几十个chromedriver,然后将参数传递给测试,chromedriver将使用哪个

希望它能起作用,或者至少会产生新的错误

编辑:

在下载chromedriver.exe的文件夹中,键入以下内容

chromedriver.exe --version

gem list watir

gem list selenium-webdriver
卸载旧版本的gems(如果有的话),然后转到irb并逐个键入

require 'watir' 
Selenium::WebDriver::Chrome.driver_path= '/tmp/asd/chromedriver.exe'
Selenium::WebDriver::Chrome.path = '/Program Files (x86)/Google/Chrome/Application/chrome.exe'
b = Watir::Browser.new :chrome
当然,把你们的路径放在这里,并粘贴你们遇到的错误,还有chrome、driver、ruby、watir、selenium和windows的版本。我不确定cucumber是否与此有关,如果你有irb的问题也不应该


这只是一种预感,但也要检查环境变量或路径是否有异常情况。

使用错误堆栈跟踪更新问题。您好,如果您准备好使用Ruby Selenium绑定,请使用WATIR,WATIR在引擎盖下使用Ruby Selenium绑定。如果使用WATIR,则完全不需要您编写的等待声明。还有很多其他的错误你可以避免。嗨,那就添加Watir标签吧!watir的人会来的。从命令行运行chromedriver,看看是否有错误。Webdriver gems正在等待下载最新版本的驱动程序(如果需要)。它失败并开始超时计数。我使用的是7月27日发布的ChromeDriver v2.41的最新版本。我已经从这里下载了它并将其放在我的路径中,但是我仍然收到相同的问题。您是否检查了chromedriver权限?可能是权限问题。它会自动下载文件并将它们放在主路径中的
.webdrivers
目录中,因此用户访问itFwiw时不应该存在任何安全问题,因为gem会创建可能导致问题的垫片。Webdrivers gem具有相同的功能,不需要处理我们的环境,只需要在规范中要求它。(免责声明我编写了webdrivers gem)在使用webdrivers gem时,我的编码方式是否与使用默认selenium webdrivers gem时完全相同?i、 e.driver=Selenium::Webdriver.for:chrome驱动程序。查找元素(:id,'EmailAddress')。发送密钥(test@test.com)?我运行ChromeDriver exe并获得上面列出的输出,但是我随后运行测试,它只会给我相同的错误,但改为端口9516