8

因此,当我单独运行测试时,它们工作得很好。但是,当我运行我的功能(多个测试)时,我的代码失败了。
这是因为当 capybara 存在时,并不是我所有的窗口都在关闭,因此我的 selenium 驱动程序不知道要使用哪个窗口。

基本上,正在发生的事情是我的测试正在打开多个窗口。发生这种情况是因为我的测试是单击打开新窗口的链接并检查新窗口中的内容。即使我page.quit在每次测试结束时说,此功能也不会关闭所有打开的窗口(关闭活动窗口但不关闭原始窗口)。当第二次测试运行时,它使用了最初创建的窗口,但是当它打开新的弹出窗口时,它使用了错误的窗口。

如何确保在每次测试期间都在使用新浏览器,并且之前测试中的所有窗口都已关闭。
我目前正在使用page.reset!page.quit
不确定,但我可以说session.quit关闭所有打开的浏览器窗口吗?

4

8 回答 8

8

此代码有效:

page.execute_script "window.close();"

我只是在要关闭的窗口中执行此操作。

于 2012-07-19T20:08:27.757 回答
4
page.driver.browser.window_handles.each do |handle|
  page.driver.browser.switch_to.window(handle)
  page.execute_script "window.close()"

end

为我施了魔法。@Jason 和 @Justin 的答案的组合。

谢谢!

于 2012-10-05T21:28:04.940 回答
4

我使用这段代码来访问弹出窗口并在之后关闭它们。应该差别不大

within_window(page.driver.browser.window_handles.last) do
  click buttons and stuff...
  ...
  page.driver.browser.close #closes popup
end

希望能帮助到你

于 2012-07-05T13:23:26.573 回答
1

尝试以下操作:

page.driver.browser.window_handles.each do |handle|
  page.driver.browser.switch_to.window(handle)
  page.quit
end

(我认为它会起作用,但我还没有机会测试它。)

于 2012-05-25T18:35:40.037 回答
1

尝试这个:

tab_id = page.driver.find_window("http://google.com.au")
page.driver.browser.switch_to.window(tab_id)
page.driver.quit

这对我有用。

于 2015-08-07T06:05:12.730 回答
1

为了在规范文件中包含所有断言,我将控制权传递新页面(窗口),在执行断言后我关闭新页面并将控制权传递给原始页面,如下所示:

after(:each) do
  expect(@static_page.has_logo?).to eq(true) # assertion in new page
  page.execute_script('window.close()') # close new page
  switch_to_window(windows.first) # return control to first page
end
于 2017-01-02T23:42:15.687 回答
1

在此处添加此内容是因为此页面出现在“水豚关闭所有窗口”的前几个 Google 搜索结果中。

我们有一些神秘的功能规范失败,我们追踪到了一些在第二个选项卡中打开应用程序链接的问题——因为这些选项卡刚刚打开,它们经常会触发一个失败的 AJAX 请求,并且当前的测试会被炸毁一个完全不相关的错误。我们解决这个问题的方法是添加一个钩子,确保在每个特性规范之后关闭除当前窗口之外的所有窗口:

Rspec.configure do |config|
  config.after(type: :feature) do
    # Make sure all browser windows except one are closed
    windows.reject(&:current?).each(&:close)
  end
end

这对我们来说就像一个魅力,使用 Capybara 的headless_chrome驱动程序。

于 2018-11-12T20:06:16.413 回答
0

将此添加到您的功能测试中,它将重置会话 cookie 并在空白页面上开始测试:

# Window washing - use a clean window before every example
before(:example) do
  page.reset!
end
于 2016-10-27T19:11:58.913 回答