Webdriver selenium c: WebDriver :: Documentation for Selenium
Что такое Selenium WebDriver? / Хабр
Эта статья является продолжением более общей статьи «Что такое Selenium?», в которой объясняется, какое положение занимает Selenium WebDriver среди других инструментов автоматизации веб-приложений.
Здесь я постараюсь рассказать более подробно о том, что такое Selenium WebDriver, и почему его бессмысленно сравнивать с TestComplete, QuickTest Pro и другими инструментами автоматизации тестирования. И дело не только в том, что Selenium WebDriver бесплатный и открытый – его столь же бессмысленно сравнивать с другими бесплатными инструментами, такими как Sahi или Robot Framework.
Почему?
Потому что Selenium WebDriver – это не инструмент для автоматизации тестирования.
А что же это такое?
На этот вопрос можно дать несколько разных ответов, сначала я дам короткие ответы, а потом – более подробные.
Кроме того, я объясню, почему Selenium WebDriver имеет такой убогий и неудобный в использовании интерфейс (набор команд), почему он не генерирует красивые отчёты и почему несмотря на всё это он настолько популярен 🙂
На всякий случай оговорюсь, что хотя в этой статье речь идёт про WebDriver, многие аргументы справедливы и в отношении Selenium RC, но я не буду ничего говорить специально про эту устаревшую версию, потому что её место – на свалке истории.
Итак, что такое Selenium WebDriver?
По назначению Selenium WebDriver представляет собой драйвер браузера, то есть программную библиотеку, которая позволяет разрабатывать программы, управляющие поведением браузера.
По своей сущности Selenium WebDriver представляет собой:
- спецификацию программного интерфейса для управления браузером,
- референсные реализации этого интерфейса для нескольких браузеров,
- набор клиентских библиотек для этого интерфейса на нескольких языках программирования.
Теперь понятно, почему бессмысленно сравнивать Selenium WebDriver с «другими инструментами тестирования»? Непонятно? Тогда добавим подробностей.
Selenium WebDriver – это драйвер браузера
Наверняка каждый, кто сталкивался с компьютерами, даже не айтишник, знает слово «драйвер». Это такая маленькая программа, точнее программная библиотека, которая позволяет другим программам взаимодействовать с некоторым устройством. Драйвер принтера позволяет печатать что-нибудь на принтере. Драйвер диска позволяет читать и писать данные. Драйвер сетевой карты позволяет обмениваться данными с другими компьютерами по сети.
С драйвером пользователи не работают непосредственно. Они работают с прикладными программами, которые, посредством драйверов, взаимодействуют с теми или иными устройствами. Драйвер не имеет пользовательского интерфейса. Постойте, но ведь иногда бывает пользовательский интерфейс для настройки драйвера? Бывает. Но это интерфейс программы для настройки драйвера, а не самого драйвера. Драйвер имеет только программный интерфейс, его назначение состоит в том, чтобы дать возможность прикладным пользовательским программам взаимодействовать с устройством.
Так вот, Selenium WebDriver, или просто WebDriver – это драйвер браузера, то есть не имеющая пользовательского интерфейса программная библиотека, которая позволяет различным другим программам взаимодействовать с браузером, управлять его поведением, получать от браузера какие-то данные и заставлять браузер выполнять какие-то команды.
Исходя из этого определения, ясно, что WebDriver не имеет прямого отношения к тестированию. Он всего лишь предоставляет автотестам доступ к браузеру. На этом его функции заканчиваются.
Структурирование, группировку и запуск тестов, а также генерацию отчётов о тестировании, обеспечивает фреймворк тестирования, такой как JUnit или TestNG для Java, NUnit или Gallio для .Net, RSpec или Cucumber для Ruby и так далее. Разработка тестов ведётся в среде Eclipse, Intellij IDEA, Visual Studio, RubyMine и так далее. Сборка осуществляется посредством Maven, Gradle, Ant, NAnt,Rake и так далее. Запуск тестов по расписанию и публикацию отчётов выполняет сервер непрерывной интеграции – Jenkins, CruiseControl, Bamboo, TeamCity и так далее. И всё это – самостоятельные инструменты, не имеющие отношения к проекту Selenium.
Впрочем, в рамках проекта Selenium разрабатывается не только драйвер, но ещё несколько сопутствующих продуктов – Selenium Server позволяет организовать удалённый запуск браузера, при помощи Selenium Grid можно построить кластер из Selenium-серверов. Они встают в один ряд с вышеперечисленными инструментами и фреймворками, потому что также участвуют в построении системы запуска тестов. Кроме того, имеется «рекордер», который называется Selenium IDE, он умеет записывать действия пользователя и генерировать код, в котором используется интерфейс WebDriver для выполнения записанных действий.
Но главным в проекте Selenium является именно WebDriver, это ключевой элемент экосистемы Selenium.
Существуют ли другие драйверы? Разумеется.
Внутри каждого коммерческого «интегрированного» инструмента имеются драйверы браузеров, но они как правило не могут быть использованы отдельно вне этого инструмента. Есть и бесплатные открытые драйверы – Watir предоставляет доступ к основным браузерам, WatiN имеет неплохой драйвер для браузера Internet Explorer, Sahi умеет работать с «большой пятёркой» браузеров.
Как сравнить Selenium WebDriver с другими инструментами?
Из всего вышенаписанного можно сделать вывод, что сравнивать WebDriver с каким-нибудь инструментом тестирования типа TestComplete или Sahi бессмысленно. Они находятся в разных весовых категориях. Это всё равно, что сравнивать драйвер принтера с текстовым редактором.
А что можно сравнивать?
Можно сравнивать WebDriver с драйверами, которые включены в состав различных инструментов. Например, можно сравнить:
- какие браузеры и какие версии браузеров поддерживаются, в том числе мобильные,
- какие операционные системы поддерживаются, в том числе мобильные,
- можно ли управлять одновременно несколькими браузерами на одной машине, не возникает ли конфликтов,
- можно ли управлять браузером на удалённой машине,
- какие действия в браузере можно выполнять,
- какие данные из браузера можно получать,
- насколько точно драйвер эмулирует действия пользователя, то есть генерирует ли он все те же самые события в браузере, которые возникают при работе настоящего пользователя,
- можно ли работать с диалоговыми окнами (alert, prompt),
- можно ли работать с «нативными» окнами (диалог загрузки файлов),
- можно ли работать с HTTPS-протоколами и сертификатами,
- и так далее.
И вот тут WebDriver оказывается бесспорным лидером. Впрочем, само сравнение WebDriver с чем бы то ни было выходит за рамки этой статьи.
Что касается сравнения с «комплексным» инструментами типа TestComplete или Sahi, для этого нужно брать не WebDriver, а полный стек.
Например, стек для технологии Java может быть таким: Jenkins + Maven + Thucydices + JUnit+ WebDriver. К этому добавляются ещё все возможности языка программирования Java, плюс масса плагинов для Maven и Jenkins, а чтобы совсем всё было круто – можно запускать тесты в облаках, используя какой-нибудь сервис типа SauceLabs.
Вот тогда сравнение будет интересным. Но это уже заслуга не только WebDriver, важен весь стек, а не только драйвер браузера. Что касается WebDriver, стоит отметить лишь то, что он прекрасно встраивается практически в любой стек, это одно из его достоинств как «независимого» драйвера.
Разумеется, WebDriver может использоваться не только при тестировании. Ему вообще безразлично, кто и зачем хочет управлять браузером. Вы можете автоматизировать какие-то рутинные задачи. Можете сделать ботов, которые будут флудить в форумах. Можете сделать скрипт, который автоматически снимает скриншоты для документации. Всё что угодно. Драйверу всё равно. Он всего лишь предоставляет доступ к браузеру.
Кроме того, какой бы инструмент вы ни использовали – вполне возможно, что к нему удастся подключить WebDriver, который имеет реализации на самых разных языках – Java, C#, Ruby, Python. И тогда вы в дополнение ко всем возможностям вашего любимого инструмента добавите все достоинства WebDriver. Это стоит потраченных усилий, потому что среди драйверов на данный момент он лучший.
Ну да, я уже несколько раз повторил, что «он лучший», но при этом не привёл сравнения с другими драйверами. И не буду. Потому что есть аргумент, который в перспективе важнее любых сравнений.
Selenium WebDriver – это спецификация интерфейса для управления браузером
Самое главное отличие WebDriver от всех остальных драйверов заключается в том, что это «стандартный» драйвер, а все остальные – «нестандартные».
И это не простая фигура речи.
Организация W3C действительно приняла WebDriver за основу при разработке стандарта интерфейса для управления браузером. Сейчас он находится в состоянии публичного рассмотрения.
Через год-полтора этот стандарт будет утверждён. И тогда реализация интерфейса WebDriver будет возложена на производителей браузеров, а WebDriver как независимый драйвер, возможно, в будущем исчезнет совсем, потому что он будет встроен непосредственно в браузеры.
Таким образом, можно сказать, что Selenium WebDriver это вообще не инструмент, а спецификация, документ, стандарт, описывающий, какой интерфейс браузеры должны предоставлять наружу, чтобы через этот интерфейс можно было браузером управлять.
Пока стандарт обсуждается, производители браузеров уже действуют. В рамках проекта Selenium было разработано несколько референсных реализаций для различных браузеров, но постепенно эта деятельность переходит в ведение производителей браузеров. Драйвер для браузера Chrome разрабатывается в рамках проекта Chromium, его делает та же команда, которая занимается разработкой самого браузера. Драйвер для браузера Opera разрабатывается в компании Opera Software. Драйвер для браузера Firefox пока разрабатывается участниками проекта Selenium, но в недрах компании Mozilla уже готовится ему замена, которая носит кодовое название Marionette. Этот новый драйвер для Firefox уже доступен в девелоперских сборках браузера. На очереди Internet Explorer и Safari, к их разработке сотрудники соответствующих компаний пока не подключились, но кое-какие сдвиги в этом направлении есть, потому что стандарт (даже будущий) обязывает.
В общем, можно сказать, что Selenium это единственный проект по созданию средств автоматизации управления браузерами, в котором участвуют непосредственно компании, разрабатывающие браузеры. Это одна из ключевых причин его успеха.
А что случится после того, как во всех браузерах будет реализован этот стандарт?
Было бы логично ожидать, что производители инструментов тестирования не станут изобретать велосипеды, а будут управлять браузером через стандартный интерфейс. Можно сказать, что все инструменты станут использовать WebDriver для взаимодействия с браузером. Но это будет уже не Selenium WebDriver как независимый драйвер, а Selenium WebDriver как спецификация интерфейса.
Так почему же у него такой примитивный интерфейс?
Именно потому, что WebDriver – это:
- драйвер браузера, то есть библиотека достаточно низкого уровня абстракции,
- стандарт на интерфейс управления браузером, то есть минимальный набор команд, который должен быть реализован в каждом браузере.
При разработке Selenium WebDriver изначально была поставлена цель – не включать в него ничего лишнего. Стандартный интерфейс управления браузером должен быть простым и стабильным.
Набор команд последовательно сокращался, были выброшены такие «повышающие удобство использования» команды как check, uncheck (для чекбоксов), select (для выпадающих списков). Все они сводятся к более простой команде click и поэтому они лишние. Сейчас в интерфейсе WebDriver осталась только одна избыточная команда – это submit, но может быть когда-нибудь и она будет устранена.
Кроме того, структура интерфейса проектировалась таким образом, чтобы можно было описать его на языке IDL (именно это сделано в стандарте W3C) и сделать реализации на различных языках программирования. Поэтому использовался минимум языковых идиом, минимум «скрытых» переменных, интерфейс «тупой и прямолинейный».
Но зато благодаря этой примитивности интерфейса сейчас для интерфейса WebDriver имеются реализации клиентских библиотек на Java, C#, Ruby, Python, JavaScript, PHP, Perl и даже Haskell!
И благодаря той же самой простоте WebDriver прекрасно интегрируется с любыми другими инструментами, встраивается в любой стек. В этом секрет его популярности и быстрого распространения – он не пытается «победить» другие инструменты, вместо этого он интегрируется с ними.
А как же удобство использования?
Эту задачу должны решать расширения, построенные на базе Selenium WebDriver. Именно они должны предоставлять расширенный набор команд, реализуя эти команды через примитивный интерфейс WebDriver. В дистрибутиве Selenium имеется класс Select, предназначенный для работы с выпадающими списками, который является наглядной демонстрацией того, как должны строиться расширения.
Постепенно появляются библиотеки, которые строятся на базе Selenium WebDriver и предоставляют более высокий уровень абстракции: Selenide, fluent-selenium, watir-webdriver, Thucidides. Популярные фреймворки для проектирования тестов позволяют наряду с другими драйверами использовать WebDriver. Среди таких фреймворков можно упомянуть Robot Framework, Capybara и тот же Thucidides.
Рано или поздно должны появиться вспомогательные библиотеки, облегчающие работу с теми или иными наборами виджетов – jQuery, Prototype, ExtJS, GWT и прочими.
Число таких расширений и инструментов будет расти, сложность тоже. Так что вскоре может так случиться, что вы, используя какой-то инструмент, будете выполнять тесты, даже не подозревая о том, что взаимодействие с браузером осуществляется через драйвер Selenium WebDriver.
Стоит ли тогда вообще изучать Selenium?
Может быть лучше изучать эти библиотеки и инструменты более высокого уровня?
Чтобы ответить на этот вопрос, я сформулирую его иначе: кому и зачем стоит изучать Selenium, а кому лучше использовать более высокоуровневые библиотеки и инструменты?
- Какой бы инструмент вы ни использовали, вам нужно выбрать драйвер, управляющий браузером. Чтобы его выбрать, вы должны знать возможности драйвера – что он может, а чего не может. На этом уровне Selenium необходимо освоить каждому специалисту по автоматизации. При этом конкретно интерфейс WebDriver, если вы с ним работаете, изучать нет необходимости.
- Простой набор команд выучить проще, чем «расширенный», то есть Selenium освоить проще, чем его расширение. У этого явления есть и обратная сторона – если вы изучили расширенный набор команд, то внезапно оказывается, что набор команд WebDriver вы при этом тоже освоили.
- Расширения, как правило, языково-зависимые, потому что добавление удобства предполагает использование языковых идиом, типичных приёмов организации кода на том или ином языке программирования. Базовый интерфейс WebDriver простой, поэтому освоив его, вы сможете использовать его на любом языке, он будет выглядеть практически одинаково.
- Большинство библиотек, нацеленных на повышение удобства интерфейса, улучшают средства поиска элементов – дополнительные типы локаторов, более удобный способ описания локаторов и так далее. Примитивы, соответствующие действиям пользователя, в WebDriver уже и так достаточно хороши. Хотя, конечно, библиотеки будут реализовывать типовые «связки», то есть последовательности этих действий, аналогично тому, как это сделано в классе Select для выпадающих списков.
- Если вы используете «таблички» для описания тестов (как в Robot Framework) или специальный язык для описания на уровне предметной области (DSL, Domain Specific Language) – вам нет необходимости знать о примитивах WebDriver. Но если вы реализуете «фикстуры» для тестов, описываете действия, которыми можно будет оперировать в табличках, реализуете DSL – вам придётся работать непосредственно с WebDriver, либо с каким-то его расширением, но не слишком высокоуровневым.
- И самый последний аргумент, который, я надеюсь, со временем будет становиться всё менее актуальным – увы, пока хороших расширений катастрофически не хватает. Они обязательно появятся. Может быть, именно вы реализуете одно из таких расширений. Для этого вам понадобиться изучить интерфейс WebDriver. И те, кто будут пользоваться плодами вашего труда, смогут работать с более высокоуровневой библиотекой. А пока приходится использовать непосредственно WebDriver с небольшими надстройками над ним.
Надеюсь, всё вышесказанное позволит вам лучше понять, какое место Selenium WebDriver занимает в общей картине мира и как он соотносится с другими инструментами. Если всё ещё остались непонятные моменты – задавайте вопросы в комментариях, я постараюсь всё прояснить.
selenium-webdriver — Начало работы с selenium-webdriver
замечания
В этом разделе представлен обзор того, что такое selenium-webdriver, и почему разработчик может захотеть его использовать.
Следует также упомянуть о любых крупных предметах в селен-webdriver и ссылаться на связанные темы. Поскольку документация для selenium-webdriver является новой, вам может потребоваться создать начальные версии этих связанных тем.
Версии
Версия | Дата выхода |
---|---|
0.0.1 | 2016-08-03 |
Установка или настройка
Чтобы начать использовать WebDriver, вам нужно будет получить соответствующий драйвер с сайта Selenium : Selenium HQ Downloads . Отсюда вам нужно загрузить драйвер, относящийся к браузерам и / или платформам, на которых вы пытаетесь запустить WebDriver, например, если вы тестировали в Chrome, сайт Selenium направит вас на:
https://sites.google.com/a/chromium.org/chromedriver/
Чтобы загрузить chromedriver.exe
.
Наконец, прежде чем использовать WebDriver, вам нужно будет загрузить соответствующие языковые привязки, например, если вы используете C #, вы можете получить доступ к загрузке со страницы загрузки Selenium HQ для получения необходимых файлов DLL или, в качестве альтернативы, загрузить их в виде пакетов в Visual Studio через менеджер пакетов NuGet.
Необходимые файлы теперь должны быть загружены, для получения информации о том, как начать использовать WebDriver, обратитесь к другой документации selenium-webdriver
.
Для Visual Studio [NuGet]
Самый простой способ установки Selenium WebDriver — использовать диспетчер пакетов NuGet.
В своем проекте щелкните правой кнопкой мыши «Ссылки» и нажмите «Управление пакетами NuGet», как показано:
Затем введите в поле поиска « webdriver ». Затем вы должны увидеть что-то вроде этого:
Установите « Selenium.WebDriver » и « Selenium.Support » (пакет поддержки включает дополнительные ресурсы, такие как Wait ), нажав кнопку «Установить» с правой стороны.
Затем вы можете установить свои WebDrivers, которые хотите использовать, например, один из них:
Selenium.WebDriver.ChromeDriver (Google Chrome)
PhantomJS (безголовый)
Установка или настройка для Java
Чтобы писать тесты с использованием Selenium Webdriver и Java в качестве языка программирования, вам необходимо загрузить JAR-файлы Selenium Webdriver с веб-сайта Selenium.
Существует несколько способов настройки Java-проекта для веб-сервера Selenium, одним из самых простых из которых является использование Maven. Maven загружает требуемые привязки Java для Selenium webdriver, включая все зависимости. Другой способ — загрузить JAR-файлы и импортировать их в свой проект.
Шаги по настройке проекта Selenium Webdriver с использованием Maven:
- Установите maven на окне Windows после этого документа: https://maven.apache.org/install.html
- Создайте папку с именем
selenium-learing
- Создайте файл в папку выше, используя любой текстовый редактор с именем
pom.xml
- Скопировать ниже содержимого в
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>SeleniumLearning</groupId>
<artifactId>SeleniumLearning</artifactId>
<version>1.0</version>
<dependencies>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-learning</artifactId>
<version>3.0.0-beta1</version>
</dependency>
</dependencies>
</project>
Примечание . Убедитесь, что версия, указанная выше, является последней. Вы можете проверить последнюю версию здесь: http://docs.seleniumhq.org/download/maven.jsp
Используя командную строку, запустите команду ниже в каталог проекта.
mvn clean install
Выше команда загрузит все необходимые зависимости и добавит в проект.
Напишите команду ниже для создания проекта eclipse, который можно импортировать в среду Eclipse.
mvn eclipse:eclipse
Чтобы импортировать проект в eclipse ide, вы можете выполнить следующие шаги
Открыть Elipse -> Файл -> Импорт -> Общие -> Существующий проект в рабочую область -> Далее -> Обзор -> Найти папку с pom.xml -> Ok -> Готово
Установите плагин m2eclipse, щелкнув правой кнопкой мыши на своем проекте и выберите Maven -> Enable Dependency Management.
Шаги по настройке проекта Selenium Webdriver с использованием файлов Jar
- Создайте новый проект в Eclipse, выполнив следующие шаги.
Открыть Elipse -> Файл -> Создать -> Проект Java -> Предоставить имя (обучение по селену) -> Готово
- Загрузите файлы jar с http://www.seleniumhq.org/download/ . Вам необходимо загрузить как Selenium Standalone Server, так и Selenium Client & WebDriver Language Bindings . Поскольку этот документ говорит о Java, вам нужно загрузить только jar из раздела Java. Взгляните на прилагаемый скриншот.
Примечание. Автономный сервер Selenium необходим только в том случае, если вы хотите использовать удаленный сервер для запуска тестов. Поскольку этот документ находится выше, вы можете создать проект, чтобы все было на месте.
- Банки загрузятся в zip-файл, распакуйте их. Вы должны иметь возможность видеть
.jar
напрямую.
- В eclipse щелкните правой кнопкой мыши проект, который вы создали на шаге 1, и выполните следующие шаги.
Свойства -> Путь сборки Java -> Выбрать вкладку «Библиотеки» -> Нажмите «Добавить внешние банки» -> Найти папку распакованного jar, которую вы загрузили выше -> Выбрать все банки из папки
lib
-> Нажмите «ОК» -> «Снова нажмите« Добавить внешние банки »- > Найдите одну и ту же распакованную папку -> Выберите банку, которая находится за пределами папки lib (client-combined-3.0.0-beta1-nodeps.jar
) -> Ok
Аналогичным образом добавьте Selenium Standalone Server
после вышеуказанного шага.
- Теперь вы можете начать писать код селена в свой проект.
PS : Над документацией основана бета-версия selenium-3.0.0, поэтому имена указанных файлов jar могут меняться с версией.
Что такое Selenium WebDriver?
Selenium — это набор инструментов, предназначенных для автоматизации браузеров. Он обычно используется для тестирования веб-приложений на нескольких платформах. Есть несколько инструментов, доступных под зонтиком Селена, таких как Selenium WebDriver (ex-Selenium RC), Selenium IDE и Selenium Grid.
WebDriver — это интерфейс удаленного управления, который позволяет вам манипулировать элементами DOM на веб-страницах, а также управлять поведением пользовательских агентов. Этот интерфейс обеспечивает проводной протокол, нечувствительный к языку , который был реализован для различных платформ, таких как:
а также другие реализации:
- EventFiringWebDriver
- HtmlUnitDriver
- PhantomJSDriver
- RemoteWebDriver
Selenium WebDriver является одним из инструментов Selenium, который предоставляет объектно-ориентированные API на различных языках, чтобы обеспечить больший контроль и применение стандартных методов разработки программного обеспечения. Чтобы точно смоделировать способ взаимодействия пользователя с веб-приложением, он использует «Native OS Level Events» в качестве противопоставления «Синтезированным событиям JavaScript».
Ссылки для ссылки:
Учебник Selenium — CoderLessons.com
Краткое содержание обучения
Selenium — популярный инструмент автоматизации с открытым исходным кодом. Этот онлайн-курс представляет собой пошаговое руководство по изучению Selenium Concepts. Рекомендуется ссылаться на учебники последовательно, один за другим.
что я должна знать?
Это бесплатное учебное пособие предназначено для начинающих, практически не имеющих опыта автоматизации. Если вы новичок в тестировании, сначала возьмите базовый класс Software Testing .
Хотите уроки селена в вашем почтовом ящике? Присоединяйтесь к нашему почтовому курсу
Учебный план
Первый взгляд
Учебник по WebDriver
Будет полезно, если вы вернетесь к Java , прежде чем читать учебники на Webdriver.
Руководство | Как скачать и установить Selenium WebDriver |
Руководство | Первый скрипт Selenium Webdriver: пример кода JAVA |
Руководство | Локаторы в Selenium IDE: CSS Selector, DOM, XPath, текст ссылки, ID |
Руководство | Найти элемент и найти элементы в Selenium WebDriver |
Руководство | Web-элемент Selenium Form: TextBox, кнопка «Отправить», sendkeys (), щелчок () |
Руководство | Как выбрать флажок и переключатель в Selenium WebDriver |
Руководство | Как нажать на изображение в Selenium Webdriver |
Руководство | Как выбрать значение из DropDown с помощью Selenium Webdriver |
Руководство | Найдите элементы по тексту ссылки и тексту частичной ссылки в Selenium Webdriver |
Руководство | Событие с щелчком мыши и клавиатурой: класс действий в Selenium Webdriver |
Руководство | Как загрузить и загрузить файл с помощью Selenium Webdriver |
Руководство | XPath в Selenium WebDriver: полное руководство |
Руководство | Обработка оповещений и всплывающих окон в Selenium WebDriver |
Руководство | Как работать с веб-таблицей в Selenium WebDriver |
Руководство | Обработка динамических веб-таблиц с помощью Selenium WebDriver |
Руководство | Желаемые возможности в Selenium WebDriver |
Руководство | Как проверить подсказку с помощью Selenium WebDriver |
Руководство | Как найти все / неработающие ссылки с помощью Selenium Webdriver |
Руководство | Драйвер Gecko (Marionette) Selenium: скачать, установить, использовать с Firefox |
TestNG
Руководство | Как скачать и установить TestNG в Eclipse для Selenium WebDriver |
Руководство | Учебное пособие по TestNG: аннотации, структура, примеры в Selenium |
Руководство | Группы TestNG: включить, исключить с примером — учебник по Selenium |
Руководство | TestNG @Test Приоритет в Селен |
Руководство | Параллельное выполнение в Selenium: обработка сеансов и зависимость TestNG |
Руководство | TestNG: как запустить несколько тестовых наборов в Selenium |
Руководство | Слушатели TestNG в Selenium: пример ITestListener & ITestResult |
Руководство | Как выполнить неудачные тестовые случаи в TestNG: Selenium WebDriver |
Руководство | Генерация отчетов TestNG в Selenium WebDriver |
Руководство | Настройка, PDF и электронная почта TestNG отчетов в Selenium WebDriver |
Каркасы
Руководство | Объектная модель страницы (POM) и фабрика страниц: учебник по Selenium WebDriver |
Руководство | Поставщик данных и TestNG XML: параметризация в Selenium (пример) |
Руководство | Чтение и запись данных из файла Excel в Selenium Webdriver: POI & JXL |
Руководство | Как выбрать дату из DatePicker / Календарь в Selenium Webdriver |
Предварительный материал Webdriver!
Учебник по Selenium IDE
Должен Проверить!
установка Selenium WebDriver при помощи Python и Chrome
Автор: Энди Найт (Andy Knight)
Оригинал статьи
Перевод: Ольга Алифанова
Теперь, когда наш тест-проект создан, напишем несколько Web UI-тестов при помощи Selenium WebDriver!
Что такое WebDriver?
WebDriver – это программируемый интерфейс для взаимодействия с живыми веб-браузерами. Он позволяет тест-автоматизации открывать браузер, передавать клики, вводить символы, удалять текст, и чисто завершать работу с браузером. Интерфейс WebDriver рекомендован W3C. Самый популярный вариант реализации стандартов WebDriver – это Selenium WebDriver, бесплатный инструмент с открытым исходным кодом.
У WebDriver несколько компонентов:
- Языковые комплекты. Программные пакеты вроде Selenium WebDriver предоставляют комплекты языков программирования для взаимодействия с браузером. Selenium поддерживает основные языки вроде C#, Java, JavaScript, Ruby и Python.
- Код автоматизации. Программисты используют языковые комплекты для автоматизации взаимодействий с браузером. Распространенные взаимодействия – это, например, поиск элементов, клик по ним, и очищение текста. Обычно это пишется при помощи фреймворка тест-автоматизации.
- Протокол JSON Wire. Языковые комплекты кодируют любые взаимодействия, используя JSON, и отправляют их как запросы REST API к драйверу браузера. Протокол JSON Wire независим от языка и платформы.
- Драйвер браузера. Драйвер – это самостоятельный исполняемый модуль на тест-машине. Он работает как прокси между функцией, вызывающей взаимодействие, и браузером. Он получает запросы JSON для взаимодействий и отправляет их в браузер через HTTP.
- Браузер. Браузер обрабатывает тестируемые веб-страницы. Он в основном контролируется драйвером. Все основные браузеры поддерживают WebDriver, но каждому также нужен свой собственный тип драйвера, установленный на той же машине, что и браузер, и доступный по системному пути. К примеру, Google Chrome требует ChromeDriver.
Установка Selenium WebDriver
Для нашего тест-проекта мы будем использовать Python-комплекты Selenium WebDriver, а также Google Chrome и ChromeDriver. Можно пользоваться любым браузером, но давайте возьмем Chrome – у него, во-первых, очень высокая доля рынка, а во-вторых, есть инструменты разработчика, которые пригодятся позднее.
Убедитесь, что на вашей машине установлена самая свежая версия Chrome (для проверки и обновления Chrome перейдите в меню и выберите Help > About Google Chrome. Другой вариант – загрузите и установите его отсюда). Затем скачайте подходящую версию ChromeDriver тут и добавьте его в ваши системные пути.
Убедитесь, что СhromeDriver работает из командной строки:
- $ chromedriver
- Starting ChromeDriver 73.0.3683.68 (47787ec04b6e38e22703e856e101e840b65afe72) on port 9515
- Only local connections are allowed.
- Please protect ports used by ChromeDriver and related test frameworks to prevent access by malicious code.
Затем установите пакет Selenium Python в наше окружение:
- $ pipenv install selenium —dev
Теперь машина готова для веб-тестирования!
Новые тесты
Создайте новый модуль Python в директории tests/ по имени test_web.py. Этот новый модуль будет содержать наши Web UI-тесты. Теперь добавьте следующие импорты:
- import pytest
- from selenium.webdriver import Chrome
- from selenium.webdriver.common.keys import Keys
Зачем они нам нужны?
- pytest будет использоваться для фикстур
- Chrome предоставляет комплект ChromeDriver.
- Keys содержат специальные нажатия клавиш для браузерных взаимодействий.
Настройка и очистка WebDriver
Хорошая практика – когда каждый тест-кейс использует собственную копию WebDriver. Настройка и очистка добавляют несколько секунд к каждому тесту, однако отдельная копия для каждого теста сохраняет их простоту, безопасность и независимость. Если один тест наткнется на проблему, это не затронет другие тесты. К тому же использование отдельной копии WebDriver для каждого теста позволяет запускать их параллельно.
Лучше всего настраивать WebDriver при помощи фикстуры pytest. Фикстуры – это модные функции pytest для настройки и очистки, а еще они умеют внедрять зависимости. Любой тест, требующий копии WebDriver, может просто вызвать фикстуру для его получения.
Код
Добавьте вот такой код в tests/test_web.py:
- @pytest.fixture
- def browser():
- driver = Chrome()
- driver.implicitly_wait(10)
- yield driver
- driver.quit()
browser – это фикстурная функция pytest, как указано в декораторе @pytest.fixture. Давайте рассмотрим каждую строчку, чтобы понимать, что делает эта новая фикстура.
Строки
driver = Chrome()
Chrome() инициализирует копию ChromeDriver на локальной машине, используя настройки по умолчанию. Возвращенный объект драйвера привязан к копии ChromeDriver. Все вызовы WebDriver будут выполняться через него.
driver.implicitly_wait(10)
Самая болезненная часть тест-автоматизации Web UI – это ожидание загрузки или изменения страницы после инициации взаимодействия. Странице нужно время на обработку новых элементов, и если автотест попытается получить доступ к новым элементам до того, как они начнут существовать, WebDriver выдаст исключение NoSuchElementException. Неправильное ожидание – богатый источник «нестабильности» Web UI-тестов.
Метод implicitly_wait говорит драйверу подождать существования элементов не более 10 секунд, прежде чем пытаться их найти. Механизм ожидания довольно умен – вместо того, чтобы спать полные 10 секунд, он прекратит ожидание сразу после появления элемента. Неявные ожидания декларируются один раз, и затем автоматически используются для всех элементов. В отличие от них, явные ожидания могут быть заданы отдельно для каждого взаимодействия – ценой необходимости явных вызовов ожидания. Хорошая практика – использовать один стиль ожидания эксклюзивно для тест-автоматизации. Смешивание явных и неявных ожиданий может иметь мерзкие и неожиданные побочные эффекты. Для нашего проекта неявное 10-секундное ожидание должно быть достаточным (если у вас медленное Интернет-соединение, повысьте этот таймаут для компенсации).
yield driver
Фикстура pytest должна возвращать значение, сообщающее, что именно настраивалось. Наша фикстура возвращает ссылку на инициализированный WebDriver. Однако вместо выражения return она использует yield, что означает, что фикстура – генератор. Первая итерация фикстуры – в нашем случае, инициализация WebDriver – это фаза «настройки», которая вызывается до того, как начался тест. Вторая итерация – вызов выхода – это фаза очистки, вызывающаяся после завершения теста. Запись фикстур как генераторов объединяет в одно целое связанные операции настройки и очистки.
driver.quit()
Всегда выходите из копии WebDriver в конце теста, что бы ни случилось. Процессы драйвера на тест-машине не всегда умирают после окончания автоматизации. Отсутствие явного выхода из копии драйвера может оставить его запущенным как зомби-процесс – а это может привести к потреблению и даже блокировке системных ресурсов.
Обсудить в форуме
Selenium для Python. Глава 2. Первые Шаги / Хабр
Продолжение перевода неофициальной документации Selenium для Python.
Перевод сделан с разрешения автора Baiju Muthukadan.
Оригинал можно найти здесь.
Содержание:
1. Установка
2. Первые Шаги
3. Навигация
4. Поиск Элементов
5. Ожидания
6. Объекты Страницы
7. WebDriver API
8. Приложение: Часто Задаваемые Вопросы
2.1. Простое использование
Если вы установили привязку Selenium к Python, вы можете начать использовать ее с помощью интерпретатора Python.
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
driver = webdriver.Firefox()
driver.get("http://www.python.org")
assert "Python" in driver.title
elem = driver.find_element_by_name("q")
elem.send_keys("pycon")
elem.send_keys(Keys.RETURN)
assert "No results found." not in driver.page_source
driver.close()
Код выше может быть сохранен в файл (к примеру, python_org_search.py), и запущен:
python python_org_search.py
Запускаемый вами Python должен содержать установленный модуль selenium.
2.2. Пошаговый разбор примера
Модуль selenium.webdriver предоставляет весь функционал WebDriver’а. На данный момент WebDriver поддерживает реализации Firefox, Chrome, Ie и Remote. Класс Keys обеспечивает взаимодействие с командами клавиатуры, такими как RETURN, F1, ALT и т.д…
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
Далее создается элемент класса Firefox WebDriver.
driver = webdriver.Firefox()
Метод driver.get перенаправляет к странице URL в параметре. WebDriver будет ждать пока страница не загрузится полностью (то есть, событие “onload” игнорируется), прежде чем передать контроль вашему тесту или скрипту. Стоит отметить, что если страница использует много AJAX-кода при загрузке, то WebDriver может не распознать, загрузилась ли она полностью:
driver.get("http://www.python.org")
Следующая строка — это утверждение (англ. assertion), что заголовок содержит слово “Python” [assert позволяет проверять предположения о значениях произвольных данных в произвольном месте программы. По своей сути assert напоминает констатацию факта, расположенную посреди кода программы. В случаях, когда произнесенное утверждение не верно, assert возбуждает исключение. Такое поведение позволяет контролировать выполнение программы в строго определенном русле. Отличие assert от условий заключается в том, что программа с assert не приемлет иного хода событий, считая дальнейшее выполнение программы или функции бессмысленным — Прим. пер.]:
assert "Python" in driver.title
WebDriver предоставляет ряд способов получения элементов с помощью методов find_element_by_*. Для примера, элемент ввода текста input может быть найден по его атрибуту name методом find_element_by_name. Подробное описание методов поиска элементов можно найти в главе Поиск Элементов:
elem = driver.find_element_by_name("q")
После этого мы посылаем нажатия клавиш (аналогично введению клавиш с клавиатуры). Специальные команды могут быть переданы с помощью класса Keys импортированного из selenium.webdriver.common.keys:
elem.send_keys("pycon")
elem.send_keys(Keys.RETURN)
После ответа страницы, вы получите результат, если таковой ожидается. Чтобы удостовериться, что мы получили какой-либо результат, добавим утверждение:
assert "No results found." not in driver.page_source
В завершение, окно браузера закрывается. Вы можете также вызывать метод quit вместо close. Метод quit закроет браузер полностью, в то время как close закроет одну вкладку. Однако, в случае, когда открыта только одна вкладка, по умолчанию большинство браузеров закрывается полностью:
driver.close()
2.3. Использование Selenium для написания тестов
Selenium чаще всего используется для написания тестовых ситуаций. Сам пакет selenium не предоставляет никаких тестовых утилит или инструментов разработки. Вы можете писать тесты с помощью модуля Python unittest. Другим вашим выбором в качестве тестовых утилит/инструментов разработки могут стать py.test и nose.
В этой главе, в качестве выбранной утилиты будет использоваться unittest. Ниже приводится видоизмененный пример с использованием этого модуля. Данный скрипт тестирует функциональность поиска на сайте python.org:
import unittest
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
class PythonOrgSearch(unittest.TestCase):
def setUp(self):
self.driver = webdriver.Firefox()
def test_search_in_python_org(self):
driver = self.driver
driver.get("http://www.python.org")
self.assertIn("Python", driver.title)
elem = driver.find_element_by_name("q")
elem.send_keys("pycon")
assert "No results found." not in driver.page_source
elem.send_keys(Keys.RETURN)
def tearDown(self):
self.driver.close()
if __name__ == "__main__":
unittest.main()
Вы можете запустить тест выше из командной строки следующей командой:
python test_python_org_search.py . ---------------------------------------------------------------------- Ran 1 test in 15.566s OK
Результат сверху показывает, что тест завершился успешно.
2.4. Пошаговый разбор примера
Сначала были импортированы все основные необходимые модули. Модуль unittest встроен в Python и реализован на Java’s JUnit. Этот модуль предоставляет собой утилиту для организации тестов.
Модуль selenium.webdriver предоставляет весь функционал WebDriver’а. На данный момент WebDriver поддерживает реализации Firefox, Chrome, Ie и Remote. Класс Keys обеспечивает взаимодействие с командами клавиатуры, такими как RETURN, F1, ALT и т.д…
import unittest
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
Класс теста унаследован от unittest.TestCase. Наследование класса TestCase является способом сообщения модулю unittest, что это тест:
class PythonOrgSearch(unittest.TestCase):
setUp — это часть инициализации, этот метод будет вызываться перед каждым методом теста, который вы собираетесь написать внутри класса теста. Здесь мы создаем элемент класса Firefox WebDriver.
def setUp(self):
self.driver = webdriver.Firefox()
Далее описан метод нашего теста. Метод теста всегда должен начинаться с фразы test. Первая строка метода создает локальную ссылку на объект драйвера, созданный методом setUp.
def test_search_in_python_org(self):
driver = self.driver
Метод driver.get перенаправляет к странице URL в параметре. WebDriver будет ждать пока страница не загрузится полностью (то есть, событие “onload” игнорируется), прежде чем передать контроль вашему тесту или скрипту. Стоит отметить, что если страница использует много AJAX-кода при загрузке, то WebDriver может не распознать, загрузилась ли она полностью:
driver.get("http://www.python.org")
Следующая строка — это утверждение, что заголовок содержит слово “Python”:
self.assertIn("Python", driver.title)
WebDriver предоставляет ряд способов получения элементов с помощью методов find_element_by_*. Для примера, элемент ввода текста input может быть найден по его атрибуту name методом find_element_by_name. Подробное описание методов поиска элементов можно найти в главе Поиск Элементов:
elem = driver.find_element_by_name("q")
После этого мы посылаем нажатия клавиш (аналогично введению клавиш с клавиатуры). Специальные команды могут быть переданы с помощью класса Keys импортированного из selenium.webdriver.common.keys:
elem.send_keys("pycon")
elem.send_keys(Keys.RETURN)
После ответа страницы, вы получите результат, если таковой ожидается. Чтобы удостовериться, что мы получили какой-либо результат, добавим утверждение:
assert "No results found." not in driver.page_source
Метод tearDown будет вызван после каждого метода теста. Это метод для действий чистки. В текущем методе реализовано закрытие окна браузера. Вы можете также вызывать метод quit вместо close. Метод quit закроет браузер полностью, в то время как close закроет одну вкладку. Однако, в случае, когда открыта только одна вкладка, по умолчанию большинство браузеров закрывается полностью.:
def tearDown(self):
self.driver.close()
Завершающий код — это стандартная вставка кода для запуска набора тестов [Сравнение __name__ с «__main__» означает, что модуль (файл программы) запущен как отдельная программа («main» (англ.) — «основная», «главная») (а не импортирован из другого модуля). Если вы импортируете модуль, атрибут модуля __name__ будет равен имени файла без каталога и расширения — Прим. пер.]:
if __name__ == "__main__":
unittest.main()
2.5. Использование Selenium с remote WebDriver
Для использования remote WebDriver (удаленного веб-драйвера) необходимо запустить Selenium server. Для запуска сервера используйте команду:
java -jar selenium-server-standalone-2.x.x.jar
Пока Selenium server запускается, вы можете видеть сообщения вида:
15:43:07.541 INFO - RemoteWebDriver instances should connect to: http://127.0.0.1:4444/wd/hub
Строка выше сообщает о том, что вы можете использовать указанный URL для подключения remote WebDriver. Ниже приводится несколько примеров:
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
driver = webdriver.Remote(
command_executor='http://127.0.0.1:4444/wd/hub',
desired_capabilities=DesiredCapabilities.CHROME)
driver = webdriver.Remote(
command_executor='http://127.0.0.1:4444/wd/hub',
desired_capabilities=DesiredCapabilities.OPERA)
driver = webdriver.Remote(
command_executor='http://127.0.0.1:4444/wd/hub',
desired_capabilities=DesiredCapabilities.HTMLUNITWITHJS)
Переменная desired_capabilities — это словарь. Вместо того, чтобы использовать словари по умолчанию, вы можете явно прописать значения:
driver = webdriver.Remote(
command_executor='http://127.0.0.1:4444/wd/hub',
desired_capabilities={'browserName': 'htmlunit',
'version': '2',
'javascriptEnabled': True})
Перейти к следующей главе
WebDriver :: Documentation for Selenium
Selenium
- Начало работы
- Краткий обзор
- Краткий обзор
- Введение
- Проект и инструменты Selenium
- Об автоматизации тестирования
- Виды испытаний
- Об этой документации
- Проект и инструменты Selenium
- Установка селена
- Установка библиотек Selenium
- Установка двоичных файлов WebDriver
- Установка автономного сервера
- Установка библиотек Selenium
- Начало работы с WebDriver
- Браузеры
- Сторонние драйверы и плагины
- Установочные элементы
- Выполнение действий на АВ *
- Браузеры
- WebDriver
- Понимание компонентов
- Требования к драйверам
- Манипуляции с браузером
- Ожидание
- Классы поддержки
- Предупреждения, подсказки и подтверждения JavaScript
- Http прокси
- Стратегия загрузки страницы
- Веб-элемент
- Клавиатура
- Понимание компонентов
- Удаленный WebDriver
- Удаленный сервер WebDriver
- Клиент удаленного WebDriver
- Удаленный сервер WebDriver
- Указания
- Страничные объектные модели
- Язык домена
- Создание состояния приложения
- Макет внешних услуг
- Улучшенная отчетность
- Избегать совместного использования состояния
- Независимость испытаний
- Рассмотрите возможность использования свободного API
- Свежий браузер за тест
- Страничные объектные модели
- Наихудшие практики
- Captchas
- Двухфакторная аутентификация
- Загрузки файлов
- Captchas
.
Selenium C # Webdriver Tutorial: NUnit Example
- Home
Testing
- Back
- Agile Testing
- BugZilla
- Cucumber
- 9000 J3000 Testing
- 9000 База данных J3000 Назад
- JUnit
- LoadRunner
- Ручное тестирование
- Мобильное тестирование
- Mantis
- Почтальон
- QTP
- Назад
- Центр качества (ALM)
- SAP Testing
- SAPU
- Управление тестированием
- TestLink
SAP
- Назад
- ABA P
- APO
- Новичок
- Basis
- BODS
- BI
- BPC
- CO
- Назад
- CRM
- Crystal Reports
- QM4O
- Заработная плата
- Назад
- PI / PO
- PP
- SD
- SAPUI5
- Безопасность
- Менеджер решений
- Successfactors
- SAP Tutorials
4
- Web
- Apache
- AngularJS
- ASP.Net
- C
- C #
- C ++
- CodeIgniter
- СУБД
- JavaScript
- Назад
- Java
- JSP
- Kotlin
- Linux
- Linux
- Kotlin
- Linux
- Perl
js
- Назад
- PHP
- PL / SQL
- PostgreSQL
- Python
- ReactJS
- Ruby & Rails
- Scala
- SQL
- SQL
- UML
- VB.Net
- VBScript
- Веб-службы
- WPF
000
000
0003 SQL
000
0003 SQL
000
Обязательно учите!
- Назад
- Бухгалтерский учет
- Алгоритмы
- Android
- Блокчейн
- Business Analyst
- Создание веб-сайта
- CCNA
- Облачные вычисления
- 0003 COBOL
- 000 Compiler
- 9000 Встроенный
- 000 9000 Compiler
- Ethical Hacking
- Учебники по Excel
- Программирование на Go
- IoT
- ITIL
- Jenkins
- MIS
- Сети
- Операционная система
- Назад
- Управление проектами
.
The Selenium Browser Automation Project :: Документация по Selenium
Selenium
- Начало работы
- Краткий обзор
- Краткий обзор
- Введение
- Проект и инструменты Selenium
- Об автоматизации тестирования
- Виды испытаний
- Об этой документации
- Проект и инструменты Selenium
- Установка селена
- Установка библиотек Selenium
- Установка двоичных файлов WebDriver
- Установка автономного сервера
- Установка библиотек Selenium
- Начало работы с WebDriver
- Браузеры
- Сторонние драйверы и плагины
- Установочные элементы
- Выполнение действий на АВ *
- Браузеры
- WebDriver
- Понимание компонентов
- Требования к драйверам
- Манипуляции с браузером
- Ожидание
- Классы поддержки
- Предупреждения, подсказки и подтверждения JavaScript
- Http прокси
- Стратегия загрузки страницы
- Веб-элемент
- Клавиатура
- Понимание компонентов
- Удаленный WebDriver
- Удаленный сервер WebDriver
- Клиент удаленного WebDriver
- Удаленный сервер WebDriver
- Указания
- Страничные объектные модели
- Язык домена
- Создание состояния приложения
- Макет внешних услуг
- Улучшенная отчетность
- Избегать совместного использования состояния
- Независимость испытаний
- Рассмотрите возможность использования свободного API
- Свежий браузер за тест
- Страничные объектные модели
- Наихудшие практики
- Captchas
- Двухфакторная аутентификация
- Загрузки файлов
- Captchas
.
Требования к драйверу :: Документация по Selenium
Selenium
- Начало работы
- Краткий обзор
- Краткий обзор
- Введение
- Проект и инструменты Selenium
- Об автоматизации тестирования
- Виды испытаний
- Об этой документации
- Проект и инструменты Selenium
- Установка селена
- Установка библиотек Selenium
- Установка двоичных файлов WebDriver
- Установка автономного сервера
- Установка библиотек Selenium
- Начало работы с WebDriver
- Браузеры
- Сторонние драйверы и плагины
- Установочные элементы
- Выполнение действий на АВ *
- Браузеры
- WebDriver
- Понимание компонентов
- Требования к драйверам
- Манипуляции с браузером
- Ожидание
- Классы поддержки
- Предупреждения, подсказки и подтверждения JavaScript
- Http прокси
- Стратегия загрузки страницы
- Веб-элемент
- Клавиатура
- Понимание компонентов
- Удаленный WebDriver
- Удаленный сервер WebDriver
- Клиент удаленного WebDriver
- Удаленный сервер WebDriver
- Указания
- Страничные объектные модели
- Язык домена
- Создание состояния приложения
- Макет внешних услуг
- Улучшенная отчетность
- Избегать совместного использования состояния
- Независимость испытаний
- Рассмотрите возможность использования свободного API
- Свежий браузер за тест
- Страничные объектные модели
- Наихудшие практики
- Captchas
- Двухфакторная аутентификация
- Загрузки файлов
- Captchas
.