Подготовка к собеседованию по Selenium. Блиц-практикум

Listenersdesired capabilityСкриншотыFailedПрокруткаStaleElementRobotXPathPageFactory

Почему нужен 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 при выполнении набора автотестов. Как решите эту проблему?

У этого исключения может быть две причины. 

  1. Элемент на странице, который был частью текущего экземпляра, был обновлен или перенесен на другую веб-страницу. Это приводит к уничтожению или реконструкции элемента. 
  2. Вторая причина может заключаться в том, что элемент больше не привязан к DOM.
  3. Несколько советов по решению проблемы:

Обновите веб-страницу командой 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, мы можем повторно использовать наши сценарии, и это не требует особого обслуживания в дальнейшем.»

Источник


Какой была ваша первая зарплата в QA и как вы искали первую работу?

Мега обсуждение в нашем телеграм-канале о поиске первой работы. Обмен опытом и мнения.

Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

Мы в Telegram

Наш официальный канал
Полезные материалы и тесты
Готовимся к собеседованию
Project- и Product-менеджмент

? Популярное

? Telegram-обсуждения

Наши подписчики обсуждают, как искали первую работу в QA. Некоторые ищут ее прямо сейчас.
Наши подписчики рассказывают о том, как не бояться задавать тупые вопросы и чувствовать себя уверенно в новой команде.
Обсуждаем, куда лучше податься - в менеджмент или по технической ветке?
Говорим о конфликтных ситуациях в команде и о том, как их избежать
$1100*
медианная зарплата в QA в июне 2023

*по результатам опроса QA-инженеров в нашем телеграм-канале

Собеседование

19%*
IT-специалистов переехало или приняло решение о переезде из России по состоянию на конец марта 2022

*по результатам опроса в нашем телеграм-канале

live

Обсуждают сейчас