Estoy tratando de ejecutar el siguiente código en Microsoft Edge a través de WebDriver
ExpectedCondition<Boolean> jsLoad = driver -> ((JavascriptExecutor) driver).executeScript("return document.readyState").toString().equals("complete"); JavascriptExecutor js = (JavascriptExecutor) getDriver(); boolean jsReady = (Boolean) js.executeScript("return document.readyState").toString().equals("complete");Estamos obteniendo la siguiente excepción:
Exception class:org.openqa.selenium.JavascriptExceptionLa razón es:
org.openqa.selenium.JavascriptException: javascript error: Function is not a constructorConfiguramos EdgeOptions como a continuación
DesiredCapabilities desiredCapabilities = new DesiredCapabilities(); desiredCapabilities.setBrowserName("MicrosoftEdge"); EdgeOptions edgeOptions = new EdgeOptions(); edgeOptions.setCapability("ms:inPrivate", true); edgeOptions.setCapability("prefs", edgePrefs); edgeOptions.setCapability("useAutomationExtension", false); edgeOptions.merge(desiredCapabilities); edgeOptions.setPageLoadStrategy("eager"); edgeOptions.setCapability("ms:inPrivate", true); edgeOptions.setCapability("useAutomationExtension", false); edgeOptions.setCapability(CapabilityType.SUPPORTS_JAVASCRIPT, true); edgeOptions.setCapability(CapabilityType.HAS_NATIVE_EVENTS, true); driver = new EdgeDriver(edgeOptions);Alguna sugerencia
Ejecuta JavaScript en el contexto del marco o ventana seleccionado actualmente. El fragmento de script proporcionado se ejecutará como el cuerpo de una función anónima. Dentro del script, use document para referirse al documento actual. Tenga en cuenta que las variables locales no estarán disponibles una vez que el script haya terminado de ejecutarse, aunque las variables globales persistirán. Si el script tiene un valor de retorno (es decir, si el script contiene una declaración de retorno), se seguirán los siguientes pasos:
- Para un elemento HTML, este método devuelve un WebElement
- Para un decimal, se devuelve un Doble
- Para un número no decimal, se devuelve un Long
- Para un booleano, se devuelve un booleano
- Para todos los demás casos, se devuelve una cadena.
- Para una matriz, devuelva una Lista con cada objeto siguiendo las reglas anteriores. Admitimos listas anidadas.
- Para un mapa, devuelve Map<String, Object> con valores siguiendo las reglas anteriores.
- A menos que el valor sea nulo o no haya un valor de retorno, en el que se devuelve nulo
Los argumentos deben ser un número, un valor booleano, una cadena, un elemento web o una lista de cualquier combinación de los anteriores. Se lanzará una excepción si los argumentos no cumplen con estos criterios. Los argumentos estarán disponibles para JavaScript a través de la variable mágica "argumentos", como si la función se llamara a través de "Función.aplicar".
Si su caso de uso es esperar a que document.readyState sea igual para complete , puede inducir WebDriverWait de la siguiente manera:
new WebDriverWait(driver, TimeSpan.FromSeconds(20)).Until(d => ((IJavaScriptExecutor)d).ExecuteScript("return document.readyState").Equals("complete"));