什么时候应该使用 XPath?
When should I use XPath?
考虑以下示例,其中 ul
元素的 id 已知,如果 li.Text
等于某个文本,我们希望 Click()
它包含 li
元素.
这里有两个解决这个问题的方法:
方法一:使用 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 是完全没有必要的,但是当我在 Whosebug 上查找这个具体问题时,似乎大多数用户默认使用 XPath。
- 当您需要跟踪更多相似的网络元素时,请使用 XPATH。
- 当您需要特定的单个元素时使用 id
Xpath 更有优势,因为有时 id 会重复
这是我的经验!
在这种特殊情况下,XPath 甚至可以将问题简化为一行:
driver.FindElement(By.XPath(String.Format("//ul[@id='id goes here']/li[. = '{0}']", text))).click();
但一般来说,如果您可以使用简单的 By.Id
或 By.TagName
或其他类似的 "simple" 定位器唯一地标识一个元素,那就去做吧。 XPath 表达式和基于 CSS 选择器的定位器通常要么提供高级方法来定位元素(我们可以在树中进入 up/down/sideways,使用部分属性匹配,计算元素,确定它们的位置等),要么使元素的位置简明扼要,就像在这种特殊情况下一样。
考虑以下示例,其中 ul
元素的 id 已知,如果 li.Text
等于某个文本,我们希望 Click()
它包含 li
元素.
这里有两个解决这个问题的方法:
方法一:使用 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 是完全没有必要的,但是当我在 Whosebug 上查找这个具体问题时,似乎大多数用户默认使用 XPath。
- 当您需要跟踪更多相似的网络元素时,请使用 XPATH。
- 当您需要特定的单个元素时使用 id
Xpath 更有优势,因为有时 id 会重复 这是我的经验!
在这种特殊情况下,XPath 甚至可以将问题简化为一行:
driver.FindElement(By.XPath(String.Format("//ul[@id='id goes here']/li[. = '{0}']", text))).click();
但一般来说,如果您可以使用简单的 By.Id
或 By.TagName
或其他类似的 "simple" 定位器唯一地标识一个元素,那就去做吧。 XPath 表达式和基于 CSS 选择器的定位器通常要么提供高级方法来定位元素(我们可以在树中进入 up/down/sideways,使用部分属性匹配,计算元素,确定它们的位置等),要么使元素的位置简明扼要,就像在这种特殊情况下一样。