Selenium-Cucumber打开太多窗户

时间:2013-06-06 16:30:48

标签: ruby firefox selenium cucumber

我正在使用硒和黄瓜测试网站上的链接。当然,这些链接将加载到当前浏览器窗口中。虽然当我进行测试时,他们每次都会在新窗口中打开!即使打开一个网页.get也会打开一个全新的窗口。我在这里缺少什么?

此外,我目前只在firefox中进行测试

env.rb

require 'Rspec'

require 'selenium-webdriver'
include Rspec::Expectations

#=======================================================================================
  Before do
    @driver = Selenium::WebDriver.for :firefox
    @accept_next_alert = true
    @driver.manage.timeouts.implicit_wait = 30
    @verification_errors = []
  end

  After do
    #@driver.quit
    @verification_errors.should == []
  end
#=======================================================================================

wait = Selenium::WebDriver::Wait.new(:timeout => 25)

def element_present?(how, what)
    @driver.find_element(how, what)
    true
  rescue Selenium::WebDriver::Error::NoSuchElementError
    false
  end

  def alert_present?()
    @driver.switch_to.alert
    true
  rescue Selenium::WebDriver::Error::NoAlertPresentError
    false
  end

  def verify(&blk)
    yield
  rescue ExpectationNotMetError => ex
    @verification_errors << ex
  end

  def close_alert_and_get_its_text(how, what)
    alert = @driver.switch_to().alert()
    alert_text = alert.text
    if (@accept_next_alert) then
      alert.accept()
    else
      alert.dismiss()
    end
    alert_text
  ensure
    @accept_next_alert = true
  end

我意识到它正在打开一个奇怪的firefox浏览器。我已经更改了firefox中的设置以在新选项卡中打开窗口(基于另一个问题)并且我意识到selenium正在打开具有所有旧设置的firefox实例。我没有安装多个版本的firefox我不明白这可能来自哪里。

步骤def:

When /^I am viewing Google$/ do
if @driver.current_url != "www.google.com"
 @driver.get "www.google.com"
 end
end

重复此代码将加载许多窗口。也可以与网站进行任何.click交互

我最近问了一个类似于这个的问题(没有意识到我有点重复自己)这里是任何感兴趣的人的链接:

How to use same browser window for automated test using selenium-webdriver (ruby)?

2 个答案:

答案 0 :(得分:1)

您也可以将它添加到您的env.rb文件中:

at_exit do
  if ENV['KEEP_OPEN'] != 'false' || ENV['KEEP_OPEN'] != 'no'
    browser.close
  end
end

真的,你需要的只是browser.close,其余的只是设置环境,以便在命令行中,如果你想保持它打开,你可以这样说。

此外,您可能正在打开/初始化代码中丢失的太多浏览器。我必须看到所有这些都能够调试......但是,我想让你知道它可能不是你的env.rb文件的问题。

答案 1 :(得分:0)

为了避免多个窗口,你应该编辑你的firefox webdriver的prefs.json

你应该在这里找到这个文件: /usr/lib64/ruby/gems/1.9.1/gems/selenium-webdriver-2.29.0/lib/selenium/webdriver/firefox/extension/prefs.json

您需要使用以下内容编辑该行:

"browser.link.open_newwindow": 2 

取代您想要的值1,2或3:http://kb.mozillazine.org/Browser.link.open_newwindow

此文件中定义的所有配置文件选项都无法覆盖,您必须编辑此文件。