Селен - Локаторы
Поиск элементов в Selenium WebDriver выполняется с помощью методов findElement () и findElements (), предоставляемых классами WebDriver и WebElement.
findElement () возвращает объект WebElement на основе заданных критериев поиска или выдает исключение, если не находит ни одного элемента, соответствующего критериям поиска.
findElements () возвращает список WebElements, соответствующих критериям поиска. Если элементы не найдены, возвращается пустой список.
В следующей таблице приведен весь синтаксис Java для поиска элементов в Selenium WebDriver.
Метод | Синтаксис | Описание |
---|---|---|
По ID | driver.findElement (By.id (<идентификатор элемента>)) | Находит элемент с помощью атрибута ID |
По имени | driver.findElement (By.name (<имя элемента>)) | Находит элемент с помощью атрибута Name |
По названию класса | driver.findElement (By.className (<класс элемента>)) | Находит элемент с помощью атрибута Class |
По имени тега | driver.findElement (By.tagName (<htmltagname>)) | Находит элемент с помощью тега HTML |
По тексту ссылки | driver.findElement (By.linkText (<linktext>)) | Находит ссылку с помощью текста ссылки |
По частичному тексту ссылки | driver.findElement (By.partialLinkText (<linktext>)) | Находит ссылку, используя частичный текст ссылки |
По CSS | driver.findElement (By.cssSelector (<css селектор>)) | Находит элемент с помощью селектора CSS |
Автор XPath | driver.findElement (By.xpath (<xpath>)) | Находит элемент с помощью запроса XPath |
Использование локаторов
Теперь давайте разберемся с практическим использованием каждого из методов локатора с помощью https://www.calculator.net
По ID
Здесь доступ к объекту осуществляется с помощью идентификаторов. В данном случае это идентификатор текстового поля. Значения вводятся в текстовое поле с помощью метода sendkeys с помощью идентификатора (cde density).
driver.findElement(By.id("cdensity")).sendKeys("10");
По имени
Здесь доступ к объекту осуществляется с помощью имен. В данном случае это имя текстового поля. Значения вводятся в текстовое поле с помощью метода sendkeys с помощью идентификатора (cde density).
driver.findElement(By.name("cdensity")).sendKeys("10");
По названию класса
Здесь доступ к объекту осуществляется с помощью имен классов. В данном случае это имя класса WebElement. Доступ к значению можно получить с помощью метода gettext.
List<WebElement> byclass = driver.findElements(By.className("smalltext smtb"));
По имени тега
Имя тега DOM элемента может использоваться для поиска этого конкретного элемента в WebDriver. С помощью этого метода очень просто обрабатывать таблицы. Взгляните на следующий код.
WebElement table = driver.findElement(By.id("calctable"));
List<WebElement> row = table.findElements(By.tagName("tr"));
int rowcount = row.size();
По тексту ссылки
Этот метод помогает найти элемент ссылки с соответствующим видимым текстом.
driver.findElements(By.linkText("Volume")).click();
По частичному тексту ссылки
Этот метод помогает найти элемент ссылки с частичным совпадением видимого текста.
driver.findElement(By.partialLinkText("Volume")).click();
По CSS
CSS используется как метод для идентификации веб-объекта, однако НЕ все браузеры поддерживают идентификацию CSS.
WebElement loginButton = driver.findElement(By.cssSelector("input.login"));
Автор XPath
XPath означает язык пути XML. Это язык запросов для выбора узлов из XML-документа. XPath основан на древовидном представлении XML-документов и предоставляет возможность перемещаться по дереву, выбирая узлы с использованием различных критериев.
driver.findElement(By.xpath(".//*[@id = 'content']/table[1]/tbody/tr/td/table/tbody/tr[2]/td[1]/input")).sendkeys("100");