【问题标题】:Open new private window with Capybara and selenium-webdriver使用 Capybara 和 selenium-webdriver 打开新的私有窗口
【发布时间】:2019-03-06 18:35:37
【问题描述】:

如何同时打开 2 个窗口,但一个窗口处于私密模式?

水豚的方法(link

open_new_window

打开一个新窗口,但它不接受任何参数。

也试过了:

    page.execute_script 'window.open(link, "mywindow", "private=yes");'

但新窗口仍然没有处于隐私模式。

我正在使用:

  • 水豚 (2.11.0)
  • selenium-webdriver (2.53.4)
  • Firefox v46

有什么想法吗?

【问题讨论】:

  • 你用什么浏览器配合 selenium-webdriver?
  • @ThomasWalpole 我正在使用 FireFox v46
  • 您卡在 Capybara、selenium-webdriver 和 Firefox 的过时版本上是否有特定原因?由于必须为旧版本制定语法,这将使您更难以给出完全正确的答案。
  • @ThomasWalpole,是的,目前无法更新到较新版本。新版本的语法是什么?我也试过page.execute_script 'window.open(link, "mywindow", "private=yes");',但也没有用。谢谢。

标签: ruby-on-rails selenium-webdriver capybara


【解决方案1】:

要拥有一个私人模式窗口和一个非私人模式窗口,您需要有两个会话和两个驱动程序注册。在具有手动会话管理功能的 Capybara、selenium-webdriver 和 Firefox 的当前版本中,可以这样做

Capybara.register_driver :selenium_firefox_private do |app|
  firefox_options = ::Selenium::WebDriver::Firefox::Options.new
  firefox_options.args << "-private"
  Capybara::Selenium::Driver.new(app, browser: :chrome, options: firefox_options)
end

然后在您的测试中,当您需要私有窗口时,您将为私有窗口创建一个新会话

# Assuming you already have a session going and are interacting with the page
# with `Capybara.javascript_driver = :selenium` or equivalent set
page.find(...) # everything called on page is happening in the original non-private session

private_session = Capybara::Session.new(:selenium_firefox_private, Capybara.app)
private_session.visit(...) # anything called on private_session will happen in the private firefox instance

另一种选择是使用Capybaara.using_driver

Capybara.using_driver(:selenium_chrome_private) do
  # everything in this block would happen in a private browsing session that is auto created by Capybara (if it hadn't already been created)
  page.visit('/')
end

您使用的过时版本也是如此,但驱动程序注册中的 Selenium 配置可能会有所不同。

【讨论】:

    最近更新 更多