2013-04-05 32 views
5

W przeglądarce Chrome, używając watir-webdriver, klikam przycisk otwierający okno przeglądarki podrzędnej.Zamknięcie okna przeglądarki podrzędnej najwyraźniej powoduje przerwanie łącza Watir-webdriver do okna nadrzędnego?

zrobić:

@browser.window(title: 'Child').use 

pomyślnie interakcji z różnych elementów w tym oknie dziecięcej.

Bardzo krótko, w tym oknie wykonywane jest działanie, które strona uważa za "punkt" otwierania okna w pierwszej kolejności. np.

@browser.button(title: 'Button').click 

Po wykonaniu tej czynności okno potomne zamyka się.

Kiedy mówię Watir-webdriver wrócić do korzystania z okna nadrzędnego, jednak pojawia się błąd:

@browser.window(title: 'Parent').use # => results in 
# Selenium::WebDriver::Error::NoSuchWindowError: emptyScript execution failed; 
# The window could not be found 

Powodem Wierzę, że to jest błąd Selen/Watir-webdriver dlatego, że następujące kod działa:

@browser.window(title: 'Child').use 
# ... Now I do various things in the child window that do NOT 
# ... cause it to close itself. They all work as expected. 
# ... 
puts @browser.window(title: 'Parent').present? #=>true 
@browser.window(title: 'Child').close 
puts @browser.window(title: 'Parent').present? #=>true 
@browser.window(title: 'Parent').use # => No error thrown 

Jedyna różnica polega na działaniu, które powoduje zamknięcie okna potomnego.

Zauważam, że kod watirspec nie ma przypadku testowego dla samozamykającego się okna, więc być może jest to przeoczony aspekt kodu Windows w watir-webdriver.

Ok, więc tutaj jest kod, który ty można uruchomić, aby zobaczyć ten problem sam:

require 'watir-webdriver' 
@b = Watir::Browser.new :chrome 
@b.goto 'ckeditor.com/demo#full' 
@b.div(id: 'cke_editor1').link(title: 'Link').click 
@b.link(title: 'Browse Server').wait_until_present 
@b.link(title: 'Browse Server').click 
@b.window(title: 'CKFinder').use { 
    @b.frame(title: 'CKFinder').link(id: 'r0').right_click 
    @b.frame(title: 'CKFinder').frame(id: 'cke_22_frame').wait_until_present 
    @b.frame(title: 'CKFinder').frame(id: 'cke_22_frame').link(id: 'cke_200').click 
} 

To spowoduje ten błąd:

Selenium::WebDriver::Error::NoSuchWindowError: emptyScript execution failed; 
The window could not be found 

nie mów, że nigdy nie robiłeś tego dla ciebie! :-)

Zanim zaczniesz pytać: "Dlaczego testujesz narzędzie do edycji strony trzeciej, szalony koleś?" Odpowiem na ciebie: nie jestem.

Testuję, że kod źródłowy generowany przez narzędzie CKEditor jest poprawnie aktualizowany w określonej sytuacji (co wykracza daleko poza zakres tego pytania tutaj). Aby to ustawić, najpierw muszę wiedzieć, jaki jest ten kod źródłowy: :, aby później móc zweryfikować, czy jest poprawnie aktualizowany przez inny proces. Aby to zrobić, muszę najpierw poprawnie go skonfigurować, korzystając z narzędzia do linkowania CKEditor. Capiche?

+0

używasz 'selen 'lub' watir' webdriver? –

+0

Watir-webdriver - jak to mówi w moim pierwszym zdaniu. :-) –

+0

Spojrzałem na watirspec i abe ma rację pod tym względem. mamy tam test, aby zobaczyć, że możemy zobaczyć okno potomne, ale to jest to. Nie mamy na przykład testu dla przykładowego kodu show w programie rdoc do użytku. –

Odpowiedz

1

Jeśli chcesz wrócić do pierwszego okna otwarte można użyć

@browser.windows[0] 

może także być w stanie zrobić coś takiego (nie testowane)

@browser.windows.each do |window| 
    if window.title.include?(target_string) 
    window.use 
    end 
end 
+0

Byłoby świetnie, gdyby błąd nie wystąpił przed uruchomieniem tego wiersza kodu (co się dzieje, niestety). –