2012-05-25 8 views
8

Kiedy więc przeprowadzam moje testy indywidualnie, działają świetnie. Jednak po uruchomieniu mojej funkcji (wiele testów) mój kod się nie udaje.
Dzieje się tak dlatego, że gdy istnieje kapibara, nie wszystkie moje okna są zamykane, a zatem moje sterowniki selenu nie wiedzą, którego okna użyć.Czy możesz zamknąć wszystkie otwarte okna w kapibarze?

Zasadniczo, moim testem jest otwieranie wielu okien. Dzieje się tak, ponieważ moje testy powodują kliknięcie linków, które otwierają nowe okna i sprawdzają zawartość w nowych oknach. Chociaż na koniec każdego testu mówię: page.quit, ta funkcja nie zamyka wszystkich otwartych okien (zamyka aktywne okno, ale nie jest oryginalne). Po uruchomieniu drugiego testu korzysta z pierwotnie utworzonego okna, ale gdy otwiera się nowe okno podręczne, używa niewłaściwego okna.

W jaki sposób mogę zagwarantować, że podczas każdego testu będzie używana nowa przeglądarka, a wszystkie okna z poprzedniego testu zostaną zamknięte.
Obecnie używam page.reset! i page.quit.
Nie jestem pewien, ale czy mogę powiedzieć, że session.quit zamyka wszystkie otwarte okna przeglądarki?

Odpowiedz

1

Spróbuj wykonać następujące czynności:

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

(myślę, że to będzie działać, ale nie miałem okazji go przetestować.)

+1

To nie zadziała, funkcja "quit" nie istnieje. To samo z zamknięciem. – Jason

+1

To nie działa – Jason

+0

Działa to jednak losowo.Tym razem dało mi 'Failure/Error: Nie można znaleźć pasującej linii z śledzenia wstecznego Selenium :: WebDriver :: Błąd :: NoSuchWindowError: Wykonanie getUrl nie powiodło się; Nie można znaleźć okna ' – Ava

3

używam ten kawałek kodu, aby uzyskać dostęp do okienka i zamknąć je po . To nie powinno być dużej różnicy

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

Nadzieja pomaga

+0

To nie działa, ponieważ wszystkie zasoby zostały utracone, a drugi test nie powiedzie się, że" przeglądarka nie została znaleziona "lub coś podobnego. – Jason

8

Ten kod działa:

page.execute_script "window.close();" 

po prostu wykonać tę chwilę w oknie Chcę zamknąć.

+0

Ten kod nie działa, jeśli używasz wtyczki, takiej jak brudne formularze, i mają brudną postać na ekranie, w tym przypadku javascript wyświetla alert "jesteś pewien", a strona nie jest zamknięta. Znacznie lepiej zrobić "page.reset!" przed uruchomieniem testu. – Rob

+0

'page.execute_script" window.close(); "' nie działa dla mnie. Powinny być bez ';', tj. '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 

Uroku dla mnie. Połączenie odpowiedzi @Jason i @ Justina.

Dzięki!

1

Spróbuj tego:

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

Ten pracował dla mnie.

0

Dodaj to do testów funkcji, to będzie zresetować ciasteczek sesyjnych i rozpocząć test na pustej stronie:

# Window washing - use a clean window before every example 
before(:example) do 
    page.reset! 
end 
1

W celu uzyskania wszystkich twierdzeń w pliku spec, ja przeszedł do sterowanianowa strona (okno), po wykonaniu twierdzenia i zamknięte nową stronę i przeszedł kontrolę do oryginalnej strony jako ryk:

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 
Powiązane problemy