seleniumhq rails que for code chromedriver chrome ruby webdriver watir-webdriver selenium-chromedriver

ruby - rails - ¿Una ventana del navegador hijo cerrándose al parecer rompe el enlace de Watir-webdriver a la ventana padre?



ruby on rails selenium (1)

En Chrome, usando watir-webdriver, hago clic en un botón que abre una ventana del navegador secundario.

Hago:

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

Interactúo con éxito con varios elementos en esa ventana secundaria.

Muy pronto, hay una acción en esta ventana que el sitio considera que fue el "punto" de abrir la ventana en primer lugar. p.ej,

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

Cuando se realiza esta acción, la ventana secundaria se cierra sola.

Sin embargo, cuando le digo a watir-webdriver que regrese a usar la ventana padre, aparece un error:

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

La razón por la que creo que esto es un error de Selenium / Watir-webdriver es porque funciona el siguiente código:

@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

La única diferencia es la acción que hace que la ventana secundaria se cierre sola.

Observé que el código de watirspec no tiene un caso de prueba para una ventana de cierre automático, por lo que quizás este sea un aspecto que se pasa por alto del código de Windows en watir-webdriver.

De acuerdo, este es el código que puedes ejecutar para ver este problema tú mismo:

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 }

Eso dará como resultado este error:

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

¡No digas que nunca te hice nada! :-)

Ahora, antes de ir a preguntar "¿Por qué estás probando una herramienta de edición de terceros, loco?" Voy a responder eso por ti: no lo soy.

Lo que estoy probando es que el código fuente generado por la herramienta CKEditor se actualiza correctamente en una situación particular (que va mucho más allá del alcance de esta pregunta). Para configurarlo, primero necesito saber cuál es el código fuente para poder verificarlo posteriormente mediante un proceso diferente. Y para hacer eso, primero debo configurarlo correctamente, usando la herramienta de enlace de CKEditor. Capiche?


Si necesita volver a la primera ventana abierta, puede usar

@browser.windows[0]

También es posible que pueda hacer algo como esto (no probado)

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