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")]
no puede acceder a él porque no está ubicando el elemento para que sea único en la página. use un xpath que lo haga único, - está xpath look ok. más información aquí http://www.seleniumhq.org/docs/appendix_locating_techniques.jsp
Como dijo Iwburk, este era un problema de espacio de nombres. De acuerdo con la API de Selenium,
mientras usaba una expresión xpath, necesitaba usar xpath = xpathExpression cambiando mi cadena de consulta a:
String path = "xpath=(//input[starts-with(@id,''quantity_'')])[2]";
Encontré una publicación relacionada aquí, Element se encuentra en XPath Checker pero no en Selenium