一尘不染

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

selenium

我正在使用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
到目前为止,我已经收集了一些类似问题的人的一些信息:https
//code.google.com/p/selenium/issues/detail?[id=18有什么方法可以将已经运行的浏览器附加到Java中的SeleniumWebdriver ?

如果我的问题不清楚,请问我问题。我还有更多要创建的测试,但是如果我的基础草率且缺少请求的功能,我不想继续创建测试。(如果您发现我的代码中还有其他问题,请在评论中指出)


阅读 291

收藏
2020-06-26

共1个答案

一尘不染

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

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

注意:虽然通常可以跨测试重用浏览器。您应该谨慎对待需要按特定顺序运行的测试(即成为依赖项)。依赖测试可能难以调试和维护。

2020-06-26