Saltar al contenido principal

Selectores

El Protocolo WebDriver proporciona varias estrategias de selección para consultar un elemento. WebdriverIO las simplifica para mantener la selección de elementos simple. Tenga en cuenta que aunque el comando para consultar elementos se llama $ y $$, no tienen nada que ver con jQuery o el Motor de Selección Sizzle.

Aunque hay tantos selectores diferentes disponibles, solo unos pocos de ellos proporcionan una forma resistente de encontrar el elemento correcto. Por ejemplo, dado el siguiente botón:

<button
id="main"
class="btn btn-large"
name="submission"
role="button"
data-testid="submit"
>
Submit
</button>

Recomendamos y no recomendamos los siguientes selectores:

SelectorRecomendadoNotas
$('button')🚨 NuncaEl peor - demasiado genérico, sin contexto.
$('.btn.btn-large')🚨 NuncaMalo. Acoplado al estilo. Altamente sujeto a cambios.
$('#main')⚠️ Con moderaciónMejor. Pero aún acoplado al estilo o a los escuchadores de eventos JS.
$(() => document.queryElement('button'))⚠️ Con moderaciónConsulta efectiva, compleja de escribir.
$('button[name="submission"]')⚠️ Con moderaciónAcoplado al atributo name que tiene semántica HTML.
$('button[data-testid="submit"]')✅ BuenoRequiere atributo adicional, no conectado a a11y.
$('aria/Submit') o $('button=Submit')✅ SiempreEl mejor. Se asemeja a cómo el usuario interactúa con la página. Se recomienda usar los archivos de traducción de su frontend para que sus pruebas nunca fallen cuando se actualizan las traducciones

Selector de consulta CSS

Si no se indica lo contrario, WebdriverIO consultará elementos utilizando el patrón selector CSS, por ejemplo:

selectors/example.js
loading...

Texto de enlace

Para obtener un elemento de anclaje con un texto específico, consulte el texto comenzando con un signo igual (=).

Por ejemplo:

selectors/example.html
loading...

Puede consultar este elemento llamando:

selectors/example.js
loading...

Texto parcial de enlace

Para encontrar un elemento de anclaje cuyo texto visible coincide parcialmente con su valor de búsqueda, consúltelo usando *= delante de la cadena de consulta (por ejemplo, *=driver).

Puede consultar el elemento del ejemplo anterior también llamando:

selectors/example.js
loading...

Nota: No puede mezclar múltiples estrategias de selector en un solo selector. Use múltiples consultas de elementos encadenados para alcanzar el mismo objetivo, por ejemplo:

const elem = await $('header h1*=Welcome') // ¡no funciona!
// use en su lugar
const elem = await $('header').$('*=driver')

Elemento con cierto texto

La misma técnica se puede aplicar a los elementos también. Además, también es posible hacer una coincidencia sin distinción entre mayúsculas y minúsculas usando .= o .*= dentro de la consulta.

Por ejemplo, aquí hay una consulta para un encabezado de nivel 1 con el texto "Welcome to my Page":

selectors/example.html
loading...

Puede consultar este elemento llamando:

selectors/example.js
loading...

O usando texto parcial de consulta:

selectors/example.js
loading...

Lo mismo funciona para nombres de id y class:

selectors/example.html
loading...

Puede consultar este elemento llamando:

selectors/example.js
loading...

Nota: No puede mezclar múltiples estrategias de selector en un solo selector. Use múltiples consultas de elementos encadenados para alcanzar el mismo objetivo, por ejemplo:

const elem = await $('header h1*=Welcome') // ¡no funciona!
// use en su lugar
const elem = await $('header').$('h1*=Welcome')

Nombre de etiqueta

Para consultar un elemento con un nombre de etiqueta específico, use <tag> o <tag />.

selectors/example.html
loading...

Puede consultar este elemento llamando:

selectors/example.js
loading...

Atributo de nombre

Para consultar elementos con un atributo de nombre específico, puede usar un selector CSS3 normal o la estrategia de nombre proporcionada por el JSONWireProtocol pasando algo como [name="some-name"] como parámetro selector:

selectors/example.html
loading...
selectors/example.js
loading...

Nota: Esta estrategia de selector está obsoleta y solo funciona en navegadores antiguos que se ejecutan con el protocolo JSONWireProtocol o usando Appium.

xPath

También es posible consultar elementos a través de un xPath específico.

Un selector xPath tiene un formato como //body/div[6]/div[1]/span[1].

selectors/xpath.html
loading...

Puede consultar el segundo párrafo llamando:

selectors/example.js
loading...

Puede usar xPath para también recorrer hacia arriba y hacia abajo el árbol DOM:

selectors/example.js
loading...

Selector de nombre de accesibilidad

Consulta elementos por su nombre accesible. El nombre accesible es lo que anuncia un lector de pantalla cuando ese elemento recibe el foco. El valor del nombre accesible puede ser tanto contenido visual como alternativas de texto ocultas.

información

Puede leer más sobre este selector en nuestra publicación del blog de lanzamiento

Buscar por aria-label

selectors/aria.html
loading...
selectors/example.js
loading...

Buscar por aria-labelledby

selectors/aria.html
loading...
selectors/example.js
loading...

Buscar por contenido

selectors/aria.html
loading...
selectors/example.js
loading...

Buscar por título

selectors/aria.html
loading...
selectors/example.js
loading...

Buscar por propiedad alt

selectors/aria.html
loading...
selectors/example.js
loading...

ARIA - Atributo de rol

Para consultar elementos basados en roles ARIA, puede especificar directamente el rol del elemento como [role=button] como parámetro selector:

selectors/aria.html
loading...
selectors/example.js
loading...

Atributo ID

La estrategia de localizador "id" no es compatible con el protocolo WebDriver, se debe usar estrategias de selector CSS o xPath para encontrar elementos usando ID.

Sin embargo, algunos controladores (por ejemplo, Appium You.i Engine Driver) podrían seguir soportando este selector.

Las sintaxis de selector actualmente soportadas para ID son:

//localizador css
const button = await $('#someid')
//localizador xpath
const button = await $('//*[@id="someid"]')
//estrategia id
// Nota: funciona solo en Appium o frameworks similares que soportan la estrategia de localizador "ID"
const button = await $('id=resource-id/iosname')

Función JS

También puede usar funciones JavaScript para obtener elementos usando APIs nativas web. Por supuesto, solo puede hacer esto dentro de un contexto web (por ejemplo, browser, o contexto web en móvil).

Dada la siguiente estructura HTML:

selectors/js.html
loading...

Puede consultar el elemento hermano de #elem de la siguiente manera:

selectors/example.js
loading...

Selectores profundos

advertencia

A partir de la v9 de WebdriverIO no hay necesidad de este selector especial ya que WebdriverIO automáticamente atraviesa el Shadow DOM por ti. Se recomienda migrar de este selector eliminando el >>> delante de él.

Muchas aplicaciones frontend dependen en gran medida de elementos con shadow DOM. Es técnicamente imposible consultar elementos dentro del shadow DOM sin soluciones alternativas. Los comandos shadow$ y shadow$$ han sido tales soluciones alternativas que tenían sus limitaciones. Con el selector profundo ahora puede consultar todos los

Welcome! How can I help?

WebdriverIO AI Copilot