Python – один из самых популярных языков для веб-автоматизации с Selenium, поскольку в нем есть упрощенный синтаксис, который позволяет выполнять больше задач за меньшее количество строк кода! Таким образом, Python и Selenium создают идеальную комбинацию для автоматизированного тестирования в вебе. Начнем с того, что Selenium – это открытый фреймворк, который в основном используется для автоматизации взаимодействия с веб-элементами в AUT (Application Under Test). Наряду с Python, Selenium также поддерживает Java, C#, JavaScript, Ruby и PHP. Однако, по своему опыту скажу, что Python – лучший вариант для веб-автоматизации в комбинации с Selenium. Все больше разработчиков, как и я в свое время, осваивают Python, который считается третьим по популярности языком, если верить опросу Stack Overflow Developer Survey 2021. Поэтому шпаргалка по Selenium с Python может служить для ознакомления с полезным API для автоматизации веб-сайтов (или веб-приложений). Если в Selenium вы новичок и вам интересно, что же это такое, мы рекомендуем ознакомиться с нашим руководством What is Selenium?. В этой статье мы разберемся с модулем в Python, который предоставляет нам функционал Selenium WebDriver. Для установки пакета Selenium WebDriver мы воспользуемся Python Package Index (PyPI). Выполните в терминале следующую команду, чтобы установить Selenium для Python: Если вы хотите запускать свои сценарии тестирования онлайн с Selenium Grid, воспользуйтесь LambdaTest для автоматизации тестирования.  Эта библиотека Python оборачивает Selenium WebDriver и предоставляет методы для автоматизации целого ряда задач, таких как заполнение форм, вход на сайт, нажатие на кнопки и многое другое. Кроме того, вы можете ознакомиться с руководством по Selenium с Python, в котором подробно рассматриваются неотъемлемые аспекты Selenium Python с точки зрения автоматизации веб-тестирования. Команды, которые вы увидите в шпаргалке, можно использовать в качестве удобного ресурса для всех, кто играется с Selenium на Python для автоматизации веб-приложений. Если вам нужно краткое описание работы Selenium в Python, ознакомьтесь с руководством, в котором подробно рассматривается архитектура Selenium WebDriver и освещаются неотъемлемые аспекты, связанные с Selenium WebDriver в Python. Итак, давайте начнем нашу шпаргалку! Импортируем библиотеку Selenium Перед тем, как начать пользоваться командами Selenium, вам нужно импортировать пакет Selenium WebDriver. Инициализация дайвера в Python После загрузки соответствующего драйвера браузера вам необходимо запустить Selenium WebDriver и драйвер браузера (например, ChromeDriver для Chrome, GeckoDriver для Firefox и т.д.). Для Chrome Для Firefox Для Safari Для Internet Explorer Если местоположения драйвера браузера нет в переменной PATH (или если его нет в System Path), нужно добавить следующие аргументы: executable_path: Путь к вашему веб-драйверу Selenium (бинарный файл) options: Параметры, касающиеся выполнения веб-браузеров Пример: Настройка параметров Selenium WebDriver Класс Options в Selenium обычно используется в сочетании с желаемыми возможностями кастомизации Selenium WebDriver. Так вы можете выполнять различные операции, такие как открытие браузера (Chrome, Firefox, Safari, IE, Edge и т.д.) в режиме увеличения, включение и отключение расширений браузера, отключение режима GPU, отключение всплывающих окон и многое другое. Поэтому важно хорошо разобраться в этом разделе шпаргалки по Selenium в Python, поскольку так вы сможете решить проблемы автоматизации, связанные с изменением свойств браузера, о которых мы говорили ранее.  Для Chrome Импорт опций Chrome 2. Инициализация опций Chrome 3. Добавление желаемых возможностей 4.Добавление желаемых возможностей сессии Для Firefox Импорт опций Firefox 2. Инициализация опций Firefox 3. Добавление желаемых возможностей 4. Добавление желаемых возможностей сессии В основном локаторы в Selenium (https://www.lambdatest.com/learning-hub/selenium-locators) используются для определения местоположения веб-элементов из DOM. Соответствующие взаимодействия (или действия) в дальнейшем выполняются относительно найденных веб-элементов. Несколько популярных локаторов в Selenium - ID, Name, Link Text, Partial Link Text, CSS Selectors, XPath, TagName и т.д. В этом методе поиск элемента в DOM производится по ID. ID уникален для каждого элемента на странице. Таким образом, с помощью ID можно однозначно идентифицировать элемент. Например, ниже показано использование атрибута ID для поиска веб-элементов на странице входа в систему LambdaTest: Так вы можете воспользоваться атрибутом ID в Selenium: Элементы в HTML DOM еще можно найти по имени класса, который хранится в атрибуте класса HTML-тега. У класса может быть несколько экземпляров, но метод вернет первый элемент с соответствующим классом. Так можно использовать имя класса для определения местоположения элемента Email Address на странице LambdaTest: Веб-элементы, такие как открывающий тег, имеют связанный с ними атрибут Name. В Selenium есть метод поиска веб-элементов с помощью атрибута NAME. Если у нескольких элементов одинаковое имя, он вернет первое совпадение. Вот HTML-код, в котором есть элемент ввода имени Name. Ниже показано использование метода Selenium Python для определения местоположения веб-элемента с помощью атрибута NAME: XPath использует путь для выбора узлов и определения местоположения необходимого веб-элемента. Метод find_element_by_xpath() используется для поиска соответствующего элемента в документе с помощью XPath. Вы можете почитать руководство по XPath в Selenium, чтобы получить более глубокое представление об использовании XPath для поиска веб-элементов при автоматизации с Selenium. Ниже показан поиск элемента email с помощью атрибута XPath: Этот метод используется для поиска и выбора веб-элементов по HTML-тегу. Метод find_element_by_tag_name() используется для поиска таких тегов, как H1, DIV, INPUT и т.д. Если тег встречается несколько раз, он возвращает первый совпадающий. Ниже показан поиск элемента с email-адресом по тегу: Этот метод ищет элемент по тексту ссылки (целому или части). При поиске частичного текста ссылки не ищется точное совпадение со строковым значением, поскольку ищется подмножество строк (в тексте ссылки). Локатор текста ссылок в Selenium и частичного текста ссылок работает только со ссылками текущего веб-приложения. Ниже показан поиск элемента на странице входа LambdaTest с помощью локатора текста ссылок: Ниже показан поиск элемента на странице входа LambdaTest с помощью локатора частичного текста ссылок: Есть два метода, которые могут быть полезны для поиска элементов страницы в сочетании с классом «By» для выбора атрибутов. Обратите внимание, что нет никакой разницы между методами find_element_by_tag и find_element(By.tag). По умолчанию метод find_element_by_tag вызывает find_element(By.tag). find_element возвращает первый экземпляр из нескольких веб-элементов с определенным атрибутом в DOM. Метод вызывает исключение NoSuchElementException, если ни один элемент не соответствует требуемому локатору. Прочитайте статью о популярных исключениях Selenium, чтобы лучше понять, из-за чего они возникают.  find_elements возвращает список всех экземпляров веб-элементов, соответствующих определенному атрибуту. Список будет пустым, если в DOM нет нужных элементов. Ниже вы увидите список атрибутов, доступных для класса By: ID = “id” XPATH = “xpath” NAME = “name” TAG_NAME = “tag name” CLASS_NAME = “class name” LINK_TEXT = “link text” PARTIAL_LINK_TEXT = “partial link text” Дальше показан пример использования метода find_element, который использует локатор XPath для поиска нужного веб-элемента: Перед выполнением любых операций с веб-элементами, присутствующими на странице, важно открыть целевой URL-адрес (или тестовый URL-адрес). Далее вы увидите несколько способов открыть URL-адрес в Selenium с Python: Метод driver.get() переходит на страницу, которая передается методу в параметре. Selenium WebDriver будет ждать, пока страница не загрузится полностью, после чего он запустит событие «onload» и вернет управление сценарию тестирования. В статье Selenium Waits in Python вы можете найти дополнительную информацию про обработку ожиданий в Selenium. Бывают сценарии, в которых нужно обновлять содержимое страницы. Метод обновления страниц в Selenium WebDriver используется для обновления веб-страниц. Метод driver.refresh() обновляет текущую веб-страницу. Он не принимает никаких аргументов и не возвращает никаких значений. Метод send_keys() в Python используется для ввода текста в текстовый элемент. Такой текст передается методу в качестве аргумента. Тот же метод можно использовать для имитации нажатия клавиш в любом поле (например, в полях ввода формы). Пример использования send_keys(), в котором адрес электронной почты передается текстовому элементу на странице регистрации LambdaTest: Метод element.clear() в Selenium используется для удаления текста из полей, таких как поля ввода формы и т.д. Пример использования метода очистки содержимого поля ввода электронной почты на домашней странице LambdaTest: Метод element.click() в Selenium используется для нажатия на элемент, такой как ссылка-якорь, кнопка и т.д. Вот так с помощью метода click() можно нажать на кнопку на домашней странице LambdaTest: Перетаскивание объектов является одним из широко используемых сценариев в популярных приложениях (или программах), таких как Canvas, Google Drive, Trello, Asana и т.д. Метод drag_and_drop(элемент, цель) в Selenium помогает автоматизировать функционал перетаскивания веб-элементов из источника и переноса их в целевую область (или элемент). У класса Actions в Selenium есть два метода, с помощью которых вы можете выполнять операции перетаскивания при тестировании кроссбраузерной совместимости. Обязательно ознакомьтесь с нашим подробным руководством, в котором есть информация о том, как выполнять перетаскивание в Selenium. Вот простой пример использования метода drag_and_drop(): Select(элемент) предоставляет полезные методы для взаимодействия с раскрывающимися списками, выбора элементов и многого другого. Так можно выбрать элемент по индексу: Вот некоторые вариации выбора нужного элемента с помощью метода select_by_*(): Метод Описание select_by_index(индекс) Метод принимает целочисленное значение - индекс опции, которую мы хотим выбрать. select_by_visible_text(“text”) Метод принимает строковое значение и выбирает опцию, в которой есть нужный текст. select_by_value(значение) Метод принимает строковое значение и выбирает параметр с тем же значением атрибута. deselect_all() Метод позволяет отменить выбор всех выбранных опций. Если у вас несколько окон, может потребоваться переключаться между ними перед выполнением действий с веб-элементами из DOM. Метод switch_to_window() Selenium WebDriver позволяет переключиться на нужное окно. Дескриптор окна передается в качестве аргумента методу switch_to_window(). Все последующие вызовы WebDriver теперь применяются к окну в фокусе (или к новому окну после переключения). Свойство window_handles WebDriver возвращает дескрипторы окон. Теперь вы можете использовать метод switch_to_window() для перехода к любому окну из списка window_handles.  Метод current_window_handle() возвращает дескриптор текущего окна (или окна в фокусе). Selenium WebDriver не умеет получать доступ или находить веб-элементы внутри iFrame в контексте главной страницы. Следовательно, вам необходимо переключиться на iFrame, прежде чем обращаться к элементам внутри него. Метод switch_to_frame() в Selenium Python позволяет менять контекст WebDriver из контекста главной страницы. Также мы можем получить доступ к сабфреймам, добавив между путем и индексом точку. Метод позволяет возвращаться обратно к контексту главной страницы. Существует всего три основных типа всплывающих окон и предупреждений, которые обычно используются в веб-приложениях: Simple Alert Confirmation Alert Prompt Alert Вы можете переключиться на оповещение, отклонить его или принять. Ознакомьтесь нашим подробным руководством по обработке оповещений и всплывающих окон в Selenium. Несмотря на то, что там используется язык C#, основы остаются неизменными! Свойство switch_to.alert в WebDriver возвращает открытый в данный момент объект alert. Вы можете принять его, отклонить, прочитать содержимое или ввести его в командную строку. Как только у вас есть дескриптор окна alert (например, alert_obj), метод accept() поможет вам принять всплывающее окно предупреждения. После того как вы переключились на окно alert (например, alert_obj), вы можете использовать метод dismiss(), чтобы отклонить всплывающее окно предупреждения. Этот метод используется для извлечения сообщения из всплывающего окна предупреждения. Метод page_source() в Selenium WebDriver используется для получения кода страницы. Selenium WebDriver на Python предоставляет несколько функций для перемещения вперед-назад по истории браузера. Этот метод позволяет сценариям перемещаться на один шаг вперед по истории браузера. Этот метод позволяет сценариям перемещаться на один шаг назад по истории браузера. Обработка файлов cookie в Selenium WebDriver является одним из распространенных сценариев, с которым вам, возможно, придется иметь дело при автоматизации. Можно выполнять различные операции, такие как добавление, удаление, получение имени файла cookie и многое другое. Этот метод помогает настроить файл cookie для сессии Selenium. Он принимает значения в виде пары ключ-значение. Этот метод выводит все доступные файлы cookie для текущей сессии Selenium. Есть возможность удалить определенный файл cookie или все файлы cookie, связанные с текущей сессией Selenium. Когда браузер загружает страницу, веб-элементы внутри нее могут загружаться через различные промежутки времени. Это может создать сложности при взаимодействии с динамическими элементами, присутствующими на странице. Если элемент отсутствует в DOM веб-страницы, метод locate вызовет исключение. Ожидания в Selenium позволяют добавлять задержки (в миллисекундах или секундах) между действиями, выполняемыми между загрузкой страницы и поиском требуемого веб-элемента. Неявное ожидание и явное ожидание - два основных способа добавления задержек в код Selenium в Python для обработки динамических веб-элементов на странице. Неявное ожидание информирует Selenium WebDriver о необходимости проверять DOM в течение определенного периода времени при попытке найти веб-элемент, который не доступен сразу после загрузки страницы. По умолчанию неявное ожидание равно нулю. Однако, как только мы определяем его, оно устанавливается на время жизни объекта WebDriver. Ознакомьтесь с подробным руководством, в котором более детально демонстрируется использование неявного ожидания в Selenium Python. Явное ожидание в Selenium с Python используется, когда мы хотим дождаться выполнения определенного условия, прежде чем продолжить работу. В Selenium WebDriver есть несколько удобных методов, которые позволяют подождать, пока не будет выполнено определенное условие. Например, явное ожидание можно получить с помощью класса webdriverWait в сочетании с ожидаемыми условиями в Selenium. Вот некоторые из ожидаемых условий, которые можно использовать в сочетании с явным ожиданием в Selenium Python: presence_of_all_elements_located text_to_be_present_in_element text_to_be_present_in_element_value frame_to_be_available_and_switch_to_it invisibility_of_element_located title_is title_contains presence_of_element_located visibility_of_element_located visibility_of element_located_selection_state_to_be alert_is_present element_to_be_clickable staleness_of element_to_be_selected element_located_to_be_selected Element_selection_state_to_be Ниже есть пример, демонстрирующий использование явного ожидания, при котором выполняется неблокирующее ожидание продолжительностью 10 секунд до тех пор, пока не будет найден требуемый веб-элемент (с использованием его атрибута ID): В процессе автоматизации вам может потребоваться сделать скриншот всей страницы или определенного веб-элемента. Так можно проверить, что пошло не так при выполнении теста. Сделайте скриншоты веб-элементов с помощью Selenium, если хотите проверить, какой конкретно элемент вызвал ошибку при выполнении теста. Метод save_screenshot() Selenium WebDriver используется для создания скриншотов веб-страницы. Эта сертификация предназначена для профессионалов, желающих развить передовые практические навыки в области автоматизации тестирования с Selenium на Python и вывести свою карьеру на новый уровень. Краткий обзор сертификации Selenium Python 101 от LambdaTest:  Заключение Python — один из самых популярных языков, и нет сомнений, что вы можете выполнять сложные операции с Selenium с помощью нескольких строк кода. В этой шпаргалке по Selenium в Python мы рассмотрели некоторые из широко используемых команд Selenium, которые в основном используются для тестирования кроссбраузерной совместимости. Эту шпаргалку по Selenium можно использовать в качестве руководства (или справочника) для быстрого ознакомления с командами, которые могут представлять интерес для вашего случая. Я надеюсь, что вы найдете ее полезной, и обязательно дайте мне знать, если столкнетесь с какой-либо командой Selenium, которая должна стать ее частью. Счастливого автоматизированного тестирования с Python!  Материал подготовлен в рамках курса «Python QA Engineer».  Всех желающих приглашаем на бесплатный двухдневный интенсив «Про Python для автоматизатора: основы основ». Содержание:1. Пару слов про Python.2. Разберёмся, какие есть типы данных/объекты в Питоне и зачем про это вообще знать.3. Декораторы и их использование в автотестах: потренируемся писать декораторы и поищем им полезное применение. Подходит для тех, кто не так давно автоматизирует на Python, но не разбирался в возможностях и ограничениях Python и для тех, кто ещё новенький, но хотел бы. Для тех, кто давно программирует на Python, будет скучновато и вряд ли вы узнаете что-то новенькое.  Метод set_window_size() используется для настройки желаемых размеров окна браузера (ширина и высота). Переводчик, редактор