如何使用selenium-webdriver(ruby)使用相同的浏览器窗口进行自动测试?

我正在使用selenium-webdriver和ruby中的黄瓜自动化网站的测试用例。 我需要每个function以特定顺序运行并使用相同的浏览器窗口。 每个function都会创建一个新窗口来运行测试。虽然在某些测试用例中需要这种行为 – 但在许多情况下并非如此。 从我的研究到目前为止,似乎有关于是否可以在整个测试用例中使用selenium驱动相同浏览器窗口的混合答案。 我遇到的大多数答案都是针对其他语言的,并且是针对浏览器特定的解决方案(我在测试IE时开发我的测试,但预计会在其他浏览器中运行这些测试)。 我在Ruby工作,从我读过的内容看起来似乎我必须为该页面创建一个类? 我很困惑为什么我必须这样做或如何帮助。

我的env.rb文件:

require 'selenium-webdriver' require 'rubygems' require 'nokogiri' require 'rspec/expectations' Before do @driver ||= Selenium::WebDriver.for :ie @accept_next_alert = true @driver.manage.timeouts.implicit_wait = 30 @driver.manage.timeouts.script_timeout = 30 @verification_errors = [] end After do #@driver.quit #@verification_errors.should == [] end 

到目前为止,我收集了一些有类似问题的人提供的信息: https : //code.google.com/p/selenium/issues/detail? id = 18 有没有办法将已运行的浏览器附加到java中的selenium webdriver ?

如果我的问题有任何不清楚的地方,请问我问题。 我有更多的测试要创建,但如果我的基础很草率并且缺少所请求的function,我不想继续创建测试。 (如果您发现我的代码中有任何其他问题,请在评论中指出)

Before钩子在每个场景Before运行。 这就是每次打开新浏览器的原因。

改为执行以下操作(在env.rb中):

 require "selenium-webdriver" driver = Selenium::WebDriver.for :ie accept_next_alert = true driver.manage.timeouts.implicit_wait = 30 driver.manage.timeouts.script_timeout = 30 verification_errors = [] Before do @driver = driver end at_exit do driver.close end 

在这种情况下,浏览器将在开始时(在任何测试之前)打开。 然后每个测试将抓取该浏览器并继续使用它。

注意:虽然通常可以跨测试重新使用浏览器。 您应该注意需要按特定顺序运行的测试(即变得依赖)。 相关测试很难调试和维护。

我在创建spec_helper文件时遇到了类似的问题。 我为我的目的做了以下(为本地运行的firefox简化),它非常非常可靠地工作。 RSpec将为_spec.rb文件中的所有块使用相同的浏览器窗口。

 Rspec.configure do |config| config.before(:all) do @driver = Selenium::WebDriver.for :firefox end config.after(:all) do @driver.quit end end 

如果切换到:each而不是:all ,则可以为每个断言块使用单独的浏览器实例…再次,使用:each RSpec将为每个断言块提供一个新的浏览器实例。 两者都有用,具体取决于具体情况。