Selenium Вебдрайвер Java Пример программы

⚡ Умное резюме

Selenium Вебдрайвер Java В этом руководстве вы найдете пошаговый пример создания вашего первого скрипта автоматизации «под ключ». LessВ рамках курса рассматриваются настройка среды, поиск элементов, отправка входных данных, навигация, валидация, ожидания, обработка исключений и лучшие практики для надежных тестов WebDriver.

  • ⚙️ Настройка среды: Установите Java, Eclipse или IntelliJ, настройте Selenium библиотеки и выберите подходящий исполняемый файл драйвера для вашей версии браузера.
  • 🧭 Локаторы элементов: Используйте ID, имя, класс, XPath, CSS-селектор и linkText для стабильной идентификации элементов в разных браузерах и версиях.
  • ⌨️ Действия и ввод данных: WebDriver поддерживает события click, sendKeys, submit, select dropdowns и события клавиатуры для полноценного взаимодействия с пользователем.
  • «Умное ожидание»: Замените Thread.sleep на неявные, явные и плавные ожидания, управляемые ExpectedConditions, чтобы исключить нестабильные проверки.
  • ???? Обработка исключений: Для обеспечения отказоустойчивости автоматизированных наборов тестов необходимо перехватывать исключения NoSuchElementException, TimeoutException и StaleElementReferenceException.
  • 🤖 Генерация тестов для ИИ: Искусственный интеллект-ассистенты генерируют шаблонные скрипты WebDriver, предлагают локаторы и автоматически исправляют селекторы при изменении DOM.

Selenium Вебдрайвер Java Программа

Selenium Java Пример

Посмотрите на график Java класс «myclass», который мы создали в предыдущем уроке, давайте попробуем создать скрипт WebDriver, который бы:

Шаг 1: получать Mercury Домашняя страница туров
Шаг 2: проверить его название
Шаг 3: распечатать результат сравнения
Шаг 4: закройте его перед завершением всей программы.

Selenium Пример WebDriver Code

Ниже приведен фактический код WebDriver для логики, представленной в приведенном выше сценарии.

package newproject;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
//comment the above line and uncomment below line to use Chrome
//import org.openqa.selenium.chrome.ChromeDriver;
public class PG1 {


    public static void main(String[] args) {
        // declaration and instantiation of objects/variables
    	System.setProperty("webdriver.gecko.">driver","C:\\geckodriver.exe");
		WebDriver driver = new FirefoxDriver();
		//comment the above 2 lines and uncomment below 2 lines to use Chrome
		//System.setProperty("webdriver.chrome.">driver","G:\\chromedriver.exe");
		//WebDriver driver = new ChromeDriver();
    	
        String baseUrl = "https://demo.guru99.com/test/newtours/";
        String expectedTitle = "Welcome: Mercury Tours";
        String actualTitle = "";

        // launch Fire fox and direct it to the Base URL
        driver.get(baseUrl);

        // get the actual value of the title
        actualTitle = driver.getTitle();

        /*
         * compare the actual title of the page with the expected one and print
         * the result as "Passed" or "Failed"
         */
        if (actualTitle.contentEquals(expectedTitle)){
            System.out.println("Test Passed!");
        } else {
            System.out.println("Test Failed");
        }
       
        //close Fire fox
        driver.close();
    }

}

Примечание: запуск Firefox 35, вам необходимо использовать драйвер Gecko, созданный Mozilla, для использования веб-драйвера. Selenium 3.0, gecko и firefox имеют проблемы совместимости, и их правильная настройка может стать сложной задачей. Если код не работает, понизьте версию до Firefox версия 47 или ниже. Кроме того, вы можете запускать свои сценарии в Chrome. Selenium работает из коробки для Chrome. Вам просто нужно изменить 3 строки кода, чтобы ваш скрипт работал с Chrome или Firefox

Объяснение кода

Импорт пакетов

Для начала вам необходимо импортировать следующие два пакета:

  1. org.openqa.selenium.*– содержит класс WebDriver, необходимый для создания экземпляра нового браузера, загруженного с определенным драйвером.
  2. org.openqa.selenium.firefox.FirefoxВодитель – содержит FirefoxКласс драйвера, необходимый для создания экземпляра Firefox-специфичный драйвер в браузере, созданный классом WebDriver

Если вашему тесту требуются более сложные действия, такие как доступ к другому классу, создание снимков экрана браузера или манипулирование внешними файлами, вам определенно потребуется импортировать больше пакетов.

Создание экземпляров объектов и переменных

Обычно именно так создается экземпляр объекта драйвера.

WebDriver driver = new FirefoxDriver();

A FirefoxКласс драйвера без параметров означает, что по умолчанию Firefox профиль будет запущен нашим Java программа. По умолчанию Firefox профиль аналогичен запуску Firefox в безопасном режиме (расширения не загружаются).

Для удобства мы сохранили Базу. URL а ожидаемый заголовок — в виде переменных.

Запуск сеанса браузера

WebDriver's получить() Этот метод используется для запуска новой сессии браузера и перенаправляет её на... URL который вы указываете в качестве его параметра.

driver.get(baseUrl);

Получите фактическое название страницы

Класс WebDriver имеет getTitle () метод, который всегда используется для получения заголовка загруженной в данный момент страницы.

actualTitle = driver.getTitle();

Сравните ожидаемые и фактические значения

Эта часть кода просто использует базовый Java Структура if-else для сравнения фактического заголовка с ожидаемым.

if (actualTitle.contentEquals(expectedTitle)){
            System.out.println("Test Passed!");
        } else {
            System.out.println("Test Failed");
        }

Завершение сеанса браузера

"близко()” используется для закрытия окна браузера.

driver.close();

Завершение всей программы

Если вы используете эту команду, не закрыв предварительно все окна браузера, весь ваш Java программа завершится, оставив окно браузера открытым.

System.exit(0);

Запуск теста

Существует два способа выполнения кода в Eclipse IDE.

  1. On Eclipseв строке меню, нажмите Выполнить > Выполнить.
  2. Штамповочный пресс Ctrl + F11 для запуска всего кода.

Запуск теста

Если вы все сделали правильно, Eclipse выведет «Тест пройден!»

Запуск теста

Расположение элементов графического интерфейса

Поиск элементов в WebDriver осуществляется с помощью «найтиЭлемент(By.локатор())метод. Часть кода «локатор» такая же, как и любой из локаторов, ранее обсуждавшихся в Selenium IDE главы этих руководств. Фактически, рекомендуется находить элементы графического интерфейса с помощью IDE и после успешной идентификации экспортировать код в WebDriver.

Вот Selenium Пример кода, который находит элемент по его идентификатору. В качестве основы используется Facebook. URL.

package newproject;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;

public class PG2 {
    public static void main(String[] args) {
    	System.setProperty("webdriver.gecko.">driver","C:\\geckodriver.exe");
    	WebDriver driver = new FirefoxDriver();
        String baseUrl = "http://www.facebook.com";
        String tagName = "";
        
        driver.get(baseUrl);
        tagName = driver.findElement(By.id("email")).getTagName();
        System.out.println(tagName);
        driver.close();
        System.exit(0);
}
}

Мы использовали получитьИмяТега() метод для extracукажите имя тега конкретного элемента, идентификатор которого равен «email». При запуске этот код должен корректно идентифицировать имя тега «input» и вывести его на экран. EclipseОкно консоли.

Расположение элементов графического интерфейса

Сводка по поиску элементов

Изменение Описание Образец
По.имякласса находит элементы на основе значения атрибута «class» findElement(By.className("someClassName"))
Автор :.cssSelector находит элементы на основе базового движка CSS Selector драйвера findElement(By.cssSelector("input#email"))
Автор.id находит элементы по значению их атрибута «id» findElement(By.id("someId"))
 
Автор.linkText находит элемент ссылки по точному тексту, который он отображает findElement(By.linkText("РЕГИСТРАЦИЯ"))
 
По имени находит элементы по значению атрибута «name» findElement(By.name("someName"))
 
By.partialLinkText находит элементы, содержащие заданный текст ссылки findElement(By.partialLinkText("REG"))
 
Автор.tagName находит элементы по их имени тега findElement(By.tagName("div"))
 
По.xpath находит элементы через XPath findElement(By.xpath("//html/body/div/table/tbody/tr/td[2]/table/
tbody/tr[4]/td/table/tbody/tr/td[2]/table/tbody/tr[2]/td[3]/ form/table/tbody/tr[5]”))

Примечание по использованию findElement(By.cssSelector())

By.cssSelector() не поддерживает функцию «содержит». Рассмотрим Selenium Код IDE ниже –

Примечание по использованию findElement(By.cssSelector())

In Selenium IDE выше, весь тест пройден. Однако в Selenium WebDriver, приведенный ниже, тот же тест вызвал ошибку, поскольку WebDriver не поддерживает ключевое слово «contains» при использовании в методе By.cssSelector().

Примечание по использованию findElement(By.cssSelector())

Общие команды

Создание экземпляров веб-элементов

Вместо использования длинного синтаксиса «driver.findElement(By.locator())» каждый раз, когда вы получаете доступ к определенному элементу, мы можем создать для него экземпляр объекта WebElement. Класс WebElement содержится в пакете «org.openqa.selenium.*».

Создание экземпляров веб-элементов

Щелчок по элементу

Нажатие — это, пожалуй, самый распространенный способ взаимодействия с веб-элементами. click() Метод используется для имитации нажатия любого элемента. Следующий Selenium Java пример показывает, как click() использовался для нажатия на Mercury Кнопка «Войти» в Туре.

Щелчок по элементу

При использовании метода click() необходимо учитывать следующие вещи.

