223

     # Подключение Playwright


Настройка окружения

Создаём виртуальное окружение под проект:

virtualenv play_with_pwright
source play_with_pwright/bin/activate

Устанавливаем зависимости, а точнее модуль Playwright:

pip3 install playwright

Далее внутри модуля устанавливаем необходимый браузер одной из следующих команд:

# chromium
python3 -m playwright install chromium

# firefox
python3 -m playwright install firefox

# все поддерживаемые браузеры
python3 -m playwright install

Настройка окружения завершена.


Взаимодействие с браузером

Пишем первый тест, создав файл first_pw_test.py.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
from playwright.sync_api import sync_playwright

with sync_playwright() as playwright:
    # CHROME
    #browser = playwright.chromium.launch(channel="chrome", headless=False)
    #browser = playwright.chromium.launch(channel="chromium", headless=False)

    # WEBKIT
    # webkit = playwright.webkit
    # browser = webkit.launch()

    #FIREFOX
    browser = playwright.firefox.launch(headless=False)
    context = browser.new_context(ignore_https_errors=True)
    page = context.new_page()

    page.goto("http://localhost:8080/")
    time.sleep(10)

    page.close()
    browser.close()

Playwright предоставляет три импорта:

  • from playwright.async_api
  • from playwright.driver
  • from playwright.sync_api

В данном случае мы воспользовались sync_api, так как нет никаких причин использовать для этого примера асинхронные вызовы.

  • channel - выбираем chrome или chromium (смотря, что установили ранее, если установлено что-то одно, параметр можно игнорировать)
  • headless=False - показывать браузер
  • ignore_https_errors=True - игнорируем проблемы с сертификатами

Но ничто не мешает нам вызвать тот же тест асинхронно. Это может быть полезно, например, для ускорения выполнения тестов, когда у нас есть несколько сценариев и они могут выполняться параллельно, а точнее - независимо друг от друга.


Изменение размера окна

Размер можно задать на этапе инициализации браузера:

context = browser.new_context(ignore_https_errors=True, viewport={"width": 1920, "height": 1080})

Менять размер на уровне отдельной страницы в рамках теста возможно, но не рекомендуется:

page.set_viewport_size({"width": 640, "height": 480})

Подробное описание доступно в функции set_viewport_size.


Альтернативные способы запуска браузера

В ранее приведённом примере для запуска браузера использовался контекстный менеджер:

with sync_playwright() as playwright:
    pass

В тело которого передавался выполняемый код. Альтернативные способы, а также огромное количество прочей полезной информации, представлены на ресурсе: playwright.dev/python.

Другой способ запуска:

from playwright.sync_api import sync_playwright, Playwright

def run(playwright: Playwright):
    chromium = playwright.chromium # or "firefox" or "webkit".
    browser = chromium.launch()
    page = browser.new_page()
    page.goto("http://example.com")
    # other actions...
    browser.close()

with sync_playwright() as playwright:
    run(playwright)

Ещё один способ:

from playwright.sync_api import sync_playwright

playwright = sync_playwright().start()

browser = playwright.chromium.launch()
page = browser.new_page()
page.goto("http://example.com")
browser.close()

playwright.stop()