Тестирование программного обеспечения | Playwright более мощный, чем Selenium
Тестирование программного обеспечения | Playwright более мощный, чем Selenium

Playwright — это среда веб-автоматического тестирования, разработанная группой исследований и разработок Microsoft. Эта среда имеет многоплатформенные и кросс-языковые характеристики. Помимо базовых возможностей автоматического тестирования, он также имеет очень мощные функции записи и отслеживания. Вот как Playwright сравнивается с Selenium.

существование Вставьте сюда описание изображения
существование Вставьте сюда описание изображения

Видно, что Playwright обладает не только преимуществами многоязычности, кроссплатформенности и мультибраузерности Selenium. По сравнению с Selenium, Playwright имеет более сильные преимущества.

В чем преимущества драматурга?

  • Поддерживает все популярные браузеры.
  • Более быстрое и надежное исполнение.
  • более мощныйиз Автоматизированное тестированиеконфигурация.
  • Мощная библиотека инструментов:
Язык кода:txt
копировать
- Codegen: записывает ваши действия для создания тестов. Сохраните их на любом языке.
Язык кода:txt
копировать
- Playwright inspector: исследоватьстраница、генерироватьселектор、Пошаговое выполнение теста、Просмотр точек кликов、Изучите журналы выполнения.
Язык кода:txt
копировать
- Trace Зритель: Соберите всю информацию, чтобы расследовать неудачные тесты, Драматург. Трассировки включают скриншоты выполнения тестов в режиме реального времени. DOM Снимок、обозреватель действий、Исходники тестов и многое другое.

Установка среды

Версия Python

Установите плагин драматурга: pip install pytest-playwright

Установите необходимый браузер: установка драматурга

Java-версия

  1. Добавьте зависимости в pom.xml.
Язык кода: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>
  1. Создать проект
Язык кода:java
копировать
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")));
    }
  }
}
  1. Скомпилируйте и выполните (Примечание. Соответствующие зависимости необходимо загрузить при первой компиляции и выполнении, что занимает много времени.)
Язык кода:java
копировать
mvn compile exec:java -Dexec.mainClass="Имя пакета.Имя файла"

Функция записи кодегена

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

Установить размер окна дисплея

Размер окна, отображаемого во время записи, можно указать с помощью параметра --viewport-size команды. Используется для проверки того, является ли отображение интерфейса нормальным, если указан специальный размер окна.

  • Версия PythonЗаказ:
Язык кода:python
кодКоличество запусков:0
копировать
# Установить размер окна дисплея
playwright codegen --viewport-size=800,600 адрес
  • Java-версия Заказ:
Язык кода:java
копировать
# Установить размер окна дисплея
mvn exec:java -e -Dexec.mainClass=com.microsoft.playwright.CLI -Dexec.args="codegen --viewport-size=800,600 адрес"

Укажите устройство

Параметр --device команды можно использовать для указания модели устройства мобильного телефона во время записи. Используется для проверки нормальности отображения интерфейса при просмотре страниц на мобильном телефоне.

существование Вставьте сюда описание изображения
существование Вставьте сюда описание изображения
  • Версия PythonЗаказ:
Язык кода:python
кодКоличество запусков:0
копировать
# Укажите устройство
playwright codegen --device="iPhone 11" адрес
  • Java-версия Заказ:
Язык кода:java
копировать
# Укажите устройство
mvn exec:java -e -Dexec.mainClass=com.microsoft.playwright.CLI -Dexec.args='codegen --device="iPhone 11" адрес'

Решение проблем с аутентификацией при входе

Информация аутентификации может быть сохранена в файле с помощью параметра --save-storage. После выполнения команды окно запустится автоматически. После входа в учетную запись окно закроется вручную. Вы можете сохранить информацию о сертификации:

существование Вставьте сюда описание изображения
существование Вставьте сюда описание изображения

Затем через параметр --load-storage вы можете снова запустить браузер, войти на сайт после последнего входа в систему и обнаружить, что вы успешно вошли в систему:

существование Вставьте сюда описание изображения
существование Вставьте сюда описание изображения
  • Полная команда версии Python:
Язык кода:python
кодКоличество запусков:0
копировать
# Сохранить статус входа
playwright codegen --save-storage=auth.json
# Загрузить данные аутентификации
playwright codegen --load-storage=auth.json адрес
  • Java-версия полная команда:
Язык кода:java
копировать
# Сохранить статус входа
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:

  1. Открыть Форум тестировщиковhttps://ceshiren.com/
  2. Нажмите кнопку поиска.
  3. Введите информацию для поиска и нажмите клавишу Enter.
  4. Проверьте, содержат ли результаты поиска искомую информацию.
  • Версия Pythonизвыполнить
Язык кода:python
кодКоличество запусков:0
копировать
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()
  • Реализация Java-версии
Язык кода:java
копировать
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 также очень просто. В целом для этого требуется всего два шага:

  1. существоватькодсерединадобавить в Trace конфигурация.
  2. Откройте файл записи трассировки и просмотрите запись трассировки.

При добавлении конфигурации в код обратите внимание на следующие моменты:

  1. Создать экземпляр контекста из экземпляра браузера
  2. Настройте параметры запуска путем отслеживания экземпляра контекста
  3. Генерируйте объекты экземпляра страницы через экземпляры контекста. И если вы хотите выполнять операции трассировки, вы должны использовать этот объект экземпляра страницы.
  4. Там, где вы хотите прекратить отслеживание,добавьте tracing из Заканчиватьконфигурация.
  • Версия Pythonвыполнить
Язык кода:python
кодКоличество запусков:0
копировать
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()
  • Java-версиявыполнить

Примечание: Ява-версии необходимо настроить временную переменную среды PLAYWRIGHT_JAVA_SRC=src/test/java.

Язык кода: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"));
    }

}

После завершения выполнения проверьте, создана ли соответствующая папка отслеживания в корневом каталоге проекта. Если он генерируется нормально, вы можете использовать следующую команду для просмотра результатов трассировки.

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose