Selenium Flashcards
Что такое Selenium и зачем его используют
- Инструмент для автоматизации шагов пользователя в браузере
- SeleniumHQ - придумали язык запросов для взаимодействия с браузерами и он был стандартизирован - webdriver protocol. java\python -> webdriver protocol.
- На текущий момент SeleniumHQ пишет библиотеки для языков программирования. А разработчики браузеров - драйвера для своих браузеров.
Клиент: клиентские библиотеки (java\python…)
Бэкэнд: драйвер браузера
Что такое драйвер браузера?
Программная библиотека которая позволяет взаимодействовать с браузером.
Драйвер - как драйвер принтера
не имеющая пользовательского интерфейса программная библиотека, которая позволяет различным программам взаимодействовать с браузером, управлять его поведением, получать от браузера данные и заставлять браузер выполнять команды.
Какие виды локаторов страницы есть?
- CSS selector
- XPath selector
- Link text selector
- Partial link text selector
- Tag name
ID - в коде реализован через CSS селектор
Локатором является пара: стратегия локатора и значение стратегии локатора
Типы селекторов: только css и xpath
Официальная документация стандарта w3c: https://w3c.github.io/webdriver/#locator-strategies
Преимущества и недостатки локаторов
- CSS selector
- XPath selector
- Link text selector
- Partial link text selector
- Tag name
- CSS selector:
- Нативные для браузера - поэтому поиск по ним более быстрый (чем по xpath)
- Намного более лаконичны, кратки и читаемы. Используют более простой, менее громоздкий синтаксис
- Стимулирует команду делать продукт более тестируемым
- XPath selector:
- Более громоздкий
- Делает то, что не может css: поиск по дереву, поднятие вверх по дереву, нахождение соседних элементов и может искать по тексту
Более читабельные:
* Link text selector (xpath)
* Partial link text selector (xpath)
* Tag name (css)
Что такое Selenium Waits?
- Явные - ждёт выполнение условия. Используется для каждого конкретного элемента.
- expected_conditions
- можно сделать неявными скрыв в функции
- Неявные ожидания - устанавливаются один раз, но ждут только до появления элемента в DOM (еще возможно не видим на странице)
Нельзя использовать вместе согласно официальной документации.
В большинстве случаев используют явные ожидания.
Fluent wait - webdriverwait играет роль fluent wait т.к. язык динамический, т.к. тип не определен - можно передать туда все что угодно вместо драйвера
Какие exceptions может оставить Selenium?
Много. Все запоминать не рекомендуется.
Самые известные:
* StaleElementReferenceException - устаревший элемент (нет на странице)
* NoSuchElementException
Что делать: ничего не выполнять без вейтов.
Все наследуется от WebDriverException и они все передаются в вейтах
ignored_exceptions=(WebDriverException,)
Как вычитать данные из динамической вебтаблицы
Необходимо сначала определить количество колонок и столбцов в данный момент с помощью xPath и тэгов <td>, <tr>, а затем обращаться к определённой ячейке или итеративно получить данные из всех ячеек.
Как с обычной таблицей через wait
def cell(row_number, column_number): def find_cell(driver): return table.find_elements(By.TAG_NAME, 'tr')[ row_number - 1 ].find_elements(By.TAG_NAME, 'td')[column_number -1] return find_cell cell = wait.unitl(cell(2, 1)) cell.click() cell.find_element(By.TAG_NAME, 'input').send_keys('text')
w/ lambda
def cell(row_number, column_number): return lambda driver: table.find_elements(By.TAG_NAME, 'tr')[ row_number - 1 ].find_elements(By.TAG_NAME, 'td')[column_number -1]
https://www.loom.com/share/774416dc80a94b6aa4cab80a2e6287a9
Что такое Selenium Grid?
Кластер, состоящий из нескольких Selenium-серверов. Предназначен для организации распределённой сети, позволяющей параллельно запускать много браузеров на большом количестве машин. Имеется выделенный сервер, который носит название «хаб» или «коммутатор», а остальные сервера называются «ноды» или «узлы».
Что такое Selenoid?
Параллельный запуск браузеров в докер контейнерах
Отличия Selenium Grid от Selenoid?
Как запустить тесты параллельно?
pytest-xdist автоматически распределяет тестовые сценарии между потоками для параллельного выполнения.
pytest -n 2 - где 2 это количество потоков
pytest tests/ -n auto
Какие способы cliсk и send keys есть в Selenium?
driver.find_element
1. обычный webelement.click()
2. js driver.execute_script(‘arguments[0]’, webelement)
3. ActionChains(driver).
* double_click
* context_click
* click and hold
webelement.send_keys(‘foobar’)
webelement.send_keys(Keys.ENTER)
webelement.send_keys(‘foobar’ + Keys.ENTER)
send_keys - парсит строку текста на буквы и каждую букву посылает по отдельности. Для ввода текста полностью используется js
Что такое Appium?
Реализация selenium webdriver протокола и драйверов для мобильных устройств. Частично расширенный.
Концепция дизайна Appium
Appium — HTTP-сервер, написанный на платформе Node.js, который управляет сессиями iOS и Android, используя проводной протокол WebSON JSON. Следовательно, перед инициализацией сервера Appium Node.js должен быть предварительно установлен в системе.
Когда Appium загружен и установлен, на нашем компьютере настраивается сервер, который предоставляет REST API.
Он получает запрос на подключение и команду от клиента и выполняет эту команду на мобильных устройствах (Android / iOS)
Он отвечает HTTP-ответами. Опять же, чтобы выполнить этот запрос, он использует платформы автоматизации мобильных тестов для управления пользовательским интерфейсом приложений.
Ограничения:
- Инструменты Apple для iOS (инструменты доступны только в Xcode 3.0 или более позднейверсии с OS X v10.5 и более поздней версии)
- Google UIAutomator для Android API уровня 16 или выше
- Selendroid для Android API уровня 15 или ниже
Назовите два способа автоматизации капчи.
- Боты с поддержкой оптического распознавания символов (OCR) - в этом подходе КАПЧА решается автоматически с помощью бота.
- Услуги по решению капчи реальными людьми - в сервисе есть сотрудники, которые постоянно доступны онлайн для решения капчи. Когда вы отправляете свою КАПЧУ, компания пересылает ее работникам, которые ее решают, и отправляет обратно решения.
Как найти поврежденные ссылки в Selenium WebDriver?
- Собрать все ссылки на веб-странице на основе тега
<a>
(ссылки). - Сделать запрос к ссылке и проверить статус код через response
- Повторить это для всех захваченных ссылок.
Какую технику следует применить, если «нет ни frame id, ни frame name»?
CSS или XPath
Расскажите, как вы будете строить и внедрять стратегию автоматизации тестирования.
- https://youtu.be/Q9Q-JhgogTM
- https://habr.com/ru/articles/275171/
3 варианта стратегий, характерных для самого начала развёртывания автоматизации.
1. Стратегия «Let’s try»
Применяется в том случае, когда АТ ни на проекте, ни в компании по сути никогда не было, и планируется осторожный старт с умеренным выделением ресурсов.
Имеет смысл применять в случае, когда:
- Отсутствуют точные цели автоматизации (покрыть 40% кода конкретного модуля к определённой дате, уменьшение расходов на ручное тестирование и т.д.).
- АТ на проекте ранее никогда не применялась.
- У тестировщиков отсутствует (или очень мал) опыт АТ.
- Выделенные ресурсы умеренны или низки.
Описание стратегии:
- Больше внимания уделять подготовительным этапам тестирования (составление тест-планов, тест-кейсов и т.д.).
- Больше внимания уделять инструментам, которые можно использовать как помощь в ручном тестировании.
- Больше экспериментировать с технологиями и методологиями АТ. Никто не ждёт срочных результатов и можно экспериментировать.
- Работать с проектом, начиная с верхнего уровня, в начале не углубляясь в автоматизацию конкретных модулей.
2. Стратегия «Here the target»
Особенностью стратегии служит ориентирование на конкретный результат. Выбирается/определяется цель нового этапа АТ, и задачи ориентируются на достижения данного результата.
Имеет смысл применять в случае, когда:
- Когда на проекте уже проведена предварительная работа, имеется какой-то бэкграунд в виде тест-планов, тест-кейсов, автотестов предыдущего этапа АТ.
- Есть конкретная цель АТ (не глобальная — 80% автотестов за полгода, а скорее 50% автотестов конкретного модуля за месяц)
- Для выполнения конкретной цели выбраны конкретные инструменты, оптимально если у специалистов имеется некий технический бэкграунд по работе с инструментами.
Описание стратегии:
- Поступательная стратегия, чем-то напоминающая Agile методологии разработки. Движение вперёд этапами. Покрытие автотестами модуля за модулем, до полного выполнения мета задач вида (80% за полгода).
- На каждый этап выставляется новая цель (вероятнее всего продолжающая последнюю выполненную цель, но не обязательно), и выбираются инструменты для реализация данной цели.
- Глубокая фокусировка на конкретной цели, написание тест-кейсов, автотестов, не для всего проекта, а исключительно под конкретную задачу.
1.3 Стратегия «Operation Uranum»
По сути, стратегия — постоянная и методичная работа над АТ по выставляемым раз в 2-3 недели приоритетам. Оптимально — наличие постоянно работающего именно над автоматизацией человека, не особенно отвлекающегося на сторонние задачи.
Имеет смысл применять в случае, когда:
- Отсутствуют конкретные цели, есть лишь общее пожелание «чтоб всё было хорошо». Если «Here the target» напоминает по принципу работы Agile, то данная стратегия близка по духу к методологии Waterfall.
- Есть ресурс в виде хотя бы одного постоянно действующего на проекте человека, плотно занятого задачей автоматизации.
- Нет чётко выраженных целей АТ, однако есть пожелания (приоритеты), которые можно выставить на достаточно продолжительный период времени (данные модули более важны, нежели те, больше ошибок традиционно в бэкэнде/фронтэнде, потому большие усилия стоит направить на него).
Описание стратегии:
- Идея стратегии описана выше, постоянная и методичная работа с учётом выставленных приоритетов.
- В начале нужен упор в базовую часть, поскольку так или иначе в рамках данной стратегии автоматизируется весь проект, без полной фокусировки на конкретных модулях.
Как взаимодействуют клиентская библиотека Selenium, драйвер браузера и сам браузер?
Клиентская библиотека Selenium отправляет команды драйверу браузера по стандартизированному протоколу, который в свою очередь управляет браузером, выполняя действия на веб-странице. Результаты выполнения команд возвращаются обратно через драйвер браузера клиентской библиотеке Selenium.
Для чего используют browser capabilities
Для хранения данных о браузере и его версии
Для чего используют browser arguments?
- отключение уведомлений
- блокировка изображений
- изменение языка ui
Для чего используют browser options?
- размер окна браузера
- настройка таймаутов
- стратегия загрузки страницы
Для чего используют browser options, capabilities, arguments?
Options:
- размер окна браузера
- настройка таймаутов
- стратегия загрузки страницы
Arguments:
- отключение уведомлений
- блокировка изображений
- изменение языка ui
Capabilities
- Для хранения данных о браузере и его версии
Что такое iframe и как с ним работать в Selenium?
iframe - для встраивания другого HTML-документа в текущий.
Сторонние виджеты, встроенные видео или реклама.
Фрейм (Frame/iFrame) — самостоятельный документ, который отображается в отдельном окне браузера и представляет собой полностью законченную HTML-страницу. Простыми словами, фрейм — разделитель браузерных окон на отдельные области.
Способы переключаться на iframe:
По индексу driver.switchTo().frame(i);
По имени или идентификатору driver.switchTo().frame(“a077aa5e”);
По веб-элементу driver.switchTo().frame(driver.findElement(By.cssSelector(“#modal>iframe”));
Как обрабатывать браузерные сообщения (alerts)?
- driver.switch_to.alert - этот метод позволяет переключиться на активное браузерное сообщение.
- alert.text - с помощью этого метода можно получить текст сообщения.
- alert.accept() - метод для подтверждения (нажатия на кнопку “OK”) браузерного сообщения.
- alert.dismiss() - метод для отклонения (нажатия на кнопку “Cancel”) браузерного сообщения.
- alert.send_keys(text) - метод для ввода текста в поле браузерного сообщения (только для prompt).
В selene:browser.driver().switch_to.alert.accept()