8

したがって、テストを個別に実行すると、うまく機能します。ただし、機能 (複数のテスト) を実行すると、コードが失敗します。
これは、カピバラが存在する場合、すべてのウィンドウが閉じているわけではないため、セレン ドライバーが使用するウィンドウを認識できないためです。

基本的に、私のテストでは複数のウィンドウが開いています。これは、私のテストで新しいウィンドウを開くリンクをクリックし、新しいウィンドウでコンテンツをチェックしているためです。各テストの最後に言っていpage.quitますが、この関数は開いているすべてのウィンドウを閉じているわけではありません (アクティブなウィンドウを閉じますが、元のウィンドウは閉じません)。2 番目のテストを実行すると、最初に作成されたウィンドウが使用されますが、新しいポップアップを開くと、間違ったウィンドウが使用されます。

各テスト中に新しいブラウザーが使用され、前のテストのすべてのウィンドウが閉じられていることを確認するにはどうすればよいですか?
現在 と を使用page.reset!してpage.quitいます。わかりませんが、開いているすべてのブラウザ ウィンドウを閉じるよう
に言えますか?session.quit

4

8 に答える 8

8

このコードは機能します:

page.execute_script "window.close();"

閉じたいウィンドウでこれを実行するだけです。

于 2012-07-19T20:08:27.757 に答える
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 に答える
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 に答える
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

仕様ファイルにすべてのアサーションを含めるために、新しいページ (ウィンドウ)に制御を渡しました。アサーションを実行した後、新しいページを閉じて、次のように元のページに制御を渡しました。

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

これを試して:

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

このページは、「capybara close all windows」の最初のいくつかの Google 検索結果に表示されるため、ここに追加します。

不可解な機能仕様の失敗がいくつかありましたが、いくつかは 2 番目のタブでアプリのリンクを開くというものでした。タブが開いたままになっているため、頻繁に失敗した 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

headless_chromeこれは、Capybara のドライバーを使用して、私たちにとって魅力のように機能しました。

于 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 に答える