🏠 | 💻 IT | Selenium |

Selenium + Java

Содержание статьи
Введение
Подключить Selenium к проекту IntelliJ
Пример
Переключатели
Флажки
Выпадающие списки
Таблицы
Дождаться загрузки элемента
Ошибки
Подключить JUnit к проекту IntelliJ IDEA

Введение

Подключить Selenium к проекту IntelliJ

Зайдите на www.selenium.dev/downloads/

Найдите среди доступных языков Java и кликните на Download

Добавление Selenium в проект IntelliJ изображение с сайта www.andreyolegovich.ru

Распакуйте архив. Содержимое будет примерно таким

Добавление Selenium в проект IntelliJ изображение с сайта www.andreyolegovich.ru

Откройте ваш проект в IntelliJ и нажмите FileProject Structure

Выберите Modules, затем нажмите на плюс справа и выберите 1. JARs or directories…

Добавление Selenium в проект IntelliJ изображение с сайта www.andreyolegovich.ru

Перейдите в папку, в которую вы только что распаковали архив и выделите все .jar файлы из корня и из подпапки libs

Нажмите OK

Добавление Selenium в проект IntelliJ изображение с сайта www.andreyolegovich.ru

Переходите к следующей главе

Простой тест

Чтобы убедиться, что Selenium подключён успешно - вставьте следующий код и скомпилируйте его.

На забудьте добавить путь до драйвера в системную переменную PATH о том как это сделать можете прочитать в статье «Основы Selenium»

import org.openqa.selenium.WebDriver; import org.openqa.selenium.firefox.FirefoxDriver; public class Main { public static void main(String[] args) { WebDriver driver = new FirefoxDriver(); } }

Если Вы не хотите или не можете отредактировать переменную PATH попробуйте зарегистирировать путь до драйвера - перед строкой WebDriver driver = … вставьте

System.setProperty("webdriver.gecko.driver", "C:/webdrivers/geckodriver.exe");

Поиск элементов

О том как это сделать можете прочитать в статье «Основы Selenium»

Прежде всего нужно подключить By в Java это делается следующим образом:

import org.openqa.selenium.By;

Часто бывает недостаточно просто найти элемент. Чтобы совершать над найденным какие-то действия подключите WebElement

import org.openqa.selenium.WebElement;

Пример поиска элементов

Небольшой пример поиска элементов.

Изучите страницу www.urn.su/IT/selenium/basic_test/

Цели теста:

1. Заполнить форму «Сайт» и нажать на кнопку «Перейти»

2. Кликнуть на первую ссылку с текстом «Renovation»

3. Кликнуть на второй элемент с текстом «Italy»

4. Кликнуть на второе изображение

Сделать это всё разными способами

Воспользуемся самым надёжным методом - по id. Изучив исходный код страницы вы увидите следующий код

<input type="text" id="name1" name="url1">

Следовательно, нужный id это name1