  • Он не принимает никаких параметров/аргументов.
  • Метод автоматически ожидает загрузки новой страницы, если это применимо.
  • Элемент, на который нужно кликнуть, должен быть видимым (высота и ширина не должны быть равны нулю).

Получить команды

Команды Get извлекают различную важную информацию о странице/элементе. Вот несколько важных команд «get», с которыми вы должны быть знакомы.

Команды Применение
получить()

Использование образца:

  • Он автоматически открывает новое окно браузера и выбирает страницу, указанную вами в скобках.
  • Это аналог Selenium Команда «открыть» IDE.
  • Параметр должен быть строка объект.
getTitle ()

Использование образца:

  • Не требует параметров
  • Получает заголовок текущей страницы
  • Ведущие и конечные пробелы обрезаются.
  • Возвращает нулевую строку, если страница не имеет заголовка
получить источник страницы ()

Использование образца:

  • Не требует параметров
  • Возвращает исходный код страницы в виде строкового значения.
получить текущий URL ()

Использование образца:

  • Не требует параметров
  • Извлекает строку, представляющую текущий URL что браузер просматривает
getText ()

Использование образца:

  • Извлекает внутренний текст указанного вами элемента.

Команды навигации

Эти команды позволяют вам обновлять, переходить и переключаться между различными веб-страницами.

перейдите к()

Использование образца:

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

Использование образца:

  • Не нуждается в параметрах.
  • Он обновляет текущую страницу.
навигация().обратно()

Использование образца:

  • Не требует параметров
  • Возвращает вас на одну страницу назад в истории браузера.
навигация().вперед()

Использование образца:

  • Не требует параметров
  • Перемещает вас вперед на одну страницу истории браузера.

Закрытие и выход из браузера Windows

близко()

Использование образца:

  • Не требует параметров
  • Он закрывает только окно браузера, которым в данный момент управляет WebDriver.
уволиться()

Использование образца:

