2011-11-17 10 views
6

No puedo entender qué está pasando. el código es simple:haga clic en enlace selenio web driver funciona para, por ejemplo, no firefox

//WebDriver driver = new InternetExplorerDriver(); 
//WebDriver driver = new FirefoxDriver(); 
driver.get("http://www.yahoo.com"); 
driver.findElement(By.xpath("//*[@id='pa-u_14782488-bd']/a/span[2]")).click(); 

Utilizo ff o es decir, el controlador. pero la última línea de código es la misma. funciona para ie, pero no ff. Lo curioso es que estoy obteniendo el xpath de ff firebug así que xpath es correcto para ff. ff versión 7.0.1. Es solo el enlace de Mail en la columna izquierda del sitio de yahoos. ¿Por qué es tan difícil?

+1

Acabo de intentar reproducir su problema, pero la expresión XPath '// * [@ id = 'pa-u_14782488-bd']/a/span [2]' no devuelve elementos. Ese es el problema con los ID dinámicos. No duran para siempre Además, obviamente haces clic en un enlace. Luego intente hacer clic en el enlace y no en algunos de sus elementos internos ' '. –

Respuesta

0

Selenium tiene dificultades a veces con elementos incrustados en los elementos de enlace (<a>). Pruebe su código sin la última parte de XPath. Por lo tanto:

//*[@id='pa-u_14782488-bd']/a 

asegúrese de que también publica la versión de selenio está utilizando para que otros le puede dar una ayuda más detallada.

+0

gracias. Lo intenté pero fue en vano. todavía no funciona para ff. Estoy usando selenio 2.11.0 – emacs

+0

Creo que tiene que ver con que Yahoo mueve la página web cuando su página de inicio está cargada por ff. Noto que es decir, no mueve la página dow. que puede estar arrojando el controlador o algo así. ¿algunas ideas? – emacs

+0

Me di cuenta de que cuando el selenio lanza firefox ff mueve la página web hacia abajo para que el elemento en el que hago clic esté en la parte superior de la página. Probé con diferentes elementos e hizo lo mismo. El problema al mover la página hacia abajo en Yahoo hace que aparezca una barra de mensajes en la parte superior de la página que cubrirá el elemento. Me pregunto si eso está causando el problema. REALMENTE CREO QUE ES EL PROBLEMA. – emacs

0

no use xpath search .. es muy inestable y no ayuda en absoluto a su caso. Además, su código de selenio ahora está estrechamente vinculado con el marcado y cualquier cambio en el marcado como la introducción de un contenedor (es decir, div) no pasará la prueba.

puede usar el alcance para lograr algo similar. ejemplo:

var container=driver.findElement(By.xpath("//*[@id='pa-u_14782488-bd']")); 

var spans=container.findElements(By.tagName("span")); 

spans[1].Click(); 

también que no puedo entender cómo funciona esto, sin embargo, cos que tiene un enlace y porque yo estoy adivinando con fines de peinado tiene dos tramos dentro de ella, pero al hacer clic en cualquiera de ellas todavía debería desencadenar la misma acción que haciendo clic en la corrección de clic? o ¿me estoy perdiendo algo?

Podría ser que Firefox esté entregando sus eventos de forma incorrecta.

+0

I'd estar interesado en ver el resultado de la investigación de estabilidad xpath. Seguramente xpath, css o como quiera que encuentre el elemento devolverá el mismo IWebElement en el que se ejecuta Click() o me falta algo? –

2

Como Slanec menciona este tipo de sitios de uso de dinámicas de identificación, por lo que una mejor opción en el caso especificado anteriormente sería el uso de atributo "title", que tiene menor probabilidad de cambio .. si quieres ir con XPath, esto va a funcionar,

driver.findElement(By.xpath("//*[@title='Mail']")).click(); 

Aún mejor opción será utilizar enlace de texto, ya que funciona de la misma manera que el usuario haga clic manualmente sería ...

driver.findElement(By.linkText("MAIL")).click(); 
Cuestiones relacionadas