Что такое Selenium и зачем его используют
Клиент: клиентские библиотеки (java\python…)
Бэкэнд: драйвер браузера
Что такое драйвер браузера?
Программная библиотека которая позволяет взаимодействовать с браузером.
Драйвер - как драйвер принтера
не имеющая пользовательского интерфейса программная библиотека, которая позволяет различным программам взаимодействовать с браузером, управлять его поведением, получать от браузера данные и заставлять браузер выполнять команды.
Какие виды локаторов страницы есть?
ID - в коде реализован через CSS селектор
Локатором является пара: стратегия локатора и значение стратегии локатора
Типы селекторов: только css и xpath
Официальная документация стандарта w3c: https://w3c.github.io/webdriver/#locator-strategies
Преимущества и недостатки локаторов
Более читабельные:
* Link text selector (xpath)
* Partial link text selector (xpath)
* Tag name (css)
Что такое Selenium Waits?
Нельзя использовать вместе согласно официальной документации.
В большинстве случаев используют явные ожидания.
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-ответами. Опять же, чтобы выполнить этот запрос, он использует платформы автоматизации мобильных тестов для управления пользовательским интерфейсом приложений.
Ограничения:
Назовите два способа автоматизации капчи.
Как найти поврежденные ссылки в Selenium WebDriver?
<a> (ссылки).Какую технику следует применить, если «нет ни frame id, ни frame name»?
CSS или XPath
Расскажите, как вы будете строить и внедрять стратегию автоматизации тестирования.
3 варианта стратегий, характерных для самого начала развёртывания автоматизации.
1. Стратегия «Let’s try»
Применяется в том случае, когда АТ ни на проекте, ни в компании по сути никогда не было, и планируется осторожный старт с умеренным выделением ресурсов.
Имеет смысл применять в случае, когда:
Описание стратегии:
2. Стратегия «Here the target»
Особенностью стратегии служит ориентирование на конкретный результат. Выбирается/определяется цель нового этапа АТ, и задачи ориентируются на достижения данного результата.
Имеет смысл применять в случае, когда:
Описание стратегии:
1.3 Стратегия «Operation Uranum»
По сути, стратегия — постоянная и методичная работа над АТ по выставляемым раз в 2-3 недели приоритетам. Оптимально — наличие постоянно работающего именно над автоматизацией человека, не особенно отвлекающегося на сторонние задачи.
Имеет смысл применять в случае, когда:
Описание стратегии:
Как взаимодействуют клиентская библиотека Selenium, драйвер браузера и сам браузер?
Клиентская библиотека Selenium отправляет команды драйверу браузера по стандартизированному протоколу, который в свою очередь управляет браузером, выполняя действия на веб-странице. Результаты выполнения команд возвращаются обратно через драйвер браузера клиентской библиотеке Selenium.
Для чего используют browser capabilities
Для хранения данных о браузере и его версии
Для чего используют browser arguments?
Для чего используют browser options?
Для чего используют browser options, capabilities, arguments?
Options:
Arguments:
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”));