Pular para o conteúdo principal

Seletores

O servidor MCP do WebdriverIO suporta múltiplas estratégias de seletores para localizar elementos em páginas web e aplicativos móveis.

informação

Para documentação completa de seletores, incluindo todas as estratégias de seletores do WebdriverIO, consulte o guia principal Seletores. Esta página concentra-se nos seletores comumente usados com o servidor MCP.

Seletores Web

Para automação de navegador, o servidor MCP suporta todos os seletores padrão do WebdriverIO. Os mais comumente usados incluem:

SeletorExemploDescrição
CSS#login-button, .submit-btnSeletores CSS padrão
XPath//button[@id='submit']Expressões XPath
Textobutton=Submit, a*=ClickSeletores de texto do WebdriverIO
ARIAaria/Submit ButtonSeletores de nome de acessibilidade
Test ID[data-testid="submit"]Recomendado para testes

Para exemplos detalhados e melhores práticas, consulte a documentação de Seletores.


Seletores Móveis

Os seletores móveis funcionam com plataformas iOS e Android através do Appium.

Accessibility ID (Recomendado)

Os Accessibility IDs são o seletor multiplataforma mais confiável. Funcionam tanto no iOS quanto no Android e são estáveis durante atualizações do aplicativo.

# Sintaxe
~accessibilityId

# Exemplos
~loginButton
~submitForm
~usernameField
Melhores Práticas

Sempre prefira accessibility IDs quando disponíveis. Eles fornecem:

  • Compatibilidade multiplataforma (iOS + Android)
  • Estabilidade durante mudanças de UI
  • Melhor manutenção de testes
  • Melhor acessibilidade para seu aplicativo

Seletores Android

UiAutomator

Seletores UiAutomator são poderosos e rápidos para Android.

# Por Texto
android=new UiSelector().text("Login")

# Por Texto Parcial
android=new UiSelector().textContains("Log")

# Por Resource ID
android=new UiSelector().resourceId("com.example:id/login_button")

# Por Nome da Classe
android=new UiSelector().className("android.widget.Button")

# Por Descrição (Acessibilidade)
android=new UiSelector().description("Login button")

# Condições Combinadas
android=new UiSelector().className("android.widget.Button").text("Login")

# Container Rolável
android=new UiScrollable(new UiSelector().scrollable(true)).scrollIntoView(new UiSelector().text("Item"))

Resource ID

Os Resource IDs fornecem identificação estável de elementos no Android.

# Resource ID Completo
id=com.example.app:id/login_button

# ID Parcial (pacote do aplicativo inferido)
id=login_button

XPath (Android)

XPath funciona no Android, mas é mais lento que UiAutomator.

# Por Classe e Texto
//android.widget.Button[@text='Login']

# Por Resource ID
//android.widget.EditText[@resource-id='com.example:id/username']

# Por Descrição de Conteúdo
//android.widget.ImageButton[@content-desc='Menu']

# Hierárquico
//android.widget.LinearLayout/android.widget.Button[1]

Seletores iOS

Predicate String

Predicate Strings do iOS são rápidos e poderosos para automação iOS.

# Por Label
-ios predicate string:label == "Login"

# Por Label Parcial
-ios predicate string:label CONTAINS "Log"

# Por Nome
-ios predicate string:name == "loginButton"

# Por Tipo
-ios predicate string:type == "XCUIElementTypeButton"

# Por Valor
-ios predicate string:value == "ON"

# Condições Combinadas
-ios predicate string:type == "XCUIElementTypeButton" AND label == "Login"

# Visibilidade
-ios predicate string:label == "Login" AND visible == 1

# Insensível a Maiúsculas
-ios predicate string:label ==[c] "login"

Operadores de Predicate:

OperadorDescrição
==Igual
!=Diferente
CONTAINSContém substring
BEGINSWITHComeça com
ENDSWITHTermina com
LIKECorrespondência com curinga
MATCHESCorrespondência com regex
ANDE lógico
OROU lógico

Class Chain

iOS Class Chains fornecem localização hierárquica de elementos com bom desempenho.

# Filho Direto
-ios class chain:**/XCUIElementTypeButton[`label == "Login"`]

# Qualquer Descendente
-ios class chain:**/XCUIElementTypeButton

# Por Índice
-ios class chain:**/XCUIElementTypeCell[3]

# Combinado com Predicate
-ios class chain:**/XCUIElementTypeButton[`name == "submit" AND visible == 1`]

# Hierárquico
-ios class chain:**/XCUIElementTypeTable/XCUIElementTypeCell[`label == "Settings"`]

# Último Elemento
-ios class chain:**/XCUIElementTypeButton[-1]

XPath (iOS)

XPath funciona no iOS, mas é mais lento que predicate strings.

# Por Tipo e Label
//XCUIElementTypeButton[@label='Login']

# Por Nome
//XCUIElementTypeTextField[@name='username']

# Por Valor
//XCUIElementTypeSwitch[@value='1']

# Hierárquico
//XCUIElementTypeTable/XCUIElementTypeCell[1]

Estratégia de Seletor Multiplataforma

