Selenium findElement与findElements方法:实用示例指南

每当您想与网页进行交互时,都需要定位网页元素。当我们计划使用WebDriver自动化任何网页应用程序时,通常会从找到页面上的HTML元素开始。Selenium WebDriver定义了两种方法来识别这些元素,它们分别是findElement和findElements。

  1. findElement: 使用此命令可以在网页中唯一标识一个网页元素。
  2. 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 场景。

  1. 打开https://www.irctc.co.in/nget/user-registration以进行AUT
  2. 找到并点击单选按钮
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 场景

  1. 打开”https://www.irctc.co.in/nget/user-registration”网址以进行AUT操作
  2. 找到单选按钮的文本内容并打印在控制台上
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]"));
bannerAds