  • Не требует параметров
  • Он закрывает все окна, открытые WebDriver.

Закрытие и выход из браузера Windows

Чтобы наглядно проиллюстрировать разницу между close() и quit(), попробуйте выполнить приведенный ниже код. Он использует веб-страницу, которая автоматически открывает одно окно при загрузке страницы и открывает другое после выхода.

Закрытие и выход из браузера Windows

Обратите внимание, что было закрыто только родительское окно браузера, а не два всплывающих окна.

Закрытие и выход из браузера Windows

Но если вы используете quit(), все окна будут закрыты, а не только родительское. Попробуйте запустить приведенный ниже код, и вы заметите, что два всплывающих окна выше также автоматически закроются.

package newproject;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;

public class PG3 {
    public static void main(String[] args) {
    	System.setProperty("webdriver.gecko.">driver","C:\\geckodriver.exe");
    	WebDriver driver = new FirefoxDriver();
        driver.get("http://www.popuptest.com/popuptest2.html");
        driver.quit();  // using QUIT all windows will close
    }
}

Переключение между кадрами

Чтобы получить доступ к элементам графического интерфейса во фрейме, мы должны сначала указать WebDriver сосредоточиться на фрейме или всплывающем окне, прежде чем мы сможем получить доступ к элементам внутри них. Возьмем, к примеру, веб-страницу https://demo.guru99.com/selenium/deprecated.html

Переключение между кадрами

На этой странице есть 3 фрейма, атрибуты «имя» которых указаны выше. Мы хотим получить доступ к ссылке «Устарело», обведенной выше желтым цветом. Для этого мы должны сначала дать указание WebDriver переключиться на фрейм «classFrame», используя «switchTo().frame()» метод. Мы будем использовать атрибут имени кадра в качестве параметра для части «frame()».

package newproject;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
public class PG4 {
	  public static void main(String[] args) {
		  	System.setProperty("webdriver.gecko.">driver","C:\\geckodriver.exe");  
		  	WebDriver driver = new FirefoxDriver();
	        driver.get("https://demo.guru99.com/selenium/deprecated.html");
	        driver.switchTo().frame("classFrame");
	        driver.findElement(By.linkText("Deprecated")).click();
	        driver.close(); 
	    }
}

После выполнения этого кода вы увидите, что кадр «classFrame» переносится на страницу «Устаревший API», что означает, что наш код успешно смог получить доступ к ссылке «Устаревший».

Переключение между всплывающими окнами Windows

WebDriver позволяет отображать всплывающие окна, такие как оповещения, в отличие от Selenium IDE. Чтобы получить доступ к элементам оповещения (например, содержащемуся в нем сообщению), мы должны использовать метод "switchTo().alert()" метод. В приведенном ниже коде мы будем использовать этот метод для доступа к окну предупреждения, а затем получить его сообщение с помощью метода "getText()" метод, а затем автоматически закройте окно предупреждения с помощью "switchTo().alert().accept()" метод.

Сначала зайдите в https://output.jsbin.com/usidix/1 и вручную нажмите кнопку «Go!» кнопку там и сами посмотрите текст сообщения.

Переключение между всплывающими окнами Windows

Давайте посмотрим Selenium пример кода для этого-

package mypackage;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;

public class myclass {

    public static void main(String[] args) {
    	System.setProperty("webdriver.gecko.">driver","C:\\geckodriver.exe");
        WebDriver driver = new FirefoxDriver();
        String alertMessage = "";

        driver.get("http://jsbin.com/usidix/1");
        driver.findElement(By.cssSelector("input[value=\"Go!\"]")).click();
        alertMessage = driver.switchTo().alert().getText();
        driver.switchTo().alert().accept();
       
        System.out.println(alertMessage);
        driver.quit();
       
    }
}

На Eclipse консоли обратите внимание, что напечатанное предупреждающее сообщение имеет следующий вид:

Переключение между всплывающими окнами Windows

Ждет

Есть два вида ожидания.

  1. Неявное ожидание – используется для установки времени ожидания по умолчанию во всей программе.
  2. Явное ожидание – используется для установки времени ожидания только для конкретного экземпляра.

Неявное ожидание

  • Кодировать проще, чем явное ожидание.
  • Обычно он объявляется в части кода, посвященной созданию экземпляра.
  • Для импорта вам понадобится только один дополнительный пакет.

Чтобы начать использовать неявное ожидание, вам придется импортировать этот пакет в свой код.

Неявное ожидание

Затем в части вашего кода, связанной с созданием экземпляра, добавьте это.

Неявное ожидание

Явное ожидание

Явное ожидание осуществляется с помощью классов WebDriverWait и ExpectedCondition.. Для следующего Selenium В примере WebDriver мы подождем до 10 секунд, пока элемент с идентификатором «имя пользователя» станет видимым, прежде чем перейти к следующей команде. Вот шаги.

Шаг 1:

Импортируйте эти два пакета:

Явное ожидание

Шаг 2:

Объявите переменную WebDriverWait. В этом примере мы будем использовать «myWaitVar» в качестве имени переменной.

Явное ожидание

Шаг 3:

Используйте myWaitVar с ExpectedConditions в тех частях, где вам необходимо явное ожидание. В этом случае мы будем использовать явное ожидание «имени пользователя» (Mercury Tours HomePage) до того, как мы напечатаем на нем текст «tutorial».

Явное ожидание

Conditions

В условных операторах и запросах используются следующие методы.ping операции —

