2012-05-25 82 views
8

所以當我單獨運行我的測試時,它們工作得很好。但是,當我運行我的功能(多個測試)我的代碼失敗。
這是因爲當水豚存在時,並非我所有的窗戶都關閉,因此我的硒驅動程序不知道要使用哪個窗口。你能關閉水豚的所有打開的窗戶嗎?

基本上,發生的事情是我的測試打開了多個窗口。發生這種情況的原因是我的測試是單擊鏈接打開新窗口並檢查新窗口中的內容。儘管我在每次測試結束時都說page.quit,但此功能並未關閉所有打開的窗口(關閉活動窗口,但不關閉原始窗口)。當第二個測試運行時,它使用最初創建的窗口,但是當它打開新的彈出窗口時,它會使用錯誤的窗口。

如何確保在每次測試期間使用新瀏覽器,並關閉以前測試中的所有窗口。
我目前使用page.reset!page.quit
不確定,但我可以說session.quit關閉所有打開的瀏覽器窗口?

回答

1

嘗試以下操作:

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

(我認爲它會工作,但我還沒有機會來測試它。)

+1

這不行,'退出'功能不存在。和Close一樣。 – Jason

+1

這不起作用 – Jason

+0

這雖然是隨機的。這次它給了我'失敗/錯誤:無法從回溯中找到匹配的行 Selenium :: WebDriver :: Error :: NoSuchWindowError: getUrl執行失敗; 找不到窗口' – Ava

3

我用這個代碼塊訪問彈出式廣告和後關閉它們。它不應該是太大的區別

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

希望它可以幫助

+0

這不起作用,因爲所有的資源都丟失了,第二次測試失敗,說「瀏覽器找不到」或沿着這些線路發生了什麼。 – Jason

8

此代碼:

page.execute_script "window.close();" 

我只是想關閉該窗口執行此同時。

+0

如果您使用像髒表單這樣的插件,並且屏幕上顯示髒的表單,則此代碼不起作用,在這種情況下,JavaScript會彈出一個「您確定」的提醒並且頁面未關閉。更好地做「page.reset!」在你運行測試之前。 – Rob

+0

'page.execute_script「window.close();」'不適合我。應該沒有';',即'page.execute_script「window.close()」' –

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

end 

爲我做了魅力。 @Jason和@ Justin的答案相結合。

謝謝!

1

試試這個:

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

這爲我工作。

0

添加到您的特性測試,它會重置會話cookie和開始測試一個空白頁上:

# Window washing - use a clean window before every example 
before(:example) do 
    page.reset! 
end 
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