【问题标题】:selenium-webdriver / ruby / rspec2 - start IE with clean session or clear cookies or private browsingselenium-webdriver / ruby​​ / rspec2 - 使用干净的会话或清除 cookie 或隐私浏览启动 IE
【发布时间】:2014-05-07 16:31:09
【问题描述】:

我将 selenium-webdriver 与 ruby​​ 和 rspec2 一起使用。

我有很多网络测试自动化,我需要使用 IE,并且我需要使用干净的会话(特别是清除 cookie)运行每个测试。

在这种情况下,selenium-webdriver 使用 InternetExplorerDriver (IEDriverServer.exe),documentation 表示:

对于 cookie 的问题有 2 种解决方案(以及另一个会话 项目)在 InternetExplorer 的多个实例之间共享。

首先是以私有模式启动 InternetExplorer。后 InternetExplorer 将以干净的会话数据启动,并将 退出时不保存更改的会话数据。为此,您需要通过 2 驱动程序的特定功能:ie.forceCreateProcessApi with true 值和 ie.browserCommandLineSwitches 与 -private 值。请注意 它只适用于 InternetExplorer 8 和更新版本,以及 Windows 注册表HKLM_CURRENT_USER\\Software\\Microsoft\\Internet Explorer\\Main 路径应包含值为 0 的键 TabProcGrowth。

第二个是在 InternetExplorer 启动期间清理会话。为了 这你需要通过特定的 ie.ensureCleanSession 能力 对司机的真正价值。这会清除所有正在运行的实例的缓存 InternetExplorer,包括那些手动启动的。

我的问题很简单: 谁能举例说明如何在 Ruby / Rspec2 中完成此操作。

例如,我目前有:

before(:each) do
  @driver = Selenium::WebDriver.for :internet_explorer
  @driver.manage.window.maximize
  @base_url = "https://www.example.com/"
  @accept_next_alert = true
  @driver.manage.timeouts.implicit_wait = 30
  @verification_errors = []
end

如何使用 Ruby/Rspec 将此类 IE 参数传递给 IE 驱动程序?

非常感谢您的帮助。

【问题讨论】:

    标签: ruby internet-explorer selenium-webdriver rspec2


    【解决方案1】:

    我知道这篇文章一个月前,但以防万一有人仍然需要它。 在我做了一些研究之后,我终于可以在没有任何会话或 cookie 的情况下为每个测试启动新的 IEDriver。代码如下:

    before(:each) do
      caps = Selenium::WebDriver::Remote::Capabilities..internet_explorer('ie.ensureCleanSession' => true, 'ie.browserCommandLineSwitches' => 'private')
      @driver = Selenium::WebDriver.for(:internet_explorer, :desired_capabilities => caps)
      @driver.manage.window.maximize
      @base_url = "https://www.example.com/"
      @accept_next_alert = true
      @driver.manage.timeouts.implicit_wait = 30
    end
    

    祝你好运!

    【讨论】:

      【解决方案2】:

      你可以添加

      before(:each) do
        @driver = Selenium::WebDriver.for :internet_explorer
        @driver.manage.window.maximize
        @base_url = "https://www.example.com/"
        @accept_next_alert = true
        @driver.manage.timeouts.implicit_wait = 30
        @verification_errors = []
        @driver.manage.delete_all_cookies
      end
      

      来自 gem 文档http://rubydoc.info/gems/selenium-webdriver/0.0.28/Selenium/WebDriver/Options

      --- 已编辑 ---

      看起来 Selenium IE 驱动程序中可能存在不删除 cookie 的错误 https://code.google.com/p/selenium/issues/detail?id=5101

      【讨论】:

      • 非常感谢您的建议,但目前我想避免使用 Capybara 以使事情尽可能简单。现在,我使用 Selenium IDE 生成测试并将它们导出到 Ruby / Rspec,任何浏览器都可以轻松地运行它们。我不怀疑 Capybara 可以解决这个问题,但我不愿意仅仅为了解决这个 IE cookie 问题而将 Capybara 添加到我的工作流程中。 (理想情况下,我想要一个无需在工作流程中添加任何其他组件即可工作的解决方案。)再次感谢您的帮助。
      • 我编辑了不使用 Capybara 的答案(甚至在你回答之前......),@driver.manage.delete_all_cookies 不起作用吗?
      • 谢谢。不幸的是,@driver.manage.delete_all_cookies 似乎不起作用。 (它对我不起作用,对于其他使用 Internet Explorer 尝试过的人似乎也不起作用。)再次感谢您的帮助。
      • 显然其他人在使用 IE 时无法删除 cookie code.google.com/p/selenium/issues/detail?id=5101 看起来像 Selenium 中的一个错误
      猜你喜欢
      • 1970-01-01
      • 2016-05-26
      • 1970-01-01
      • 2015-05-23
      • 1970-01-01
      • 2021-07-07
      • 2014-04-04
      • 2017-05-14
      • 2016-11-08
      相关资源
      最近更新 更多