2009-06-16 31 views
6

selenio tiene algún buen apoyo para encontrar elementos en una página a través de XPathUsando waitForCondition de selenio con un XPath

selenium.isElementPresent("//textarea")

y en páginas ajax puede utilizar waitForCondition que esperar en una página hasta que aparezca algo

selenium.waitForCondition("some_javascript_boolean_test_as_a_string", "5000")

Mi dificultad es que parece que no puedo utilizar el soporte xpath para la prueba booleana. document.getElementById parece funcionar bien, pero selenium.isElementPresent no funciona.

¿Hay alguna manera fácil de acceder a las capacidades de búsqueda del elemento xpath del selenio desde el primer parámetro de waitForCondition?

+0

¿Cómo es usted que funciona este script? ¿Estás haciendo esto desde el Selenium IDE, o exportarlo a otro idioma (C#, Java, etc.) – Josh

+0

Desde Java - Yo había supuesto que no importaba, ya que todo se reducía al mismo JavaScript –

Respuesta

3

Si desea seleccionar un elemento de identificación, lo más sencillo es utilizar Selenese recta:

isElementPresent("textarea") 

Si usted insiste en el uso de XPath puede que tenga que utilizar

isElementPresent("//*[@id='textarea']") 

o

isElementPresent("//id('textarea')") 

(La función de identificación no puede ser compatible con varios navegadores)

Si esto no ayuda a su documento html también puede tener problemas estructurales que están causando esto. Ejecute un validador html como html validator para verificar problemas de anidamiento y similares en su página.

+0

de todos modos para esperar texto dentro de un elemento con eso? – gcb

5

se podría hacer algo como esto:

selenium.waitForCondition(
    "var x = selenium.browserbot.findElementOrNull('elementIdOrXPathExpression');" 
    + "x != null && x.style.display == 'none';", "5000"); 

El waitForCondition simplemente evalúa la última js resultado de la expresión como un valor lógico, lo que le permite escribir pruebas complejas (como se muestra aquí). Por ejemplo, también estamos usando esta técnica para probar si jQuery AJAX ha terminado de ejecutarse.

El único inconveniente es que ahora también confía en el navegadorbot y en el nivel inferior del núcleo js API.

8

Una forma más sencilla de hacerlo es:

selenium.waitForCondition("selenium.isElementPresent(\"xpath=//*[@id='element_id_here']/ul\");", time_out_here); 
Cuestiones relacionadas