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.

Robot Framework: Cómo recorrer el elemento X mientras haya páginas hasta que se encuentre el elemento Y.

Recientemente soy nuevo en Robot Framework y no puedo encontrar la respuesta a mi problema exacto en ninguna parte.

Contexto: Necesito recorrer todos los títulos de mi página hasta encontrar uno específico determinado por mi variable global. La interfaz de usuario no tiene identificadores únicos, por lo que cuando ingreso el localizador del título, obtengo 20 o más elementos que coinciden con este XPath.

También hay paginación, lo que significa que el título que estoy buscando podría estar en otra página.

Mi variable global, que es el título que estoy buscando, es ${audience_name_value} y obtengo su valor en otra palabra clave. Creo que esta parte funciona, ya que cuando este título está en la misma página, la prueba pasa con la palabra clave

La página debe contener el elemento ${current_page['audience_name_card_holder_title']}${audience_name_value}")].

El problema surge cuando el título que estoy buscando se encuentra en la segunda página o en la tercera, etc.

Quería iterar cada título hasta encontrar el correcto o hacer clic en la flecha siguiente para continuar esta búsqueda.

En un principio, obtenía el error: TypeError: Se esperaba que el argumento 1 fuera una lista o similar a una lista, en su lugar se obtuvo una cadena.

El público creado se encuentra en la sección de audiencia personalizada inactiva
   ${elements}=  Obtener elementos web                  xpath://*[@id="pageContainer"]//div[contains(@class,"audienceCard__header__name")]/a
    FOR    ${element}    IN    @{elements}
        ${text}=    Obtener texto    ${element}
        Salir del bucle si        ${text} == ${audience_name_value}
    END

Así que intenté crear una lista a continuación, pero ahora obtengo este error:
Error al evaluar la expresión 'RBT 2021-12-21 == RBT 2021-12-21': Error de sintaxis: sintaxis no válida (<cadena>, línea 1)

El público creado se encuentra en la sección de audiencia personalizada inactiva
    ${elements}=  Obtener elementos web                  xpath://*[@id="pageContainer"]//div[contains(@class,"audienceCard<strong>header</strong>name")]/a
    ${lista}=    Crear lista    ${elements}
    FOR    ${element}    IN    @{lista}
        ${texto}=    Obtener texto    ${element}
        Salir del bucle si        ${texto} == ${audience<em>name</em>value}
    END

Estoy sin ideas, parece que el título fue encontrado pero hay un error de sintaxis que simplemente no puedo solucionar.

Amablemente pido ayuda :D, ¡gracias!

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Solución:

    El problema con la primera implementación es que la variable FOR del bucle ${element} no fue encerrada en una variable de lista mientras se utiliza en el bucle FOR. La implementación correcta debería ser la siguiente:

    la audiencia creada está en la sección de audiencia personalizada inactiva
        ${elements}=  Obtener Elementos Web  xpath://*[@id="pageContainer"]//div[contains(@class,"audienceCard__header__name")]/a
        FOR    ${element}    IN    @{elements}
            ${text}=    Obtener Texto    ${element}
            Salir del Bucle Si        ${text} == ${audience_name_value}
        END
    

    Para la segunda implementación, el problema está en el uso de ${audience_name_value} en la condición Salir del Bucle Si, lo que lo convierte en una cadena en lugar de una referencia de variable. Para solucionar esto, debes usar la variable directamente sin comillas. Además, no necesitas crear una nueva lista ya que la keyword Obtener Elementos Web ya devuelve una lista. Aquí está la implementación corregida:

    la audiencia creada está en la sección de audiencia personalizada inactiva
        ${elements}=  Obtener Elementos Web  xpath://*[@id="pageContainer"]//div[contains(@class,"audienceCard__header__name")]/a
        FOR    ${element}    IN    @{elements}
            ${text}=    Obtener Texto    ${element}
            Salir del Bucle Si        ${text} == ${audience_name_value}
        END
    

    Esto debería resolver el problema e iterar a través de todos los títulos hasta que encuentre el correcto o agote todas las páginas. Puedes agregar una verificación para hacer clic en la flecha siguiente en caso de que no se encuentre el elemento en la página actual.

Comments are closed.