Glossário · Automação de UI
Auto-waiting (espera automática)
Em inglês: Auto-waiting
Também chamado de: auto-wait, espera automática, actionability checks, verificações de acionabilidade
Definição
Recurso do framework que espera o elemento ficar pronto (visível, estável e habilitado) antes de interagir com ele, em vez de depender de sleeps fixos.
Auto-waiting (espera automática) significa que o framework de automação verifica se um elemento está pronto antes de executar uma ação e continua tentando até que esteja ou até que um timeout expire. Playwright e Cypress já trazem isso embutido. No Playwright, click() espera o elemento estar anexado ao DOM, visível, estável (sem animação), apto a receber eventos (não coberto por outro elemento) e habilitado. Você escreve a ação; o framework cuida do timing.
Exemplo
import { test, expect } from '@playwright/test';
test('saves the profile', async ({ page }) => {
await page.goto('/profile');
await page.getByLabel('Display name').fill('Ada');
// Waits until the button is visible, stable, enabled and not covered
await page.getByRole('button', { name: 'Save' }).click();
// Retries until the toast appears or the expect timeout is reached
await expect(page.getByRole('status')).toHaveText('Profile saved');
});
Não há nenhum waitForTimeout. Se o botão de salvar ficar desabilitado por um instante enquanto o formulário é validado, o clique espera em vez de falhar.
Diferença em relação às esperas explícitas e implícitas
O Selenium WebDriver não faz auto-waiting antes das ações. Você configura uma espera implícita, que só afeta quanto tempo o findElement fica consultando até o elemento existir, ou escreve uma espera explícita com WebDriverWait e uma condição de ExpectedConditions, como elementToBeClickable. O auto-waiting se parece mais com uma espera explícita que o framework escreve para você em cada ação, com verificações escolhidas para aquela ação: fill(), por exemplo, também exige que o elemento seja editável.
Limitações
- Ele espera pelo elemento, não pelo estado do negócio. Se o botão já está clicável antes de os dados que ele envia terem carregado, o auto-waiting não vai te salvar. Faça primeiro uma asserção sobre o estado de que você precisa.
- Não se aplica a valores lidos uma única vez.
await locator.textContent()retorna o que estiver lá naquele momento. Para esperar por um texto, use uma web-first assertion comotoHaveText. - Pode esconder lentidão. Um passo que sempre consome quase todo o timeout passa, mas é um sinal de performance que vale investigar no trace.
force: truepula as verificações. Às vezes é necessário para controles customizados, mas geralmente está mascarando um problema real.