Ao escrever testes que precisam funcionar tanto em iOS quanto em Android, use esta ordem de prioridade:

1. Accessibility ID (Melhor)

# Funciona em ambas plataformas
~loginButton

2. Específico da Plataforma com Lógica Condicional

Quando accessibility IDs não estão disponíveis, use seletores específicos da plataforma:

Android:

android=new UiSelector().text("Login")

iOS:

-ios predicate string:label == "Login"

3. XPath (Último Recurso)

XPath funciona em ambas as plataformas, mas com diferentes tipos de elementos:

Android:

//android.widget.Button[@text='Login']

iOS:

//XCUIElementTypeButton[@label='Login']

Referência de Tipos de Elementos

Tipos de Elementos Android

TipoDescrição
android.widget.ButtonBotão
android.widget.EditTextEntrada de texto
android.widget.TextViewRótulo de texto
android.widget.ImageViewImagem
android.widget.ImageButtonBotão de imagem
android.widget.CheckBoxCaixa de seleção
android.widget.RadioButtonBotão de rádio
android.widget.SwitchInterruptor
android.widget.SpinnerMenu suspenso
android.widget.ListViewVisualização de lista
android.widget.RecyclerViewVisualização reciclável
android.widget.ScrollViewContainer de rolagem

Tipos de Elementos iOS

TipoDescrição
XCUIElementTypeButtonBotão
XCUIElementTypeTextFieldEntrada de texto
XCUIElementTypeSecureTextFieldEntrada de senha
XCUIElementTypeStaticTextRótulo de texto
XCUIElementTypeImageImagem
XCUIElementTypeSwitchInterruptor
XCUIElementTypeSliderControle deslizante
XCUIElementTypePickerRoda seletora
XCUIElementTypeTableVisualização de tabela
XCUIElementTypeCellCélula de tabela
XCUIElementTypeCollectionViewVisualização de coleção
XCUIElementTypeScrollViewVisualização de rolagem

Melhores Práticas

Faça

  • Use accessibility IDs para seletores estáveis e multiplataforma
  • Adicione atributos data-testid a elementos web para testes
  • Use resource IDs no Android quando accessibility IDs não estiverem disponíveis
  • Prefira predicate strings em vez de XPath no iOS
  • Mantenha os seletores simples e específicos

Não Faça

  • Evite expressões XPath longas - são lentas e frágeis
  • Não confie em índices para listas dinâmicas
  • Evite seletores baseados em texto para aplicativos localizados
  • Não use XPath absoluto (começando da raiz)

Exemplos de Bons vs Maus Seletores

# Bom - ID de acessibilidade estável
~loginButton

# Mau - XPath frágil com índices
//div[3]/form/button[2]

# Bom - CSS específico com ID de teste
[data-testid="submit-button"]

# Mau - Classe que pode mudar
.btn-primary-lg-v2

# Bom - UiAutomator com resource ID
android=new UiSelector().resourceId("com.app:id/submit")

# Mau - Texto que pode ser localizado
android=new UiSelector().text("Submit")

Depurando Seletores

Web (Chrome DevTools)

  1. Abra o Chrome DevTools (F12)
  2. Use o painel Elements para inspecionar elementos
  3. Clique com o botão direito em um elemento → Copiar → Copiar seletor
  4. Teste seletores no Console: document.querySelector('seu-seletor')

Mobile (Appium Inspector)

  1. Inicie o Appium Inspector
  2. Conecte-se à sua sessão em execução
  3. Clique nos elementos para ver todos os atributos disponíveis
  4. Use o recurso "Buscar elemento" para testar seletores

Usando get_visible_elements

A ferramenta get_visible_elements do servidor MCP retorna múltiplas estratégias de seletor para cada elemento:

Pergunte ao Claude: "Obtenha todos os elementos visíveis na tela"

Isso retorna elementos com seletores pré-gerados que você pode usar diretamente.

Opções Avançadas

Para mais controle sobre a descoberta de elementos:

# Obter apenas imagens e elementos visuais
Obtenha elementos visíveis com elementType "visual"

# Obter elementos com suas coordenadas para depuração de layout
Obtenha elementos visíveis com includeBounds ativado

# Obter os próximos 20 elementos (paginação)
Obtenha elementos visíveis com limite 20 e offset 20

# Incluir contêineres de layout para depuração
Obtenha elementos visíveis com includeContainers ativado

A ferramenta retorna uma resposta paginada:

{
"total": 42,
"showing": 20,
"hasMore": true,
"elements": [...]
}

Usando get_accessibility (Apenas Navegador)

Para automação de navegador, a ferramenta get_accessibility fornece informações semânticas sobre elementos da página:

# Obter todos os nós de acessibilidade nomeados
Obtenha a árvore de acessibilidade

# Filtrar apenas para botões e links
Obtenha a árvore de acessibilidade filtrada para funções de botão e link

# Obter próxima página de resultados
Obtenha a árvore de acessibilidade com limite 50 e offset 50

Isso é útil quando get_visible_elements não retorna os elementos esperados, pois consulta a API de acessibilidade nativa do navegador.

Welcome! How can I help?

WebdriverIO AI Copilot