2012-11-08 70 views
2
[7] pry(#<RSpec::Core::ExampleGroup::Nested_1>)> page.execute_script "window.close()" 
Selenium::WebDriver::Error::NoSuchWindowError: Script execution failed. Script: window.close(); 
The window could not be found 

[8] pry(#<RSpec::Core::ExampleGroup::Nested_1>)> page.driver.browser.window_handles 
=> ["f1-2"] 

我有兩個選項卡,打開瀏覽器,在上面的命令關閉一個,但最後一個標籤永遠不會關閉。它是開放的,但是當我嘗試運行page.execute_script "window.close()"它給上述錯誤。下一個測試之前如何關閉所有的窗口在一個測試套件?

page.driver.browser.window_handles.each do |handle| 
    page.driver.browser.switch_to.window(handle) 
    page.execute_script "window.close()" 
end 

上面的代碼對我有用,但不工作了。它給出了同樣的錯誤。

UPDATE:

當我使用,

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

它提供了以下錯誤Selenium::WebDriver::Error::UnknownError: 'auto_id'不引用打開的選項卡

回答

1

page.driver.browser.close關閉接近尾聲當前標籤頁和最後(第二)選項卡後自行關閉每個例子。

1

兩種方法可以做到這一點

  1. 符合你使用JS的技巧。您首先需要切換回第一個瀏覽器窗口(window_handle),然後執行「window.close()」。 (不推薦)(不知道爲什麼它現在不爲你工作,你有沒有升級服務器版本或不同的瀏覽器?)

  2. 只需使用@driver.quit(首選)

更新


只要寫一次。這將關閉所有窗口。

after(:each) do 
    @driver.quit 
    end 

如果你想關閉只是一個瀏覽器標籤/窗口/彈出窗口中,切換到該WINDOW_HANDLE,然後如果你使用的是黃瓜,你可以使用BEFORE/AFTER掛鉤的情況下,執行

@driver.close(); 
+0

我在每次測試結束時都使用了driver.quit,並且他們失敗了'在掛鉤後發生錯誤 Selenium :: WebDriver :: Error :: NoSuchWindowError:getUrl執行失敗; 窗口無法found' – Ava

+0

不要都做,唯一的選擇2只有一次。看看我的更新。 – Amey

+0

我已經單獨嘗試過了。在每次測試中,我打開兩個窗口,並希望在第二次測試開始前關閉它們。使用'page.driver.quit'給出'Failure/Error:無法從回溯中找到匹配的行 Errno :: ECONNREFUSED: Connection refused - connect(2)' – Ava

相關問題