Статья, которая научит вас полному пониманию того, как работает селен.
Статья, которая научит вас полному пониманию того, как работает селен.

Знакомство с селеном

Selenium — инструмент для автоматического тестирования веб-приложений. Тесты Selenium запускаются прямо в браузере, как у реальных пользователей. Поддерживаемые браузеры: IE (7, 8, 9, 10, 11), Mozilla Firefox, Safari, Google Chrome, Opera и т. д. Основные функции включают в себя: Проверка совместимости с браузерами — протестируйте свое приложение, чтобы убедиться, что оно хорошо работает в разных браузерах и операционных системах. Тестирование функциональности системы. Создавайте регрессионные тесты для проверки функциональности программного обеспечения и требований пользователей. Поддерживает автоматическую запись действий и автоматическое создание тестовых сценариев на разных языках, таких как .Net, Java и Perl (здесь в основном для selenium ide)

история селена

В 2004 году родился Selenium Core — инструмент тестирования, основанный на браузере и использующий язык программирования JavaScript. Он работает в изолированной программной среде браузера. Концепция дизайна заключается в развертывании тестируемого продукта, Selenium Core и тестовых сценариев. к тому же Сервер используется для выполнения автоматического тестирования. В 2005 году родился Selenium RC, который назывался selenium1. В то время Selenium Core фактически был ядром Selenium RC. Selenium RC позволяет тестировать продукт, распределять Selenium Core и тестовые скрипты по разным серверам. (Тестовый скрипт заботится только об отправке HTTP-запроса на указанный URL-адрес. Самому Selenium не нужно заботиться о языке программирования, на котором написан HTTP-запрос) Selenium RC состоит из двух частей: одна — Selenium RC Server, а другая — клиентские драйверы, предоставляющие различные языки программирования для написания тестовых сценариев. В 2007 году родился Webdriver. Концепция дизайна WebDriver заключается в том, чтобы изолировать сквозное тестирование от базовых конкретных инструментов тестирования и использовать адаптер шаблона проектирования для достижения цели. Организация API WebDriver более объектно-ориентирована. В 2008/09 году родился Selenium2, который на самом деле представляет собой слияние selenium rc и webdriver. Основная причина слияния — дополнение недостатков друг друга. В 2009 году появился selenium3. В этой версии исключен selenium rc и в основном состоит из selenium webdriver и selenium Grid. На самом деле мы используем selenium webdriver. Что касается seleniumgrid, то это инструмент для распределенного автоматического тестирования. Итак, сегодня мы поговорим о принципе работы selenium3 (selenium webdriver), именуемого в дальнейшем селеном (указанное выше конкретное время может быть неточным, я также узнал о нем из информации в Интернете, просто чтобы привлечь внимание –)

селеновый принцип

Мы используем Selenium для реализации автоматического тестирования, которое в основном требует трех вещей:

  1. Тестовый скрипт может представлять собой программу-скрипт, написанную на Python или Java (ее также можно назвать клиентом).
  2. Драйвер браузера. Этот драйвер разработан для разных браузеров. Разные браузеры используют разные драйверы веб-драйвера и должны соответствовать соответствующей версии браузера, например: geckodriver.exe (chrome).
  3. Браузер Selenium в настоящее время поддерживает большинство браузеров на рынке, таких как: Firefox, Google, IE и т. д.

селеновый скрипт

Язык кода:javascript
копировать
from selenium import webdriver
driver = webdriver.Chrome()

Выполнив приведенный выше код, мы обнаружим, что программа открывает браузер Chrome (обязательное условие: вы правильно настроили драйвер Chrom и соответствующую версию) Так как же селен реализует этот процесс? Хорошо, тогда давайте проанализируем, как работает селен.

Анализ исходного кода

Как показано на картинке, зажмите Ctrl и нажмите Chrome, мы увидим код вебдрайвера. C:\Python36\Lib\site-packages\selenium\webdriver\chrome\webdriver.py

Из строк 68-73 исходного кода мы видим, что он запустил объект службы, а затем вызвал метод sart(). Давайте продолжим рассматривать, что делает метод start() в строке 73.

Мы видим, что в строках 69-76 он выполнил команду cmd. Эта команда в основном запускает драйвер браузера ChromeDriver.exe. Каждый раз, когда мы выполняем скрипт, программа автоматически запускает для нас драйвер браузера. Эффект одинаковый. как запуск вручную.

После запуска драйвера он связывает порт 9515 и разрешает локальный доступ к службе. Фактически, мы можем проверить диспетчер задач локального компьютера и обнаружить, что программа процесса обслуживания действительно запущена.

На первом этапе мы уже знаем, что выполнение скрипта webdriver.Chrome() автоматически запустит драйвер chromedirver.exe, а затем запустит процесс.

Как открыть браузер

Продолжим рассматривать строки 51-57 исходного кода C:\Python36\Lib\site-packages\selenium\webdriver\chrome\webdriver.py, который вызывает метод инициализации родительского класса RemoteWebDriver. Давайте посмотрим, что это за метод. делает?

Вот самая важная строка кода, строка 62, метод self.start_session(capabilities, Browser_profile). Давайте продолжим смотреть, что делает исходный код этого метода.

Анализируя эту часть исходного кода, мы можем обнаружить, что строка 22 отправляет почтовый запрос по адресу localhost:9515/session. Параметры находятся в формате json, а затем возвращает программе конкретную ответную информацию (основная цель здесь — передать информацию). создайте новый идентификатор сеанса) и, наконец, откроет браузерное устройство. ок, операция открытия браузера завершена

Как выполнить соответствующие операции Просмотрите исходный код C:\Python36\Lib\site-packages\selenium\webdriver\chrome\webdriver.py (строки 76–81 в первом исходном коде)

Нажмите ChromeRemoteConnection, чтобы просмотреть исходный код.

Строка 24 обращается к адресу localhost:9515/session. Строки 25–28 определяют некоторые адреса интерфейса, уникальные для используемого нами браузера (chrome). Давайте посмотрим на исходный код родительского класса RemoteConnection.

Этот класс определяет все адреса интерфейсов, необходимые для операций с селеном (все эти адреса интерфейсов инкапсулированы в драйвере браузера), затем все операции браузера реализуются путем доступа к этим интерфейсам. Среди них Command.GET: («POST», «/session/$sessionId/url»). Этот адрес является URL-адресом для доступа к веб-сайту. Давайте сначала запишем его, и он нам пригодится позже. Хорошо, мы знаем адреса интерфейсов, соответствующие всем операциям, так как же выполнить эти интерфейсы для реализации различных операций в браузере? Продолжайте просматривать исходный код сразу после определения адреса интерфейса.

Видно, что метод _request в основном вызывается через метод выполнения для отправки соответствующего адреса запроса операции на сервер через стандартную библиотеку urilib3, тем самым реализуя различные операции браузера. Некоторые люди могут спросить, какая связь между открытием браузера и использованием браузера для выполнения различных действий? Фактически, открытие браузера также отправляет запрос. Запрос вернет идентификатор сеанса. Для различных адресов интерфейса, которые будут использоваться позже, вы также обнаружите, что в адресе интерфейса есть переменная $sessionid. предположим, что он используется при открытии браузера и работе с ним. Идентификаторы сеансов связаны друг с другом для выполнения операций в одном браузере. Второй шаг — изучить различные принципы работы, просмотрев его.

рабочий процесс селена

Может быть, когда вы посмотрите на принцип, вы его не поймете, поэтому мы сможем взглянуть на то, как работает селен?

  1. selenium клиент (Автоматизированное, написанное на Python и других языках) сценарий тестирования) инициализирует сервисную службу и запускает драйвер браузера chromedriver.exe через Webdriver.
  2. Отправьте HTTP-запрос драйверу браузера через RemoteWebDriver. Драйвер браузера анализирует запрос, открывает браузер и получает идентификатор сеанса. Если вы снова используете браузер, вам необходимо сохранить этот идентификатор.
  3. Откройте браузер, привяжите определенный порт и используйте запущенный браузер в качестве удаленного сервера веб-драйвера.
  4. После открытия браузера все операции с селеном (адреса доступа, элементы поиска и т. д.) связываются с удаленным сервером через RemoteConnection, а затем с помощью метода выполнения вызывается метод _request для отправки запроса на удаленный сервер через urlib3.
  5. Браузер выполняет соответствующее действие на основе запрошенного контента.
  6. Затем браузер возвращает результаты выполненных действий в тестовый скрипт через драйвер браузера.

Издатель: Лидер стека программистов полного стека, укажите источник для перепечатки: https://javaforall.cn/100701.html Исходная ссылка: https://javaforall.cn

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