我什么时候应该使用XPath?

时间:2016-01-14 18:43:21

标签: c# selenium xpath

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

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

方法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和TagName

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。

2 个答案:

答案 0 :(得分:3)

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

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

通常,如果您可以使用简单的By.IdBy.TagName或其他类似的“简单”定位器唯一标识元素,请执行此操作。基于XPath表达式和基于CSS选择器的定位器通常提供定位元素的高级方法(我们可以在树中上/下/侧向,使用部分属性匹配,计算元素,确定它们的位置等)或使元素的位置简洁,如这种特殊情况。

答案 1 :(得分:0)

  1. 当您需要跟踪更多类似的网络元素时,请使用XPATH。
  2. 当您需要特定的单个元素时使用id
  3. Xpath具有更多优势,因为有时id会重复 这是我的经历!