2011-09-02 21 views
16

Actualmente, estoy trabajando en WebDriver para invocar el navegador IE para ejecutar las pruebas. Pero recibí un NoSuchElementException cuando traté de ejecutar el sencillo ejemplo a continuación.NoSuchElementException se ha producido durante la implementación de InternetExplorerDriver en Selenium WebDriver

Sin embargo, el código funcionó bien si utilicé Chrome Driver o el controlador de Firefox. Cualquier idea o pensamiento sería apreciado.

Jar: selenium-server-standalone-2.5.0.jar

Código:

import org.openqa.selenium.By; 
import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.ie.InternetExplorerDriver; 
import org.openqa.selenium.remote.DesiredCapabilities; 

public static void main(String[] args) throws InterruptedException { 
    DesiredCapabilities ieCapabilities = DesiredCapabilities.internetExplorer(); 
    ieCapabilities.setCapability(InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS, true); 
    WebDriver driver = new InternetExplorerDriver(ieCapabilities); 
    driver.get("www.google.com"); 
    driver.findElement(By.name("q")); 
} 

mensaje de error:

Exception in thread "main" org.openqa.selenium.NoSuchElementException: Unable to find element with name == q (WARNING: The server did not provide any stacktrace information) 
For documentation on this error, please visit: http://seleniumhq.org/exceptions/no_such_element.html 
Build info: version: '2.5.0', revision: '13516', time: '2011-08-23 18:29:57' 
System info: os.name: 'Windows 7', os.arch: 'x86', os.version: '6.1', java.version: '1.6.0_25' 
Driver info: driver.version: RemoteWebDriver 
    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:131) 
    at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:105) 
    at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:409) 
    at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:197) 
    at org.openqa.selenium.remote.RemoteWebDriver.findElementByName(RemoteWebDriver.java:246) 
    at org.openqa.selenium.By$ByName.findElement(By.java:298) 
    at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:189) 
    at lib.WebDriver2.main(WebDriver2.java:14) 
+0

Ese mensaje stacktrace/error parece incompleto, ¿estás seguro de que está completo? – Jasper

+0

Hola, actualicé el mensaje de error :) El navegador IE se abrió y se dirigió a la página de google. Pero falló, ya que trató de encontrar el elemento "q" – user836112

+0

mismo problema aquí. Estoy usando un sistema de 64 bits, pero con un jvm de 32 bits, entonces el controlador también tiene 32 bits. Nada de lo enumerado a continuación ayudó a –

Respuesta

14

Ha evitado explícitamente tener que establecer las configuraciones del modo protegido de IE. Eso es lo que hace la configuración de capacidad InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS. Cuando elimina esta configuración de capacidad y establece la configuración del modo protegido según lo documentado en project wiki, parece que el problema se resuelve solo.

+0

Hola Jim. Gracias por la solución. No tengo privilegios para modificar la configuración de seguridad. ¿Hay alguna solución? ¡Gracias! – sbose

+0

La capacidad ** es ** la solución. [Esta publicación del blog] (http://jimevansmusic.blogspot.com/2012/08/youre-doing-it-wrong-protected-mode-and.html) describe los motivos técnicos por los que la configuración del Modo protegido importa y por qué su organización está saboteando activamente su capacidad para realizar su trabajo si no le permiten cambiar la configuración. – JimEvans

5

trate de añadir implícitamente esperar, como a continuación. También como dijo Robert, su URL debería tener http: //

WebDriver driver = new InternetExplorerDriver(ieCapabilities); 
driver.manage().timeouts().implicitlyWait(90, TimeUnit.SECONDS); 
+0

Hola Nilesh, muchas gracias por tu ayuda. Pero, la solución no funciona para mí. – user836112

+0

Eso es porque debería usar FluentWait en su lugar con una cláusula .ignoring para recuperarse de las excepciones. – djangofan

2

Hubo un corto FAQ entry en la página web del proyecto (copiado alrededor de selenio 2,9):

El InternetExplorerDriver requiere que todos los dominios de seguridad se establece al mismo valor (de confianza o desconocidas) Si eres no está en condiciones de modificar los dominios de seguridad, a continuación, se puede anular el cheque así:

DesiredCapabilities capabilities = 
DesiredCapabilities.internetExplorer(); 
capabilities.set(InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS, 
true); 
WebDriver driver = new InternetExplorerDriver(capabilities); 

como se dijo por el nombre de la constante, esto puede introducir flakine ss en sus pruebas. Si todos los sitios están en el mismo dominio de protección, usted debería estar bien.

El mensaje C# InvalidOperationException paralelo:

error inesperado lanzamiento de Internet Explorer. El modo protegido debe ser configurado en el mismo valor (habilitado o deshabilitado) para todas las zonas. (NoSuchDriver)

y el C# en lugar de ajustar la configuración de IE (mejor estimación de Feb de 2016):

var ieOptions = new OpenQA.Selenium.IE.InternetExplorerOptions { 
       IntroduceInstabilityByIgnoringProtectedModeSettings = true }; 
using (var driver = new InternetExplorerDriver(ieOptions)) 
{ 

Todo esto fue parte de issue 1795 en el seguimiento de incidencias selenio.

+1

Para la versión de C#, no puedo pasar un DesiredCapabilities en InternetExplorerDriver constructor –

Cuestiones relacionadas