java - iexplorer - Selenium-NoSuchWindowException en IE 11
selenium iexplorer webdriver (8)
Estoy tratando de automatizar una página web usando selenio en IE11. He establecido la configuración del modo protegido en el mismo nivel y el nivel de zoom es del 100%. Mientras se ejecuta la prueba, se abre el sitio web, sin embargo, da la excepción justo después. A continuación se muestra el código utilizado.
File file = new File("C://Users//Desktop//IEDriverServer.exe");
System.setProperty("webdriver.ie.driver", file.getAbsolutePath() );
DesiredCapabilities capabilities = DesiredCapabilities.internetExplorer();
capabilities.setCapability(InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS,
true);
WebDriver driver = new InternetExplorerDriver(capabilities);
driver.get("http://www.google.com");
Y la excepción stacktrace.
Started InternetExplorerDriver server (32-bit)
2.39.0.0
Listening on port 38122
Jul 11, 2014 1:50:02 PM org.apache.http.impl.client.DefaultRequestDirector tryExecute
INFO: I/O exception (java.net.SocketException) caught when processing request: Software caused connection abort: recv failed
Jul 11, 2014 1:50:02 PM org.apache.http.impl.client.DefaultRequestDirector tryExecute
INFO: Retrying request
Exception in thread "main" org.openqa.selenium.NoSuchWindowException: Unable to find element on closed window (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 18 milliseconds
Build info: version: ''2.39.0'', revision: ''ff23eac'', time: ''2013-12-16 16:12:12''
System info: host: ''Neeraj'', ip: ''10.136.180.161'', os.name: ''Windows 7'', s.arch: ''amd64'', os.version: ''6.1'', java.version: ''1.7.0_60'' Session ID: ab6edd65-8a66-41fa-be46-56fba7dbdfc9
Driver info: org.openqa.selenium.ie.InternetExplorerDriver
Capabilities [{platform=WINDOWS, javascriptEnabled=true, elementScrollBehavior=0, ignoreZoomSetting=false, enablePersistentHover=true, ie.ensureCleanSession=false, browserName=internet explorer, enableElementCacheCleanup=true, unexpectedAlertBehaviour=dismiss, version=11, ie.usePerProcessProxy=false, cssSelectorsEnabled=true, ignoreProtectedModeSettings=true, requireWindowFocus=false, handlesAlerts=true, initialBrowserUrl=http://localhost:38122/, ie.forceCreateProcessApi=false, nativeEvents=true, browserAttachTimeout=0, ie.browserCommandLineSwitches=, takesScreenshot=true}]
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:193)
at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:145)
at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:554)
at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:307)
at org.openqa.selenium.remote.RemoteWebDriver.findElementById(RemoteWebDriver.java:348)
at org.openqa.selenium.By$ById.findElement(By.java:220)
at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:299)
at Test1.main(Test1.java:27)
Algunas sugerencias para resolver esto.
Agregue http://localhost/ a sus sitios de confianza en IE11. Esto funcionó para mí, después de intentar todo lo demás sin resultados.
Descubrí que, si el navegador iniciado se mantiene enfocado, obtendrás esa excepción. Tan pronto como inicie el controlador web, abra cualquier otra ventana, por ejemplo, puede abrir eclipse tan pronto como el script inicie el controlador IE. La ejecución del script comienza, y luego puede abrir su controlador de IE ... para manejarlo mediante scripts, agregue el siguiente código:
public WebDriver driver, driver1;
System.setProperty("webdriver.ie.driver", System.getProperty(
"webdriver.ie.driver", "./BrowserDrivers/IEDriverServer.exe"));
driver = new InternetExplorerDriver(cap);
this.driver.manage().deleteAllCookies();
this.driver.manage().timeouts().implicitlyWait(WaitTimeConstants.WAIT_TIME_LONG, TimeUnit.SECONDS);
this.driver.get("yourApplication.com");
this.driver.manage().window().maximize();
public WebDriver driver, driver1;
System.setProperty("webdriver.ie.driver", System.getProperty(
"webdriver.ie.driver", "./BrowserDrivers/IEDriverServer.exe"));
driver1 = new InternetExplorerDriver(cap);
this.driver1.manage().deleteAllCookies();
this.driver1.get("http://www.google.com");
this.driver1.manage().window().maximize();
En primer lugar, no uses
capabilities.setCapability(InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS,true);
como ya ha establecido la configuración del modo protegido. Para el problema que está viendo, debe ser debido a la falta de configuración del registro que se agrega como requisito previo para ejecutar pruebas en IE11:
https://github.com/SeleniumHQ/selenium/wiki/InternetExplorerDriver#required-configuration
Estoy utilizando IE 11 - máquina de Windows de 64 bits . Este punto funcionó para mí.
Solo para IE 11, deberá configurar una entrada de registro en el equipo de destino para que el controlador pueda mantener una conexión con la instancia de Internet Explorer que crea.
Para instalaciones de Windows de 32 bits, la clave que debe examinar en el editor del registro es HKEY_LOCAL_MACHINE / SOFTWARE / Microsoft / Internet Explorer / Main / FeatureControl / FEATURE_BFCACHE.
Para instalaciones de Windows de 64 bits, la clave es HKEY_LOCAL_MACHINE / SOFTWARE / Wow6432Node / Microsoft / Internet Explorer / Main / FeatureControl / FEATURE_BFCACHE.
Tenga en cuenta que la subclave FEATURE_BFCACHE puede o no estar presente, y debe crearse si no está presente.
Importante: Dentro de esta clave, cree un valor DWORD
llamado iexplore.exe
con el valor de 0.
La solución de abajo también funciona si desde la página actual navega en la página siguiente en alguna acción / evento y el controlador de selenio no reconoce la ventana: -
Para instalaciones de Windows de 64 bits, la clave es:
HKEY_LOCAL_MACHINE/SOFTWARE/Wow6432Node/Microsoft/Internet explorer/Main/FeatureControl/FEATURE_BFCACHE
Dentro de esto, cree un valor DWORD llamado iexplore.exe con el valor de 0.
La solución sugerida por @David Kemp no funciona para las 11 ventanas de 10 a 64 bits . He agregado la clave de registro HKEY_LOCAL_MACHINE/SOFTWARE/Wow6432Node/Microsoft/Internet explorer/Main/FeatureControl/FEATURE_BFCACHE
acuerdo con los pasos mencionados Para IE 11 solo siguiendo https://github.com/SeleniumHQ/selenium/wiki/InternetExplorerDriver#required-configuration pero después de abrir la página del certificado https (url https: // my-page: 9443 ) no se puede ejecutar driver.navigate().to("javascript:document.getElementById(''overridelink'').click()");
lanzando NoSuchWindowException
Sin embargo, lo mismo funciona bien, es decir, 11 de Windows 7-64 bit y es capaz de ejecutar los scripts.
La solución para hacer que ie 11 funcione para win 10 es mediante la configuración de las capacidades initialBrowserUrl en https: // my-page: 9443 como a continuación
capabilities.setCapability("initialBrowserUrl", "https://my-page:9443");
pero todavía estoy confundido por qué para ie11 / windows 10 es diferente?
Opciones de IE -> pestaña Seguridad -> Desmarque "Habilitar modo protegido" funcionó para mí.
Se agregó el dominio de AUT a la lista de "Sitios de confianza", por ejemplo, en "Opciones de Internet". Resuelve el problema.