1. Обзор
В этом уроке мы будем изучать основы использования Selenium с Java. Мы будем использовать Selenium, чтобы открыть Google, выполнить поиск и щелкнуть URL-адрес.
Код доступен на Github .
2. Что такое селен?
Selenium автоматизирует веб-браузеры. Это действительно так.
Selenium позволяет нам эмулировать взаимодействие пользователя с веб-страницей. Мы можем использовать два продукта Selenium: Selenium WebDriver и Selenium IDE. Мы будем использовать WebDriver.
Что такое WebDriver? WebDriver — это официальная спецификация W3C, и по сути это способ взаимодействия с веб-браузером. Ранее, с Selenium RC, Selenium работал с браузером, добавляя JavaScript для взаимодействия с элементами. С принятием спецификации WebDriver такие компании, как Google, Mozilla и Microsoft, выпускают свои браузеры с возможностью управления с помощью хуков, к которым Selenium может подключиться. Этот хук позволяет Selenium взаимодействовать с веб-браузером так же, как это делают люди.
Мы будем использовать Google Chrome, и поэтому необходимо загрузить хромедрайвер .
После загрузки драйвера нам нужно выполнить файл.
На Mac мы можем просто сделать это, например:
|
1
|
./chromedriver |
3. pom.xml
Я использую Spring Tool Suite и создал новый проект Spring Starter, который не был необходим, но мне, как правило, нравится Spring. Таким образом, Selenium находится под управлением Spring Boot Starter Parent. Версия 2.53.1.
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
<!-- typical pom beginning--> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.10.RELEASE</version> <relativePath /> <!-- lookup parent from repository --> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-java</artifactId> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build><!-- typical pom ending--> |
4. Откройте Chrome и найдите
Для этого шага мы установим соединение с хроматографом, откроем браузер и начнем поиск «Selenium».
Порт для нашего локального хоста — 9515, потому что хромедрайвер работает на порту 9515 локального сервера.
RemoteWebDriver реализует WebDriver, и целью WebDriver является предоставление объектно-ориентированного API, обеспечивающего поддержку современных сложных задач тестирования веб-приложений. Итак, на основании этих фактов мы можем сказать, что RemoteWebDriver — это реализация, которая позволяет использовать удаленный браузер. Преимущества включают в себя разделение того, где тесты запускаются из того места, где находится браузер, и возможность тестирования в браузерах, недоступных в текущей ОС. К минусам относится тот факт, что нам нужен внешний контейнер сервлетов, и может возникнуть задержка, если возникнет исключение.
|
1
2
3
4
5
6
7
8
9
|
// create a Chrome Web Driver WebDriver driver = new RemoteWebDriver(local, DesiredCapabilities.chrome()); // open the browser and go to open google.com driver.findElement(By.id("lst-ib")).sendKeys("Selenium"); driver.findElement(By.name("btnK")).click(); driver.manage().window().maximize(); |
5. Получить страницы и нажмите
WebDriver предоставляет нам методы findElement и findElements для определения местоположения элементов на веб-странице. Эти методы принимают объект By в качестве параметра. By имеет методы для поиска элементов в документе с помощью значения локатора. Selenium хорошо документировал их API .
Как только мы поймем, как Selenium используется для идентификации элементов, легко прочитать любой из методов driver.findElements (By…) . Но нам нужно знать, как их написать. Используя браузер, такой как Chrome, мы можем щелкнуть правой кнопкой мыши (или эквивалентной), чтобы проверить элемент, чтобы получить его информацию HTML / CSS. Также мы можем «Просмотреть источник», чтобы получить более полную информацию.
Чтобы продемонстрировать, как прокручивать веб-страницу, мы выполняем jse.executeScript («window.scrollBy (0,250)», «») .
Как следует из названия, JavaScriptExecutor выполняет JavaScript. JavaScriptExecutor — это интерфейс, предоставляемый через Selenium WebDriver. Он предоставляет два метода «executetescript» и «executeAsyncScript» для запуска javascript в выбранном окне или текущей странице.
С помощью приведенного ниже кода, возможно, удастся создать более сложного бота для поиска в Google и щелкать URL для нескольких страниц.
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
|
// get the number of pages int size = driver.findElements(By.cssSelector("[valign='top'] > td")).size(); for(int j = 1 ; j < size ; j++) { if (j > 1) {// we don't need to navigate to the first page driver.findElement(By.cssSelector("[aria-label='Page " + j + "']")).click(); // navigate to page number j } String pagesearch = driver.getCurrentUrl(); List<WebElement> findElements = driver.findElements(By.xpath("//*[@id='rso']//h3/a")); System.out.println(findElements.size()); for(int i=0;i<findElements.size();i++){ findElements= driver.findElements(By.xpath("//*[@id='rso']//h3/a")); findElements.get(i).click(); driver.navigate().to(pagesearch); JavascriptExecutor jse = (JavascriptExecutor) driver; //Scroll vertically downward by 250 pixels jse.executeScript("window.scrollBy(0,250)", ""); } } |
6. Заключение
Это было базовое введение в Selenium с Java. Как мы обнаружили, в Selenium Webdriver локаторы, такие как XPath, CSS и т. Д., Используются для идентификации и выполнения операций на веб-странице. Также возможно выполнить произвольный JavaScript.
Полный код можно найти на Github .
| Опубликовано на Java Code Geeks с разрешения Майкла Гуда, партнера нашей программы JCG . Смотреть оригинальную статью здесь: Selenium с Java: поиск Google
Мнения, высказанные участниками Java Code Geeks, являются их собственными. |