Selenium findElement与findElements方法:实用示例指南
每当您想与网页进行交互时,都需要定位网页元素。当我们计划使用WebDriver自动化任何网页应用程序时,通常会从找到页面上的HTML元素开始。Selenium WebDriver定义了两种方法来识别这些元素,它们分别是findElement和findElements。
- findElement: 使用此命令可以在网页中唯一标识一个网页元素。
- findElements: 使用此命令可以在网页中唯一标识一组网页元素。
在网页中,有多种方法可以唯一标识Web元素,例如ID、名称、类名、链接文本、部分链接文本、标签名称和XPath。
findElement方法和findElements方法的区别
findElement()方法:
- 此命令用于访问网页上的任何单个元素
- 它将返回指定定位器的第一个匹配元素的对象
- 当无法识别元素时,它将抛出NoSuchElementException异常
findElements()方法:
- 此命令用于唯一标识网页内的Web元素列表
- 此方法的用法非常有限
- 如果页面上不存在该元素,则它将返回一个空列表
Selenium的findElement命令
“Find Element”命令接受By对象作为参数,并返回类型为WebElement的对象。By对象可以与多种定位策略一起使用,例如ID、名称、类名、链接文本、XPath等等。
查找元素命令的语法
WebElement elementName = driver.findElement(By.LocatorStrategy("LocatorValue"));
定位策略可以是以下任意值。
- ID(标识符)
- Name(名称)
- Class Name(类名)
- Tag Name(标签名)
- Link Text(链接文本)
- Partial Link Text(部分链接文本)
- XPath
定位器的值是用来识别网页元素的唯一值。开发人员和测试人员的核心职责是确保通过使用ID或名称等特定属性来唯一标识网页元素。例如:
WebElement login = driver.findElement(By.linkText("Login"));
Selenium的findElements命令
Selenium的findElements命令以By对象作为参数,并返回一个Web元素列表。如果使用给定的定位策略和定位器值未找到任何元素,则返回一个空列表。
findElements命令的语法
List<WebElement> elementName = driver.findElements(By.LocatorStrategy("LocatorValue"));
例如,以下代码展示了如何使用XPath查找所有div元素:
List<WebElement> listOfElements = driver.findElements(By.xpath("//div"));
如何使用Selenium的findElement命令
以下应用程序用于演示目的:https://www.irctc.co.in/nget/user-registration 场景。
- 打开https://www.irctc.co.in/nget/user-registration以进行AUT
- 找到并点击单选按钮
package com.Olivia.selenium.findelement;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
public class SeleniumFindElement {
public static void main (String [] args){
System.setProperty("webdriver.chrome.driver","D:\\Drivers\\chromedriver.exe");
WebDriver driver= new ChromeDriver();
driver.manage().window().maximize();
driver.get("https://www.irctc.co.in/nget/user-registration");
//使用ID查找"Male"单选按钮并点击
driver.findElement(By.id("M")).click();
}
}
如何使用Selenium的findElements命令
以下是用于演示目的的应用程序 https://www.irctc.co.in/nget/user-registration 场景
- 打开”https://www.irctc.co.in/nget/user-registration”网址以进行AUT操作
- 找到单选按钮的文本内容并打印在控制台上
package com.Olivia.selenium.findelements;
import java.util.List;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
public class SeleniumFindElements {
public static void main(String[] args) {
System.setProperty("webdriver.chrome.driver","D:\\Drivers\\chromedriver.exe");
WebDriver driver= new ChromeDriver();
driver.get("https://www.irctc.co.in/nget/user-registration");
List<WebElement> elements = driver.findElements(By.id("M"));
System.out.println("元素数量:" + elements.size());
for(int i=0; i<elements.size(); i++){
System.out.println("单选按钮文本:" + elements.get(i).getAttribute("value"));
}
}
}
采用多种策略来访问Selenium定位器
Selenium Webdriver通过使用findElement(By.)方法来引用网页元素。findElement方法使用一种叫做”By”的定位器对象。根据您的要求,有多种不同的”By”策略可供选择。
通过ID
命令:driver.findElement(By.id(<元素ID>)) 示例:<input id=”JournalDev”> 在Java代码中通过元素ID查找输入框的示例。
WebElement user = driver.findElement(By.id("JournalDev"));
2. 按照名称
命令:driver.findElement(By.name(<元素名称>)) 示例:<input name=”JournalDev”>,Java示例代码按名称查找输入元素
WebElement user = driver.findElement(By.name("JournalDev"));
3. 通过类名
指令:driver.findElement(By.className(<element-class>)) 示例:<input class=”JournalDev”> Java的示例代码,通过类名查找输入元素。
WebElement user = driver.findElement(By.className("JournalDev"));
4. 通过链接文本
命令:driver.findElement(By.linkText(<链接文本>)) 示例:<a href=”#test1″>JournalDev-1</a> <a href=”#test2″>JournalDev-2</a> 用于查找与链接或部分链接文本匹配的元素的Java示例代码:
WebElement link = driver.findElement(By.linkText("JournalDev-1"));
WebElement link2 = driver.findElement(By.partialLinkText("JournalDev-2"));
5. 通过CSS选择器
命令:driver.findElement(By.cssSelector(<css选择器>)) 示例:<input class=”email” id=”email” type=”text” placeholder=”xxx@email.com”> <input class=”btn btn-small” type=”submit” value=”Subscribe to blog”> 通过CSS选择器查找元素的Java示例代码:
WebElement emailText = driver.findElement(By.cssSelector("input#email"));
6. 通过XPath
命令:driver.findElement(By.xpath(<xpath>)),用于Java中XPath的示例代码。
// 绝对路径
WebElement item = driver.findElement(By.xpath("html/head/body/table/tr/td"));
// 相对路径
WebElement item = driver.findElement(By.xpath("//input"));
// 使用索引查找元素
WebElement item = driver.findElement(By.xpath("//input[2]"));