  • включен() используется, когда вы хотите проверить, включен или нет определенный элемент перед выполнением команды.

Условия isEnabled()

  • отображается() используется, когда вы хотите проверить, отображается ли определенный элемент или нет перед выполнением команды.

Условия isDisplayed()

  • isSelected () используется, когда вы хотите проверить, является ли определенный флажок, переключатель или опция в раскрывающемся списке выбран. На другие элементы это не действует.

Условия isSelected()

Использование ожидаемых условий

Класс ExpectedConditions предлагает более широкий набор условий, которые вы можете использовать в сочетании с методом Until() WebDriverWait.

Ниже приведены некоторые из наиболее распространенных методов ExpectedConditions.

  • оповещение присутствует () – ждет, пока не появится окно с предупреждением.

Использование ExpectedConditions alertIsPresent()

  • элементToBeClickable() – Ожидает, пока элемент станет видимым и одновременно включенным. Образец Selenium Code Приведённый ниже код будет ждать, пока элемент с id=”username” не станет видимым и активным, прежде чем присвоить этому элементу значение переменной WebElement с именем “txtUserName”.

Использование ожидаемых условий

  • фреймToBeAvailableAndSwitchToIt() – Ждет, пока данный кадр станет доступен, а затем автоматически переключается на него.

Использование элемента ExpectedConditionsToBeClickable()

Выявление исключений

При использовании isEnabled(), isDisplayed() и isSelected() WebDriver предполагает, что элемент уже существует на странице. В противном случае будет выброшено NoSuchElementException. Чтобы избежать этого, мы должны использовать блок try-catch, чтобы программа не прерывалась.

WebElement txtbox_username = driver.findElement(By.id("username"));
try{
        if(txtbox_username.isEnabled()){
            txtbox_username.sendKeys("tutorial");
        }
    }

catch(NoSuchElementException nsee){
            System.out.println(nsee.toString());
 }

Если вы используете явное ожидание, тип исключения, которое вам следует перехватывать, — это «TimeoutException».

Выявление исключений

Часто задаваемые вопросы (FAQ)

Установите JDK, IDE, например... Eclipse или IntelliJ, Selenium Java библиотеки и соответствующий драйвер браузера. Инструменты автоматизации сборки, такие как Maven или Gradle Упростить управление зависимостями.

Искусственный интеллект автоматически восстанавливает локаторы, генерирует тестовые примеры на основе пользовательских историй и выявляет нестабильные тесты. Такие платформы, как [название платформы]. TestimMabl и Applitools внедряют ИИ для более интеллектуального создания, выполнения и визуальной проверки контента.

Да. GitHub Copilot, Cursor и JetBrains ИИ генерирует Java Selenium Скрипты, написанные на простом языке, включают в себя ожидания, утверждения и объекты страниц. Они значительно сокращают количество шаблонного кода для новых тестовых сценариев.

Функция findElement возвращает первый соответствующий WebElement или генерирует исключение NoSuchElementException. Функция findElements возвращает список всех совпадений и возвращает пустой список, если совпадений не найдено, при этом исключение никогда не генерируется.

Thread.sleep приостанавливает выполнение программы на фиксированное время независимо от состояния страницы, замедляя быстрые процессы и завершая медленные с ошибкой. Используйте WebDriverWait с ExpectedConditions, чтобы ждать только необходимое время.

Selenium поддерживает ChromeDriver и GeckoDriver для FirefoxEdgeDriver, SafariDriver и IEDriverServer. Selenium В версии 4 менеджер автоматически загружает нужный драйвер.

Настройте параметры Chrome или FirefoxОбъект параметров с параметром setAcceptInsecureCerts(true). Это указывает браузеру игнорировать недействительные сертификаты, чтобы сессия WebDriver могла продолжиться.

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

Подведем итог этой публикации следующим образом: