Примечания к выпуску
Версия 1.51
Основные моменты
-
Новая опция indexed_db для browser_context.storage_state() позволяет сохранять и восстанавливать содержимое IndexedDB. Полезно, когда ваше приложение использует IndexedDB API для хранения токенов аутентификации, таких как Firebase Authentication.
Вот пример, следующий руководству по аутентификации:
# Сохраните состояние хранилища в файл. Убедитесь, что IndexedDB включен.
storage = await context.storage_state(path="state.json", indexed_db=True)
# Создайте новый контекст с сохраненным состоянием хранилища.
context = await browser.new_context(storage_state="state.json") -
Новая опция visible для locator.filter() позволяет сопоставлять только видимые элементы.
# Игнорируйте невидимые элементы списка дел.
todo_items = page.get_by_test_id("todo-item").filter(visible=True)
# Проверьте, что их ровно 3 видимых.
await expect(todo_items).to_have_count(3) -
Новая опция
contrast
для методов page.emulate_media() и browser.new_context() позволяет эмулировать медиа-функциюprefers-contrast
. -
Новая опция fail_on_status_code заставляет все запросы fetch, сделанные через APIRequestContext, выбрасывать исключение на коды ответов, отличные от 2xx и 3xx.
Версии браузеров
- Chromium 134.0.6998.35
- Mozilla Firefox 135.0
- WebKit 18.4
Эта версия также была протестирована на следующих стабильных каналах:
- Google Chrome 133
- Microsoft Edge 133
Версия 1.50
Плагин Async Pytest
- Плагин Pytest для Playwright теперь поддерживает асинхронные фикстуры.
Разное
- Добавлен метод expect(locator).to_have_accessible_error_message() для утверждения, что локатор указывает на элемент с заданным aria errormessage.
Обновления UI
- Новая кнопка в Codegen для выбора элементов для создания снимков aria.
- Дополнительные детали (например, нажатые клавиши) теперь отображаются вместе с вызовами API действий в трассах.
- Отображение содержимого
canvas
в трассах подвержено ошибкам. Отображение теперь отключено по умолчанию и может быть включено через настройку UIDisplay canvas content
. - Панели
Call
иNetwork
теперь отображают дополнительную информацию о времени.
Изменения
- expect(locator).to_be_editable() и locator.is_editable() теперь выбрасывают исключение, если целевой элемент не является
<input>
,<select>
или другим редактируемым элементом.
Версии браузеров
- Chromium 133.0.6943.16
- Mozilla Firefox 134.0
- WebKit 18.2
Эта версия также была протестирована на следующих стабильных каналах:
- Google Chrome 132
- Microsoft Edge 132
Версия 1.49
Снимки Aria
Новое утверждение expect(locator).to_match_aria_snapshot() проверяет структуру страницы, сравнивая с ожидаемым деревом доступности, представленным в формате YAML.
page.goto("https://playwright.dev")
expect(page.locator('body')).to_match_aria_snapshot('''
- banner:
- heading /Playwright enables reliable/ [level=1]
- link "Get started"
- link "Star microsoft/playwright on GitHub"
- main:
- img "Browsers (Chromium, Firefox, WebKit)"
- heading "Any browser • Any platform • One API"
''')
Вы можете сгенерировать это утверждение с помощью Генератора тестов или вызвав locator.aria_snapshot().
Узнайте больше в руководстве по снимкам aria.
Группы трассировки
Новый метод tracing.group() позволяет визуально группировать действия в просмотрщике трассировки.
# Все действия между group и group_end
# будут показаны в просмотрщике трассировки как группа.
page.context.tracing.group("Open Playwright.dev > API")
page.goto("https://playwright.dev/")
page.get_by_role("link", name="API").click()
page.context.tracing.group_end()
Изменения: каналы chrome
и msedge
переключаются на новый режим без головы
Это изменение затрагивает вас, если вы используете один из следующих каналов в вашем playwright.config.ts
:
chrome
,chrome-dev
,chrome-beta
илиchrome-canary
msedge
,msedge-dev
,msedge-beta
илиmsedge-canary
После обновления до Playwright v1.49 запустите ваш тестовый набор. Если он все еще проходит, вы в порядке. Если нет, вам, вероятно, потребуется обновить ваши снимки и адаптировать часть вашего тестового кода вокруг просмотрщиков PDF и расширений. См. вопрос #33566 для получения более подробной информации.
Попробуйте новый режим без головы в Chromium
Вы можете включить новый режим без головы, используя канал 'chromium'
. Как говорится в официальной документации Chrome:
Новый Headless, с другой стороны, это настоящий браузер Chrome, и поэтому он более аутентичен, надежен и предлагает больше функций. Это делает его более подходящим для высокоточных тестов веб-приложений от начала до конца или тестирования расширений браузера.
См. вопрос #33566 для списка возможных нарушений, с которыми вы можете столкнуться, и более подробной информации о Chromium headless. Пожалуйста, создайте вопрос, если вы заметите какие-либо проблемы после включения.
pytest test_login.py --browser-channel chromium
Разное
- Больше не будет обновлений для WebKit на Ubuntu 20.04 и Debian 11. Мы рекомендуем обновить вашу ОС до более поздней версии.
- Элементы
<canvas>
внутри снимка теперь рисуют предварительный просмотр. - Python 3.8 больше не поддерживается.
Версии браузеров
- Chromium 131.0.6778.33
- Mozilla Firefox 132.0
- WebKit 18.2
Эта версия также была протестирована на следующих стабильных каналах:
- Google Chrome 130
- Microsoft Edge 130
Версия 1.48
Маршрутизация WebSocket
Новые методы page.route_web_socket() и browser_context.route_web_socket() позволяют перехватывать, изменять и имитировать соединения WebSocket, инициированные на странице. Ниже приведен простой пример, который имитирует общение по WebSocket, отвечая на "request"
с "response"
.
def message_handler(ws: WebSocketRoute, message: Union[str, bytes]):
if message == "request":
ws.send("response")
page.route_web_socket("/ws", lambda ws: ws.on_message(
lambda message: message_handler(ws, message)
))
См. WebSocketRoute для получения более подробной информации.
Обновления UI
- Новые кнопки "копировать" для аннотаций и местоположения теста в HTML-отчете.
- Вызовы методов маршрутизации, таких как route.fulfill(), больше не отображаются в отчете и просмотрщике трассировки. Вы можете увидеть, какие сетевые запросы были маршрутизированы, на вкладке сети.
- Новые кнопки "Копировать как cURL" и "Копировать как fetch" для запросов на вкладке сети.
Разное
- Новый метод page.request_gc() может помочь обнаружить утечки памяти.
- Запросы, сделанные APIRequestContext, теперь записывают подробную информацию о времени и безопасности в HAR.
Версии браузеров
- Chromium 130.0.6723.19
- Mozilla Firefox 130.0
- WebKit 18.0
Эта версия также была протестирована на следующих стабильных каналах:
- Google Chrome 129
- Microsoft Edge 129
Версия 1.47
Улучшения вкладки сети
Вкладка сети в просмотрщике трассировки получила несколько приятных улучшений:
- фильтрация по типу ресурса и URL
- лучшее отображение параметров строки запроса
- предварительный просмотр шрифтовых ресурсов
Разное
mcr.microsoft.com/playwright/python:v1.47.0
теперь предоставляет образ Playwright на основе Ubuntu 24.04 Noble. Чтобы использовать образ на основе 22.04 jammy, используйтеmcr.microsoft.com/playwright/python:v1.47.0-jammy
.- Теги
:latest
/:focal
/:jammy
для образов Playwright Docker больше не публикуются. Закрепите на конкретной версии для лучшей стабильности и воспроизводимости. - Клиентские сертификаты TLS теперь могут передаваться из памяти, передавая client_certificates.cert и client_certificates.key в виде байтов, а не путей к файлам.
- no_wait_after в locator.select_option() был устаревшим.
- Мы видели сообщения о неправильной работе WebGL в Webkit на GitHub Actions
macos-13
. Мы рекомендуем обновить GitHub Actions доmacos-14
.
Версии браузеров
- Chromium 129.0.6668.29
- Mozilla Firefox 130.0
- WebKit 18.0
Эта версия также была протестирована на следующих стабильных каналах:
- Google Chrome 128
- Microsoft Edge 128
Версия 1.46
Клиентские сертификаты TLS
Playwright теперь позволяет предоставлять клиентские сертификаты, чтобы сервер мог их проверить, как указано в аутентификации клиента TLS.
Вы можете предоставить клиентские сертификаты в качестве параметра browser.new_context() и api_request.new_context(). Следующий фрагмент кода настраивает клиентский сертификат для https://example.com
:
context = browser.new_context(
client_certificates=[
{
"origin": "https://example.com",
"certPath": "client-certificates/cert.pem",
"keyPath": "client-certificates/key.pem",
}
],
)
Обновления просмотрщика трассировки
- Содержимое текстовых вложений теперь отображается в строке в панели вложений.
- Новая настройка для отображения/скрытия действий маршрутизации, таких как route.continue_().
- Метод запроса и статус отображаются на вкладке сетевых деталей.
- Новая кнопка для копирования местоположения исходного файла в буфер обмена.
- Панель метаданных теперь отображает
base_url
.
Разное
- Новая опция
maxRetries
в api_request_context.fetch(), которая повторяет попытки при сетевой ошибкеECONNRESET
.
Версии браузеров
- Chromium 128.0.6613.18
- Mozilla Firefox 128.0
- WebKit 18.0
Эта версия также была протестирована на следующих стабильных каналах:
- Google Chrome 127
- Microsoft Edge 127
Версия 1.45
Часы
Использование нового API Clock позволяет манипулировать и контролировать время в тестах для проверки поведения, связанного со временем. Этот API охватывает многие распространенные сценарии, включая:
- тестирование с предопределенным временем;
- поддержание согласованного времени и таймеров;
- мониторинг бездействия;
- ручное продвижение времени.
# Инициализируйте часы с некоторым временем до тестового времени и позвольте странице загрузиться
# естественно. `Date.now` будет прогрессировать по мере срабатывания таймеров.
page.clock.install(time=datetime.datetime(2024, 2, 2, 8, 0, 0))
page.goto("http://localhost:3333")
# Притворитесь, что пользователь закрыл крышку ноутбука и снова открыл ее в 10 утра.
# Приостановите время, как только оно достигнет этой точки.
page.clock.pause_at(datetime.datetime(2024, 2, 2, 10, 0, 0))
# Утвердите состояние страницы.
expect(page.get_by_test_id("current-time")).to_have_text("2/2/2024, 10:00:00 AM")
# Снова закройте крышку ноутбука и откройте ее в 10:30 утра.
page.clock.fast_forward("30:00")
expect(page.get_by_test_id("current-time")).to_have_text("2/2/2024, 10:30:00 AM")
См. руководство по часам для получения более подробной информации.
Разное
-
Метод locator.set_input_files() теперь поддерживает загрузку каталога для элементов
<input type=file webkitdirectory>
.page.get_by_label("Upload directory").set_input_files('mydir')
-
Несколько методов, таких как locator.click() или locator.press(), теперь поддерживают модификаторную клавишу
ControlOrMeta
. Эта клавиша отображается какMeta
на macOS и какControl
на Windows и Linux.# Нажмите общую комбинацию клавиш Control+S или Meta+S, чтобы вызвать операцию "Сохранить".
page.keyboard.press("ControlOrMeta+S") -
Новое свойство
httpCredentials.send
в api_request.new_context(), которое позволяет либо всегда отправлять заголовокAuthorization
, либо отправлять его только в ответ на401 Unauthorized
. -
Playwright теперь поддерживает Chromium, Firefox и WebKit на Ubuntu 24.04.
-
v1.45 - это последний выпуск, который получит обновление WebKit для macOS 12 Monterey. Пожалуйста, обновите macOS, чтобы продолжать использовать последний WebKit.
Версии браузеров
- Chromium 127.0.6533.5
- Mozilla Firefox 127.0
- WebKit 17.4
Эта версия также была протестирована на следующих стабильных каналах:
- Google Chrome 126
- Microsoft Edge 126
Версия 1.44
Новые API
Утверждения доступности
-
expect(locator).to_have_accessible_name() проверяет, имеет ли элемент указанное доступное имя:
locator = page.get_by_role("button")
expect(locator).to_have_accessible_name("Submit") -
expect(locator).to_have_accessible_description() проверяет, имеет ли элемент указанное доступное описание:
locator = page.get_by_role("button")
expect(locator).to_have_accessible_description("Upload a photo") -
expect(locator).to_have_role() проверяет, имеет ли элемент указанную роль ARIA:
locator = page.get_by_test_id("save-button")
expect(locator).to_have_role("button")
Обработчик локатора
- После выполнения обработчика, добавленного с помощью page.add_locator_handler(), Playwright теперь будет ждать, пока оверлей, который вызвал обработчик, больше не будет виден. Вы можете отказаться от этого поведения с помощью новой опции
no_wait_after
. - Вы можете использовать новую опцию
times
в page.add_locator_handler(), чтобы указать максимальное количество раз, которое обработчик должен быть выполнен. - Обработчик в page.add_locator_handler() теперь принимает локатор в качестве аргумента.
- Новый метод page.remove_locator_handler() для удаления ранее добавленных обработчиков локаторов.
locator = page.get_by_text("This interstitial covers the button")
page.add_locator_handler(locator, lambda overlay: overlay.locator("#close").click(), times=3, no_wait_after=True)
# Запустите ваши тесты, которые могут быть прерваны оверлеем.
# ...
page.remove_locator_handler(locator)
Разные опции
- expect(page).to_have_url() теперь поддерживает опцию
ignore_case
.
Версии браузеров
- Chromium 125.0.6422.14
- Mozilla Firefox 125.0.1
- WebKit 17.4
Эта версия также была протестирована на следующих стабильных каналах:
- Google Chrome 124
- Microsoft Edge 124
Версия 1.43
Новые API
-
Метод browser_context.clear_cookies() теперь поддерживает фильтры для удаления только некоторых файлов cookie.
# Очистить все файлы cookie.
context.clear_cookies()
# Новое: очистить файлы cookie с определенным именем.
context.clear_cookies(name="session-id")
# Новое: очистить файлы cookie для определенного домена.
context.clear_cookies(domain="my-origin.com") -
Новый метод locator.content_frame преобразует объект Locator в FrameLocator. Это может быть полезно, когда у вас есть объект Locator, полученный где-то, и позже вы хотите взаимодействовать с содержимым внутри фрейма.
locator = page.locator("iframe[name='embedded']")
# ...
frame_locator = locator.content_frame
frame_locator.getByRole("button").click() -
Новый метод frame_locator.owner преобразует объект FrameLocator в Locator. Это может быть полезно, когда у вас есть объект FrameLocator, полученный где-то, и позже вы хотите взаимодействовать с элементом
iframe
.frame_locator = page.frame_locator("iframe[name='embedded']")
# ...
locator = frame_locator.owner
expect(locator).to_be_visible() -
Сборки Conda теперь публикуются для macOS-arm64 и Linux-arm64.
Версии браузеров
- Chromium 124.0.6367.8
- Mozilla Firefox 124.0
- WebKit 17.4
Эта версия также была протестирована на следующих стабильных каналах:
- Google Chrome 123
- Microsoft Edge 123
Версия 1.42
Новый обработчик локаторов
Новый метод page.add_locator_handler() регистрирует обратный вызов, который будет вызван, когда указанный элемент станет видимым и может блокировать действия Playwright. Обратный вызов может избавиться от оверлея. Вот пример, который закрывает диалоговое окно cookie, когда оно появляется.
# Настройте обработчик.
page.add_locator_handler(
page.get_by_role("heading", name="Hej! You are in control of your cookies."),
lambda: page.get_by_role("button", name="Accept all").click(),
)
# Напишите тест как обычно.
page.goto("https://www.ikea.com/")
page.get_by_role("link", name="Collection of blue and white").click()
expect(page.get_by_role("heading", name="Light and easy")).to_be_visible()
Новые API
- page.pdf() принимает две новые опции tagged и outline.
Объявления
- ⚠️ Ubuntu 18 больше не поддерживается.
Версии браузеров
- Chromium 123.0.6312.4
- Mozilla Firefox 123.0
- WebKit 17.4
Эта версия также была протестирована на следующих стабильных каналах:
- Google Chrome 122
- Microsoft Edge 123
Версия 1.41
Новые API
- Новый метод page.unroute_all() удаляет все маршруты, зарегистрированные с помощью page.route() и page.route_from_har(). Опционально позволяет дождаться завершения текущих маршрутов или игнорировать любые ошибки от них.
- Новый метод browser_context.unroute_all() удаляет все маршруты, зарегистрированные с помощью browser_context.route() и browser_context.route_from_har(). Опционально позволяет дождаться завершения текущих маршрутов или игнорировать любые ошибки от них.
- Новые опции style в page.screenshot() и style в locator.screenshot() для добавления пользовательского CSS на страницу перед созданием снимка экрана.
Версии браузеров
- Chromium 121.0.6167.57
- Mozilla Firefox 121.0
- WebKit 17.4
Эта версия также была протестирована на следующих стабильных каналах:
- Google Chrome 120
- Microsoft Edge 120
Версия 1.40
Обновление генератора тестов
Новые инструменты для генерации утверждений:
- Инструмент "Assert visibility" генерирует expect(locator).to_be_visible().
- Инструмент "Assert value" генерирует expect(locator).to_have_value().
- Инструмент "Assert text" генерирует expect(locator).to_contain_text().
Вот пример сгенерированного теста с утверждениями:
from playwright.sync_api import Page, expect
def test_example(page: Page) -> None:
page.goto("https://playwright.dev/")
page.get_by_role("link", name="Get started").click()
expect(page.get_by_label("Breadcrumbs").get_by_role("list")).to_contain_text("Installation")
expect(page.get_by_label("Search")).to_be_visible()
page.get_by_label("Search").click()
page.get_by_placeholder("Search docs").fill("locator")
expect(page.get_by_placeholder("Search docs")).to_have_value("locator");
Новые API
- Опции reason в page.close(), reason в browser_context.close() и reason в browser.close(). Причина закрытия сообщается для всех операций, прерванных закрытием.
- Опция firefox_user_prefs в browser_type.launch_persistent_context().
Другие изменения
- Метод download.path() выбрасывает ошибку для неудачных и отмененных загрузок.
Версии браузеров
- Chromium 120.0.6099.28
- Mozilla Firefox 119.0
- WebKit 17.4
Эта версия также была протестирована на следующих стабильных каналах:
- Google Chrome 119
- Microsoft Edge 119
Версия 1.39
Обновление evergreen браузеров.
Версии браузеров
- Chromium 119.0.6045.9
- Mozilla Firefox 118.0.1
- WebKit 17.4
Эта версия также была протестирована на следующих стабильных каналах:
- Google Chrome 118
- Microsoft Edge 118
Версия 1.38
Обновления просмотрщика трассировки
- Увеличение диапазона времени.
- Переработка панели сети.
Новые API
Устаревшие
- Следующие методы были устаревшими: page.type(), frame.type(), locator.type() и element_handle.type(). Пожалуйста, используйте locator.fill() вместо них, так как это гораздо быстрее. Используйте locator.press_sequentially() только если на странице есть специальная обработка клавиатуры, и вам нужно нажимать клавиши по одной.
Версии браузеров
- Chromium 117.0.5938.62
- Mozilla Firefox 117.0
- WebKit 17.0
Эта версия также была протестирована на следующих стабильных каналах:
- Google Chrome 116
- Microsoft Edge 116
Версия 1.37
Основные моменты
- Новый флаг командной строки --full-page-screenshot позволяет делать скриншот всей страницы при сбое.
- Теперь можно переопределить параметры контекста для одного теста, используя маркер browser_context_args.
pytest-playwright
теперь также публикуется на Anaconda.
📚 Поддержка Debian 12 Bookworm
Playwright теперь поддерживает Debian 12 Bookworm на x86_64 и arm64 для Chromium, Firefox и WebKit. Сообщите нам, если у вас возникнут какие-либо проблемы!
Поддержка Linux выглядит следующим образом:
Ubuntu 20.04 | Ubuntu 22.04 | Debian 11 | Debian 12 | |
---|---|---|---|---|
Chromium | ✅ | ✅ | ✅ | ✅ |
WebKit | ✅ | ✅ | ✅ | ✅ |
Firefox | ✅ | ✅ | ✅ | ✅ |
Версии браузеров
- Chromium 116.0.5845.82
- Mozilla Firefox 115.0
- WebKit 17.0
Эта версия также была протестирована на следующих стабильных каналах:
- Google Chrome 115
- Microsoft Edge 115
Версия 1.36
🏝️ Летний выпуск по техническому обслуживанию.
Версии браузеров
- Chromium 115.0.5790.75
- Mozilla Firefox 115.0
- WebKit 17.0
Эта версия также была протестирована на следующих стабильных каналах:
- Google Chrome 114
- Microsoft Edge 114
Версия 1.35
Основные моменты
-
Новая опция
mask_color
для методов page.screenshot() и locator.screenshot() для изменения цвета маски по умолчанию. -
Новая команда CLI
uninstall
для удаления бинарных файлов браузера:$ playwright uninstall # удалить браузеры, установленные этой установкой
$ playwright uninstall --all # удалить все когда-либо установленные браузеры Playwright
Версии браузеров
- Chromium 115.0.5790.13
- Mozilla Firefox 113.0
- WebKit 16.4
Эта версия также была протестирована на следующих стабильных каналах:
- Google Chrome 114
- Microsoft Edge 114
Версия 1.34
Основные моменты
-
Новый locator.and_() для создания локатора, который соответствует обоим локаторам.
button = page.get_by_role("button").and_(page.get_by_title("Subscribe"))
-
Новые события browser_context.on("console") и browser_context.on("dialog") для подписки на любые диалоги и сообщения консоли с любой страницы из данного контекста браузера. Используйте новые методы console_message.page и dialog.page для определения источника события.
Версии браузеров
- Chromium 114.0.5735.26
- Mozilla Firefox 113.0
- WebKit 16.4
Эта версия также была протестирована на следующих стабильных каналах:
- Google Chrome 113
- Microsoft Edge 113
Версия 1.33
Обновление локаторов
-
Используйте locator.or_() для создания локатора, который соответствует любому из двух локаторов. Рассмотрите сценарий, когда вы хотите нажать на кнопку "Новое письмо", но иногда вместо этого появляется диалоговое окно настроек безопасности. В этом случае вы можете ожидать либо кнопку "Новое письмо", либо диалог и действовать соответственно:
new_email = page.get_by_role("button", name="New email")
dialog = page.get_by_text("Confirm security settings")
expect(new_email.or_(dialog)).is_visible()
if (dialog.is_visible()):
page.get_by_role("button", name="Dismiss").click()
new_email.click() -
Используйте новые опции has_not и has_not_text в locator.filter() для поиска элементов, которые не соответствуют определенным условиям.
row_locator = page.locator("tr")
row_locator.filter(has_not_text="text in column 1").filter(
has_not=page.get_by_role("button", name="column 2 button")
).screenshot() -
Используйте новое утверждение web-first expect(locator).to_be_attached() для обеспечения того, что элемент присутствует в DOM страницы. Не путайте с expect(locator).to_be_visible(), которое гарантирует, что элемент как прикреплен, так и видим.
Новые API
- locator.or_()
- Новая опция has_not в locator.filter()
- Новая опция has_not_text в locator.filter()
- expect(locator).to_be_attached()
- Новая опция timeout в route.fetch()
⚠️ Изменение, нарушающее совместимость
mcr.microsoft.com/playwright/python:v1.33.0
теперь предоставляет образ Playwright на основе Ubuntu Jammy. Чтобы использовать образ на основе focal, используйтеmcr.microsoft.com/playwright/python:v1.33.0-focal
.
Версии браузеров
- Chromium 113.0.5672.53
- Mozilla Firefox 112.0
- WebKit 16.4
Эта версия также была протестирована на следующих стабильных каналах:
- Google Chrome 112
- Microsoft Edge 112
Версия 1.32
Новые API
- Пользовательское сообщение ожидания, см. документацию по тестовым утверждениям.
- Новые опции update_mode и update_content в page.route_from_har() и browser_context.route_from_har().
- Цепочка существующих объектов локаторов, см. документацию по локаторам для подробностей.
- Новая опция name в методе tracing.start_chunk().
Версии браузеров
- Chromium 112.0.5615.29
- Mozilla Firefox 111.0
- WebKit 16.4
Эта версия также была протестирована на следующих стабильных каналах:
- Google Chrome 111
- Microsoft Edge 111
Версия 1.31
Новые API
-
Новое утверждение expect(locator).to_be_in_viewport() гарантирует, что локатор указывает на элемент, который пересекает область просмотра, в соответствии с API наблюдателя пересечений.
from playwright.sync_api import expect
locator = page.get_by_role("button")
# Убедитесь, что хотя бы часть элемента пересекает область просмотра.
expect(locator).to_be_in_viewport()
# Убедитесь, что элемент полностью находится за пределами области просмотра.
expect(locator).not_to_be_in_viewport()
# Убедитесь, что хотя бы половина элемента пересекает область просмотра.
expect(locator).to_be_in_viewport(ratio=0.5)
Разное
- Снимки DOM в просмотрщике трассировок теперь можно открывать в отдельном окне.
- Новая опция max_redirects для метода route.fetch().
- Playwright теперь поддерживает Debian 11 arm64.
- Официальные docker-образы теперь включают Node 18 вместо Node 16.
Версии браузеров
- Chromium 111.0.5563.19
- Mozilla Firefox 109.0
- WebKit 16.4
Эта версия также была протестирована на следующих стабильных каналах:
- Google Chrome 110
- Microsoft Edge 110
Версия 1.30
Версии браузеров
- Chromium 110.0.5481.38
- Mozilla Firefox 108.0.2
- WebKit 16.4
Эта версия также была протестирована на следующих стабильных каналах:
- Google Chrome 109
- Microsoft Edge 109
Версия 1.29
Новые API
-
Новый метод route.fetch() и новая опция
json
для route.fulfill():def handle_route(route: Route):
# Получить оригинальные настройки.
response = route.fetch()
# Установить тему настроек на предопределенное значение.
json = response.json()
json["theme"] = "Solorized"
# Выполнить с измененными данными.
route.fulfill(json=json)
page.route("**/api/settings", handle_route) -
Новый метод locator.all() для итерации по всем соответствующим элементам:
# Отметить все флажки!
checkboxes = page.get_by_role("checkbox")
for checkbox in checkboxes.all():
checkbox.check() -
locator.select_option() теперь соответствует по значению или метке:
<select multiple>
<option value="red">Red</option>
<option value="green">Green</option>
<option value="blue">Blue</option>
</select>element.select_option("Red")
Разное
- Опция
postData
в методе route.continue_() теперь поддерживает значения Serializable.
Версии браузеров
- Chromium 109.0.5414.46
- Mozilla Firefox 107.0
- WebKit 16.4
Эта версия также была протестирована на следующих стабильных каналах:
- Google Chrome 108
- Microsoft Edge 108
Версия 1.28
Инструменты Playwright
- Живые локаторы в CodeGen. Генерируйте локатор для любого элемента на странице, используя инструмент "Explore".
Новые API
Версии браузеров
- Chromium 108.0.5359.29
- Mozilla Firefox 106.0
- WebKit 16.4
Эта версия также была протестирована на следующих стабильных каналах:
- Google Chrome 107
- Microsoft Edge 107
Версия 1.27
Локаторы
С этими новыми API написание локаторов становится удовольствием:
- page.get_by_text() для поиска по текстовому содержимому.
- page.get_by_role() для поиска по роли ARIA, атрибутам ARIA и доступному имени.
- page.get_by_label() для поиска элемента управления формой по тексту связанной метки.
- page.get_by_test_id() для поиска элемента на основе его атрибута
data-testid
(можно настроить другой атрибут). - page.get_by_placeholder() для поиска ввода по заполнителю.
- page.get_by_alt_text() для поиска элемента, обычно изображения, по его текстовой альтернативе.
- page.get_by_title() для поиска элемента по его заголовку.
page.get_by_label("User Name").fill("John")
page.get_by_label("Password").fill("secret-password")
page.get_by_role("button", name="Sign in").click()
expect(page.get_by_text("Welcome, John!")).to_be_visible()
Все те же методы также доступны в классах Locator, FrameLocator и Frame.
Другие основные моменты
- Как было объявлено в версии 1.25, Ubuntu 18 не будет поддерживаться с декабря 2022 года. В дополнение к этому, не будет обновлений WebKit на Ubuntu 18, начиная со следующего выпуска Playwright.
Изменения в поведении
-
expect(locator).to_have_attribute() с пустым значением больше не соответствует отсутствующему атрибуту. Например, следующий фрагмент будет успешным, когда у
button
нет атрибутаdisabled
.expect(page.get_by_role("button")).to_have_attribute("disabled", "")
Версии браузеров
- Chromium 107.0.5304.18
- Mozilla Firefox 105.0.1
- WebKit 16.0
Эта версия также была протестирована на следующих стабильных каналах:
- Google Chrome 106
- Microsoft Edge 106
Версия 1.26
Утверждения
- Новая опция
enabled
для expect(locator).to_be_enabled(). - expect(locator).to_have_text() теперь проникает в открытые теневые корни.
- Новая опция
editable
для expect(locator).to_be_editable(). - Новая опция
visible
для expect(locator).to_be_visible().
Другие основные моменты
- Новая опция
max_redirects
для api_request_context.get() и других для ограничения количества перенаправлений. - Теперь поддерживается Python 3.11.
Изменение поведения
Множество API Playwright уже поддерживают опцию wait_until: "domcontentloaded"
. Например:
page.goto("https://playwright.dev", wait_until="domcontentloaded")
До версии 1.26 это ожидало, пока все фреймы не вызовут событие DOMContentLoaded
.
Чтобы соответствовать веб-спецификации, значение 'domcontentloaded'
теперь ждет только, пока целевой фрейм не вызовет событие 'DOMContentLoaded'
. Используйте wait_until="load"
, чтобы дождаться всех фреймов.
Версии браузеров
- Chromium 106.0.5249.30
- Mozilla Firefox 104.0
- WebKit 16.0
Эта версия также была протестирована на следующих стабильных каналах:
- Google Chrome 105
- Microsoft Edge 105
Версия 1.25
Объявления
- 🎁 Теперь мы поставляем образ Docker Ubuntu 22.04 Jammy Jellyfish:
mcr.microsoft.com/playwright/python:v1.34.0-jammy
. - 🪦 Это последний выпуск с поддержкой macOS 10.15 (устарела с версии 1.21).
- ⚠️ Ubuntu 18 теперь устарела и не будет поддерживаться с декабря 2022 года.
Версии браузеров
- Chromium 105.0.5195.19
- Mozilla Firefox 103.0
- WebKit 16.0
Эта версия также была протестирована на следующих стабильных каналах:
- Google Chrome 104
- Microsoft Edge 104
Версия 1.24
🐂 Поддержка Debian 11 Bullseye
Playwright теперь поддерживает Debian 11 Bullseye на x86_64 для Chromium, Firefox и WebKit. Сообщите нам, если у вас возникнут какие-либо проблемы!
Поддержка Linux выглядит следующим образом:
| | Ubuntu 20.04 | Ubuntu 22.04 | Debian 11 | :--- | :---: | :---: | :---: | :---: | | Chromium | ✅ | ✅ | ✅ | | WebKit | ✅ | ✅ | ✅ | | Firefox | ✅ | ✅ | ✅ |
Новые вводные документы
Мы переписали наши документы по началу работы, чтобы они были более ориентированы на тестирование end-to-end. Ознакомьтесь с ними на playwright.dev.
Версия 1.23
Воспроизведение сети
Теперь вы можете записывать сетевой трафик в файл HAR и повторно использовать этот трафик в ваших тестах.
Чтобы записать сеть в файл HAR:
npx playwright open --save-har=github.har.zip https://github.com/microsoft
Кроме того, вы можете записать HAR программно:
- Sync
- Async
context = browser.new_context(record_har_path="github.har.zip")
# ... делайте что-то ...
context.close()
context = await browser.new_context(record_har_path="github.har.zip")
# ... делайте что-то ...
await context.close()
Используйте новые методы page.route_from_har() или browser_context.route_from_har(), чтобы обслуживать соответствующие ответы из файла HAR:
- Sync
- Async
context.route_from_har("github.har.zip")
await context.route_from_har("github.har.zip")
Подробнее читайте в нашей документации.
Расширенная маршрутизация
Теперь вы можете использовать route.fallback() для передачи маршрутизации другим обработчикам.
Рассмотрите следующий пример:
- Sync
- Async
# Удалить заголовок из всех запросов
def remove_header_handler(route: Route) -> None:
headers = route.request.all_headers()
if "if-none-match" in headers:
del headers["if-none-match"]
route.fallback(headers=headers)
page.route("**/*", remove_header_handler)
# Прервать все изображения
def abort_images_handler(route: Route) -> None:
if route.request.resource_type == "image":
route.abort()
else:
route.fallback()
page.route("**/*", abort_images_handler)
# Удалить заголовок из всех запросов
async def remove_header_handler(route: Route) -> None:
headers = await route.request.all_headers()
if "if-none-match" in headers:
del headers["if-none-match"]
await route.fallback(headers=headers)
await page.route("**/*", remove_header_handler)
# Прервать все изображения
async def abort_images_handler(route: Route) -> None:
if route.request.resource_type == "image":
await route.abort()
else:
await route.fallback()
await page.route("**/*", abort_images_handler)
Обратите внимание, что новые методы page.route_from_har() и browser_context.route_from_har() также участвуют в маршрутизации и могут быть переданы.
Обновление web-first утверждений
- Новый метод expect(locator).to_have_values(), который утверждает все выбранные значения элемента
<select multiple>
. - Методы expect(locator).to_contain_text() и expect(locator).to_have_text() теперь принимают опцию
ignore_case
.
Разное
-
Если есть служебный работник, который мешает вам, теперь вы можете легко отключить его с помощью новой опции контекста
service_workers
:- Sync
- Async
context = browser.new_context(service_workers="block")
page = context.new_page()context = await browser.new_context(service_workers="block")
page = await context.new_page() -
Использование пути
.zip
для опции контекстаrecordHar
автоматически архивирует полученный HAR:- Sync
- Async
context = browser.new_context(record_har_path="github.har.zip")
context = await browser.new_context(record_har_path="github.har.zip")
-
Если вы собираетесь редактировать HAR вручную, рассмотрите возможность использования режима записи HAR
"minimal"
, который записывает только информацию, необходимую для воспроизведения:- Sync
- Async
context = browser.new_context(record_har_mode="minimal", record_har_path="har.har")
context = await browser.new_context(record_har_mode="minimal", record_har_path="har.har")
-
Playwright теперь работает на Ubuntu 22 amd64 и Ubuntu 22 arm64.
Версия 1.22
Основные моменты
-
Селекторы ролей, которые позволяют выбирать элементы по их ARIA роли, ARIA атрибутам и доступному имени.
# Нажмите кнопку с доступным именем "log in"
page.locator("role=button[name='log in']").click()Подробнее читайте в нашей документации.
-
Новый API locator.filter() для фильтрации существующего локатора
buttons = page.locator("role=button")
# ...
submit_button = buttons.filter(has_text="Submit")
submit_button.click() -
Codegen теперь поддерживает генерацию тестов Pytest
Версия 1.21
Основные моменты
-
Новые селекторы ролей, которые позволяют выбирать элементы по их ARIA роли, ARIA атрибутам и доступному имени.
- Sync
- Async
# Нажмите кнопку с доступным именем "log in"
page.locator("role=button[name='log in']").click()# Нажмите кнопку с доступным именем "log in"
await page.locator("role=button[name='log in']").click()Подробнее читайте в нашей документации.
-
Новый параметр
scale
в page.screenshot() для уменьшения размера скриншотов. -
Новый параметр
caret
в page.screenshot() для управления текстовым курсором. По умолчанию"hide"
.
Изменения в поведении
- Docker-образ
mcr.microsoft.com/playwright
больше не содержит Python. Пожалуйста, используйтеmcr.microsoft.com/playwright/python
как готовый к использованию Docker-образ Playwright с предустановленным Python. - Playwright теперь поддерживает загрузку больших файлов (сотни МБ) через API locator.set_input_files().
Версии браузеров
- Chromium 101.0.4951.26
- Mozilla Firefox 98.0.2
- WebKit 15.4
Эта версия также была протестирована на следующих стабильных каналах:
- Google Chrome 100
- Microsoft Edge 100
Версия 1.20
Основные моменты
- Новые параметры для методов page.screenshot(), locator.screenshot() и element_handle.screenshot():
- Параметр
animations: "disabled"
перематывает все CSS-анимации и переходы в согласованное состояние - Параметр
mask: Locator[]
маскирует указанные элементы, накладывая на них розовые блоки#FF00FF
.
- Параметр
- Trace Viewer теперь показывает запросы тестирования API.
- locator.highlight() визуально выделяет элемент(ы) для упрощения отладки.
Объявления
- Теперь мы поставляем специальный Docker-образ Python
mcr.microsoft.com/playwright/python
. Пожалуйста, переключитесь на него, если вы используете Python. Это последний выпуск, который включает Python внутри нашего JavaScript Docker-образаmcr.microsoft.com/playwright
. - v1.20 — это последний выпуск, получивший обновление WebKit для macOS 10.15 Catalina. Пожалуйста, обновите macOS, чтобы продолжать использовать последние и лучшие версии WebKit!
Версии браузеров
- Chromium 101.0.4921.0
- Mozilla Firefox 97.0.1
- WebKit 15.4
Эта версия также была протестирована на следующих стабильных каналах:
- Google Chrome 99
- Microsoft Edge 99
Версия 1.19
Основные моменты
-
Локатор теперь поддерживает параметр
has
, который гарантирует, что он содержит другой локатор внутри:- Sync
- Async
page.locator("article", has=page.locator(".highlight")).click()
await page.locator("article", has=page.locator(".highlight")).click()
Подробнее читайте в документации по локаторам
-
Новый locator.page
-
page.screenshot() и locator.screenshot() теперь автоматически скрывают мигающий курсор
-
Playwright Codegen теперь генерирует локаторы и локаторы фреймов
Версии браузеров
- Chromium 100.0.4863.0
- Mozilla Firefox 96.0.1
- WebKit 15.4
Эта версия также была протестирована на следующих стабильных каналах:
- Google Chrome 98
- Microsoft Edge 98
Версия 1.18
Тестирование API
Playwright для Python 1.18 представляет новое тестирование API, которое позволяет отправлять запросы на сервер непосредственно из Python! Теперь вы можете:
- тестировать ваш серверный API
- подготавливать состояние на стороне сервера перед посещением веб-приложения в тесте
- проверять постусловия на стороне сервера после выполнения некоторых действий в браузере
Чтобы сделать запрос от имени страницы Playwright, используйте новый API page.request:
- Sync
- Async
# Выполните GET-запрос от имени страницы
res = page.request.get("http://example.com/foo.json")
# Выполните GET-запрос от имени страницы
res = await page.request.get("http://example.com/foo.json")
Подробнее читайте в нашей документации.
Web-First Assertions
Playwright для Python 1.18 представляет Web-First Assertions.
Рассмотрим следующий пример:
- Sync
- Async
from playwright.sync_api import Page, expect
def test_status_becomes_submitted(page: Page) -> None:
# ..
page.locator("#submit-button").click()
expect(page.locator(".status")).to_have_text("Submitted")
from playwright.async_api import Page, expect
async def test_status_becomes_submitted(page: Page) -> None:
# ..
await page.locator("#submit-button").click()
await expect(page.locator(".status")).to_have_text("Submitted")
Playwright будет повторно тестировать узел с селектором .status
, пока извлеченный узел не будет содержать текст "Submitted"
. Он будет повторно извлекать узел и проверять его снова и снова, пока условие не будет выполнено или не истечет время ожидания. Вы можете передать это время ожидания в качестве параметра.
Подробнее читайте в нашей документации.
Улучшения локаторов
-
Каждый локатор теперь может быть дополнительно отфильтрован по тексту, который он содержит:
- Sync
- Async
page.locator("li", has_text="my item").locator("button").click()
await page.locator("li", has_text="my item").locator("button").click()
Подробнее читайте в документации по локаторам
Новые API и изменения
- Параметр
accept_downloads
теперь по умолчанию равенTrue
. - Параметр
sources
для встраивания источников в трассы.
Версии браузеров
- Chromium 99.0.4812.0
- Mozilla Firefox 95.0
- WebKit 15.4
Эта версия также была протестирована на следующих стабильных каналах:
- Google Chrome 97
- Microsoft Edge 97
Версия 1.17
Локаторы фреймов
Playwright 1.17 представляет локаторы фреймов - локатор для iframe на странице. Локаторы фреймов захватывают логику, достаточную для получения iframe
, а затем нахождения элементов в этом iframe. Локаторы фреймов по умолчанию строгие, будут ждать появления iframe
и могут использоваться в Web-First утверждениях.
Локаторы фреймов могут быть созданы с помощью методов page.frame_locator() или locator.frame_locator().
locator = page.frame_locator("my-frame").locator("text=Submit")
locator.click()
Подробнее читайте в нашей документации.
Обновление Trace Viewer
Playwright Trace Viewer теперь доступен онлайн по адресу https://trace.playwright.dev! Просто перетащите ваш файл trace.zip
, чтобы просмотреть его содержимое.
ПРИМЕЧАНИЕ: файлы трасс не загружаются никуда; trace.playwright.dev - это прогрессивное веб-приложение, которое обрабатывает трассы локально.
- Трассы тестов Playwright теперь по умолчанию включают источники (их можно отключить с помощью параметра трассировки)
- Trace Viewer теперь показывает имя теста
- Новая вкладка метаданных трассы с деталями браузера
- Снимки теперь имеют адресную строку
Обновление HTML отчета
- HTML отчет теперь поддерживает динамическую фильтрацию
- Отчет теперь представляет собой один статический HTML файл, который можно отправить по электронной почте или в виде вложения в Slack.
Поддержка Ubuntu ARM64 и многое другое
-
Playwright теперь поддерживает Ubuntu 20.04 ARM64. Теперь вы можете запускать тесты Playwright внутри Docker на Apple M1 и Raspberry Pi.
-
Теперь вы можете использовать Playwright для установки стабильной версии Edge на Linux:
npx playwright install msedge
Новые API
- Трассировка теперь поддерживает параметр
'title'
- Навигация по страницам поддерживает новый параметр ожидания
'commit'
Версия 1.16
🎭 Библиотека Playwright
locator.wait_for
Ожидание, пока локатор не разрешится в один элемент с заданным состоянием. По умолчанию state: 'visible'
.
Особенно полезно при работе со списками:
order_sent = page.locator("#order-sent")
order_sent.wait_for()
Подробнее о locator.wait_for().
Поддержка Docker для Arm64
Docker-образ Playwright теперь публикуется для Arm64, поэтому его можно использовать на Apple Silicon.
Подробнее о интеграции Docker.
🎭 Playwright Trace Viewer
- запустите просмотрщик трасс с помощью
npx playwright show-trace
и перетащите файлы трасс в PWA просмотрщика трасс - лучшее визуальное отображение целей действий
Подробнее о Trace Viewer.
Версии браузеров
- Chromium 97.0.4666.0
- Mozilla Firefox 93.0
- WebKit 15.4
Эта версия Playwright также была протестирована на следующих стабильных каналах:
- Google Chrome 94
- Microsoft Edge 94
Версия 1.15
🖱️ Колесо мыши
С помощью mouse.wheel() теперь можно прокручивать вертикально или горизонтально.
📜 Новый API заголовков
Ранее было невозможно получить несколько значений заголовков ответа. Теперь это возможно, и доступны дополнительные вспомогательные функции:
- request.all_headers()
- request.headers_array()
- request.header_value()
- response.all_headers()
- response.headers_array()
- response.header_value()
- response.header_values()
🌈 Эмуляция Forced-Colors
Теперь можно эмулировать CSS-медиафичу forced-colors
, передавая ее в browser.new_context() или вызывая page.emulate_media().
Новые API
- page.route() принимает новый параметр
times
, чтобы указать, сколько раз этот маршрут должен быть сопоставлен. - page.set_checked() и locator.set_checked() были введены для установки состояния флажка.
- request.sizes() Возвращает информацию о размере ресурса для данного HTTP-запроса.
- tracing.start_chunk() - Начать новый фрагмент трассировки.
- tracing.stop_chunk() - Остановить новый фрагмент трассировки.
Версии браузеров
- Chromium 96.0.4641.0
- Mozilla Firefox 92.0
- WebKit 15.0
Версия 1.14
⚡️ Новый "строгий" режим
Неоднозначность селекторов - это распространенная проблема в автоматизированном тестировании. "Строгий" режим гарантирует, что ваш селектор указывает на один элемент и выдает ошибку в противном случае.
Передайте strict=true
в ваши вызовы действий, чтобы включить его.
# Это вызовет ошибку, если у вас больше одной кнопки!
page.click("button", strict=True)
📍 Новый API локаторов
Локатор представляет собой представление элемента(ов) на странице. Он захватывает логику, достаточную для получения элемента в любой момент времени.
Разница между Locator и ElementHandle заключается в том, что последний указывает на конкретный элемент, в то время как Locator захватывает логику, как получить этот элемент.
Кроме того, локаторы по умолчанию "строгие"!
locator = page.locator("button")
locator.click()
Узнайте больше в документации.
🧩 Экспериментальные селекторные движки React и Vue
Селекторы React и Vue позволяют выбирать элементы по имени их компонента и/или значениям свойств. Синтаксис очень похож на селекторы атрибутов и поддерживает все операторы селекторов атрибутов.
page.locator("_react=SubmitButton[enabled=true]").click()
page.locator("_vue=submit-button[enabled=true]").click()
Узнайте больше в документации по селекторам React и документации по селекторам Vue.
✨ Новые селекторные движки nth
и visible
nth
селекторный движок эквивалентен псевдоклассу:nth-match
, но может быть комбинирован с другими селекторными движками.visible
селекторный движок эквивалентен псевдоклассу:visible
, но может быть комбинирован с другими селекторными движками.
# выберите первую кнопку среди всех кнопок
button.click("button >> nth=0")
# или если вы используете локаторы, вы можете использовать first, nth() и last
page.locator("button").first.click()
# нажмите видимую кнопку
button.click("button >> visible=true")
Версии браузеров
- Chromium 94.0.4595.0
- Mozilla Firefox 91.0
- WebKit 15.0
Версия 1.13
Playwright
- 🖖 Программная поддержка drag-and-drop через API page.drag_and_drop().
- 🔎 Улучшенный HAR с размерами тел для запросов и ответов. Используйте через параметр
recordHar
в browser.new_context().
Инструменты
- Playwright Trace Viewer теперь показывает параметры, возвращаемые значения и вызовы
console.log()
.
Новые и переработанные руководства
Версии браузеров
- Chromium 93.0.4576.0
- Mozilla Firefox 90.0
- WebKit 14.2
Новые API Playwright
- новый параметр
baseURL
в browser.new_context() и browser.new_page() - response.security_details() и response.server_addr()
- page.drag_and_drop() и frame.drag_and_drop()
- download.cancel()
- page.input_value(), frame.input_value() и element_handle.input_value()
- новый параметр
force
в page.fill(), frame.fill() и element_handle.fill() - новый параметр
force
в page.select_option(), frame.select_option() и element_handle.select_option()
Версия 1.12
🧟♂️ Представляем Playwright Trace Viewer
Playwright Trace Viewer - это новый графический инструмент, который помогает исследовать записанные трассы Playwright после выполнения скрипта. Трассы Playwright позволяют вам изучать:
- DOM страницы до и после каждого действия Playwright
- рендеринг страницы до и после каждого действия Playwright
- сетевую активность браузера во время выполнения скрипта
Трассы записываются с использованием нового API browser_context.tracing:
browser = chromium.launch()
context = browser.new_context()
# Начать трассировку перед созданием/переходом на страницу.
context.tracing.start(screenshots=True, snapshots=True)
page.goto("https://playwright.dev")
# Остановить трассировку и экспортировать ее в zip-архив.
context.tracing.stop(path = "trace.zip")
Трассы исследуются позже с помощью CLI Playwright:
playwright show-trace trace.zip
Это откроет следующий графический интерфейс:
👉 Подробнее читайте в документации по Trace Viewer.
Версии браузеров
- Chromium 93.0.4530.0
- Mozilla Firefox 89.0
- WebKit 14.2
Эта версия Playwright также была протестирована на следующих стабильных каналах:
- Google Chrome 91
- Microsoft Edge 91
Новые API
- параметр
reducedMotion
в page.emulate_media(), browser_type.launch_persistent_context(), browser.new_context() и browser.new_page() - browser_context.on("request")
- browser_context.on("requestfailed")
- browser_context.on("requestfinished")
- browser_context.on("response")
- параметр
tracesDir
в browser_type.launch() и browser_type.launch_persistent_context() - новый API пространства имен browser_context.tracing
- новый метод download.page
Версия 1.11
🎥 Новое видео: Playwright: A New Test Automation Framework for the Modern Web (презентация)
- Мы говорили о Playwright
- Показали инженерную работу за кулисами
- Провели живые демонстрации с новыми функциями ✨
- Особая благодарность applitools за проведение мероприятия и приглашение нас!
Версии браузеров
- Chromium 92.0.4498.0
- Mozilla Firefox 89.0b6
- WebKit 14.2
Новые API
- поддержка асинхронных предикатов по всему API в методах, таких как page.expect_request() и других
- новые устройства эмуляции: Galaxy S8, Galaxy S9+, Galaxy Tab S4, Pixel 3, Pixel 4
- новые методы:
- page.wait_for_url() для ожидания навигации к URL
- video.delete() и video.save_as() для управления записью экрана
- новые опции:
- опция
screen
в методе browser.new_context() для эмуляции размеровwindow.screen
- опция
position
в методах page.check() и page.uncheck() - опция
trial
для пробного выполнения действий в page.check(), page.uncheck(), page.click(), page.dblclick(), page.hover() и page.tap()
- опция
Версия 1.10
- Playwright для Java v1.10 теперь стабильный!
- Запускайте Playwright на Google Chrome и Microsoft Edge стабильных каналах с помощью нового API каналов.
- Скриншоты Chromium быстрые на Mac и Windows.
Встроенные версии браузеров
- Chromium 90.0.4430.0
- Mozilla Firefox 87.0b10
- WebKit 14.2
Эта версия Playwright также была протестирована на следующих стабильных каналах:
- Google Chrome 89
- Microsoft Edge 89
Новые API
- browser_type.launch() теперь принимает новую опцию
'channel'
. Подробнее читайте в нашей документации.
Версия 1.9
- Playwright Inspector это новый графический инструмент для создания и отладки ваших тестов.
- Пошаговая отладка ваших скриптов Playwright с возможностью воспроизведения, паузы и пошагового выполнения.
- Создавайте новые скрипты, записывая действия пользователя.
- Генерируйте селекторы элементов для вашего скрипта, наводя курсор на элементы.
- Установите переменную окружения
PWDEBUG=1
, чтобы запустить Inspector
- Приостановка выполнения скрипта с помощью page.pause() в режиме с заголовком. Приостановка страницы запускает Playwright Inspector для отладки.
- Новый псевдокласс has-text для CSS селекторов.
:has-text("example")
соответствует любому элементу, содержащему"example"
где-то внутри, возможно, в дочернем или потомке. Смотрите больше примеров. - Диалоги страницы теперь автоматически отклоняются во время выполнения, если не настроен слушатель для события
dialog
. Узнайте больше об этом. - Playwright для Python теперь стабильный с идиоматическим API в стиле snake case и предустановленным образом Docker для запуска тестов в CI/CD.
Версии браузеров
- Chromium 90.0.4421.0
- Mozilla Firefox 86.0b10
- WebKit 14.1
Новые API
Версия 1.8
-
Выбор элементов на основе макета с помощью
:left-of()
,:right-of()
,:above()
и:below()
. -
Playwright теперь включает интерфейс командной строки, бывший playwright-cli.
playwright --help
-
page.select_option() теперь ожидает, пока опции будут доступны.
-
Новые методы для проверки состояния элемента, такие как page.is_editable().
Новые API
- element_handle.is_checked().
- element_handle.is_disabled().
- element_handle.is_editable().
- element_handle.is_enabled().
- element_handle.is_hidden().
- element_handle.is_visible().
- page.is_checked().
- page.is_disabled().
- page.is_editable().
- page.is_enabled().
- page.is_hidden().
- page.is_visible().
- Новая опция
'editable'
в element_handle.wait_for_element_state().
Версии браузеров
- Chromium 90.0.4392.0
- Mozilla Firefox 85.0b5
- WebKit 14.1
Версия 1.7
- Новый SDK для Java: Playwright для Java теперь наравне с JavaScript, Python и .NET bindings.
- API хранения браузера: Новые удобные API для сохранения и загрузки состояния хранения браузера (куки, локальное хранилище) для упрощения сценариев автоматизации с аутентификацией.
- Новые CSS селекторы: Мы услышали ваши отзывы о более гибких селекторах и обновили реализацию селекторов. Playwright 1.7 представляет новые расширения CSS, и вскоре появится больше.
- Новый веб-сайт: Веб-сайт документации на playwright.dev был обновлен и теперь построен с использованием Docusaurus.
- Поддержка Apple Silicon: Бинарные файлы браузера Playwright для WebKit и Chromium теперь собраны для Apple Silicon.
Новые API
- browser_context.storage_state() для получения текущего состояния для последующего использования.
- опция
storageState
в browser.new_context() и browser.new_page() для настройки состояния контекста браузера.
Версии браузеров
- Chromium 89.0.4344.0
- Mozilla Firefox 84.0b9
- WebKit 14.1