import org.openqa.selenium.By; import org.openqa.selenium.Keys; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriver; public class webDriverDemo1 { public class main(String[] args) { WebDriver driver = new ChromeDriver(); // 1. По id driver.get("http://www.urn.su/IT/selenium/basic_test/"); WebElement searchField = driver.findElement(By.id("name1")); searchField.sendKeys("topbicycle.ru"); searchField.submit();

С помощью linkText найдём все ссылки с текстом Renovation, выберем первую и кликнем на неё.

import org.openqa.selenium.By; import org.openqa.selenium.Keys; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriver; public class webDriverDemo1 { public class main(String[] args) { WebDriver driver = new ChromeDriver(); // 2. По linkText driver.get("http://www.urn.su/IT/selenium/basic_test/"); WebElement renovationLink = driver.findElements(By.linkText("Renovation")).get(0); renovationLink.click();

Будем искать ссылку, то есть cssSelector a, с классом march8

import org.openqa.selenium.By; import org.openqa.selenium.Keys; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriver; public class webDriverDemo1 { public class main(String[] args) { WebDriver driver = new ChromeDriver(); // 3. По cssSelector driver.get("http://www.urn.su/IT/selenium/basic_test/"); WebElement march8Link = driver.findElements(By.cssSelector("a[class=march8]")).get(0); march8Link.click();

Теперь разберёмся с картинкой. Воспользуемся поиском по тэгу.

import org.openqa.selenium.By; import org.openqa.selenium.Keys; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriver; public class webDriverDemo1 { public class main(String[] args) { WebDriver driver = new ChromeDriver(); // 4. По tagName driver.get("http://www.urn.su/IT/selenium/basic_test/"); WebElement imageLink = driver.findElements(By.tagName("img")).get(1); imageLink.click(); } }

Переключатели

Нужно найти на странице www.urn.su/IT/selenium/basic_test/ переключатель и поставить его в положение Lannister

В качестве проверки вывести в терминал содержимое.

Я пользовался списком, поэтому импортировал import java.util.List;

В этом примере пользуюсь Firefox

import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.firefox.FirefoxDriver; import java.util.List; public class WebDriverRadioButtons { public static void main(String[] args) { WebDriver driver = new FirefoxDriver(); driver.get("http://www.urn.su/IT/selenium/basic_test/"); List<WebElement> radioButtons = driver.findElements(By.name("house")); radioButtons.get(1).click(); for (WebElement radioButton : radioButtons) { if (radioButton.isSelected()) { System.out.println(radioButton.getAttribute("value")); } } } }

Флажки

Нужно найти на странице www.urn.su/IT/selenium/basic_test/ флажки и отметить Cersei

Изучив код страницы можно понять, что у нужного элемента прописан id, поэтому найти его очень просто.

import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.firefox.FirefoxDriver; public class WebDriverCheckboxes { public static void main(String[] args) { WebDriver driver = new FirefoxDriver(); driver.get("http://www.urn.su/IT/selenium/basic_test/"); WebElement checkbox = driver.findElement(By.id("cerseiId")); checkbox.click(); } }

Выпадающие списки

Нужно найти на странице www.urn.su/IT/selenium/basic_test/ флажки и выбрать Dawn

Я буду использовать Select, поэтому нужно предварительно подлючить import org.openqa.selenium.support.ui.Select;

import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.firefox.FirefoxDriver; import org.openqa.selenium.support.ui.Select; public class WebDriverSelectItems { public static void main(String[] args) { WebDriver driver = new FirefoxDriver(); driver.get("http://www.urn.su/IT/selenium/basic_test/"); WebElement selectElement = driver.findElement(By.id("swords")); Select select = new Select(selectElement); select.selectByVisibleText("Dawn"); } }

Таблицы

Нужно найти на странице www.urn.su/IT/selenium/basic_test/ таблицу. Во внешнюю таблицу вложена внутренняя. Нужно добраться до элемента в третьей строке вложенной таблицы. Для проверки выведем содержимое этого элемента в терминал.

Обратите внимание на строки 14, 15 и 16. Сначала драйвер находит внешнюю таблицу, затем я уже не вызываю driver, а ищу только во внешней таблице, а затем только во внутренней таблице.

import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.firefox.FirefoxDriver; public class WebDriverTables { public static void main(String[] args) { WebDriver driver = new FirefoxDriver(); driver.get("http://www.urn.su/IT/selenium/basic_test/"); WebElement outerTable = driver.findElement(By.tagName("table")); WebElement innerTable = outerTable.findElement(By.tagName("table")); WebElement row = innerTable.findElements(By.tagName("td")).get(2); System.out.println(row.getText()); } }

Дождаться появления элемента

Элементы могут подгружаться на страницу с разной скоростью. Чтобы избавить себя от лишней головной боли нужно по максимуму использовать возможности Selenium

В следующем примере вы можете посетить страницу поиска по сайту urn.su дождаться когда подгрузится скрипт от Яндекса, вставить в поиск слово python ,исключительно для подстраховки дождаться когда подгрузится кнопка Найти и нажать на неё.

import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.firefox.FirefoxDriver; import org.openqa.selenium.support.ui.WebDriverWait; import static org.openqa.selenium.support.ui.ExpectedConditions.presenceOfElementLocated; public class WebDriverExplicitWait { public static void main(String[] args) { WebDriver driver = new FirefoxDriver(); // explicit wait WebDriverWait wait = new WebDriverWait(driver, 50); driver.get("http://www.urn.su/search.php"); try { WebElement yandexField = wait.until(presenceOfElementLocated(By.name("text"))); yandexField.sendKeys("python"); } catch (Exception e) { e.printStackTrace(); } try { WebElement yButton = wait.until(presenceOfElementLocated(By.className("ya-site-form__submit"))); yButton.click(); } catch (Exception e) { e.printStackTrace(); } } }

Implicit Wait

Время ожидания заданное с помощью Implicit Wait, это глобальная настройка для WebDriver. Каждый раз когда нужно найти элемент на странице WebDriver будет искать либо пока не найдёт либо пока не пройдёт это время.

Через каждые 500 мс WebDriver будет обращаться к DOM на предмет наличия нужного элемента.

Explicit Wait

Если остались вопросы - смело задавайте их в комментариях.

Поиск по сайту
Контакты и сотрудничество:
Рекомендую наш хостинг beget.ru
Пишите на info@urn.su если Вы:
1. Хотите написать статью для нашего сайта или перевести статью на свой родной язык.
2. Хотите разместить на сайте рекламу, подходящуюю по тематике.
3. Реклама на моём сайте имеет максимальный уровень цензуры. Если Вы увидели рекламный блок недопустимый для просмотра детьми школьного возраста, вызывающий шок или вводящий в заблуждение - пожалуйста свяжитесь с нами по электронной почте
4. Нашли на сайте ошибку, неточности, баг и т.д. ... .......
5. Статьи можно расшарить в соцсетях, нажав на иконку сети: