我什么时候应该使用 XPath

本文关键字:XPath 什么时候 | 更新日期: 2023-09-27 18:30:18

考虑以下示例,其中已知ul元素的 id,如果li.Text等于某个文本,我们希望Click()它包含li元素。

以下是此问题的两个有效解决方案:


方法 1:使用 XPath

ReadOnlyCollection<IWebElement> lis = FindElements(By.XPath("//ul[@id='id goes here']/li"));
foreach (IWebElement li in lis) {
    if (li.Text == text) {
        li.Click();
        break;
    }
}

方法 2:使用 ID 和标签名称

IWebElement ul = FindElement(By.Id("id goes here"));
ReadOnlyCollection<IWebElement> lis = ul.FindElements(By.TagName("li"));
foreach (IWebElement li in lis) {
    if (li.Text == text) {
        li.Click();
        break;
    }
}

我的问题是:我们什么时候应该使用XPath,什么时候不应该?

我更喜欢只在必要时使用 XPath。对于这个具体的例子,我认为XPath是完全没有必要的,但是当我在StackOverflow上查找这个特定问题时,似乎大多数用户默认使用XPath。

我什么时候应该使用 XPath

在这种特殊情况下,XPath 甚至可以将问题简化为一行:

driver.FindElement(By.XPath(String.Format("//ul[@id='id goes here']/li[. = '{0}']", text))).click();

不过,一般来说,如果您可以使用简单的By.IdBy.TagName或其他类似的"简单"定位器唯一标识元素,请执行此操作。XPath 表达式和基于 CSS 选择器的定位器通常要么提供高级方法来定位元素(我们可以在树中向上/向下/横向移动,使用部分属性匹配,对元素进行计数,确定它们的位置等),要么使元素的位置简洁,就像在这种特殊情况下一样。

  1. 当您需要跟踪更多相似的Web元素时,请使用XPATH。
  2. 当您需要特定的单个元素时使用 id

Xpath具有更多优势,因为有时id会重复这是我的经验!