TechAIDBlogElementos web dinámicos: ¿Cómo interactuar con ellos?
By Mike Arias 02/27/2020 0

Elementos web dinámicos: ¿Cómo interactuar con ellos?

¿Alguna vez has mapeado un elemento en tu objeto de página, se ejecuta increíble la primera vez y luego… ¿De repente dejas de encontrar el elemento de un momento a otro? Esto puede ocurrir por muchas razones. Una de las razones podría ser que el elemento que estas tratando de mapear, es dinámico.

Por dinámico, quiero decir que el localizador del elemento cambia cada vez que se carga la página. Los desarrolladores hacen esto por varias razones que pueden inspirar un artículo completamente diferente.

Tomemos como ejemplo un elemento de este blog. Si va a la página de inicio e inspecciona las publicaciones que aparecen, notará que los ID son algo así como

“post-XXX” Y ellos no muestran un patrón numérico claro. Si creamos un script que mapeo «post-294» exactamente, existe la posibilidad de que en el futuro este elemento nos pueda causar problemas.

 

Dynamic-elements

Pero, ¿Qué podemos hacer para resolver esto?

Hay varias formas de abordar este problema. Cubriremos las más comunes:


Encuentre formas alternativas de localizar el elemento dinámico

Ahora mostraremos nuestra primera solución. Si un método para localizar el elemento (usando su ID directamente) no funciona, ¡pruebe con otro! Selenium ofrece una gran variedad de métodos para localizar un elemento. Lo más probable es que encuentre otro qué mejor se adapte a sus necesidades.

Echemos un vistazo más profundo a nuestro elemento:

 

 

web-elements-tools

 

Aquí podemos ver que tenemos un <artículo> que está dentro de un <main> que está dentro de un <div>, cada uno de ellos con una identificación aparentemente única. Esto significa que podríamos usar un Xpath relativo o un Selector CSS para llegar al elemento dinámico que queremos.

Un Xpath como este:

  | //div/main/article[1]

O un selector de CSS como este:

  | div>main>article:first-of-type


Sería suficiente para lograr lo que queremos. Pero, ¿qué pasa si no somos tan afortunados y no tenemos una estructura similar en nuestro HTML que nos permita hacer esto? Bueno, entonces tendríamos que mirar aún más allá.


Revisa los atributos del elemento dinámico

Si echamos otro vistazo a nuestro <artículo>, notaremos que tiene un montón de clases asignadas. Quizás una de esas clases es única y puede ayudarnos a lograr nuestro objetivo.


Por ejemplo:

 | post = self.driver.find_element((By.CLASS_NAME, “blog-post”)

Si utilizamos el método predeterminado find_element proporcionado por Selenium, devolverá el primer elemento encontrado que cumpla con los criterios especificados. Que en este caso, es exactamente lo que queremos. Pero, de nuevo, ¿Qué sucede si el elemento dinámico que estamos buscando tampoco tiene una clase única que podamos usar para encontrarlo?

 

Bueno, ahí es cuando sacamos las grandes armas

Ahí es cuando vamos a nuestro último recurso. Use una XPath que seleccione el elemento dinámico en función de la parte de la ID que no cambia.

  | //article[contains(@id, ‘post-‘)][1]

En este XPath, estamos seleccionando primero <article> que su ID contiene “post-“.

Dicho esto, también podemos combinar algunos de estos consejos dependiendo de cuán específicos queremos ser con nuestro localizador, pero ten en cuenta que cuanto más específico es el localizador, más frágil se vuelve.


This article was written by Mike Arias
Senior Software Testing Engineer of TechAID.
Twitter: @theqaboy
Blog: qaboy.com/

GO BACK TO Herramientas

Deja una respuesta

OTHER POSTS YOU MIGHT LIKE

API- Herramientas de prueba: Una guía basada en ejemplos

By Manuel Marinez 04/08/2021 8

  Para las pruebas de API, existen muchas herramientas que nos permiten realizar las pruebas y recopilar los resultados. En este artículo, me enfocaré en tres herramientas mostrando directamente cómo hacer una solicitud usando la API de Trello.   Pero antes de comenzar, dado que…

Clausula IF vs. ASSERT – ¿Cuándo se debe usar cuál?

By Mike Arias 09/17/2020 0

La clausula IF  y la declaración ASSERT cumplen funciones diferentes, pero similares. El objetivo de este artículo es establecer de una vez por todas cuándo usar «IF» y cuándo usar «ASSERT» en nuestros casos de prueba. Habrán situaciones en las que esta decisión no pueda…