Pulsate - On
Waves - On

Selenium WebDriver

Selenium — это инструмент для автоматизации тестирования веб-приложений. Он позволяет тестировщикам создавать сценарии, которые имитируют действия пользователя, такие как клики, ввод текста и навигация по страницам.

WebDriver — интерфейс, который управляет браузерами. Он запускает браузеры и выполняет автоматизированные действия, как если бы это делал пользователь.
WebDriverManager — облегчает управление драйверами браузеров, автоматически определяя и загружая их последнюю версию.

Основные методы Selenium

  • get(url) — открывает указанную веб-страницу.
  • findElement() — находит и возвращает первый элемент, соответствующий локатору.
  • findElements() — возвращает список элементов, соответствующих локатору (пустой список, если элементы не найдены).
  • click() — кликает по элементу.
  • sendKeys() — вводит текст в поле ввода.
  • close() — закрывает текущую вкладку браузера.
  • quit() — закрывает все окна браузера и завершает сессию WebDriver.
  • isSelected(), isDisplayed(), isEnabled() — проверяют состояние элемента (выбран, отображается, активен).

Исключения WebDriver

  • NoSuchElementException — элемент не найден на странице.
  • TimeoutException — время ожидания истекло.
  • StaleElementReferenceException — элемент больше не прикреплен к текущей DOM-структуре.

Ожидания (Waits) в Selenium

Ожидания используются для синхронизации тестов с веб-страницей.

Implicit Wait — задает глобальное время ожидания перед каждым шагом теста. Используется редко, так как увеличивает общее время выполнения теста.

Explicit Wait — глобальное ожидание, пока я не получу excepted condition (toBeClickable, toBeVisible). Пропишу его в BasePage, если не в BasePage, то он будет относится к WebDriver'у.

Как проверить, что элемента нет на странице?

Чтобы проверить отсутствие элемента на странице, можно использовать findElements(). Если список пуст, значит элемент отсутствует:
List<WebElement> elements = driver.findElements(By.xpath("your_xpath"));
Assert.assertTrue(elements.isEmpty());

Класс Actions (JavaScript Execution)

Actions — это класс, предоставляющий расширенные действия с элементами, такие как двойной клик, перетаскивание и клик правой кнопкой мыши. Также для выполнения JavaScript-кода можно использовать JavaScriptExecutor.

Пример:
Actions actions = new Actions(driver);
actions.doubleClick(element).perform();

Запуск тестов в параллели

Параллельное выполнение тестов позволяет ускорить тестирование, выполняя тесты одновременно. Это достигается с помощью TestNG, где параллелизация настраивается в testng.xml:
<suite name="ParallelSuite" parallel="tests" thread-count="4">
  <test name="Test1">
    <classes>
      <class name="com.example.TestClass"/>
    </classes>
  </test>
</suite>

Flaky Tests (Нестабильные тесты)

Flaky Tests — это тесты, которые иногда проходят, а иногда нет, без изменений в коде. Причины могут быть связаны с нестабильными локаторами, зависимостями от времени загрузки страницы или некорректными ожиданиями. Решение может включать использование явных ожиданий и ретраев (повторных попыток).

Assertions

Assertions — используются для проверки условий в тестах. Они помогают убедиться, что результат теста соответствует ожиданиям. Популярные методы:

  • Assert.assertTrue() и Assert.assertFalse() — проверяют истинность или ложность условия.
  • Assert.assertEquals() — проверяет равенство значений.

Selenide

Selenide — это фреймворк для автоматизации веб-тестирования, построенный поверх Selenium. Он упрощает написание тестов и автоматически обрабатывает ожидания элементов.

Примеры методов Selenide:

  • open("https://example.com") — открывает веб-страницу.
  • $("#elementId").val("value") — вводит текст в поле.
  • $("#buttonId").click() — кликает по кнопке.
  • $("#elementId").shouldBe(visible) — проверяет, что элемент виден.

Пример проекта с использованием Selenide на GitHub

Selenoid

Selenoid — это инструмент для параллельного выполнения тестов в изолированных средах, работающий на базе Docker. Он позволяет запускать тесты на различных браузерах и операционных системах.

Основная цель — обеспечить изоляцию тестов и параллельное выполнение, что повышает стабильность и скорость тестирования.