Настройки браузера Selenium Python
Обновлено: 21.11.2024
В последнем уроке мы узнали, как использовать платформу Scrapy для решения распространенных проблем веб-скрейпинга. Сегодня мы рассмотрим Selenium (с Python ❤️ ) в пошаговом руководстве.
Selenium — это ряд различных проектов с открытым исходным кодом, используемых для автоматизации браузера. Он поддерживает привязки для всех основных языков программирования, включая наш любимый язык: Python.
Selenium API использует протокол WebDriver для управления веб-браузером, таким как Chrome, Firefox или Safari. Браузер может работать как локально, так и удаленно.
В начале проекта (почти 20 лет назад!) он в основном использовался для кросс-браузерного сквозного тестирования (приемочные тесты).
Сейчас он по-прежнему используется для тестирования, но также используется как общая платформа для автоматизации браузера. И, конечно же, его использовали для парсинга веб-страниц!
Selenium полезен, когда вам нужно выполнить действие на веб-сайте, например:
- Нажатие кнопок
- Заполнение форм
- Прокрутка
- Снимок экрана
Это также полезно для выполнения кода Javascript. Допустим, вы хотите очистить одностраничное приложение. Кроме того, вы не нашли простого способа прямого вызова базовых API. В этом случае вам может понадобиться Selenium.
Установка
В нашем примере мы будем использовать Chrome, поэтому убедитесь, что он установлен на вашем локальном компьютере:
Чтобы установить пакет Selenium, я, как всегда, рекомендую создать виртуальную среду (например, с помощью virtualenv), а затем:
Быстрый старт
После того как вы загрузили Chrome и Chromedriver и установили пакет Selenium, вы должны быть готовы запустить браузер:
Это запустит Chrome в полном режиме (как обычный Chrome, который управляется вашим кодом Python). Вы должны увидеть сообщение о том, что браузер управляется автоматическим программным обеспечением.
Чтобы запустить Chrome в автономном режиме (без графического пользовательского интерфейса), вы можете запустить его на сервере. См. следующий пример:
driver.page_source вернет полный HTML-код страницы.
Вот еще два интересных свойства WebDriver:
- driver.title получает заголовок страницы
- driver.current_url получает текущий URL (это может быть полезно, когда на веб-сайте есть перенаправления и вам нужен конечный URL)
Поиск элементов
Поиск данных на веб-сайте — один из основных вариантов использования Selenium либо для набора тестов (убедитесь, что определенный элемент присутствует/отсутствует на странице), либо для извлечения данных и сохранения их для дальнейшего анализа (веб- соскоб).
В Selenium API доступно множество методов для выбора элементов на странице. Вы можете использовать:
- Имя тега
- Название класса
- Идентификаторы
- XPath
- Селекторы CSS
Недавно мы опубликовали статью, объясняющую XPath. Не стесняйтесь взглянуть, если вы не знакомы с XPath.
Как обычно, самый простой способ найти элемент — открыть инструменты разработчика Chrome и проверить нужный элемент. Для этого можно выделить нужный элемент мышью, а затем нажать Ctrl + Shift + C или Cmd + Shift + C в macOS вместо нажатия правой кнопки мыши. нажимайте + проверять каждый раз:
найти_элемент
Есть много способов найти элемент в селене. Допустим, мы хотим найти тег h1 в этом HTML:
Все эти методы также имеют функцию find_elements (обратите внимание на множественное число) для возврата списка элементов.
Например, чтобы получить все привязки на странице, используйте следующее:
Некоторые элементы труднодоступны с помощью идентификатора или простого класса, и именно тогда вам нужно выражение XPath. У вас также может быть несколько элементов с одним и тем же классом (идентификатор должен быть уникальным).
XPath — мой любимый способ поиска элементов на веб-странице. Это мощный способ извлечь любой элемент на странице на основе его абсолютного положения в модели DOM или относительно другого элемента.
Веб-элемент
WebElement — это объект Selenium, представляющий элемент HTML.
С этими элементами HTML можно выполнять множество действий, вот наиболее полезные:
- Доступ к тексту элемента с помощью свойства element.text
- Нажатие элемента с помощью element.click()
- Доступ к атрибуту с помощью element.get_attribute('class')
- Отправка текста на вход с помощью: element.send_keys('mypassword')
Есть и другие интересные методы, такие как is_displayed() . Это возвращает True, если элемент виден пользователю.
Было бы интересно избежать приманок (например, заполнения скрытых полей ввода).
Приманки – это механизмы, используемые владельцами веб-сайтов для обнаружения ботов. Например, если ввод HTML имеет атрибут type=hidden следующим образом:
Это входное значение должно быть пустым. Если бот посещает страницу и заполняет все входные данные в форме случайным значением, он также заполняет скрытый ввод. Законный пользователь никогда не заполнит скрытое входное значение, потому что оно не отображается браузером.
Это классическая приманка.
Полный пример
Вот полный пример использования методов Selenium API, которые мы только что рассмотрели.
Мы войдем в Hacker News:
В нашем примере авторизация в Hacker News сама по себе бесполезна. Однако вы можете создать бота, который будет автоматически публиковать ссылку на ваш последний пост в блоге.
Для аутентификации нам необходимо:
- Перейдите на страницу входа с помощью driver.get()
- Выберите ввод имени пользователя с помощью driver.find_element_by_*, а затем element.send_keys(), чтобы отправить текст на ввод
- Выполните тот же процесс с вводом пароля
- Нажмите кнопку входа с помощью element.click()
Должно быть легко, верно? Давайте посмотрим код:
Легко, правда? Теперь есть одна важная вещь, которая отсутствует здесь. Как узнать, вошли ли мы в систему?
Мы могли бы попробовать несколько вещей:
- Проверьте наличие сообщения об ошибке (например, "Неверный пароль")
- Проверьте наличие одного элемента на странице, который отображается только после входа в систему.
Итак, мы собираемся проверить кнопку выхода. Кнопка выхода имеет идентификатор "logout" (просто)!
Мы не можем просто проверить, является ли элемент None, потому что все find_element_by_* вызывают исключение, если элемент не найден в DOM. Таким образом, мы должны использовать блок try/except и перехватывать исключение NoSuchElementException:
Снимок экрана
Мы могли бы легко сделать снимок экрана, используя:
В нашем случае с Hacker News все просто, и нам не нужно беспокоиться об этих проблемах.
Если вам нужно делать снимки экрана в масштабе, не стесняйтесь попробовать наш новый API снимков экрана здесь.
Ожидание присутствия элемента
Работа с веб-сайтом, который использует большое количество JavaScript для отображения своего контента, может быть сложной задачей. В наши дни все больше и больше сайтов используют такие фреймворки, как Angular, React и Vue.js, для своего внешнего интерфейса. С этими интерфейсными фреймворками сложно работать, потому что они запускают множество вызовов AJAX.
- Используйте time.sleep(ARBITRARY_TIME) перед тем, как сделать снимок экрана.
- Используйте объект WebDriverWait.
Если вы используете time.sleep(), вы, вероятно, будете использовать произвольное значение. Проблема в том, что вы либо слишком долго ждете, либо недостаточно. Кроме того, веб-сайт может медленно загружаться при локальном подключении к Интернету через Wi-Fi, но на вашем облачном сервере он будет загружаться в 10 раз быстрее. С помощью метода WebDriverWait вы будете ждать ровно столько времени, сколько необходимо для загрузки вашего элемента/данных.
Это будет ждать пять секунд для загрузки элемента, расположенного по идентификатору "mySuperId". Есть много других интересных ожидаемых условий, таких как:
- element_to_be_clickable
- text_to_be_present_in_element
- element_to_be_clickable
Дополнительную информацию об этом можно найти в документации по Selenium
Выполнение JavaScript
Иногда вам может потребоваться выполнить на странице какой-либо Javascript. Например, предположим, вы хотите сделать снимок экрана с некоторой информацией, но сначала вам нужно немного прокрутить страницу, чтобы увидеть ее. Вы можете легко сделать это с помощью Selenium:
Использование прокси с Selenium Wire
К сожалению, обработка прокси-сервера Selenium довольно проста. Например, он не может обрабатывать прокси с аутентификацией по умолчанию.
Чтобы решить эту проблему, вам нужно использовать Selenium Wire. Этот пакет расширяет привязки Selenium и дает вам доступ ко всем базовым запросам, сделанным браузером. Если вам нужно использовать Selenium с прокси-сервером с аутентификацией, этот пакет вам нужен.
В этом фрагменте кода показано, как быстро использовать автономный браузер за прокси-сервером.
Блокировка изображений и JavaScript
С помощью Selenium, используя правильные параметры Chrome, вы можете заблокировать выполнение некоторых запросов.
Это может быть полезно, если вам нужно ускорить парсеры или уменьшить использование полосы пропускания.
Для этого вам нужно запустить Chrome со следующими параметрами:
Заключение
Надеюсь, вам понравилась эта запись в блоге! Теперь у вас должно быть хорошее представление о том, как Selenium API работает в Python.Если вы хотите узнать больше о том, как парсить веб-страницы с помощью Python, обязательно ознакомьтесь с нашим общим руководством по парсингу веб-страниц на Python.
Еще одно интересное чтение – наше руководство по Puppeteer с Python. Puppeteer — это API для управления Chrome, он намного мощнее, чем Selenium (он поддерживается непосредственно командой Google).
Selenium часто необходим для извлечения данных с веб-сайтов, использующих большое количество Javascript. Проблема в том, что запуск большого количества экземпляров Selenium/Headless Chrome в масштабе затруднен. Это одна из проблем, которую мы решаем с помощью ScrapingBee, нашего API парсинга веб-страниц
Selenium также является отличным инструментом для автоматизации почти всего в Интернете.
Если вы выполняете повторяющиеся задачи, такие как заполнение форм или проверка информации в форме входа, когда на веб-сайте нет API, возможно* рекомендуется автоматизировать их с помощью Selenium, просто не делайте этого. не забудь этот xkcd:
Кевин 10 лет работал в сфере парсинга веб-страниц, прежде чем стал одним из основателей ScrapingBee. Он также является автором руководства Java Web Scraping Handbook.
В гибкой среде разработчики стараются быстро вносить изменения. При каждом изменении, требующем модификации внешнего интерфейса, им необходимо запускать соответствующие кросс-браузерные тесты. В то время как небольшой проект может выбрать ручное тестирование, все большее число браузеров делают выбор в пользу автоматического тестирования. В этом посте мы представляем пошаговое руководство по тестированию веб-автоматизации с помощью Selenium и Python.
Selenium позволяет определять тесты и автоматически определять результаты этих тестов в заранее определенном браузере. Набор функций Selenium позволяет создавать пошаговые взаимодействия с веб-страницей и оценивать реакцию браузера на различные изменения. Затем вы можете решить, соответствует ли ответ браузера вашим ожиданиям.
В этом посте предполагается, что у вас нет предварительных знаний о Selenium. Тем не менее, требуется базовое знание интерфейсных концепций, таких как DOM, и знакомство с Python.
Предварительные условия для запуска тестов Selenium с Python
Самый простой способ установить Selenium в среде Python — через установщик.
Если вы планируете только локально тестировать Selenium, достаточно загрузить пакет и драйверы. Однако, если вы хотите установить Selenium на удаленном сервере, вам дополнительно потребуется установить Selenium Server. Selenium Server написан на Java, и вам потребуется JRE 1.6 или выше, чтобы установить его на свой сервер. Он доступен на странице загрузки Selenium.
Как запустить автоматизированный тест с помощью Selenium и Python?
После того как вы выполнили раздел предварительных условий, вы готовы начать свой первый тест в Selenium с языком программирования Python!
<р>1. Сначала импортируйте классы webdriver и Keys из Selenium.Класс webdriver подключит вас к экземпляру браузера, о котором мы вскоре расскажем. Класс Keys позволяет эмулировать нажатие клавиш клавиатуры, включая специальные клавиши, такие как «Shift» и «Return».
<р>2. Затем создайте экземпляр Chrome с путем к драйверу, который вы загрузили с веб-сайтов соответствующего браузера. В этом примере предполагается, что драйвер находится в том же каталоге, что и скрипт Python, который вы будете выполнять.Если вы тестируете на своем локальном компьютере, экземпляр Chrome открывается локально. Эта команда позволяет выполнять на нем тесты до тех пор, пока вы не используете метод .close() для завершения соединения с браузером.
Если вы хотите попробовать локальное тестирование с помощью нашего BrowserStack Automate, ознакомьтесь с этой документацией.
<р>3. Затем используйте метод драйвера .get() для загрузки веб-сайта. Вы также можете загрузить локальный сайт разработки, поскольку этот процесс эквивалентен открытию окна Chrome на локальном компьютере, вводу URL-адреса и нажатии Enter. Метод .get() не только начинает загрузку веб-сайта, но и ожидает его полного отображения, прежде чем перейти к следующему шагу. <р>4. После успешной загрузки страницы вы можете использовать атрибут .title для доступа к текстовому заголовку веб-страницы. Если вы хотите проверить, содержит ли заголовок определенную подстроку, вы можете использовать операторы assert или if. Для простоты напечатаем заголовок страницы.Вывод представляет собой следующий текст –
Если вы запускаете тест в интерпретаторе Python, вы заметите, что окно браузера Chrome все еще активно. Кроме того, в сообщении Chrome говорится, что в данный момент им управляет автоматизированное программное обеспечение.
<р>5. Далее давайте отправим запрос в строку поиска.Сначала выберите элемент из HTML DOM, введите в него значение и отправьте форму, эмулируя нажатие клавиши «Return». Вы можете выбрать элемент, используя его класс CSS, идентификатор, атрибут имени или даже имя тега. Если вы проверите источник строки поиска запроса, вы заметите, что атрибут name этого элемента DOM — «q». Поэтому для выбора элемента можно использовать метод .find_element_by_name() следующим образом. <р>6. После выбора элемента DOM сначала необходимо очистить его содержимое с помощью метода .clear(), ввести строку в качестве его значения с помощью метода .send_keys() и наконец, эмулируйте нажатие клавиши возврата с помощью Keys.RETURN.Также прочтите: Хотите узнать о других вариантах использования SendKeys в Selenium? Проверьте это.
Вы заметили в окне, что эти действия вызывают изменение URL-адреса с результатами поиска в окне. Чтобы подтвердить текущий URL-адрес окна, вы можете использовать следующую команду.
Отображается следующая строка –
Чтобы закрыть текущий сеанс, используйте метод .close(). Это также разрывает связь с браузером.
В этом примере мы рассмотрели этапы запуска нашего первого теста с использованием Selenium и Python. Обратите внимание, что мы оставили это окно открытым на всех этапах тестирования, чтобы вы знали, что происходит в фоновом режиме при выполнении каждой команды.
В полностью автоматизированном потоке вы будете запускать несколько тестов последовательно и, следовательно, не сможете просмотреть каждый шаг по мере их выполнения.
Подводя итог обсуждению, вот ваш первый тест Selenium на Python. Вы можете сохранить его в файле selenium_test.py и запустить python selenium_test.py для запуска теста.
Навигация по элементам HTML DOM
Теперь, когда вы успешно выполнили свой первый тест в Selenium с Python, давайте рассмотрим различные варианты выбора элементов DOM и взаимодействия с ними. В примере мы выбрали панель поиска и запросили строку. Изучим выбор дальше. Вот HTML-код строки поиска.
В этом примере мы использовали метод .find_element_by_name(), который ищет имя атрибута во входном теге HTML. Мы также можем искать этот термин, используя другие методы.
- Идентификатор CSS: .find_element_by_id("id-search-field")
- Путь DOM: .find_element_by_xpath("//input[@id='id-search-field']")
- Класс CSS: .find_element_by_class_name("поле поиска")
Хотя идентификатор CSS уникален для каждого элемента по дизайну, вы можете найти несколько результатов при поиске по имени класса. Кроме того, когда вы выполняете поиск по пути DOM к элементу, вы можете быть уверены в том, что ищете.
Знаете ли вы: разница между findElement и findElements? Узнайте.
Навигация по окнам и фреймам
Вашему веб-приложению может потребоваться работа с несколькими окнами и фреймами. Распространенные случаи использования при работе в новых окнах — это вход в социальные сети и загрузка файлов. Метод драйвера .switch_to_window() поможет вам изменить активное окно и выполнять различные действия в новом окне. Код, который переключает фокус на новое окно:
Если значение не сохранено в целевом атрибуте, вы можете использовать дескриптор окна, который однозначно идентифицирует все открытые окна в вашем драйвере. Чтобы просмотреть список всех оконных дескрипторов, выполните следующее:
Аналогичным образом вы можете переключить фокус на фрейм внутри окна с помощью метода .switch_to_frame(). Чтобы вернуться к основному окну после выполнения соответствующих действий, выполните следующее.
Обратите внимание, что все действия в этом разделе изменяют состояние драйвера и ничего не возвращают. Поэтому мы не сохраняем значения в переменной, а вместо этого вызываем методы.
Работа с временем простоя во время теста
Хотя мы рассмотрели различные тесты в статических веб-приложениях, одностраничное приложение может потребовать, чтобы вы ждали определенное время, пока вы не выполните действие.
В Selenium существует два типа ожидания: неявное и явное ожидание. Явное ожидание заставляет ваш драйвер ожидать завершения определенного действия (например, загрузка контента с использованием AJAX). Неявное ожидание заставляет драйвер ожидать определенное время.
Для явного ожидания вам нужно использовать блок try-finally, потому что это потенциально может привести к тому, что ваш тест застрянет в наихудшем сценарии. По сути, вы указываете водителю ждать определенного элемента в течение заданного времени, прежде чем отпустить его.
Сначала используйте функцию WebDriverWait(), чтобы указать драйверу подождать пять секунд. Затем вы проверяете загрузку нового элемента с помощью метода .presence_of_element_located() класса expected_conditions, который вы можете запросить через By.ID. Хотите узнать больше об ExpectedConditions в Selenium?
В случае неявного ожидания необходимо использовать метод драйвера .implicitly_wait() и указать количество секунд, в течение которых драйвер будет ожидать.
Как интегрировать Selenium с модульными тестами Python
Давайте попробуем понять, как интегрировать тесты Selenium в модульные тесты Python. Для этой цели мы будем использовать модуль модульного тестирования в Python.
Как запускать тесты Selenium с помощью Python в BrowserStack
Чтобы запустить Selenium на реальных устройствах через BrowserStack, сначала необходимо зарегистрироваться в BrowserStack. Вы получаете 100 минут бесплатного тестирования в рамках бесплатного плана, после чего вам необходимо подписаться на ежемесячный план.
Совет для профессионалов. Хотите глубже изучить реализацию Selenium в BrowserStack с помощью бесплатных интерактивных курсов и лабораторных упражнений? Посетите тестовый университет
При входе в систему выберите «BrowserStack Automate» и задайте комбинацию «устройство-браузер», на которой вы хотите запустить тест. Затем вам будет показан пример кода, который нужно скопировать и запустить с вашего терминала для запуска теста.
Давайте рассмотрим отличия от того, что мы уже обсуждали в этой статье.
- Во-первых, вы заметите, что тест проводится на удаленном сервере, а не на вашем локальном компьютере. Следовательно, вы используете метод .Remote() для вызова определенного URL-адреса с нужными вам настройками. Selenium Server устанавливается в облаке BrowserStack, которое обеспечивает инициализацию соответствующего браузера и устройства для тестирования. После запуска драйвера вы уже знакомы с остальными командами.
Знаете ли вы: разница между Selenium Standalone Server и Selenium Server? Узнайте.
Ниже приведен вывод кода, как и ожидалось. BrowserStack также позволяет просматривать видео теста, выполняемого на устройстве, в режиме реального времени с панели управления.
Ограничения тестов Selenium Python
Хотя Selenium помогает автоматизировать тесты и экономить драгоценное время, у него есть свои ограничения. Даже с таким надежным набором тестов вы часто оказываетесь в неловком положении из-за постоянно меняющегося характера интерфейсных технологий.
Вот пять главных проблем, с которыми приходится сталкиваться при автоматизации процесса тестирования с помощью Selenium.
Заключительные мысли
В этой статье мы рассмотрели различные методы автоматизации процесса кроссбраузерного тестирования с помощью Selenium с использованием языка программирования Python. Пока мы обсудили нюансы поддержки браузерами, навигацию по DOM, ожидания и модульные тесты. Наконец, мы рассмотрели, как выполнять удаленное тестирование в BrowserStack.
Даже со всеми знаниями о том, как работает среда Selenium, ваша среда тестирования настолько надежна, насколько надежны тесты, которые вы разрабатываете. Автоматизация процесса тестирования экономит много времени во время тестирования, поэтому вы должны убедиться, что вы тратите значительное время на разработку тестов, чтобы охватить все возможные сценарии. Всегда лучше обнаружить ошибку на этапе тестирования, чем подавать жалобу от клиента.
Эта статья является частью нашего Content Hub. Для получения более подробных ресурсов посетите наш центр контента Selenium Python Tutorial.
В этом подробном руководстве по Selenium Python мы рассмотрим ряд тем, таких как основы Selenium WebDriver, Selenium WebDriver с Python, Selenium WebDriver и Selenium RC и многое другое.
Приступим к делу, хорошо?
Если вы новичок в Selenium и вам интересно, что это такое, рекомендуем ознакомиться с нашим руководством – Что такое Selenium?
СОДЕРЖАНИЕ
Что такое Selenium WebDriver?
Веб-страница состоит из различных веб-элементов, таких как текстовые поля, флажки, кнопки и т. д. Веб-автоматизированное тестирование включает в себя автоматизацию задач, которые должны выполняться с этими веб-элементами. Selenium WebDriver – это популярная веб-среда автоматизированного тестирования, которая в основном используется для автоматизации задач, связанных с тестированием веб-интерфейса пользователя.
Selenium WebDriver не взаимодействует напрямую с веб-элементами на странице. Selenium WebDriver для конкретного браузера действует как мост между тестовым скриптом и веб-браузером. Selenium WebDriver — это основной компонент, который взаимодействует с веб-браузером. Локаторы Selenium используются для поиска элементов на странице, чтобы можно было использовать соответствующие методы для взаимодействия с элементом.
Mozilla Firefox — веб-браузер по умолчанию для Selenium WebDriver.
Архитектура Selenium WebDriver
Понимание связи между различными блоками Selenium необходимо, прежде чем изучать Selenium WebDriver с Python. API-интерфейсы Selenium WebDriver используются для связи между языками программирования и веб-браузерами.
Архитектура Selenium WebDriver состоит из следующих блоков:
- Клиентские библиотеки Selenium
- Проводной протокол JSON
- Драйверы браузера
- Браузеры
Давайте подробно рассмотрим каждый из этих компонентов:
Клиентские библиотеки Selenium
Как упоминалось ранее, разработчики могут использовать Selenium для автоматического тестирования популярных языков программирования. Клиентские библиотеки Selenium или языковые привязки Selenium делают эту многоязычную поддержку возможной в Selenium.
Основное внимание в этом руководстве по Selenium Python уделяется использованию Selenium WebDriver с Python. Следовательно, нам потребуются языковые привязки для Python. Языковые драйверы для языков программирования, включая Python, можно загрузить с официального сайта Selenium для клиентских библиотек.
Проводной протокол JSON
Драйверы браузера
Драйверы браузера в первую очередь отвечают за связь с соответствующим веб-браузером. У каждого браузера есть свой драйвер браузера, и его необходимо установить на машину, на которой будет выполняться автоматизированное тестирование.
Поскольку связь с веб-браузером происходит через драйвер браузера, внутренняя логика браузера не раскрывается. Драйвер браузера добавляет необходимый уровень абстракции во взаимодействие с браузером.
Браузеры
Selenium можно использовать с популярными браузерами, такими как Chrome, Firefox, Internet Explorer, Microsoft Edge и т. д. Платформу нельзя использовать для браузеров, для которых драйвер браузера недоступен.
Набор инструментов Selenium
Версия Selenium v1 состояла из IDE, RC и Selenium Grid. Последняя стабильная версия Selenium — 3.141.59, а альфа-версия Selenium 4 — 4.0.0-alpha-6. Все клиентские библиотеки Selenium совместимы с Selenium 4.
Selenium WebDriver был представлен в Selenium v2, а Selenium RC устарел в Selenium 3. Selenium RC имеет более сложную архитектуру, а также уступает в производительности.
Selenium Suite состоит из следующих компонентов:
- Интегрированная среда разработки Selenium (IDE)
- Selenium Remote Control (RC)
- Selenium WebDriver
- Селеновая сетка
Давайте рассмотрим каждый из этих компонентов более подробно в этом разделе руководства по Selenium Python:
Selenium IDE
Selenium IDE – популярный инструмент для тестирования воспроизведения и записи. Ранее он был доступен только в виде плагина для Firefox, но теперь Selenium IDE также доступен в виде надстройки для Chrome.
В текущей версии Selenium IDE есть инструмент командной строки (SIDE Runner), который позволяет запускать проект .side на платформе Node.js. Selenium WebDriver требуется, если вы хотите создавать тестовые сценарии с помощью Selenium IDE.
Селен RC
Selenium RC считался основным компонентом Selenium до появления Selenium WebDriver в Selenium v2. Selenium RC получил широкое признание, поскольку он мог преодолеть политику одного и того же происхождения, которая вызывала серьезные проблемы при выполнении тестирования веб-автоматизации. Политика того же источника была введена в целях безопасности и гарантировала, что содержимое веб-страницы недоступно для сценария из другого домена (или сайта).
Selenium RC Server был разработан для обмана браузера, чтобы он считал, что тестируемое веб-приложение и Selenium Core принадлежат к одному и тому же домену.
Чтобы обойти ограничение безопасности JavaScript (или политику того же источника), использовался режим внедрения прокси. Здесь Selenium RC Server находится между браузером и тестируемым веб-сайтом (или приложением) и маскирует тестовый кандидат (веб-сайт или приложение) под вымышленным URL-адресом.
Эти изменения не только усложнили архитектуру, но и привели к увеличению времени выполнения теста. Следовательно, Selenium RC официально объявлен устаревшим.
Selenium WebDriver
Selenium WebDriver появился в Selenium v2. Поскольку Selenium WebDriver взаимодействует с веб-браузером с помощью соответствующего драйвера браузера, для него не требуется такой компонент, как Selenium RC Server (как в Selenium RC).
Selenium WebDriver для популярных браузеров можно скачать по ссылкам, указанным ниже:
В следующих разделах этого руководства по Selenium WebDriver мы рассмотрим использование Selenium WebDriver с инфраструктурой Python, такой как PyTest.
Селеновая сетка
Selenium Grid позволяет запускать тесты в разных сочетаниях браузеров, операционных систем и устройств.Параллельное выполнение тестов можно выполнять с помощью Selenium Grid, так как тесты могут выполняться параллельно для разных комбинаций браузера и ОС.
Selenium Grid использует архитектуру концентратора и узла, где концентратор является ведущим, а один или несколько узлов — подчиненными. Selenium Grid 4, который все еще находится на стадии альфа-тестирования, поддерживает автономный режим, полностью распределенный режим и традиционный режим концентратора и узла.
LambdaTest предлагает онлайн-сеть Selenium Grid, которую можно использовать для проведения интерактивного кросс-браузерного тестирования общедоступных или локально размещенных веб-сайтов и веб-приложений в более чем 2000 реальных мобильных и настольных браузерах, работающих в реальной операционной системе.
Эта сертификация предназначена для профессионалов, которые хотят получить передовые практические знания в области автоматизированного тестирования Python с помощью Selenium и вывести свою карьеру на новый уровень.
Вот краткий обзор сертификации Selenium Python 101 от LambdaTest:
Разница между Selenium WebDriver и Selenium RC
Несмотря на то, что Selenium RC (Remote Control) и Selenium WebDriver являются инструментами автоматизации тестирования, поддерживающими разные языки программирования, они сильно различаются по многим аспектам. Основное различие заключается в архитектуре обоих этих инструментов.
1. Архитектура
Selenium RC работает одинаково независимо от браузера, в котором выполняются тесты. При выполнении тестового скрипта на Selenium RC выполняются следующие операции:
- Selenium RC Server внедряет код JavaScript, также называемый Selenium Core, в веб-браузер.
- При получении команд от Selenium RC Server Selenium Core выполняет эти инструкции как команды JavaScript.
- Браузер, в котором выполняется тест, выполняет команды из Selenium Core и возвращает сводку выполнения теста на сервер Selenium RC.
Это усложнило архитектуру Selenium RC. С другой стороны, Selenium WebDriver не внедряет никаких пользовательских скриптов, а работает напрямую с веб-браузерами, используя соответствующие драйверы браузеров. Selenium WebDriver является преемником Selenium RC.
2. Скорость выполнения теста
Selenium WebDriver напрямую обращается к веб-браузеру, используя драйверы браузера для этого конкретного браузера. Следовательно, Selenium WebDriver намного быстрее с точки зрения скорости выполнения тестов, поскольку он следует упрощенной архитектуре (т. е. модели концентратора и узла) по сравнению с Selenium RC.
3. Встроенный механизм отчетов
Selenium RC предоставляет автоматизированный HTML-файл, содержащий результаты тестирования, тогда как функция создания отчетов по умолчанию недоступна в Selenium WebDriver.
Однако отчеты о тестировании можно легко создавать с помощью Selenium WebDriver при использовании с такими средами автоматизации тестирования, как TestNG, PyTest и т. д.
4. Автоматизация безголового браузера
Selenium WebDriver поддерживает тестирование в браузерах HTMLUnit (или безголовых браузерах), тогда как Selenium RC не поддерживает его.
5. Простота использования
Selenium WebDriver имеет широкий набор удобных и очень простых в использовании команд. С другой стороны, Selenium RC предлагает ограниченный набор команд, которые не так удобны для пользователя по сравнению с Selenium WebDriver.
6. Поддержка новых браузеров
Selenium WebDriver взаимодействует с веб-браузером через соответствующий драйвер браузера. Он использует встроенную поддержку браузера для автоматизации. Следовательно, Selenium WebDriver работает в тех веб-браузерах, для которых доступны драйверы браузера (например, ChromeDriver для Chrome, GeckoDriver для Firefox и т. д.).
Конфигурация нового браузера должна быть реализована как часть выпуска Selenium WebDriver. Selenium RC не имеет этого ограничения, так как в его архитектуре нет такого компонента, как драйвер браузера.
ЗАПУСКАЙТЕ СВОЙ СКРИПТ Python НА SELENIUM GRID
Более 2000 браузеров и ОС
Автоматизированное тестирование с помощью Selenium Python
Теперь, когда у вас есть подробное представление о Selenium WebDriver, мы переходим к той части, где мы покажем, как использовать Selenium WebDriver с Python. Мы начинаем этот раздел руководства Selenium Python Tutorial с настройки Selenium, Python и т. д. в Windows для веб-автоматизации Python.
Настройка Selenium WebDriver с Python
Выполните указанные ниже шаги для настройки среды разработки для Selenium WebDriver с Python:
- Загрузите Python для Windows, а затем установите его. Пропустите этот шаг, если на вашем компьютере уже установлен Python.
- Для установки любого пакета Python и управления им на компьютере должен быть установлен PIP. PIP — это система управления пакетами в Python. Чтобы установить pip в Windows, загрузите get-pip.py и сохраните его на своем компьютере.Теперь перейдите в каталог, в который загружен и сохранен get-pip.py, и выполните следующую команду на терминале, чтобы установить его:
Вы можете проверить успешность установки PyTest, выполнив следующую команду:
Ниже показан вывод вышеуказанной команды.
Следующая команда помогает получить версию Selenium, установленную для Python:
Вот вывод приведенной выше команды, который подтверждает версию Selenium, установленную на компьютере:
Всегда рекомендуется загружать WebDriver браузера (в нашем случае Chrome WebDriver) в место, где установлен соответствующий браузер. Таким образом, вам не нужно будет указывать путь при создании экземпляра Chrome WebDriver.
Демонстрация автоматизированного тестирования Selenium с помощью Python
В этом руководстве по Selenium Python для демонстрации мы использовали следующий тестовый сценарий:
Реализация
Прохождение кода
Строки (1–6): такие модули, как pytest, sys, selenium и т. д., импортируются перед реализацией метода тестирования.
Строки (13): метод driver.maximize_window() используется для максимизации окна браузера.
Строки (15–16): «Инструмент проверки» в Chrome используется для поиска нужного элемента на веб-странице.
После того, как элементы найдены, метод click() используется для выполнения необходимой операции.
Строки (21–23): веб-элемент (например, текстовое поле), в который нужно ввести текст «Удачного тестирования на LambdaTest», находится с помощью «Inspect Tool» в Chrome.
Метод find_element_by_id() используется с вводом в качестве идентификатора элемента, который мы нашли с помощью «Инструмента проверки». Метод driver.send_keys() используется для ввода образца текста «Счастливого тестирования в LambdaTest» в тексте. поле с идентификатором 'sampledotext.'
Строка (26): кнопка «Добавить» на странице находится с помощью свойства ID. Выполняется метод Selenium click() для добавления в список текста «Удачного тестирования на LambdaTest».
Строка (33): Selenium-метод driver.close() используется для закрытия окна браузера, находящегося в фокусе. Это освободит ресурсы, удерживаемые экземпляром WebDriver.
Выполнение
Перейдите в каталог, где находится тестовый код, и выполните следующую команду на терминале
Опция –verbose используется для установки уровня детализации по умолчанию. Опция –capture используется для захвата только stderr, а не stdout.
Вот снимок выполнения теста, показывающий, что тест ПРОШЕЛ.
Ограничение Selenium WebDriver
Теперь, когда вы знаете, что такое Selenium WebDriver и чем он лучше Selenium RC, давайте рассмотрим недостатки, связанные с Selenium WebDriver.
- Selenium WebDriver не поддерживает автоматизацию приложений для Windows.
- Selenium WebDriver нельзя использовать для автоматизации работы с изображениями, проверкой проверки подлинности или функциями одноразового пароля.
- Selenium WebDriver не поддерживает встроенный механизм создания отчетов.
- В основном вам нужно полагаться на форумы сообщества при возникновении сомнений и технических вопросов, поскольку исходный код Selenium WebDriver является открытым.
- Чтобы использовать Selenium WebDriver, необходимо знание хотя бы одного из поддерживаемых языков.
- Selenium WebDriver не обеспечивает интеграцию инструментов тестирования для облегчения управления тестированием.
- Параллельное тестирование не поддерживается Selenium WebDriver, поэтому его очень сложно использовать для больших и сложных наборов тестов.
Эти ограничения Selenium WebDriver подтолкнули пользователей к следующему компоненту Selenium, то есть Selenium Grid.
Как Selenium Grid помогает преодолеть ограничения WebDriver
Чтобы проверить скорость отклика нашего веб-сайта, нам может потребоваться запустить сценарии автоматического тестирования в нескольких браузерах, операционных системах и устройствах. Именно здесь на сцену выходит Selenium Grid.Selenium Grid позволяет нам избавиться от нескольких локальных настроек для различных желаемых комбинаций, которые нам нужно протестировать. Selenium Grid также позволяет нам выполнять параллельное тестирование, отправляя команды удаленным экземплярам веб-браузера с центрального сервера.
Недостатки локальной сети Selenium
Несмотря на то, что Selenium Grid полезен для автоматизированного тестирования (особенно кроссбраузерного), локальная Selenium Grid требует постоянного обслуживания. Объем тестирования может быть ограничен, так как поддержание физической инфраструктуры, учитывающей все комбинации браузеров, версий браузеров и операционных систем, может потребовать огромных инвестиций.
Локальный Selenium Grid также необходимо регулярно обновлять новыми версиями браузера и последней версией Server Grid. Следовательно, поддержание собственной Selenium Grid сопряжено с огромными рекурсивными затратами.
Облачная Selenium Grid
Миграция на облачную Selenium Grid, например LambdaTest, позволяет выполнять автоматическое тестирование веб-сайтов (или веб-приложений) независимо от физической инфраструктуры. LambdaTest позволяет выполнять кроссбраузерное тестирование в более чем 2000 сочетаний браузеров, операционных систем и реальных устройств.
Помимо лучшего покрытия тестами, тестовый код также может использовать преимущества параллельного тестирования в LambdaTest. Это сокращает общее время, затрачиваемое на автоматизированное тестирование. Тестирование в облачной Selenium Grid также избавляет от необходимости приобретать и поддерживать внутреннюю инфраструктуру. Поскольку существуют различные планы, вы можете выбрать наиболее подходящий план в зависимости от бюджета проекта и требований.
Запуск тестов автоматизации Selenium Python в онлайн-облачной сети Selenium Grid
Теперь давайте посмотрим, как запускать тесты автоматизации, написанные с помощью Selenium WebDriver с Python, в онлайн-облачной Selenium Grid. Мы будем использовать облачную платформу LambdaTest Selenium Grid в качестве платформы для тестирования Selenium Python.
Давайте посмотрим, как запустить наш автоматический тест на LambdaTest шаг за шагом:
-
на ЛямбдаТест. Если у вас уже есть учетная запись, войдите в нее.
- Получите имя пользователя и ключ доступа из профиля или с помощью значка ключа на панели автоматизации и сохраните их в переменных среды вашей системы.
- Получите необходимые сведения о среде Selenium Grid Cloud с помощью генератора возможностей LambdaTest. В этом примере мы использовали следующую возможность:
Кто-то задает вам сложные вопросы, например: "Можете ли вы запустить свои тесты в Firefox?" или "Можете ли вы запустить его с другим разрешением экрана?" У вас есть готовая среда, и вы хотите перейти к следующему шагу? Вот список наиболее важных вещей, которые вы можете настроить в браузере, чтобы сделать вашу автоматизацию тестирования более гибкой и надежной. Прежде чем начать, убедитесь, что у вас установлены пакеты pytest и selenium. Вам также понадобится chromedriver для Chrome и geckodriver для Firefox (здесь вы можете посмотреть, как настроить свою среду).
Для запуска браузеров вам необходимо создать драйвер селена:
Для Chrome:
Для Firefox:
Запуск вашего движка таким образом позволит нам изменить некоторые полезные параметры в вашем браузере. На самом деле вы всегда должны открывать браузер для автоматизации с помощью оператора with:
В инициализации мы игнорируем, где находится исполняемый файл драйвера для нашего браузера. Мы также создаем параметры для движка, которые позволят нам позже изменить наш браузер. Вы также можете указать папку, в которую будет сохраняться скриншот последней страницы, посещенной браузером (если в тесте была ошибка). Это создаст файл png в заданной папке с именем, которое будет взято из теста, создавшего этот класс.
Тогда вы можете использовать его как:
Если все работает правильно, мы можем начать возиться с настройками браузера.
Открыть окно в полном размере:
Основные параметры, позволяющие запускать браузер в развернутом виде. Это очень полезно для базовых тестов, которые будут использовать максимально возможное разрешение экрана на любой машине, на которой вы будете запускать свои тесты.
Для Chrome:
Для Firefox:
Открыть окно с заданным размером окна:
Для Chrome:
Для Firefox:
Открыть браузер в автономном режиме:
Один из самых полезных вариантов. С его помощью вы можете запускать браузеры в автономном режиме, чтобы вас не раздражали окна, всплывающие в фоновом режиме, когда вы готовите тесты.
Хром:
Firefox:
Настроить Firefox на автономный режим сложнее — вам нужно изменить его в настройках вашей операционной системы:
Изменить каталог загрузки для браузера:
Этот параметр можно использовать для некоторых тестов, когда вы хотите проверить правильность загруженных тестов и не хотите создавать много беспорядка на своем компьютере. Просто создайте папку «Загрузки» в папке вашего проекта, и вы сможете легко хранить все загруженные файлы в одном месте (без сложного процесса их перемещения). Переменная download_path должна содержать путь к папке, которую вы хотите использовать.
Для Chrome:
Для Firefox:
В Firefox это немного сложнее. Сначала нам нужно задать для browser.download.folderList значение 2 (0 — сохранить на рабочем столе, 1 — сохранить в загрузках, 2 — сохранить в последней указанной папке
Мы не можем щелкнуть всплывающее окно загрузки браузера с движком Selenium, поэтому нам нужно отключить его:
Нам нужно указать папку, в которую мы хотим скачать файлы:
Нам также необходимо указать тип файлов, которые мы разрешаем загружать, используя типы MIME (в этом примере любой поток байтов и файлы PDF
Нам также необходимо отключить всплывающие окна безопасности при загрузке файлов «октетного потока» или любых других файлов, которые потенциально могут нанести вред вашему компьютеру.
Если вы хотите использовать PDF-файлы, вам также необходимо отключить программу чтения PDF-файлов по умолчанию, чтобы она загружала файлы, а не открывала их.
Читайте также:
- Код ошибки 0x4004f00d при активации Microsoft Office 2016
- Ошибка при открытии справки в программах Windows. Компонент не включен или справка не поддерживается
- Поиск по двум столбцам Excel
- Программа управления дисками Acronis Disk Director 11 Home
- Microsoft sql server 2005 что это за программа и нужна ли она