Формы - это основные веб-элементы для получения информации от посетителей веб-сайта. Веб-формы имеют разные элементы графического интерфейса, такие как текстовые поля, поля пароля, флажки, переключатели, раскрывающиеся списки, ввод файлов и т. Д.
Мы увидим, как получить доступ к этим различным элементам формы с помощью Selenium Web Driver с Java. Selenium инкапсулирует каждый элемент формы как объект WebElement. Он предоставляет API для поиска элементов и выполнения с ними действий, таких как ввод текста в текстовые поля, нажатие кнопок и т. Д. Мы увидим методы, доступные для доступа к каждому элементу формы.
В этом уроке мы увидим, как идентифицировать следующие элементы формы
- Введение в WebElement, findElement (), findElements ()
- Поле ввода
- Ввод значений в поля ввода
- Удаление значений в полях ввода
- Кнопки
- Кнопки отправки
- Полный код
- Исправление проблем
Введение в WebElement, findElement (), findElements ()
Selenium Web Driver инкапсулирует простой элемент формы как объект WebElement.
Существуют различные методы, с помощью которых WebDriver идентифицирует элементы формы на основе различных свойств веб-элементов, таких как идентификатор, имя, класс, XPath, имя тега, селекторы CSS, текст ссылки и т. Д.
Веб-драйвер предоставляет следующие два метода WebElement для поиска элементов.
- findElement () - находит отдельный веб-элемент и возвращает его как объект WebElement Selenium.
- findElements () - возвращает список объектов WebElement, соответствующих критериям локатора.
Давайте посмотрим на фрагменты кода, чтобы получить единственный элемент - текстовое поле на веб-странице как объект WebElement с помощью метода findElement (). Мы рассмотрим метод findElements () для поиска нескольких элементов в следующих руководствах.
Шаг 1. Нам нужно импортировать этот пакет для создания объектов веб-элементов.
Шаг 2. Нам нужно вызвать метод findElement (), доступный в классе WebDriver, и получить объект WebElement.
См. Ниже, чтобы узнать, как это делается.
Поле ввода
Поля ввода относятся к одному из этих двух типов:
- Текстовые поля - текстовые поля ввода Selenium, которые принимают введенные значения и показывают их такими, какие они есть.
- Поля пароля - текстовые поля, которые принимают введенные значения, но маскируют их как серию специальных символов (обычно точек и звездочек), чтобы избежать отображения конфиденциальных значений.
Локаторы
Метод findElement () принимает один параметр, который является указателем элемента. Различные локаторы, такие как By.id (), By.name (), By.xpath (), By.CSSSelector () и т. Д., Находят элементы на странице, используя их свойства, такие как id, имя или путь, и Т. Д.
Вы можете использовать плагины, такие как Fire path, чтобы получить помощь с получением id, xpath и т. Д. Элементов.
На примере сайта http://demo.guru99.com/test/login.html ниже приведен код для поиска текстового поля «Адрес электронной почты» с помощью локатора идентификатора и поля «Пароль» с помощью локатора имени.
- Текстовое поле электронной почты расположено по идентификатору
- Поле пароля расположено по имени
sendkeys в Selenium
sendkeys () в Selenium - это метод, используемый для ввода редактируемого содержимого в поля текста и пароля во время выполнения теста. Эти поля идентифицируются с помощью локаторов, таких как имя, класс, идентификатор и т. Д. Это метод, доступный в веб-элементе. В отличие от метода типа, метод sendkeys () не заменяет существующий текст в любом текстовом поле.
Ввод значений в поля ввода
Для ввода текста в текстовые поля и поля пароля sendKeys () - это метод, доступный в WebElement в Selenium.
Используя тот же пример сайта http://demo.guru99.com/test/login.html, вот как мы находим поля Текст и Пароль и вводим текст в Selenium.
- Найдите текстовое поле «Адрес электронной почты» с помощью локатора идентификаторов.
- Найдите поле «Пароль» с помощью локатора имен.
- Введите текст в «Адрес электронной почты», используя метод отправки ключей Selenium.
- Введите пароль в поле «Пароль» с помощью метода sendKeys ().
Удаление значений в полях ввода
Метод clear () используется для удаления текста в поле ввода. Этот метод не требует параметра . Приведенный ниже фрагмент кода удалит текст из полей электронной почты или пароля.
Кнопки
Доступ к кнопке щелчка Selenium можно получить с помощью метода click ().
В приведенном выше примере
- Найдите кнопку для входа
- Нажмите кнопку «Войти» на странице входа на сайт, чтобы войти на сайт.
Кнопки отправки
Кнопки отправки используются для отправки всей формы на сервер. Мы можем либо использовать метод click () для веб-элемента, как обычную кнопку, как мы делали выше, либо использовать метод submit () для любого веб-элемента в форме или для самой кнопки отправки.
Когда используется submit (), WebDriver будет искать в DOM, чтобы узнать, к какой форме принадлежит элемент, а затем запускает функцию отправки.
Полный код
Вот полный рабочий код
import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.chrome.ChromeDriver;import org.openqa.selenium. *;public class Form {public static void main (String [] args) {// объявление и создание экземпляров объектов / переменныхSystem.setProperty ("webdriver.chrome.driver", "G: \\ chromedriver.exe");Драйвер WebDriver = новый ChromeDriver ();Строка baseUrl = "http://demo.guru99.com/test/login.html";driver.get (baseUrl);// Получаем WebElement, соответствующий адресу электронной почты (TextField)WebElement email = driver.findElement (By.id ("электронная почта"));// Получаем WebElement, соответствующий полю пароляПароль WebElement = driver.findElement (By.name ("passwd"));email.sendKeys (« Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для его просмотра.»);password.sendKeys ("abcdefghlkjl");System.out.println («Набор текстовых полей»);// Удаление значений в текстовом полеemail.clear ();password.clear ();System.out.println («Текстовое поле очищено»);// Находим кнопку отправкиWebElement login = driver.findElement (By.id ("SubmitLogin"));// Использование метода щелчка для отправки формыemail.sendKeys (« Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для его просмотра.»); password.sendKeys ("abcdefghlkjl"); login.click (); System.out.println («Вход выполнен нажатием кнопки»); // использование метода submit для отправки формы. Отправьте использованный пароль в поле driver.get (baseUrl); driver.findElement (By.id ("email")). sendKeys (" Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для его просмотра."); driver.findElement (By.name ("пароль")). sendKeys ("abcdefghlkjl"); driver.findElement (By.id ("SubmitLogin")). submit (); System.out.println («Вход выполнен с помощью отправки»); //driver.close (); }}
Исправление проблем
Если вы столкнулись с NoSuchElementException () при поиске элементов, это означает, что элемент не найден на странице в момент обращения к странице веб-драйвером.
- Снова проверьте свой локатор, используя Firepath или Inspect Element в Chrome.
- Проверьте, отличается ли значение, которое вы использовали в коде, от значения для элемента в Firepath.
- Некоторые свойства являются динамическими для нескольких элементов. В случае, если вы обнаружите, что значение отличается и динамически изменяется, рассмотрите возможность использования By.xpath () или By.cssSelector (), которые являются более надежными, но сложными способами.
- Иногда это также может быть проблемой ожидания, например, веб-драйвер выполнил ваш код еще до полной загрузки страницы и т. Д.
- Добавьте ожидание перед findElement (), используя неявное или явное ожидание.
Резюме
- В таблице ниже приведены команды для доступа к каждому типу элементов, описанных выше.
Элемент | Командование | Описание |
---|---|---|
Поле ввода | sendKeys () | используется для ввода значений в текстовые поля |
Чисто() | используется для очистки текстовых полей от текущего значения | |
Ссылки | нажмите () | используется для перехода по ссылке и ожидания завершения загрузки страницы перед переходом к следующей команде. |
Отправить кнопку | Разместить() |
- WebDriver позволяет выбрать более одной опции в множественном элементе SELECT.
- Вы можете использовать метод submit () для любого элемента в форме. WebDriver автоматически запустит функцию отправки формы, которой принадлежит этот элемент.