我正在使用selenium中的webdriver和黄瓜中的红宝石来自动化网站的测试用例。我需要每个功能以特定顺序运行并使用相同的浏览器窗口。Atm的每个功能都会创建一个新的窗口来运行测试。尽管在某些测试案例中,这种行为是需要的,但在许多情况下却不是。到目前为止,从我的研究看来,在整个测试案例中,是否有可能使用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
如果我的问题不清楚,请问我问题。我还有更多要创建的测试,但是如果我的基础草率且缺少请求的功能,我不想继续创建测试。(如果您发现我的代码中还有其他问题,请在评论中指出)
该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
在这种情况下,浏览器将在开始时打开(在进行任何测试之前)。然后,每个测试都将获取该浏览器并继续使用它。
注意:虽然通常可以跨测试重用浏览器。您应该谨慎对待需要按特定顺序运行的测试(即成为依赖项)。依赖测试可能难以调试和维护。