xml selenium xpath selenium-webdriver automated-tests

xml - ¿Cuál es la diferencia entre.// y//*en XPath?



selenium selenium-webdriver (4)

  1. Para la primera pregunta : se trata del contexto. Puede ver la sintaxis para saber qué significa ''.'', ''..'', etc. Además, apuesto a que no encontrarás ninguna explicación mejor que This Link .
  2. Respuesta simplificada para la segunda pregunta : generalmente encontrará nodos utilizando las etiquetas html como td, a, li, div, etc. Pero ''*'' significa, busque cualquier etiqueta que coincida con su propiedad dada. Se usa principalmente cuando está seguro de una propiedad determinada, pero no de la etiqueta con la que puede venir el elemento, como supongamos que quiero una lista de todos los elementos con ID ''xyz'' en cualquier etiqueta.

Espero eso ayude :)

Al encontrar el XPath relativo a través de Firebug: crea como

  1. .//*[@id=''Passwd''] --------- ¿Qué .//*[@id=''Passwd''] si no usamos punto al principio lo que significa?

  2. Simplemente agregue //* en Xpath - resalta --- varios elementos de la página ---------- ¿qué significa?

A continuación se encuentran los campos de contraseña de XPaths para Gmail. ¿Cuál es el significado de * ?

  • .//*[@id=''Passwd'']

  • //child::input[@type=''password'']


El punto en XPath se llama "expresión de elemento de contexto" . Si coloca un punto al comienzo de la expresión, lo haría específico al contexto. En otras palabras, buscaría el elemento con id="Passwd" en el contexto del nodo en el que está llamando al método "find element by XPath".

El * en .//*[@id=''Passwd''] ayuda a hacer coincidir cualquier elemento con id=''Passwd'' .


Todas estas expresiones seleccionan diferentes conjuntos de nodos:

.//*[@id=''Passwd '']

Los ''.'' al principio significa que el procesamiento actual comienza en el nodo actual . El ''*'' selecciona todos los nodos de elementos que descienden de este nodo actual con el valor de @id @id igual a ''Passwd''.

¿Qué pasa si no usamos punto al principio lo que significa?

Luego seleccionaría todos los nodos de elementos con un @id -attribute-value igual a ''Passwd'' en todo el documento.

Simplemente agregue // * en XPath - resalta --- varios elementos de página

Esto seleccionaría todos los nodos de elementos en todo el documento.

A continuación se menciona: los campos de XPatht para contraseña de Gmail son verdaderos, ¿cuál es el significado de *?

.//*[@id=''Passwd'']

Esto seleccionaría todos los nodos de elementos que descienden del nodo actual cuyo valor @id -attribute-value es igual a ''Passwd''.

// child :: input [@ type = ''contraseña'']

Esto seleccionaría todos los nodos de elementos secundarios denominados input que @type -attribute-values ​​son iguales a ''contraseña''. El prefijo child:: axis puede omitirse porque es el comportamiento predeterminado.

La sintaxis de elegir la expresión apropiada se explica aquí en w3school.com .

Y los Ejes (punto actual en el procesamiento) se explican aquí en otra página de w3school.com .


Hay varios conceptos XPath clave distintos en juego aquí ...

Absathos vs relativos XPaths ( / vs.)

  • / introduce una ruta de ubicación absoluta, comenzando en la raíz del documento.
  • . introduce una ruta de ubicación relativa, comenzando en el nodo de contexto.

Elemento nombrado vs cualquier elemento ( ename vs * )

  • /ename selecciona un elemento raíz ename
    • ./ename selecciona todos los elementos secundarios ./ename del nodo actual.
  • /* selecciona el elemento raíz, independientemente de su nombre.
    • ./* o * selecciona todos los elementos secundarios del nodo de contexto, independientemente del nombre.

eje descendente o propio ( //* )

  • //ename selecciona todos los elementos ename en un documento.
    • .//ename selecciona todos los elementos .//ename en o debajo del nodo de contexto.
  • //* selecciona todos los elementos de un documento, independientemente de su nombre.
    • .//* selecciona todos los elementos, independientemente de su nombre, en o debajo del nodo de contexto.

Con estos conceptos en mente, aquí hay respuestas a sus preguntas específicas ...

  • .//*[@id=''Passwd''] significa seleccionar todos los elementos en o debajo del nodo de contexto actual que tienen un valor de atributo de id igual a ''Passwd'' .
  • //child::input[@type=''password''] se puede simplificar a //input[@type=''password''] y significa seleccionar todos input elementos de input en el documento que tienen un valor de atributo de type igual a ''password'' .