Playwright click: установить библиотеку и нажать кнопку
click() — действие Playwright, а не отдельный пакет. Оно находит элемент страницы и выполняет клик в браузере. Ниже используется библиотека playwright для Node.js: самостоятельный скрипт запускает Chromium, создаёт контекст и страницу, нажимает кнопку и проверяет результат.
Какие задачи решает клик
- Проверка кнопок и ссылок через обычное взаимодействие со страницей.
- Повторение сценария в Chromium, Firefox или WebKit. WebKit в Playwright не означает запуск установленного Safari; Google Chrome также выбирают отдельно от комплектного Chromium.
- Ожидание готовности элемента: перед обычным locator.click проверяются единственность цели, видимость, стабильность, возможность получать события и отсутствие disabled-состояния.
Для флажка обычно лучше check()/uncheck() или setChecked(), чтобы задать нужное состояние, а не слепо переключать его. Автоматизация не гарантирует правильность приложения: после действия проверяют наблюдаемый результат.
Пример использования
Шаг 1. Установить библиотеку
В отдельном Node.js-проекте с package.json выполните:
npm install playwrightДля полноценного набора тестов с фикстурами и повторяющимися проверками рассмотрите @playwright/test. Это другой способ запуска; самостоятельный скрипт ниже не запускается командой playwright test.
Шаг 2. Установить браузер
npx playwright install chromiumВерсии браузерных бинарников связаны с версией Playwright. После обновления пакета может потребоваться повторная установка. Наличие npm-пакета само по себе не доказывает наличие подходящего браузера и системных зависимостей.
Шаг 3. Найти кнопку и выполнить клик
Сохраните код в click-demo.cjs. Расширение cjs явно выбирает CommonJS для require. В примере страница создаётся через setContent, поэтому кнопка действительно существует и внешнего сайта для демонстрации не нужно.
const { chromium } = require('playwright');
(async () => {
const browser = await chromium.launch();
try {
const context = await browser.newContext();
const page = await context.newPage();
await page.setContent(`
<button id="submit" type="button">Сохранить</button>
<p id="result" role="status"></p>
<script>
document.querySelector('#submit').addEventListener('click', () => {
document.querySelector('#result').textContent = 'Сохранено';
});
</script>
`);
await page.locator('button#submit').click();
await page.getByRole('status').filter({
hasText: 'Сохранено'
}).waitFor();
console.log(await page.getByRole('status').textContent());
await context.close();
} finally {
await browser.close();
}
})().catch(error => {
console.error(error);
process.exitCode = 1;
});node click-demo.cjsОжидаемый вывод — «Сохранено». В скрипте сохранены отдельные browser, context и page. В реальном приложении замените setContent на await page.goto('URL_ВАШЕГО_ТЕСТОВОГО_ПРИЛОЖЕНИЯ'), а селектор и проверку — на соответствующие его интерфейсу. Открытие example.com само по себе не создаёт там кнопку submit.
Если клик не сработал
- Проверьте, что locator выбирает ровно нужный элемент. Для доступной кнопки можно использовать getByRole('button', { name: 'Сохранить', exact: true }).
- Проверьте, не перекрыта ли цель диалогом, не отключена ли она и не продолжается ли анимация. Не обходите причину через force без понимания результата.
- Если кнопка внутри iframe, начните поиск в нужном frameLocator.
- Ожидайте конкретного состояния после действия. Фиксированная пауза не доказывает завершение запроса, а успешный click не доказывает сохранение данных на сервере.