[Драматург+Python] Серия руководств (2) шаг за шагом поможет вам написать сценарий автоматического тестирования.
[Драматург+Python] Серия руководств (2) шаг за шагом поможет вам написать сценарий автоматического тестирования.

Как открыть веб-страницу в режиме прокси

существовать playwright.chromium.launch() входящий proxy Параметры достаточны. Пример кода выглядит следующим образом:

1. Метод синхронной записи:
Язык кода:javascript
копировать
from playwright.sync_api import sync_playwright

proxy = {'server': 'http:/127.0.0.1:8080'}


def run():
    with sync_playwright() as p:
        browser = p.chromium.launch(headless=False, proxy=proxy)
        page = browser.new_page()

        page.goto('https://www.baidu.com')

        title = page.title()
        if «Байду» in title:
            print("Откройте Baidu успешно")
        else:
            print("Не удалось открыть Baidu")

        browser.close()


run()
2. Асинхронное письмо:
Язык кода:javascript
копировать
from playwright.async_api import async_playwright
import asyncio

proxy = {'server': 'http:/127.0.0.1:8080'}


async def run():
    async with async_playwright() as p:
        browser = await p.chromium.launch(headless=False, proxy=proxy)
        page = await browser.new_page()

        await page.goto('https://www.baidu.com')

        title = await page.title()
        if «Байду» in title:
            print("Откройте Baidu успешно")
        else:
            print("Не удалось открыть Baidu")

        await browser.close()


asyncio.get_event_loop().run_until_complete(run())

Сравнение синхронных и асинхронных методов записи

1. Преимущества синхронизации:
  • Структура кода проста и понятна.,Нет необходимости учитьсяasync/awaitграмматика
  • Подходит для небольших или простых задач.
  • Отладка и понимание синхронного кода стало проще.
2. Преимущества асинхронности:
  • Может более эффективно использовать системные ресурсы и избегать блокировки при ожидании ввода-вывода.
  • Более эффективен для длительных операций, таких как сетевые запросы.
  • Может поддерживать одновременное выполнение нескольких задач.
  • Более выгодно для крупномасштабных и сложных систем.
3. Разница
  • Для небольших задач и учебных целей структура синхронного кода проще.
  • Для задач, требующих длительного ожидания ввода-вывода (например, сетевых запросов), использование асинхронного режима может быть более эффективным.
  • Для систем, которым необходимо поддерживать высокий уровень параллелизма (например, веб-сайты), асинхронная модель может поддерживать больше одновременных подключений.
  • Многопоточная синхронизация приведет к проблемам с блокировками, а асинхронная позволяет избежать использования блокировок.
  • Асинхронный режим FUTURE также легче расширять и поддерживает динамическое добавление функций обратного вызова.
4. Резюме
  • Синхронизация для небольших задач
  • Используйте асинхронный режим для долгосрочных задач ввода-вывода.
  • Системы с высоким уровнем параллелизма используют асинхронный
  • Будущее расширение функций будет рассматриваться как асинхронное и более гибкое.

Вообще говоря, для современных систем модели асинхронного программирования станут основной тенденцией. Но синхронизация существования определенных сцен не менее проста в использовании. Выбор следует сопоставлять с конкретными потребностями.

Напишите сценарий автоматического тестирования

1. Пример сценария

Это вводный пример. Что касается значения каждого предложения, просто прочитайте мои комментарии. Пример кода выглядит следующим образом:

Язык кода:javascript
копировать
import re
from playwright.sync_api import Page, expect, sync_playwright

proxy = {'server': 'http://127.0.0.1:8080'}


def test_baidu():
    with sync_playwright() as p:
        browser = p.chromium.launch(headless=False, proxy=proxy)
        page = browser.new_page()
        # Перейти на страницу Baidu
        page.goto("https://www.baidu.com/")
        # Нажмите на поле ввода
        page.locator("#kw").click()
        # Введите селен в поле ввода
        page.locator("#kw").fill("selenium")
        # Нажмите кнопку запроса Baidu.
        page.get_by_role("button", name="Baidu").click()
        # Проверьте, введен ли селен в поле ввода
        expect(page.locator("#kw")).to_have_value("selenium")
        # Убедитесь, что на странице присутствует текст «Все также существуют»
        ожидаем(page.locator("#content_left")).to_contain_text("Все тоже ищут")
        # Выйти из браузера
        browser.close()

Уведомление:Необходимо использовать как тестовые классы, так и тестовые методы.test_ Именование префиксов

2. Основные операции

Это список распространенных операций Playwright. Обратите внимание, что существует множество других. Обязательно посетите раздел API локатора, чтобы узнать об этом больше.

действовать

описывать

locator.check()

Установите флажок ввода

locator.click()

щелкните элемент

locator.uncheck()

Отмена Установите флажок ввода

locator.hover()

Наведите курсор на существующий элемент

locator.fill()

Заполните поля формы и введите текст

locator.focus()

элемент фокуса

locator.press()

нажать одну клавишу

locator.set_input_files()

Выберите файлы для загрузки

locator.select_option()

Выберите вариант из раскрывающегося меню

3. Операция утверждения

утверждение

описывать

expect(locator).to_be_checked()

Флажок установлен

expect(locator).to_be_enabled()

Управление включено

expect(locator).to_be_visible()

Элемент виден

expect(locator).to_contain_text()

Элемент содержит текст

expect(locator).to_have_attribute()

Элементы имеют атрибуты

expect(locator).to_have_count()

Список элементов имеет длину

expect(locator).to_have_text()

текст, соответствующий элементу

expect(locator).to_have_value()

Входной элемент имеет значение

expect(page).to_have_title()

На странице есть заголовок

expect(page).to_have_url()

На странице есть URL

4. Использование светильников

Пример кода:

Язык кода:javascript
копировать
import pytest
from playwright.sync_api import Page, expect, sync_playwright


@pytest.fixture(scope="function", autouse=True)
def before_each_after_each(page: Page):
    print("before the test runs")

    page.goto("https://www.baidu.com/")
    yield

    print("after the test runs")


def test_main_navigation(page: Page):
    page.locator("#kw").fill("Цзюццзянь Блог Парк")
    page.get_by_role("button", name="Baidu").click()
    view(page.locator("#content_left")).to_contain_text("поиск - Блог Парк")

Объяснение кода:

  • Определена фикстура с именем before_each_after_each, которая распространяется на каждую тестовую функцию и настроена на автоматическое применение к каждой тестовой функции.
  • существоватьэтот fixture Материал: Печать "before the test runs", что означает выполнение издействовать до запуска теста. Используйте page.goto("https://www.baidu.com/") Откройте домашнюю страницу Baidu.
  • yield Ключевые слова существуютэто fixture Зависает во время выполнения в ожидании выполнения тестовой функции. Тестовая функция будет существовать fixture среда исполнения.
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