通过 XPath FindElement Selenium

⚡ 智能摘要

通过 XPath FindElement Selenium `FindElements` 命令用于唯一标识页面上的单个网页元素,而 `FindElements` 命令则返回匹配元素的完整列表。这两个命令都接受一个 `By` 定位器对象,该对象支持 ID、名称、类名和 XPath 等定位策略。

  • 核心原则: FindElement 返回第一个匹配的 WebElement;FindElements 返回一个从零开始索引的列表,类似于数组。
  • ⚠️ 异常处理: 当不存在匹配项时,FindElement 会抛出 NoSuchElementException 异常,而 FindElements 会返回一个空列表而不是失败。
  • 🧭 定位策略: 可选择 ID、名称、类名、标签名、链接文本、部分链接文本和 XPath。
  • 🧩 实施重点: 在 WebDriver 脚本中,传递一个具有唯一定位器值的 By 对象,以可靠地定位元素。
  • 🚀 实际应用: 工进 Java 示例演示了如何点击单选按钮并遍历演示页面上的元素列表。

通过 XPath FindElement Selenium

In Selenium WebDriver, 查找元素查找元素 是用于在页面上定位网页元素的核心命令,之后才能对网页元素执行任何操作,例如点击或输入文本。

为什么需要“查找元素”命令?

用户与网页交互时,首先需要找到网页元素。“查找元素”命令用于唯一标识网页中的单个网页元素,而“查找元素”命令用于标识网页元素列表。可以使用多个标识符来标识一个元素。 定位策略 例如ID、名称、类名、链接文本、部分链接文本、标签名称和 XPath的.

FindElement 命令语法

以下是 FindElement 命令的语法 Selenium WebDriver:

WebElement elementName = driver.findElement(By.LocatorStrategy("LocatorValue"));

FindElement 命令以 By 对象作为参数,并返回一个 WebElement 类型的对象。By 对象可以与各种定位策略一起使用,例如 ID、名称、类名、XPath 等。

定位策略可以是以下任意值:

  • ID
  • 姓名
  • 班级名称
  • 标签名
  • 链接文本
  • 部分链接文本
  • XPath的

定位值是用于识别网页元素的唯一值。开发人员和测试人员有责任确保网页元素能够通过诸如 ID 或名称之类的特定属性进行唯一标识。

计费示例:

WebElement loginLink = driver.findElement(By.linkText("Login"));

示例:在以下位置查找元素 Selenium

以下演示应用程序用于展示 FindElement 命令的实际应用:

https://demo.guru99.com/test/ajax.html

场景:

第三步: 打开自动

第三步: 找到并单击单选按钮,然后单击“选中”按钮。

package com.sample.stepdefinitions;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

public class NameDemo {

public static void main(String[] args) {
// TODO Auto-generated method stub

System.setProperty("webdriver.chrome.driver", "D:\\3rdparty\\chrome\\chromedriver.exe");
WebDriver driver = new ChromeDriver();
driver.manage().window().maximize();

driver.get("https://demo.guru99.com/test/ajax.html");

// Find the radio button for “No” using its ID and click on it
driver.findElement(By.id("no")).click();

//Click on Check Button
driver.findElement(By.id("buttoncheck")).click();

}

}

FindElements 命令语法

当您需要查找与定位器匹配的所有元素(而不仅仅是第一个匹配项)时,请使用 FindElements 函数。以下是其语法:

List<WebElement> elementName = driver.findElements(By.LocatorStrategy("LocatorValue"));

FindElements 命令以 By 对象作为参数,并返回一个网页元素列表。如果使用给定的定位策略和定位值未找到任何元素,则返回空列表。

计费示例:

List<WebElement> listOfElements = driver.findElements(By.xpath("//div"));

示例:查找元素 Selenium

同一个演示应用程序用于展示 FindElements 如何遍历匹配元素的列表。

场景:

第三步: 打开 URL 测试应用程序

第三步: 找到单选按钮的文本并将其打印到输出控制台。

package com.sample.stepdefinitions;

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 NameDemo {

public static void main(String[] args) {

    System.setProperty("webdriver.chrome.driver", "X://chromedriver.exe");
    WebDriver driver = new ChromeDriver();
    driver.get("https://demo.guru99.com/test/ajax.html");
    List<WebElement> elements = driver.findElements(By.name("name"));
    System.out.println("Number of elements:" +elements.size());

    for (int i=0; i<elements.size();i++){
      System.out.println("Radio button text:" + elements.get(i).getAttribute("value"));
    }
  }
}

查找元素 vs 查找元素

以下是“查找元素”和“查找元素”命令的主要区别:

查找元素 vs 查找元素 Selenium

查找元素 查找元素
如果使用相同的定位器找到多个 Web 元素,则返回第一个 Web 元素。 返回 Web 元素列表
如果没有元素与定位器策略匹配,则抛出 NoSuchElementException 异常。 如果没有符合定位器策略的 Web 元素,则返回空列表
使用 XPath 查找元素只会找到一个网页元素 它将找到符合定位策略的元素集合。
不适用 每个网页元素都像数组一样,用一个从 0 开始的数字进行索引。

常见问题

绝大部分储备使用 Selenium 隐式或显式等待 因此,驱动程序会轮询页面,直到元素出现。对于动态的、AJAX 驱动的页面,使用 WebDriverWait 进行显式等待并设置预期条件是最可靠的方法。

ID 是最快、最可靠的定位方式,因为浏览器会直接对其进行索引。CSS 选择器通常比 XPath 更快,因此只有在没有唯一 ID、名称或类名可用时才使用 XPath。

是的。人工智能驱动的测试助手可以分析 DOM 并自动建议稳定的 XPath 或 CSS 定位器,从而减少人工检查时间。 Rev在将生成的定位符添加到生产测试套件之前,检查其唯一性。

自愈框架利用人工智能技术检测用户界面更改后定位器何时失效,并自动替换为最接近的匹配元素。这减少了因元素属性频繁更改而导致的测试维护工作量。

总结一下这篇文章: