2009-09-18 13 views
5

Estoy usando Selenium RC con Chrome Mode para Firefox para automatizar casos de prueba para una aplicación web. Estoy escribiendo los scripts en Java usando TestNG framework y Eclipse. Ahora al punto principal:Selenium RC Tiene problemas con XPath

Tengo problemas con Selenium RC para reconocer ciertos XPaths. Valido mis XPaths con la extensión XPath-Checker para Firefox que no muestra ningún error. Luego lo pruebo en Selenium IDE para asegurarme de que se está reconociendo XPath. Incluso IDE reconoce el elemento. Pero es el Selenium RC simplemente no lo reconoce. ¿Hay algo que pueda hacer para corregir esto?

Específicamente, estoy tratando de hacer clic en un área en particular dada por:

html/body/form/div[@id='someid1']/div[@class='someClass']/div[@id='someid2']/div[@id='someid3']/div[@id='someid4']/div[@title='titleOfTheElement'] 

Luego También probé:

//div[@title='titleOfTheElement'] 
xpath=//div[@title='Automated User'] 
xpath=/descendant::div[@title='Automated User'] 

Todavía no hay nada!

1) ¿Puede alguien sugerir por favor qué podría estar mal, o si se sabe que el selenio tiene problemas con XPath?

2) ¿No hay ningún complemento (similar al comprobador XPath) que nos ayude a ver las cosas de la forma en que lo hace Selenium RC? De esta forma, podemos estar seguros de si RC reconocerá los XPaths.

Gracias,
Mugen

Este es el código Selenio:

selenium.click("somelink"); 
selenium.waitForPageToLoad("30000"); 

boolean flag=false 
    do{ 
    if (selenium.isTextPresent("Some text on the page which loads last")) 
    { 
     flag=true 
    } 
    }while(flag=false); 


selenium.click("locator for area which is driving me crazy"); 

Ahora bien, en el último paso si tuviera que hacer clic en cualquier otro lugar en la página (es decir, algún otro localizador) del el clic funcionaría.

El HTML para el área se ve así:

<div id="someid1" style="overflow: hidden;"> 
<div id="someid2" title="title1" class="someclass">title1</div> 
<div id="someid3" title="title2" class="someclass">title2</div> 
<div id="someid4" title="required title" class="someclass">required title</div> 
<div id="someid5" title="title3" class="someclass">title3</div> 
<div id="someid6" title="title4" class="someclass">title4</div> 
<div id="someid7" title="title5" class="someclass">title5</div></div> 

Gracias una carga para mirar en esto. :-)

+0

¿Puedes publicar tus comandos de Selenium RC? ¿Estás esperando a que la página se cargue antes de enviar el comando de clic? –

Respuesta

6

No estoy seguro de si es correcto tener un div con un atributo de título. ¿No hay otro atributo que podría usar para ubicar el elemento?

De todos modos, aquí está la versión de CSS del localizador, en caso de que funciona:

css=div[title='Automated User'] 
+0

¡Gracias por la respuesta! ¡Usar css funciona muy bien! Estaba equivocadamente probando css como css = div [@ title = 'Usuario automatizado'] - ¡tonto! – Mugen

+0

Me alegra ver que funcionó :) – Santi

0

¿Estás seguro de que la página está cargada correctamente con RC, es decir, ves el navegador abierto y la página carga?

+0

Gracias por responder Jeremy. Sí, puedo ver que la página se abre correctamente. Los XPaths para otras áreas parecen funcionar bien. Es en un área particular que simplemente no reconocerá en absoluto. Al hacer clic en diferentes elementos en esta área en particular, se realizan algunos cambios a otro div en la página. ¿Podría esto estar relacionado con el problema? – Mugen

2

tuvimos una vez un problema con expresiones XPath cuando se ejecutan pruebas de selenio en Firefox.

  • ¿Ha intentado ejecutar las mismas pruebas con un navegador diferente?
  • Recuerdo que reemplazamos todos los nombres de elementos con signos de asterisco (*) y eso ayudó. es decir

    // * [@ id = 'someid1']/* [clase @ = 'algunaClase']/* [@ id = 'someid2']

2

de su ejemplo, usted debería ser capaz utilizar el ID del elemento de destino:

selenium.click("id=someid4"); 

Aunque sospecho que los ID se generan de forma dinámica y no puede utilizar este método.

no puedo ver ninguna razón por la siguiente XPath no funcionaría:

selenium.click("//div[@title='required title']"); 

Otras maneras de dirigir sería:

selenium.click("css=div[title='required title']"); 
selenium.click("css=.someclass:nth-child(4)"); //must be 4th child of parent element 

es el elemento div que su objetivo real? ¿Responde a un evento de clic? Si hay un elemento secundario que responde al clic, deberá orientarlo en su lugar. También, usted podría intentar la solución de problemas con los siguientes comandos:

mouseDown 
mouseUp 
fireEvent 
+0

Gracias mi div no era el objetivo real "no respondió" tuvo que obtener selenio para presionar la etiqueta anidada :-) – Blundell

0

podría ser la secuencia de comandos es más rápida que la página web .so tratar de esperar algún tiempo. como se puede usar waitForCondition("selenium.isElementPresent("ElementID")","20000");

Como parece que no funciona con el xpath.try esto podría ayudarle.

Cuestiones relacionadas