Начало работы с Selenium и Python
Автоматизация веб – браузеров набирает популярность, и появилось много фреймворков/инструментов, предлагающих разработчикам услуги автоматизации.
Автоматизация веб-браузера часто используется для тестирования в среде разработки и производства, хотя она также часто используется для веб-очистки данных из открытых источников, анализа и обработки данных.
На самом деле, то, что вы делаете с автоматизацией, зависит только от вас, просто убедитесь, что то, что вы делаете, законно, так как “боты”, созданные с помощью инструментов автоматизации, часто могут нарушать законы или условия обслуживания сайта.
Selenium является одним из широко используемых инструментов, используемых для автоматизации веб-браузера, и предлагает множество функциональных возможностей и возможностей по сравнению с браузером.
Он поддерживает множество языков, таких как C#, Java, Perl, PHP и Ruby, хотя ради этого урока мы будем использовать его с Python в Windows.
Автоматизированное тестирование с нуля / Полный курс за 3 часа / selenium + testng
Что такое Селен?
Selenium-это отличный инструмент, который позволяет разработчикам имитировать конечных пользователей всего несколькими строками кода. Используя инструменты, которые он предлагает, очень легко использовать веб-страницы и имитировать человека, хотя на самом деле трудно воспроизвести человеческое поведение.
Для борьбы с “ботами”, которые предназначены для репликации людей, используются многие сложные системы для распознавания человекоподобного поведения, которое невозможно воспроизвести с помощью программных средств.
Если вы создаете приложение с помощью Selenium, убедитесь, что вы придерживаетесь всех законов, связанных с автоматизацией веб-браузера, или просто используете его для тестирования в своей собственной производственной среде.
Некоторые из наиболее популярных задач, выполняемых с помощью Selenium, включают, но не ограничиваются ими:
- Щелчок по кнопкам
- Ввод текста
- Извлечение текста
- Доступ к файлам Cookie
- Нажатие клавиш
Предпосылки
Прежде чем мы начнем, нам нужно будет сделать несколько вещей, чтобы подготовиться:
- Установите Google Chrome на свой компьютер – мы будем имитировать пользователя в Google Chrome, хотя вы могли бы имитировать и другие браузеры, но для этой статьи я буду использовать Google Chrome.
- Получить chromedriver.exe , потому что для того, чтобы действительно имитировать браузер, вам понадобится путь к этому исполняемому файлу на вашем компьютере.
- Установите пакет selenium с помощью pip install selenium в командной строке.
Основы
Хорошо, теперь мы все готовы начать работать с Селеном. Первое, что вам нужно сделать, это запустить браузер:
from selenium import webdriver EXE_PATH = r’pathtochromedriver.exe’ driver = webdriver.Chrome(executable_path=EXE_PATH) driver.get(‘https://google.com’)
Запустив его, вы откроете Google Chrome и перейдете к https://google.com .
Что такое Selenium WebDriver?
Здесь важно отметить, что подключение к веб-странице осуществляется с помощью функции get(URL) объекта driver .
Как вы могли заметить, driver является объектом Selenium WebDriver , вы используете его для программного доступа к браузеру, например:
print(driver.page_source)
Приведенный выше код выводит исходный HTML – код всей страницы. Если вам нужно собрать данные, это очень полезно.
Локализующие Элементы
Обычно вам нужно не содержимое всей страницы, а конкретные элементы.
Для этого вам сначала нужно определить свою цель на странице, и для этого вы можете использовать инструмент Inspect Element в Google Chrome.
Это означает, что если вам нужно содержимое определенного элемента на странице, то для получения идентификатора тегов вы можете сделать следующее (в обычном сеансе Google Chome):
- Щелкните правой кнопкой мыши на элементе
- Выберите “Проверить”
- А в новом окне вы можете взглянуть на HTML элемента, и идентификатор будет после id= .
Получив нужные нам элементы, мы можем выполнять над ними различные виды операций.
Получение элементов по идентификатору
Если у вас есть точный идентификатор элемента, который вы ищете, его легко получить:
element = driver.find_element_by_id(‘element_id’)
Получение элементов по имени
Аналогично предыдущему подходу:
element = driver.find_element_by_name(‘element_name’)
Получение элементов по классам
И снова аналогично предыдущему подходу:
element = driver.find_element_by_class_name(‘element_class_name’)
Получение элементов по тегу HTML
В некоторых случаях вы можете получить все элементы по определенному тегу:
links = driver.find_elements_by_tag_name(‘a’)
В этом случае links заполняется всеми тегами a , которые теперь содержат каждую ссылку на странице. Это может быть полезно для целей обхода веб-страниц.
Получение элементов с помощью XPath
Не все элементы имеют идентификатор, или, может быть, вы не хотите получать доступ к каждому тегу a HTML. Существуют и другие способы извлечения очень специфического элемента, например XPath , который является еще одним способом извлечения элементов. С помощью XPath вы можете найти элементы более легко и эффективно:
tag_list теперь содержит каждый тег , который имеет и атрибут attr установлен в val :
Теперь вы можете перебирать tag_list и взаимодействовать с каждым Selenium WebElement в нем.
Вы можете прочитать больше о системе XPath в Selenium здесь .
Selenium WebElement
Selenium WebElement практически представляет собой HTML-элемент. Вы можете выполнять операции с этими элементами аналогично тому, как вы делали бы это в качестве конечного пользователя.
Эти операции включают в себя:
- Доступ к простым свойствам элемента, таким как текст внутри ( element.text )
- Доступ к родительским элементам, которые также имеют тип WebElement ( element.parent )
- Доступ к определенным атрибутам, таким как href тега a ( element.get_attribute(‘href’) )
- Поиск внутри него (так же, как вы бы искали в драйвере )
- Щелчок по нему ( element.click() )
- Ввод текста, если это возможно ( element.send_keys(‘Input Text’) )
Selenium WebDriver
WebDriver похож на WebElement , однако основное отличие заключается в их области применения. Область действия последнего-это сам элемент, тогда как область действия первого-вся страница.
Вы также можете делать много вещей с объектом Selenium WebDriver , практически все, что вы могли бы сделать как человек с обычным браузером.
Некоторые другие очень полезные вещи:
- Выполнение JavaScript: driver.execute_script(«script»)
- Сохранение скриншота: driver.save_screenshot(‘image.png’)
- Запуск в “безголовом режиме”, где браузер экономит время, не отображая страницу:
from selenium.webdriver.chrome.options import Options options = Options() options.headless = True driver = webdriver.Chrome(executable_path=EXE_PATH, chrome_options=options) driver.set_window_size(1440, 900)
Обратите внимание, что размер окна установлен на (1440, 900) , это делается для того, чтобы предотвратить всевозможные ошибки, связанные с тем, что некоторые элементы не загружаются должным образом из-за безголового режима.
Вы можете изменить разрешение на любое другое достаточно большое разрешение, но вы должны убедиться, что разрешение изменено по умолчанию при переходе в безголовый режим.
Навигация по странице
Доступ к файлам Cookie
Возможно, вам понадобится добавить или удалить файлы cookie браузера :
ck = driver.add_cookie(ck)
Это добавляет файл cookie в браузер, который может быть полезен, например, если вам нужно добавить файлы cookie аутентификации или предпочтений. Важно убедиться, что файл cookie находится в формате dict .
Кроме того, очень легко получить файлы cookie из браузера:
cookies = driver.get_cookies() for ck in cookies: print(ck)
Приведенный выше код печатает каждый файл cookie в браузере.
Изменение HTML-кода
Иногда вы можете обнаружить, что нуждаетесь в изменении определенного свойства элементов.
Как уже упоминалось ранее, вы можете использовать Selenium WebDriver для выполнения JavaScript, и изменение свойств элементов просто так очень легко сделать с помощью JavaScript:
driver.execute_script(«arguments[0].setAttribute(‘attr’,’value’)», element)
Здесь element – это элемент, который нужно изменить, attr – это атрибут, который нужно изменить, а value – это новое значение.
Загрузка файлов с помощью ссылок для скачивания
Иногда вам может понадобиться загрузить файл с веб-сайта:
from selenium import webdriver from selenium.webdriver.chrome.options import Options options = Options() options.add_experimental_option(«prefs», < «download.default_directory»: r»pathtodirectory», «download.prompt_for_download»: False, «download.directory_upgrade»: True, «safebrowsing.enabled»: True >) driver = webdriver.Chrome(executable_path=EXE_PATH, chrome_options=options)
Вы можете указать путь к месту сохранения , определив download.default_directory , например pathtodirectory .
Нажатие Клавиш
import time from selenium.webdriver import ActionChains from selenium.webdriver.common.keys import Keys action = ActionChains(driver) for _ in range(3): action.send_keys(Keys.ARROW_DOWN) time.sleep(.1) action.perform()
Этот код нажимает стрелку вниз ( Клавиши.ARROW_DOWN ) 3 раза. После каждого действия.send_keys(Keys.ARROW_DOWN) программа немного подождет. Это рекомендуется для того, чтобы убедиться, что все ключи зарегистрированы.
Если мы просто запустим несколько команд, они могут потеряться в процессе и фактически не будут регистрироваться.
Keys содержит все клавиши на клавиатуре, что означает, что вы также можете использовать этот метод для tab ( Keys.TAB ) между элементами на странице, облегчающими взаимодействие с ней ( Клавиши.ВЕРНИТЕ и Ключи.ПРОСТРАНСТВО также очень важно).
Щелчок по кнопкам
Обратите внимание, что вы можете использовать нажатия клавиш для перемещения между элементами страницы, например, вы можете использовать вкладки и пробелы для заполнения флажков, а также использовать клавиши со стрелками для перемещения между пунктами выпадающего меню.
Конечно, более естественным способом выбора флажков и выпадающих элементов было бы просто получить элемент с помощью драйвера и щелкнуть по нему:
checkbox = driver.find_element_by_id(‘checkbox’) checkbox.click()
Ввод форм
Вы также можете имитировать нажатия клавиш внутри самих элементов:
element.send_keys(Keys.CONTROL, ‘a’) element.send_keys(value)
Таким образом, ключи регистрируются внутри элемента , так что если вы хотите заполнить textarea , вы можете сделать это так.
Кстати, этот код использует комбинацию клавиш (CTRL + A) для выделения всего текста внутри элемента. Следующая строка заменяет выделенный текст введенным значением .
Чтобы зарегистрировать сочетания клавиш, передайте все нужные клавиши в параметрах в send_keys .
Прокрутка
Иногда части страницы загружаются только после прокрутки вниз (например, лента Instagram или любая другая страница с бесконечной прокруткой). Это можно легко сделать, выполнив простой JavaScript-скрипт:
driver.execute_script(«window.scrollTo(0, document.body.scrollHeight);»)
Приведенный выше код использует команду JavaScript для прокрутки вниз страницы, теперь вы можете снова использовать driver.page_source и получить новый контент.
Вывод
Selenium-это один из широко используемых инструментов автоматизации веб-браузеров, который предлагает множество функций и возможностей по сравнению с браузером, управляемым человеком.
Он в основном используется для тестирования/автоматизации производственной или интеграционной среды, хотя также может использоваться в качестве веб-скребка для исследовательских целей и т. Д. Обязательно соблюдайте все законы, когда вы практикуете веб-скребок публичного контента, чтобы не нарушать никаких законов.
Читайте ещё по теме:
- Селен использует Python: все, что вам нужно знать
- Как Сделать Скриншот С Помощью Python https://pythobyte.com/getting-started-with-selenium-and-python-19d9c64b/» target=»_blank»]pythobyte.com[/mask_link]
Что такое Selenium?
Время от времени мне приходится распутывать терминологические хитросплетения, связанные с употреблением словосочетаний, в которых встречается слово Selenium – Selenium 2.0, Selenium IDE, Selenium RC, Selenium WebDriver, Selenium Server, Selenium Grid.
Путаница возникает во многом из-за того, что нигде нет чёткого описания всех этих терминов на одной страничке, и я постараюсь восполнить этот информационный пробел.
Selenium
- Selenium WebDriver,
- Selenium RC,
- Selenium Server,
- Selenium Grid,
- Selenium IDE.
Selenium WebDriver
Selenium WebDriver – это программная библиотека для управления браузерами. Часто употребляется также более короткое название WebDriver.
Иногда говорят, что это «драйвер браузера», но на самом деле это целое семейство драйверов для различных браузеров, а также набор клиентских библиотек на разных языках, позволяющих работать с этими драйверами.
Это основной продукт, разрабатываемый в рамках проекта Selenium.
Selenium WebDriver называется также Selenium 2.0, причина этого будет объяснена ниже.
Как уже было сказано, WebDriver представляет собой семейство драйверов для различных браузеров плюс набор клиентских библиотек для этих драйверов на разных языках программирования:
В рамках проекта Selenium разрабатываются драйверы для браузеров Firefox, Internet Explorer и Safari, а также драйверы для мобильных браузеров Android и iOS. Драйвер для браузера Google Chrome разрабатывается в рамках проекта Chromium, а драйвер для браузера Opera (включая мобильные версии) разрабатывается компанией Opera Software. Поэтому они формально не являются частью проекта Selenium, распространяются и поддерживаются независимо. Но логически, конечно, можно считать их частью семейства продуктов Selenium.
Аналогичная ситуация и с клиентскими библиотеками – в рамках проекта Selenium разрабатываются библиотеки для языков Java, .Net (C#), Python, Ruby, JavaScript. Все остальные реализации не имеют отношения к проекту Selenium, хотя, возможно, в будущем, какие-то из них могут влиться в этот проект.
Selenium RC
Selenium RC – это предыдущая версия библиотеки для управления браузерами. Аббревиатура RC в названии этого продукта расшифровывается как Remote Control, то есть это средство для «удалённого» управления браузером.
Эта версия с функциональной точки зрения значительно уступает WebDriver. Сейчас она находится в законсервированном состоянии, не развивается и даже известные баги не исправляются. А всем, кто сталкивается с ограничениями Selenium RC, предлагается переходить на использование WebDriver.
Иногда Selenium RC называется также Selenium 1.0, тогда как WebDriver называется Selenium 2.0. Хотя на самом деле дистрибутив версии 2.0 включает в себя одновременно обе реализации – и Selenium RC, и WebDriver. А вот когда выйдет версия 3.0 – в ней останется только WebDriver.
С технической точки зрения WebDriver не является результатом эволюционного развития Selenium RC, они построены на совершенно разных принципах и у них практически нет общего кода. Объединяет их лишь тот факт, что обе реализации были сделаны в рамках проекта Selenium. Ну, или если быть совсем точным, WebDriver сначала был самостоятельным проектом, но в 2008 году произошло слияние и сейчас WebDriver представляет собой основной вектор развития проекта Selenium.
Selenium Server
Selenium Server – это сервер, который позволяет управлять браузером с удалённой машины, по сети. Сначала на той машине, где должен работать браузер, устанавливается и запускается сервер. Затем на другой машине (технически можно и на той же самой, конечно) запускается программа, которая, используя специальный драйвер RemoteWebDriver, соединяется с сервером и отправляет ему команды. Он в свою очередь запускает браузер и выполняет в нём эти команды, используя драйвер, соответствующий этому браузеру:
Selenium Server поддерживает одновременно два набора команд – для новой версии (WebDriver) и для старой версии (Selenium RC).
Selenium Grid
Selenium Grid – это кластер, состоящий из нескольких Selenium-серверов. Он предназначен для организации распределённой сети, позволяющей параллельно запускать много браузеров на большом количестве машин.
Selenium Grid имеет топологию «звезда», то есть в его составе имеется выделенный сервер, который носит название «хаб» или «коммутатор», а остальные сервера называются «ноды» или «узлы». Сеть может быть гетерогенной, то есть коммутатор и узлы могут работать под управлением разных операционных систем, на них могут быть установлены разные браузеры. Одна из задач Selenium Grid заключается в том, чтобы «подбирать» подходящий узел, когда во время старта браузера указываются требования к нему – тип браузера, версия, операционная система, архитектура процессора и ряд других атрибутов.
Ранее Selenium Grid был самостоятельным продуктом. Сейчас физически продукт один – Selenium Server, но у него есть несколько режимов запуска: он может работать как самостоятельный сервер, как коммутатор кластера, либо как узел кластера, это определяется параметрами запуска.
Selenium IDE
Selenium IDE – плагин к браузеру Firefox, который может записывать действия пользователя, воспроизводить их, а также генерировать код для WebDriver или Selenium RC, в котором выполняются те же самые действия. В общем, это «Selenium-рекордер».
Тестировщики, которые не умеют (или не хотят) программировать, используют Selenium IDE как самостоятельный продукт, без преобразования записанных сценариев в программный код. Это, конечно, не позволяет разрабатывать достаточно сложные тестовые наборы, но некоторым хватает и простых линейных сценариев.
Вот, кажется, и всё.
Если я забыл рассказать про какой-то термин – напишите в комментариях, и я постараюсь добавить его в этот мини-словарик.
Источник: habr.com
Работа с Selenium и Python
Автоматизация веб-браузера набирает популярность, и появилось множество фреймворков и инструментов, предлагающих разработчикам услуги автоматизации.
Автоматизация веб-браузера часто используется для целей тестирования в средах разработки и производства, хотя она также часто используется для сбора данных из общедоступных источников, анализа и обработки данных.
На самом деле, что вы делаете с автоматизацией, зависит от вас, но просто убедитесь, что то, что вы делаете, является законным, поскольку «боты», созданные с помощью инструментов автоматизации, часто могут нарушать законы или условия обслуживания сайта.
Selenium – один из широко используемых инструментов, используемых для автоматизации веб-браузера, который предлагает множество функций и возможностей по сравнению с браузером.
Он поддерживает множество языков, таких как C #, Java, Perl, PHP и Ruby, хотя в рамках этого руководства мы будем использовать его с Python в Windows.
Что такое Selenium?
Selenium – отличный инструмент, который позволяет разработчикам моделировать конечных пользователей всего несколькими строками кода. Используя предлагаемые инструменты, очень легко использовать веб-страницы и имитировать человека, хотя по-настоящему воспроизвести человеческое поведение сложно.
Для борьбы с «ботами», которые предназначены для копирования людей, используются многие сложные системы, распознающие человеческое поведение, которое невозможно воспроизвести с помощью инструментов программирования.
Если вы создаете приложение с помощью Selenium, убедитесь, что вы соблюдаете все законы, связанные с автоматизацией веб-браузера, или просто используйте его для целей тестирования в своей собственной производственной среде.
Предпосылки
- Установите Google Chrome на свой компьютер – мы будем моделировать пользователя в Google Chrome, хотя вы можете моделировать другие браузеры, но в этой статье я буду использовать Google Chrome.
- Загрузите chromedriver.exe, потому что для имитации браузера вам понадобится путь к этому исполняемому файлу на вашем компьютере.
- Установите пакет selenium с помощью команды pip install selenium в командной строке.
Основы
Хорошо, теперь мы готовы начать работу с Selenium. Первое, что вам нужно сделать, это запустить браузер:
from selenium import webdriver EXE_PATH = r’pathtochromedriver.exe’ driver = webdriver.Chrome(executable_path=EXE_PATH) driver.get(‘https://google.com’)
Запустив это, откроется Google Chrome и перейдет на https://google.com.
Здесь важно отметить, что подключение к веб-странице осуществляется с помощью функции get (URL) объекта драйвера.
Как вы могли заметить, драйвером является объект Selenium WebDriver, вы используете его для программного доступа к браузеру, например:
print(driver.page_source)
Приведенный выше код печатает исходный HTML-код всей страницы. Если вам нужно собрать данные, это очень полезно.
Расположение элементов
Обычно вам нужно не содержимое всей страницы, а конкретные элементы.
Для этого вам сначала нужно обнаружить свою цель на странице, и для этого вы можете использовать инструмент Inspect Element в Google Chrome.
- Щелкните правой кнопкой мыши элемент.
- Выберите “Проверить”.
- В новом окне вы можете посмотреть HTML-код элемента, и его идентификатор будет после >Получив нужные нам элементы, мы можем выполнять с ними различные операции.
Получение элементов по идентификатору
Если у вас есть точный идентификатор искомого элемента, его легко получить:
element = driver.find_element_by_id(‘element_id’)
Получение элементов по имени
Аналогично предыдущему подходу:
element = driver.find_element_by_name(‘element_name’)
Получение элементов по классам
И снова аналогично предыдущему подходу:
element = driver.find_element_by_class_name(‘element_class_name’)
По тегу HTML
В некоторых случаях вы можете захотеть получить все элементы по определенному тегу:
links = driver.find_elements_by_tag_name(‘a’)
В этом случае ссылки заполняются всеми тегами, которые теперь содержат каждую ссылку на странице. Это может быть полезно для сканирования в Интернете.
С помощью XPath
Не все элементы имеют идентификатор, или, может быть, вы не хотите получать доступ ко всем тегам HTML. Есть и другие способы получить очень специфический элемент, например XPath, который является еще одним способом получения элементов. С XPath вы можете легче и эффективнее находить элементы:
tag_list теперь содержит каждый тег, для которого атрибут attr установлен в значение val:
Теперь вы можете перебирать tag_list и взаимодействовать с каждым Selenium WebElement в нем.
WebElement
Selenium WebElement практически представляет собой HTML-элемент. Вы можете выполнять операции с этими элементами так же, как и конечный пользователь.
- Доступ к простым свойствам элемента, таким как текст внутри (element.text).
- Доступ к родительским элементам, которые также относятся к типу WebElement (element.parent).
- Доступ к определенным атрибутам, таким как href тега (element.get_attribute (‘href’)).
- Поиск в нем (так же, как в драйвере).
- Щелкнув по нему (element.click()).
- Если возможно, введите текст (element.send_keys (‘Input Text’)).
WebDriver
WebDriver похож на WebElement, однако основное отличие заключается в их объеме. Область действия последнего – это сам элемент, а область действия первого – вся страница.
С помощью объекта Selenium WebDriver вы также можете делать множество вещей, практически все, что вы могли бы делать, как человек с обычным браузером.
- Выполнение JavaScript: driver.execute_script («скрипт»).
- Сохранение скриншота: driver.save_screenshot (‘image.png’).
- Инициируйте в “режиме без заголовка”, когда браузер экономит время, не отображая страницу:
from selenium.webdriver.chrome.options import Options options = Options() options.headless = True driver = webdriver.Chrome(executable_path=EXE_PATH, chrome_options=options) driver.set_window_size(1440, 900)
Обратите внимание, что размер окна установлен на (1440, 900), то есть для предотвращения всевозможных ошибок, связанных с неправильной загрузкой некоторых элементов из-за режима без заголовка.
Вы можете изменить разрешение на любое другое достаточно большое разрешение, но вы должны убедиться, что разрешение изменилось с значений по умолчанию при переходе в безголовый режим.
Навигация по странице
Доступ к файлам cookie
Возможно, вам понадобится добавить или удалить файлы cookie браузера:
ck = driver.add_cookie(ck)
При этом в браузер добавляется файл cookie, который может быть полезен, например, если вам нужно добавить файлы cookie аутентификации или предпочтения. Важно убедиться, что файл cookie имеет формат dict.
Также очень легко получить файлы cookie из браузера:
cookies = driver.get_cookies() for ck in cookies: print(ck)
Приведенный выше код печатает каждый файл cookie в браузере.
Изменение HTML
Иногда вам может понадобиться изменить свойство элемента cerain.
Как упоминалось ранее, вы можете использовать Selenium WebDriver для выполнения JavaScript, и изменение свойств элементов настолько удачно, что это очень легко сделать с помощью JavaScript:
driver.execute_script(«arguments[0].setAttribute(‘attr’,’value’)», element)
Здесь element – это элемент, который нужно изменить, attr – это атрибут, который нужно изменить, а value – это новое значение.
Загрузка файлов с помощью ссылок для скачивания
Иногда может потребоваться скачать файл с веб-сайта:
from selenium import webdriver from selenium.webdriver.chrome.options import Options options = Options() options.add_experimental_option(«prefs», < «download.default_directory»: r»pathtodirectory», «download.prompt_for_download»: False, «download.directory_upgrade»: True, «safebrowsing.enabled»: True >) driver = webdriver.Chrome(executable_path=EXE_PATH, chrome_options=options)
Вы можете указать путь к месту сохранения, указав download.default_directory, например pathtodirectory.
Нажатие клавиш
import time from selenium.webdriver import ActionChains from selenium.webdriver.common.keys import Keys action = ActionChains(driver) for _ in range(3): action.send_keys(Keys.ARROW_DOWN) time.sleep(.1) action.perform()
Этот код нажимает стрелку вниз (Keys.ARROW_DOWN) 3 раза. После каждого действия action.send_keys (Keys.ARROW_DOWN) программа немного подождет. Это рекомендуется, чтобы убедиться, что все ключи зарегистрированы.
Если мы просто запустим несколько команд, они могут потеряться в процессе и фактически не будут регистрироваться.
Ключи содержат все клавиши на клавиатуре, а это означает, что вы также можете использовать этот метод для табуляции (Keys.TAB) между элементами на странице, что упрощает взаимодействие с ними (также очень важны Keys.RETURN и Keys.SPACE. ).
Нажатие кнопок
Обратите внимание, что вы можете использовать нажатия клавиш для перехода между элементами на странице, например, вы можете использовать табуляции и пробелы для заполнения флажков и использовать клавиши со стрелками для перехода между элементами раскрывающегося меню.
Конечно, более естественным способом установки флажков и раскрывающихся элементов было бы просто извлечь элемент с помощью драйвера и щелкнуть по нему:
checkbox = driver.find_element_by_id(‘checkbox’) checkbox.click()
Формы ввода
Вы также можете имитировать нажатия клавиш внутри самих элементов:
element.send_keys(Keys.CONTROL, ‘a’) element.send_keys(value)
Таким образом, ключи регистрируются внутри элемента, так что если вы хотите заполнить текстовое поле, вы можете сделать это так.
Кстати, этот код использует сочетание клавиш (CTRL + A) для выделения всего текста внутри элемента. Следующая строка заменяет выделенный текст введенным значением.
Чтобы зарегистрировать сочетания клавиш, передайте все желаемые клавиши в параметрах send_keys.
Прокрутка
Иногда части страницы загружаются только после прокрутки вниз (например, лента Instagram или любая другая страница с бесконечной прокруткой). Это легко сделать, выполнив простой скрипт JavaScript:
driver.execute_script(«window.scrollTo(0, document.body.scrollHeight);»)
В приведенном выше коде используется команда JavaScript для прокрутки страницы вниз, теперь вы можете снова использовать driver.page_source и получить новый контент.
Заключение
Selenium – один из широко используемых инструментов, используемых для автоматизации веб-браузера, который предлагает множество функций и возможностей по сравнению с браузером, управляемым человеком.
Он в основном используется для тестирования и автоматизации производственной или интеграционной среды, хотя его также можно использовать в качестве парсера для исследовательских целей и т.д.
Источник: tonais.ru
Home
Время от времени мне приходится распутывать терминологические хитросплетения, связанные с употреблением словосочетаний, в которых встречается слово Selenium – Selenium 2.0, Selenium IDE, Selenium RC, Selenium WebDriver, Selenium Server, Selenium Grid.
Путаница возникает во многом из-за того, что нигде нет чёткого описания всех этих терминов на одной страничке, и я постараюсь восполнить этот информационный пробел.
Эта статья будет входить в цикл материалов, которые обязательны к прочтению всем участникам моих тренингов по инструментам Selenium, в частности участникам тренинга «Базовый курс по Selenium».
Selenium
Selenium – это проект, в рамках которого разрабатывается серия программных продуктов с открытым исходным кодом (open source):
- Selenium WebDriver,
- Selenium RC,
- Selenium Server,
- Selenium Grid,
- Selenium IDE.
Называть просто словом Selenium любой из этих пяти продуктов, вообще говоря, неправильно, хотя так часто делают, если из контекста понятно, о каком именно из продуктов идёт речь, или если речь идёт о нескольких продуктах одновременно, или обо всех сразу.
Selenium WebDriver
Selenium WebDriver – это программная библиотека для управления браузерами. Часто употребляется также более короткое название WebDriver.
Иногда говорят, что это «драйвер браузера», но на самом деле это целое семейство драйверов для различных браузеров, а также набор клиентских библиотек на разных языках, позволяющих работать с этими драйверами.
Это основной продукт, разрабатываемый в рамках проекта Selenium.
Selenium WebDriver называется также Selenium 2.0, причина этого будет объяснена ниже.
Как уже было сказано, WebDriver представляет собой семейство драйверов для различных браузеров плюс набор клиентских библиотек для этих драйверов на разных языках программирования:
В рамках проекта Selenium разрабатываются драйверы для браузеров Firefox, Internet Explorer и Safari, а также драйверы для мобильных браузеров Android и iOS. Драйвер для браузера Google Chrome разрабатывается в рамках проекта Chromium, а драйвер для браузера Opera (включая мобильные версии) разрабатывается компанией Opera Software. Поэтому они формально не являются частью проекта Selenium, распространяются и поддерживаются независимо. Но логически, конечно, можно считать их частью семейства продуктов Selenium.
Аналогичная ситуация и с клиентскими библиотеками – в рамках проекта Selenium разрабатываются библиотеки для языков Java, .Net (C#), Python, Ruby, JavaScript. Все остальные реализации не имеют отношения к проекту Selenium, хотя, возможно, в будущем, какие-то из них могут влиться в этот проект.
Selenium RC
Selenium RC – это предыдущая версия библиотеки для управления браузерами. Аббревиатура RC в названии этого продукта расшифровывается как Remote Control, то есть это средство для «удалённого» управления браузером.
Эта версия с функциональной точки зрения значительно уступает WebDriver. Сейчас она находится в законсервированном состоянии, не развивается и даже известные баги не исправляются. А всем, кто сталкивается с ограничениями Selenium RC, предлагается переходить на использование WebDriver.
Иногда Selenium RC называется также Selenium 1.0, тогда как WebDriver называется Selenium 2.0. Хотя на самом деле дистрибутив версии 2.0 включает в себя одновременно обе реализации – и Selenium RC, и WebDriver. А вот когда выйдет версия 3.0 – в ней останется только WebDriver.
С технической точки зрения WebDriver не является результатом эволюционного развития Selenium RC, они построены на совершенно разных принципах и у них практически нет общего кода. Объединяет их лишь тот факт, что обе реализации были сделаны в рамках проекта Selenium. Ну, или если быть совсем точным, WebDriver сначала был самостоятельным проектом, но в 2008 году произошло слияние и сейчас WebDriver представляет собой основной вектор развития проекта Selenium.
Selenium Server
Selenium Server – это сервер, который позволяет управлять браузером с удалённой машины, по сети. Сначала на той машине, где должен работать браузер, устанавливается и запускается сервер. Затем на другой машине (технически можно и на той же самой, конечно) запускается программа, которая, используя специальный драйвер RemoteWebDriver, соединяется с сервером и отправляет ему команды. Он в свою очередь запускает браузер и выполняет в нём эти команды, используя драйвер, соответствующий этому браузеру:
Selenium Server поддерживает одновременно два набора команд – для новой версии (WebDriver) и для старой версии (Selenium RC).
Selenium Grid
Selenium Grid – это кластер, состоящий из нескольких Selenium-серверов. Он предназначен для организации распределённой сети, позволяющей параллельно запускать много браузеров на большом количестве машин.
Selenium Grid имеет топологию «звезда», то есть в его составе имеется выделенный сервер, который носит название «хаб» или «коммутатор», а остальные сервера называются «ноды» или «узлы». Сеть может быть гетерогенной, то есть коммутатор и узлы могут работать под управлением разных операционных систем, на них могут быть установлены разные браузеры. Одна из задач Selenium Grid заключается в том, чтобы «подбирать» подходящий узел, когда во время старта браузера указываются требования к нему – тип браузера, версия, операционная система, архитектура процессора и ряд других атрибутов.
Ранее Selenium Grid был самостоятельным продуктом. Сейчас физически продукт один – Selenium Server, но у него есть несколько режимов запуска: он может работать как самостоятельный сервер, как коммутатор кластера, либо как узел кластера, это определяется параметрами запуска.
Selenium IDE
Selenium IDE – плагин к браузеру Firefox, который может записывать действия пользователя, воспроизводить их, а также генерировать код для WebDriver или Selenium RC, в котором выполняются те же самые действия. В общем, это «Selenium-рекордер».
Тестировщики, которые не умеют (или не хотят) программировать, используют Selenium IDE как самостоятельный продукт, без преобразования записанных сценариев в программный код. Это, конечно, не позволяет разрабатывать достаточно сложные тестовые наборы, но некоторым хватает и простых линейных сценариев.
Вот, кажется, и всё.
Если я забыл рассказать про какой-то термин – напишите в комментариях, и я постараюсь добавить его в этот мини-словарик.
Источник: www.software-testing.ru
Selenium что это за программа
Далее нам понадобится сам Selenium:
Указываем имя проекта и нажимаем Create .
Напишем первый тест, чтобы проверить работоспособность драйвера.
В качестве примера ресурса для тестирования возьмем популярный сайт для практики автоматизированного тестирования: https://www.saucedemo.com.
Запустить сценарий можно во встроенном эмуляторе терминала IDE или в любом другом:
Если все установлено правильно, должен запуститься браузер, который откроет страницу. Результатом запуска нашего сценария на Python, будет сообщение: “Элемент найден”.
3. Поиск элементов
В нашем скрипте присутствует следующая строка:
- Откроется код элемента в дереве HTML, далее нужно открыть контекстное меню выделенной строки и скопировать xpath .
- Тут мы просто сравниваем текст найденного элемента с ожидаемым значением и выводим в консоль сообщение.
4. Первый тест с поиском и переходом по странице
- Введем логин и пароль пользователя и зайдем на главную страницу.
- Найдем позицию с названием «Sauce Labs Fleece Jacket».
- Перейдем на страницу товара и нажмем кнопку добавления в корзину.
- Перейдем в корзину и проверим что там присутствует 1 позиция с названием «Sauce Labs Fleece Jacket».
7. Распределим логику
Теперь причешем код, распределив логику по методам, как, например, было с wait_of_element_located . Разбивать логику необходимо для написания множества тестов.
В этом примере логика поделилась на функциональные компоненты (фикстуры). Теперь аутентификация пользователя будет происходить в отдельной функции, что позволит не производить одни и те же действия и дублировать код при каждом тесте, в котором нужно проходить аутентификацию. В качестве примера использования фикстур сделана инициализация драйвера, что позволит использовать инстанс драйвера во всех тестах, не пересоздавая его. Логика добавления товара в корзину тоже была вынесена в отдельный функциональный компонент для дальнейшего использования.
Суть разнесения логики заключается в принципе конструктора: собирать тесты из отдельных частей, подставляя только необходимые данные при переиспользовании функций в разных тестах.
При желании можно и дальше проводить рефакторинг кода.
Рекомендации по архитектуре
- Очевидно, что в одном файле хранить все вспомогательные функции и тесты неудобно. После добавления еще нескольких тестов даже с распределенной логикой скрипт будет похож на полотно с трудночитаемым кодом. К тому же если вы разрабатываете тесты с коллегами, без конфликтов в коде не обойтись. Для начала нужно разделить проект на модули: в одном будут находиться файлы с тестами, в другом частичная логика, в третьем – ресурсы, в четвертом – утилиты и т.д.
- Далее следует переходить на разработку автотестов с использованием объектно-ориентированного программирования. Это сэкономит массу времени и поможет в написании сложного и лаконичного кода.
- Стоит также обратить внимание на паттерны проектирования, особенно на PageObject и PageFactoroy. В эффективном тестировании UI они играют большую роль.
- Все тестовые данные лучше хранить в неизменяемых классах, константах или в отдельных файлах (json, csv).
Заключение
На этом создание первого автотеста закончено. Некоторые моменты были рассмотрены поверхностно, что дает возможность пытливым умам поглотить информацию из других источников. Удачи!
Источник: proglib.io