Listeners — desired capability — Скриншоты — Failed — Прокрутка — StaleElement — Robot — XPath — PageFactory
Почему нужен TestNG в связке с Selenium?
TestNG помогает делать автотесты Selenium более структурированными, читабельными и реюзабельными — пригодными для повторного использования в других ситуациях. Selenium не поддерживает создание репортов, поэтому нужен TestNG для репортов в форматах XML и HTML. С помощью TestNG также можем определять приоритеты тестов, параметризировать и группировать тесты, а также интегрировать тесты с Maven и Jenkins для непрерывного тестирования в DevOps.
2. Ваш Selenium-скрипт нормально работает в Edge, но не работает в Internet Explorer. Как решить проблему?
Например:
- Проверить, обновлены ли Selenium IE Driver и Selenium jar’ы до последней стабильной версии.
- Убедиться, что рабочее окружение и драйвер IE совместимы.
- Присвойте одинаковое значение параметру «Включен защищенный режим» для всех зон на вкладке «Безопасность».
- Используйте метод setProperty для настройки драйвера IE и импортируйте все необходимые зависимости в POM-файл Maven.
- Убедитесь, что указали стабильную версию Selenium в зависимостях POM-файла.
- Используйте CSS-селекторы для минимизации исключений.
- Создайте запись в реестре Windows.
- Отключите внутренние настройки безопасности в Internet Explorer при выполнении сценариев Selenium.
- Попробуйте использовать JavaScriptExecutor вместо нативных кликов.
- Разрешите JavaScript в браузере Internet Explorer.
3. Какие существуют типы слушателей в TestNG?
- IConfigurable
- IExecutionListener
- IAnnotationTransformer
- IHookable
- IInvokedMethodListener
- IInvokedMethodListener2
- IConfigurationListener
- IReporter
- ITestListener
- IMethodInterceptor
- ISuiteListener
4. Как найти неработающие ссылки в Selenium?
Сначала нужно собрать все ссылки, присутствующие на веб-странице, с помощью тега <a>. Используем значение атрибута «href» для каждого тега якоря, чтобы получить гиперссылку. Отправляем HTTP-запросы к каждой ссылке и проверяем коды HTTP-ответов. Код HTTP-ответа поможет определить, является ли ссылка нерабочей.
После этого можем использовать метод driver.get() для перехода к URL, который должен отвечать статусом 200/OK. Статус «200/OK» означает, что мы перешли на рабочую ссылку. Любой другой статус указывает на неработающую.
5. В чем разница между findElement() и findElements() в Selenium?
Команда findElement помогает нам найти один элемент на текущей странице с помощью механизма локации. Команда findElement
возвращает первый элемент, найденный локатором, если мы не используем какой-то уникальный идентификатор. Команда findElements()
возвращает все совпадающие веб-элементы на текущей странице.
6. Расскажите о desired capability в Selenium.
Desired capability («Желаемая возможность») — это определенная функциональность или возможность, которая включает в себя ряд пар ключ-значение. Пары ключ-значение могут использоваться для хранения таких данных, как имя браузера, путь к драйверу браузера в системе и версия браузера, которые помогают определить рантайм браузера. Можно настроить экземпляр драйвера в Selenium, используя desired capability
. Это удобно, когда нужно запустить тестовые сценарии в разных операционных системах, их версиях и браузерах.
7. Вы тестируете приложение электронной коммерции с помощью Selenium. В связи с предстоящим деплоем команда решила не тестировать модули, связанные с платежными шлюзами в приложении. Как эффективно приспособить сценарии автоматизированного тестирования в Selenium в таком случае?
Поскольку придется тестировать модуль повторно, лучшим вариантом видимо будет пропуск конкретного метода тестирования или блока кода. Чтобы пропустить метод тестирования, параметр «enabled
» в аннотациях к тесту установить в значение false
. (Значение по умолчанию — true
):
@Test(enabled = false)
8. Тестовые сценарии прошли, но вы хотите посмотреть на пользовательский интерфейс приложения во время определенного шага. Как это сделать?
Мы всегда можем сделать скриншот в приемочном тесте с помощью функции TakeScreenshot
. Чтобы сохранить скриншот, используем метод getScreenshotAs()
.
File screenFile = ((TakeScreenshot)driver).getScreenshotAs(outputType.FILE);
9. Как запустить упавшие тест-кейсы в TestNG?
Можно запустить только упавшие тест-кейсы через Eclipse и командную строку. Для этого:
- Щелкаем правой кнопкой мыши на проекте JAVA и обновляем проект, или селектим мышкой проект и нажимаем F5.
- Теперь появится папка test-output. В ней будет файл с именем
testng-failed.xml
. - Щелкаем правой кнопкой на
testng-failed.xml
, далее run as и выбираем опцию «testNG suite».
Чтобы запустить файл testng-failed.xml из командной строки, следующие действия:
Изменяем каталог на тот в котором находится проект.
Затем вводим команду «java-cp "путь к папке lib в рабочем окружении\*
; путь к файлу testng.jar в папке lib рабочего окружения проекта» org.testng.TestNG test-output/testng-failed.xml
Нажимаем Enter, XML-файл testng выполняет только упавшие тест-кейсы.
10. Как прокрутить вниз к элементу в Selenium, пока он не станет видимым?
С помощью JavaScript Executor и класса Actions в Selenium выполняем прокрутку страниц. DOM работает со всеми элементами страницы с помощью JavaScript, так как это «родной язык браузера». Метод scrollIntoView()
используется для идентификации объекта на текущей странице. Значение этого метода должно быть равно true
.
import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriver; import java.util.concurrent.TimeUnit; import org.openqa.selenium.JavascriptExecutor; public class ScrollToView{ public static void main(String[] args) { System.setProperty("webdriver.chrome.driver", "C:\\Users\\test\\Desktop\\Java\\chromedriver.exe"); WebDriver driver = new ChromeDriver(); String url = "https://www.tutorialspoint.com/index.htm"; driver.get(url); driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS); // identify element WebElement l=driver.findElement(By.xpath("//*[text()='SAMPLE']")); // Javascript executor ((JavascriptExecutor)driver).executeScript("arguments[0].scrollIntoView(true);", l); Thread.sleep(500); driver.quit(); } }
11. Вы столкнулись с исключением StaleElement при выполнении набора автотестов. Как решите эту проблему?
У этого исключения может быть две причины.
- Элемент на странице, который был частью текущего экземпляра, был обновлен или перенесен на другую веб-страницу. Это приводит к уничтожению или реконструкции элемента.
- Вторая причина может заключаться в том, что элемент больше не привязан к DOM.
- Несколько советов по решению проблемы:
Обновите веб-страницу командой navigate
.
driver. navigate().refresh() driver.findElement (By.xpath("sample")).click();
Используйте блок try-catch в цикле for, если элемент не прикреплен к DOM.
for(int i=0;i<=2;i++) { try { driver.findElement(By.xpath("test")).click(); break; } Catch (Exception e){ Sysout(e.getMessage()); } }
Если доступность элемента не вызывает сомнений, используйте метод ExpectedConditions.refreshed
, чтобы избежать исключения Style Element Reference
. Этот метод обновляет элемент, перерисовывая его и предоставляя доступ к элементу, на который ссылается.
wait.until(ExpectedConditions.refreshed(ExpectedConditions.stalenessOf("test")));
12. Что такое класс Robot в Selenium?
Класс Robot
обеспечивает контроль над мышью и клавиатурой. Методы, доступные в Selenium:
- KeyPress(): Вызывается, когда нужно нажать любую клавишу.
- KeyRelease(): Используется для отпускания нажатой клавиши на клавиатуре.
- MouseMove(): Вызывается, когда необходимо переместить указатель мыши по координатам X и Y.
- MousePress(): Для нажатия левой кнопки мыши.
- MouseRelease(): Отпускает нажатую кнопку мыши.
13. Как отключить включенную кнопку?
Можно включить отключенный элемент HTML, будь то кнопка, поле ввода, текстовое поле и т. д., изменив атрибуты с помощью метода .removeAttribute("disabled")
. И наоборот.
Код для отключения кнопки с помощью исполнителя Javascript.
String enable ="doc.getElementsByName("button').removeAttribute('enabled');"; javascript.executeScript(disable);
14. Как определить динамические изображения в Selenium?
Используя следующие методы:
- С помощью абсолютного XPath, поскольку он начинается с корня. Однако при изменении страницы код будет нарушен, поэтому этот метод является менее предпочтительным.
- С помощью относительного XPath с методами «contains» или «starts with». Этот метод более предпочтителен, если изменения значений таких атрибутов, как ID или класс элемента, происходят по схожей схеме. В качестве примера можно привести подсчет количества сообщений в почтовом ящике, приветственные сообщения пользователям, и т. д.
Рассмотрим фрагмент HTML-кода:
<input type="submit" id="submit_123" value="Register">
Предположим, что значение id продолжает меняться, если мы обновляем страницу, но начинается с текста «Submit». В этом случае можем использовать следующий XPath:
Xpath - //input[starts-with(@id, 'submit_')].
В этом случае также можем использовать «contains
» вместо «starts-with
«.
- Идентифицируя элементы по их индексу. Например, могут существовать две кнопки регистрации с одинаковым значением локатора с
id
, начинающимся с «login
«. В этом случае мы можем использовать методfindElements
и найти элемент по индексу.
driver.findElements(By.xpath(//*[contains(@id, 'login').get(1).click();
- Добавив несколько атрибутов для определения местоположения элемента. Вот пример того же самого:
Xpath - //button[starts-with(@id, 'login') and contains(@class, 'success')]
15. Что такое Page Factory?
Page Factory — класс в Selenium WebDriver, который дает оптимизированный способ выполнения Page Object Model. Он служит в качестве встроенного POM-фреймворка, который поддерживает паттерны проектирования объектов страницы.
Метод By()
используется для реализации POM, и нам не нужны никакие импорты или хранение в кэше. Page Factory используется для инициализации элементов Page Object. Метод @FindBy
используется для поиска веб-элементов, а метод initElements
— для инициализации веб-элементов из класса Page Factory. Используя класс Page Factory
, мы можем повторно использовать наши сценарии, и это не требует особого обслуживания в дальнейшем.»