Перейти к основному содержимому

Примечания к выпуску

Версия 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

Разное

Обновления UI

  • Новая кнопка в Codegen для выбора элементов для создания снимков aria.
  • Дополнительные детали (например, нажатые клавиши) теперь отображаются вместе с вызовами API действий в трассах.
  • Отображение содержимого canvas в трассах подвержено ошибкам. Отображение теперь отключено по умолчанию и может быть включено через настройку UI Display canvas content.
  • Панели Call и Network теперь отображают дополнительную информацию о времени.

Изменения

Версии браузеров

  • 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)

Разные опции

Версии браузеров

  • 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

Объявления

  • ⚠️ 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

Обновление генератора тестов

Генератор тестов Playwright

Новые инструменты для генерации утверждений:

Вот пример сгенерированного теста с утверждениями:

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

Другие изменения

  • Метод 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

Обновления просмотрщика трассировки

Просмотрщик трассировки Playwright

  1. Увеличение диапазона времени.
  2. Переработка панели сети.

Новые 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.04Ubuntu 22.04Debian 11Debian 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

⚠️ Изменение, нарушающее совместимость

  • 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

Версии браузеров

  • 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")

Разное

Версии браузеров

  • Chromium 109.0.5414.46
  • Mozilla Firefox 107.0
  • WebKit 16.4

Эта версия также была протестирована на следующих стабильных каналах:

  • Google Chrome 108
  • Microsoft Edge 108

Версия 1.28

Инструменты Playwright

  • Живые локаторы в CodeGen. Генерируйте локатор для любого элемента на странице, используя инструмент "Explore".

Locator Explorer

Новые 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_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

Утверждения

Другие основные моменты

  • Новая опция 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 программно:

context = browser.new_context(record_har_path="github.har.zip")
# ... делайте что-то ...
context.close()

Используйте новые методы page.route_from_har() или browser_context.route_from_har(), чтобы обслуживать соответствующие ответы из файла HAR:

context.route_from_har("github.har.zip")

Подробнее читайте в нашей документации.

Расширенная маршрутизация

Теперь вы можете использовать route.fallback() для передачи маршрутизации другим обработчикам.

Рассмотрите следующий пример:

# Удалить заголовок из всех запросов
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)

Обратите внимание, что новые методы page.route_from_har() и browser_context.route_from_har() также участвуют в маршрутизации и могут быть переданы.

Обновление web-first утверждений

Разное

  • Если есть служебный работник, который мешает вам, теперь вы можете легко отключить его с помощью новой опции контекста service_workers:

    context = browser.new_context(service_workers="block")
    page = context.new_page()
  • Использование пути .zip для опции контекста recordHar автоматически архивирует полученный HAR:

    context = browser.new_context(record_har_path="github.har.zip")
  • Если вы собираетесь редактировать HAR вручную, рассмотрите возможность использования режима записи HAR "minimal", который записывает только информацию, необходимую для воспроизведения:

    context = 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

    Graphics

Версия 1.21

Основные моменты

  • Новые селекторы ролей, которые позволяют выбирать элементы по их ARIA роли, ARIA атрибутам и доступному имени.

    # Нажмите кнопку с доступным именем "log in"
    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

Основные моменты

Объявления

  • Теперь мы поставляем специальный 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, который гарантирует, что он содержит другой локатор внутри:

    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:

# Выполните GET-запрос от имени страницы
res = page.request.get("http://example.com/foo.json")

Подробнее читайте в нашей документации.

Web-First Assertions

Playwright для Python 1.18 представляет Web-First Assertions.

Рассмотрим следующий пример:

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")

Playwright будет повторно тестировать узел с селектором .status, пока извлеченный узел не будет содержать текст "Submitted". Он будет повторно извлекать узел и проверять его снова и снова, пока условие не будет выполнено или не истечет время ожидания. Вы можете передать это время ожидания в качестве параметра.

Подробнее читайте в нашей документации.

Улучшения локаторов

  • locator.drag_to()

  • Каждый локатор теперь может быть дополнительно отфильтрован по тексту, который он содержит:

    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 утверждениях.

Graphics

Локаторы фреймов могут быть созданы с помощью методов 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 теперь показывает имя теста
  • Новая вкладка метаданных трассы с деталями браузера
  • Снимки теперь имеют адресную строку

image

Обновление HTML отчета

  • HTML отчет теперь поддерживает динамическую фильтрацию
  • Отчет теперь представляет собой один статический HTML файл, который можно отправить по электронной почте или в виде вложения в Slack.

image

Поддержка 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 заголовков

Ранее было невозможно получить несколько значений заголовков ответа. Теперь это возможно, и доступны дополнительные вспомогательные функции:

🌈 Эмуляция 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

Версия 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

Это откроет следующий графический интерфейс:

image

👉 Подробнее читайте в документации по Trace Viewer.

Версии браузеров

  • Chromium 93.0.4530.0
  • Mozilla Firefox 89.0
  • WebKit 14.2

Эта версия Playwright также была протестирована на следующих стабильных каналах:

  • Google Chrome 91
  • Microsoft Edge 91

Новые API

Версия 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

Версия 1.10

Встроенные версии браузеров

  • Chromium 90.0.4430.0
  • Mozilla Firefox 87.0b10
  • WebKit 14.2

Эта версия Playwright также была протестирована на следующих стабильных каналах:

  • Google Chrome 89
  • Microsoft Edge 89

Новые API

Версия 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

Новые API

Версии браузеров

  • 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

Версии браузеров

  • Chromium 89.0.4344.0
  • Mozilla Firefox 84.0b9
  • WebKit 14.1