2011-07-05 15 views
6

queremos mover nuestras pruebas a selenium 2 y he encontrado un problema que no sé cómo resolverlo.Excepción "No se encuentra ningún elemento" en WebDriver ejecutándose en Internet Explorer usando Java

estoy usando los siguientes comandos para WebDriver:

WebDriver driver = new InternetExplorerDriver(); 
driver.navigate().to("webapp"); 
Thread.sleep(3000); 
System.out.println(driver.getPageSource()); 
WebElement element = driver.findElement(By.id("someid")); 

A excepción última línea se eleva y se encuentra ningún elemento. El mismo ejemplo funciona bien en Firefox, pero necesitamos que lo tenga en IE. He tratado de agregar más horas de sueño, pero no ayuda. El método getPageSource devuelve html correcto.

También he intentado obtener la etiqueta del cuerpo, con el siguiente comando, pero devuelve nulo.

List<WebElement> list = driver.findElements(By.tagName("body")); 

Nuestra aplicación web está creada en gwt.

¿Sabes qué puede causar que el selenio no vea ningún elemento?

Respuesta

0

tal vez usted puede tratar de añadir

driver.switchTo().window(driver.getWindowHandle()); 

antes de buscar elementos. Tuve este problema cuando Webdriver se movió entre páginas en diferentes servidores (no con IE pero con Firefox).

+2

Desafortunadamente no funcionó. –

1

El código que ha publicado no tiene ningún problema.

Asegúrate de utilizar algunas de las versiones más nuevas de Selenium y no una versión anterior de alfa/beta. ¿Qué IE usas? ¿Tiene complementos especiales? ¿Funciona con algunas páginas web mínimas como esta?

<html> 
<input id='myId' /> 
</html> 

¿Has intentado buscar otro elemento? ¿Por alguna otra técnica como xpath o css selector? Es su capitalización absolutamente correcta? Si guarda el html de la página y lo intenta cargar localmente con dicho archivo de prueba, ¿funciona? ¿Podría proporcionar un caso de prueba mínima? Como solución de último recurso poco probable que el trabajo, se puede tratar de repliegue de selenio 1 para dos líneas de código que ayudan a la espera en algunos casos raros:

Selenium sele = new WebDriverBackedSelenium(driver, "webapp"); 
sele.waitForPageToLoad("10000"); 
+0

Agregaría para asegurar que exista algún elemento con id = 'someid' en el código HTML generado – Zecas

1

Trate de usar un espera inteligente como esto antes de hacer su declaración de asignación. Solo necesita pasar su objeto WebDriver actual y un valor de tiempo de espera excedido.

new WebDriverWait(driver, timeOutInSeconds).until(new ExpectedCondition<Boolean>() { 
     @Override 
     public Boolean apply(final WebDriver theDriver) { 
      return Boolean.valueOf(theDriver.findElements(By.id(elementId)).size() > 0); 
     } 
    }); 
+0

Mi problema con esta solución es que el método findElements arroja una NullPointerException, que no hace nada para solucionar el problema. – NestorDRod

Cuestiones relacionadas