Статьи

Selenium с Java: поиск Google

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
            URL local = new URL("http://localhost:9515");
            WebDriver driver = new RemoteWebDriver(local, DesiredCapabilities.chrome());
            // open the browser and go to open google.com
            driver.get("https://www.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, являются их собственными.