locator how firepath examples xpath selenium

how - XPath/Selenium no puede localizar un elemento utilizando una identificación parcial con contains/start-with.-Resuelto



xpath selenium java (3)

La salida generada que pegó aquí simplemente no contiene el número de cadena en number_ parte. Contiene Number_ - note la N mayúscula - pero no es la primera parte de la cadena. Quizás quisiste decir algo como esto (que al menos selecciona algo ):

(//input[contains(@id, ''Number_'')])[2]

O:

(//input[starts-with(@id,''catalogNumber_'')])[2]

Tengo el siguiente HTML generado con un AjaxFormLoop.

<div id="phones"> <div class="t-forminjector tapestry-forminjector" id="rowInjector_13b87fdd8b6"> <input id="number_13b87fdd8b6" name="number_13b87fdd8b7" type="text"/> <a id="removerowlink_13b87fdd8b6" href="#" name="removerowlink_13b87fdd8b6">remove</a> </div> <div class="t-forminjector tapestry-forminjector" id="rowInjector_13b87fdda70" style="background-image: none; background-color: rgb(255, 255, 251);"> <input id="number_13b87fdda70" name="number_13b87fdda70" type="text" /> <a id="removerowlink_13b87fdda70" href="#" name="removerowlink_13b87fdda70">remove</a> </div> </div>

Estoy tratando de acceder al segundo campo de entrada en el niño 2 usando una identificación parcial, sin embargo, no he tenido éxito en hacer que esto funcione.

Lo que he intentado hasta ahora.

String path = "//input[contains(@id,''number_'')][2]"; String path = "(//input[contains(@id,''number_'')])[2]";

Ni siquiera puedo acceder a la entrada 1 usando 1 en lugar de 2, sin embargo, si elimino [2] y solo uso

String path = "// input [contains (@ id, ''number_'')]";

Puedo acceder al primer campo sin problema.

Si utilizo la identificación exacta, puedo acceder a cualquier campo sin problema.

Necesito usar el id si es posible, ya que hay muchos más campos en cada fila de t-forminjector que no están presentes en este ejemplo.

Implementación con Selenio.

final String path = "(//input[starts-with(@id,''quantity_'')])[2]"; new Wait() { @Override public boolean until() { return isElementPresent(path); } }.wait("Element should be present", TIMEOUT); UPDATE

Me doy cuenta de que parece que no puedo usar los siguientes inicios-con / contiene para localizar cualquier elemento dentro de dom, sin embargo, si uso una identificación completa, funciona.

//Partial ID - fails //*[starts-with(@id,"quantity_")] //Exact ID - works //*[starts-with(@id,"quantity_-112409575185705")]