【问题标题】:Selenium-Cucumber Opening too many windowsSelenium-Cucumber 打开太多窗口
【发布时间】:2013-06-06 16:30:47
【问题描述】:

我正在使用 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 我也不明白这可能来自哪里。

步骤定义:

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)?

【问题讨论】:

  • 缺少的是您的代码。请张贴。

标签: ruby firefox selenium cucumber


【解决方案1】:

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

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

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

此外,您可能在代码中丢失了太多浏览器。我必须查看所有内容才能调试...但是,我只是想让您知道这可能不是您的 env.rb 文件的问题。

【讨论】:

    【解决方案2】:

    为了避免多窗口,你应该编辑你的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

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

    【讨论】:

    • 谢谢你,这正是我所需要的。
    猜你喜欢
    • 1970-01-01
    • 2022-01-22
    • 1970-01-01
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    • 2018-10-01
    • 1970-01-01
    相关资源
    最近更新 更多