Playwright — это среда веб-автоматического тестирования, разработанная группой исследований и разработок Microsoft. Эта среда имеет многоплатформенные и кросс-языковые характеристики. Помимо базовых возможностей автоматического тестирования, он также имеет очень мощные функции записи и отслеживания. Вот как Playwright сравнивается с Selenium.
Видно, что Playwright обладает не только преимуществами многоязычности, кроссплатформенности и мультибраузерности Selenium. По сравнению с Selenium, Playwright имеет более сильные преимущества.
- Codegen: записывает ваши действия для создания тестов. Сохраните их на любом языке.
- Playwright inspector: исследоватьстраница、генерироватьселектор、Пошаговое выполнение теста、Просмотр точек кликов、Изучите журналы выполнения.
- Trace Зритель: Соберите всю информацию, чтобы расследовать неудачные тесты, Драматург. Трассировки включают скриншоты выполнения тестов в режиме реального времени. DOM Снимок、обозреватель действий、Исходники тестов и многое другое.
Версия Python
Установите плагин драматурга: pip install pytest-playwright
Установите необходимый браузер: установка драматурга
Java-версия
!-- зависимость от драматурга -->
<dependency>
<groupId>com.microsoft.playwright</groupId>
<artifactId>playwright</artifactId>
<version>1.29.0</version>
</dependency>
<!-- maven компилируется с использованием плагина -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.10.1</version>
</plugin>
import com.microsoft.playwright.*;
import java.nio.file.Paths;
public class App {
public static void main(String[] args) {
try (Playwright playwright = Playwright.create()) {
Browser browser = playwright.webkit().launch();
Page page = browser.newPage();
page.navigate("http://whatsmyuseragent.org/");
page.screenshot(new Page.ScreenshotOptions().setPath(Paths.get("example.png")));
}
}
}
mvn compile exec:java -Dexec.mainClass="Имя пакета.Имя файла"
Когда Codegen начинает запись, он может устанавливать разные параметры для разных сценариев. Например, вы можете установить специальное разрешение окна, цветовую тему, указать устройство мобильного телефона и т. д.
Установить размер окна дисплея
Размер окна, отображаемого во время записи, можно указать с помощью параметра --viewport-size команды. Используется для проверки того, является ли отображение интерфейса нормальным, если указан специальный размер окна.
# Установить размер окна дисплея
playwright codegen --viewport-size=800,600 адрес
# Установить размер окна дисплея
mvn exec:java -e -Dexec.mainClass=com.microsoft.playwright.CLI -Dexec.args="codegen --viewport-size=800,600 адрес"
Параметр --device команды можно использовать для указания модели устройства мобильного телефона во время записи. Используется для проверки нормальности отображения интерфейса при просмотре страниц на мобильном телефоне.
# Укажите устройство
playwright codegen --device="iPhone 11" адрес
# Укажите устройство
mvn exec:java -e -Dexec.mainClass=com.microsoft.playwright.CLI -Dexec.args='codegen --device="iPhone 11" адрес'
Информация аутентификации может быть сохранена в файле с помощью параметра --save-storage. После выполнения команды окно запустится автоматически. После входа в учетную запись окно закроется вручную. Вы можете сохранить информацию о сертификации:
Затем через параметр --load-storage вы можете снова запустить браузер, войти на сайт после последнего входа в систему и обнаружить, что вы успешно вошли в систему:
# Сохранить статус входа
playwright codegen --save-storage=auth.json
# Загрузить данные аутентификации
playwright codegen --load-storage=auth.json адрес
# Сохранить статус входа
mvn exec:java -e -Dexec.mainClass=com.microsoft.playwright.CLI -Dexec.args="codegen --save-storage=auth.json"
# Загрузить данные аутентификации
mvn exec:java -e -Dexec.mainClass=com.microsoft.playwright.CLI -Dexec.args="codegen --load-storage=auth.json github.com/microsoft/playwright"
Пишите тестовые случаи
Ниже приведены этапы тестирования функции поиска на форуме. Для реализации используйте код автоматического тестирования Playwright:
from playwright.sync_api import sync_playwright, expect
def test_playwright():
# Примеризменятьplaywright playwright = sync_playwright().start()
# Открыть браузер Chrome, без заголовка по умолчанию установлено значение True, безголовый режим, установите здесь значение False, чтобы облегчить просмотр эффекта
browser = playwright.chromium.launch(headless=False)
# Страница окна Открыть
page = browser.new_page()
# существуют Текущая страница окна Открыть Сайт тестера
page.goto("https://ceshiren.com/")
# Найдите кнопку поиска и нажмите
page.locator("#search-button").click()
# Найдите поле поиска и введите веб-автоматизация.
page.locator("#search-term").fill("веб-автоматизация")
# Используйте Keyboard.down для имитации событий ввода с клавиатуры.
page.keyboard.down("Enter")
# Утверждать результаты поиска
result = page.locator(".list>li:nth-child(1) .topic-title>span")
expect(result).to_contain_text("Автоматизированное тестирование")
# скриншот
page.screenshot(path='screenshot.png')
# После завершения варианта использования закройте браузер.
browser.close()
# Тогда закройте сервис драматурга
playwright.stop()
import com.microsoft.playwright.*;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import java.nio.file.Paths;
import static com.microsoft.playwright.Playwright.create;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;
public class PlaywrightTest {
public static Playwright playwright;
@BeforeAll
static void setupClass(){
playwright = create();
}
@Test
void playwrightDemo() {
// Инициализация браузера Пример
Browser browser = playwright.chromium().launch(new BrowserType.LaunchOptions().setHeadless(false));
// Инициализировать страницу Пример
Page page = browser.newPage();
// Открыть ceshiren страница
page.navigate("https://ceshiren.com/");
// Нажмите кнопку поиска
page.locator("#search-button").click();
// Введите информацию для поиска
page.locator("#search-term").fill("Appium");
// Нажмите кнопку ввода
page.keyboard().down("Enter");
// Получите первый результат поиска из
Locator result = page.locator(".results .item:nth-child(1) .topic-title");
// Утверждать результаты Содержит ли поиск ключевые слова?
assertTrue(result.innerText().contains("Appium"));
}
}
В процессе автоматизированного тестирования мы часто сталкиваемся с болевой проблемой: автоматическое тестирование явно обнаружило ошибки в коде, но воспроизвести их сложно, и R&D этого не признает.
При столкновении с этим сценарием функция Trace Playwright может прекрасно решить эту проблему. Поскольку после настройки Trace каждый шаг процесса выполнения кода будет содержать подробные снимки экрана, журналы и информацию о продолжительности, которая является более полной, чем информация о записи процесса функционального тестирования.
Использование Trace также очень просто. В целом для этого требуется всего два шага:
При добавлении конфигурации в код обратите внимание на следующие моменты:
from playwright.sync_api import sync_playwright, expect
def test_ceshiren():
# Примеризуйте объект драматурга
playwright = sync_playwright().start()
# Запустите Google Chrome и используйте безголовый режим.
browser = playwright.chromium.launch(headless=False)
# =========== trace из конфигурации
# 1. генерировать один context Пример
context = browser.new_context()
# 2. добавить в trace из конфигурацииинформация
context.tracing.start(screenshots=True, snapshots=True, sources=True)
# 3. Использовать добавленную трассировку Конфигурация из context Пример,идти Примеризменятьодинpageобъект
page = context.new_page()
# Перейти на ceshirenстраницу
page.goto("https://ceshiren.com/")
# Нажмите кнопку поиска, Введите CSS-позиционирование
page.locator("#search-button").click()
# Введите содержание поиска, Введите CSS-позиционирование
page.locator("#search-term").fill("Appium")
# Нажмите клавишу ввода
page.keyboard.down("Enter")
# time.sleep(3)
result = page.locator(".results .item:nth-child(1) .topic-title")
expect(result).to_contain_text("Appium")
# 4. существуют. Обязательно завершите трассировку перед закрытием браузера.
context.tracing.stop(path="ceshiren.zip")
browser.close()
Примечание: Ява-версии необходимо настроить временную переменную среды PLAYWRIGHT_JAVA_SRC=src/test/java.
import com.microsoft.playwright.*;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import java.nio.file.Paths;
import static org.junit.jupiter.api.Assertions.assertTrue;
// позвони напрямую trace Сообщается об ошибке. Причина ошибки. trace Нужно установить PLAYWRIGHT_JAVA_SRC одна переменная среды
// com.microsoft.playwright.PlaywrightException: Source root directory must be specified via PLAYWRIGHT_JAVA_SRC environment variable when source collection is enabled
// Решение: настраивать PLAYWRIGHT_JAVA_SRC=src/test/java
public class PlaywrightTraceTest {
public static Playwright playwright;
@BeforeAll
static void setupClass(){
playwright = Playwright.create();
}
@Test
void ceshiren(){
// По умолчанию используется Безголовый. режим,добавить в false из конфигурации
Browser browser = playwright.chromium().launch(new BrowserType.LaunchOptions().setHeadless(false));
BrowserContext context = browser.newContext();
// добавить вtrace из конфигурации
// добавить конфигурация трассировки
context.tracing().start(new Tracing.StartOptions()
.setScreenshots(true)
.setSnapshots(true)
.setSources(true));
Page page = context.newPage();
// Page page = browser.newPage();
page.navigate("https://ceshiren.com/");
// Используйте CSS-позиционирование
// Нажмите на поле поиска
page.locator("#search-button").click();
// Введите содержание поиска
page.locator("#search-term").fill("Appium");
// Нажмите клавишу ввода
page.keyboard().down("Enter");
// Нашел один заголовок
String res = page.locator(".results .item:nth-child(1) .topic-title").innerText();
// System.out.println(res);
page.screenshot(new Page.ScreenshotOptions()
.setPath(Paths.get("ceshiren.png")));
// существования После завершения выполнения тестового примера прекратить отслеживание
context.tracing().stop(new Tracing.StopOptions()
.setPath(Paths.get("ceshiren.zip")));
// Утвердите, что заголовок содержит ключевое слово Appium.
assertTrue(res.contains("Appium"));
}
}
После завершения выполнения проверьте, создана ли соответствующая папка отслеживания в корневом каталоге проекта. Если он генерируется нормально, вы можете использовать следующую команду для просмотра результатов трассировки.