Рубрики
Без рубрики

Щелчок по элементам в Selenium с помощью JavaScript

Узнайте, как щелкнуть элементы с помощью Javascript в Selenium.

Автор оригинала: baeldung.

1. введение

В этом коротком уроке мы рассмотрим простой пример того, как щелкнуть и вставить элемент в Selenium WebDriver с помощью JavaScript.

Для нашей демо-версии мы будем использовать JUnit и Selenium для открытия https://baeldung.com и поиск статей “Селен”.

2. Зависимости

Во-первых, мы добавляем зависимости selenium-java и junit в наш проект в pom.xml :


    org.seleniumhq.selenium
    selenium-java
    3.141.59


    junit
    junit
    4.13
    test

3. Конфигурация

Далее нам нужно настроить WebDriver. В этом примере мы будем использовать его реализацию Chrome:

@Before
public void setUp() {
    System.setProperty("webdriver.chrome.driver", new File("src/main/resources/chromedriver.mac").getAbsolutePath());
    driver = new ChromeDriver();
}

Мы используем метод с аннотацией @Before для начальной настройки перед каждым тестом. Внутри мы устанавливаем свойство webdriver.chrome.driver , определяющее местоположение драйвера chrome. После этого мы создаем экземпляр объекта WebDriver .

Когда тест закончится, мы должны закрыть окно браузера. Мы можем сделать это, поместив оператор driver.close() в метод с аннотацией @После . Это гарантирует, что он будет выполнен, даже если тест не удастся:

@After
public void cleanUp() {
    driver.close();
}

4. Открытие браузера

Теперь мы можем создать тестовый случай , который сделает наш первый шаг – откроет веб-сайт:

@Test
public void whenSearchForSeleniumArticles_thenReturnNotEmptyResults() {
    driver.get("https://baeldung.com");
    String title = driver.getTitle();
    assertEquals("Baeldung | Java, Spring and Web Development tutorials", title);
}

Здесь мы используем метод driver.get() для загрузки веб-страницы. Затем мы проверяем его название, чтобы убедиться, что мы находимся в нужном месте.

5. Щелчок по элементу с помощью JavaScript

Selenium поставляется с удобным WebElement#click методом , который вызывает событие click для данного элемента. Но в некоторых случаях действие щелчка невозможно.

Один из примеров-если мы хотим щелкнуть отключенный элемент. В этом случае WebElement#click вызывает исключение IllegalStateException . Вместо этого мы можем использовать поддержку Selenium JavaScript.

Для этого первое, что нам понадобится, – это JavascriptExecutor . Поскольку мы используем реализацию ChromeDriver , мы можем просто привести ее к тому, что нам нужно:

JavascriptExecutor executor = (JavascriptExecutor) driver;

После получения JavascriptExecutor мы можем использовать его метод executeScript . Аргументами являются сам сценарий и массив параметров сценария. В нашем случае мы вызываем метод click по первому аргументу:

executor.executeScript("arguments[0].click();", element);

Теперь давайте объединим его в один метод, который мы назовем clickElement :

private void clickElement(WebElement element) {
    JavascriptExecutor executor = (JavascriptExecutor) driver;
    executor.executeScript("arguments[0].click();", element);
}

И, наконец, мы можем добавить это в наш тест:

@Test
public void whenSearchForSeleniumArticles_thenReturnNotEmptyResults() {
    // ... load https://baeldung.com
    WebElement searchButton = driver.findElement(By.className("nav--menu_item_anchor"));
    clickElement(searchButton);

    WebElement searchInput = driver.findElement(By.id("search"));
    searchInput.sendKeys("Selenium");

    WebElement seeSearchResultsButton = driver.findElement(By.cssSelector(".btn-search"));
    clickElement(seeSearchResultsButton);
}

6. Не Кликабельные Элементы

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

Чтобы преодолеть эту проблему, мы должны отложить выполнение до тех пор, пока не будет доступен щелчок. Мы можем использовать WebDriverWait#until , чтобы дождаться отображения кнопки.

Во-первых, W webdriverwait объекту требуются два параметра: драйвер и тайм-аут:

WebDriverWait wait = new WebDriverWait(driver, 5000);

Затем мы вызываем до , давая ожидаемое elementToBeClickable условие:

wait.until(ExpectedConditions.elementToBeClickable(By.className("nav--menu_item_anchor")));

И как только это успешно вернется, мы знаем, что можем продолжить:

WebElement searchButton = driver.findElement(By.className("nav--menu_item_anchor"));
clickElement(searchButton);

Для получения более доступных методов условий см. официальную документацию .

7. Заключение

В этом уроке мы узнали, как щелкнуть элемент в Selenium с помощью JavaScript. Как всегда, источник статьи доступен на GitHub .