es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

WebdriverIO selector no válido: No se puede localizar un elemento con la expresión de xpath.

Me enfrento a un problema al seleccionar un elemento navegando hacia arriba en el DOM HTML con WebdriverIO. Nota: Es fácil seleccionar el título por texto y la etiqueta h1 o por nombre de clase, pero no quiero hacer eso.

En cambio, me gustaría que la etiqueta iframe sea mi punto de partida y seleccionarla por el texto de enlace de src parcial “nba-scores”, luego volver al div anterior con la clase “inner” O al div con la clase “main” sin seleccionarlo por nombre de clase y una vez que esté en el div anterior ir a la etiqueta h1 y obtener el texto con pageTitle.getText().

Cuando uso:

get pageTitle(){return $(“//iframe[contains(@src, ‘nba-scores’)]/parent::div//h1)”)}

Obtengo un SyntaxError:
SyntaxError: Error al ejecutar ‘evaluar’ en ‘Documento’: La cadena ‘//iframe[contains(@src, ‘nba-scores’)]/parent::div//h1)’ no es una expresión XPath válida.

Aquí está mi DOM HTML:

<main>
  <div class="main">
    <div class="inner">
       <h1 class="h1class">NBA Scores</h1>
    </div>
    <iframe src="https://xyz/#/nba-scores/view" class="viewscores">
    </iframe>
  </div>
</main>

¡Cualquier ayuda sería apreciada!

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para seleccionar la etiqueta iframe mediante el texto parcial del enlace src “nba-scores” y luego regresar al div anterior con la clase “inner” o al div con la clase “main” sin seleccionarlo por nombre de clase, y una vez en el div anterior, ir a la etiqueta h1 y obtener el texto con pageTitle.getText(), puedes utilizar el siguiente comando de WebdriverIO:

    get pageTitle() { 
      return $('//iframe[contains(@src, "nba-scores")]/ancestor::div[contains(@class, "inner") or contains(@class, "main")]/preceding-sibling::div[@class="inner"]/h1').getText(); 
    }
    

    Explicación:

    • //iframe[contains(@src, "nba-scores")] selecciona la etiqueta iframe con el texto parcial del enlace src “nba-scores”.
    • /ancestor::div[contains(@class, "inner") or contains(@class, "main")] sube en el árbol HTML al div anterior con el nombre de clase “inner” o “main”.
    • /preceding-sibling::div[@class="inner"] va al div hermano anterior con nombre de clase “inner”.
    • /h1 va a la etiqueta h1 dentro de ese div.
    • .getText() obtiene el texto de la etiqueta h1.

    Nota: Esto asume que solo hay una etiqueta h1 dentro del div con clase “inner”. Si hay múltiples etiquetas h1, puedes utilizar un índice para seleccionar la deseada, por ejemplo: /h1[1] para la primera etiqueta h1.

Comments are closed.