【发布时间】:2015-01-26 19:11:48
【问题描述】:
绝对和相对 xpath 有什么区别? Selenium 自动化测试中首选哪个? 我正在使用 Selenium 和 Robot 框架准备测试脚本。
【问题讨论】:
绝对和相对 xpath 有什么区别? Selenium 自动化测试中首选哪个? 我正在使用 Selenium 和 Robot 框架准备测试脚本。
【问题讨论】:
Absolute Xpath:它使用从根元素到期望元素的完整路径。
Relative Xpath:您可以简单地从引用您想要的元素开始,然后从那里开始。
相对 Xpath 始终是首选,因为它们不是来自根元素的完整路径。 (//html//正文)。因为将来,如果添加/删除任何 web 元素,那么绝对 Xpath 会发生变化。因此,请始终在您的自动化中使用相对 Xpath。
以下是一些链接,您可以参考它们以获取更多信息。
【讨论】:
HTML DOM 中的绝对 xpath 以 /html 开头,例如
/html/body/div[5]/div[2]/div/div[2]/div[2]/h2[1]
和一个相对的 xpath 找到 dom 元素的封闭 id 并从该元素开始生成 xpath,例如
.//*[@id='answers']/h2[1]/a[1]
您可以使用 firepath (firebug) 来生成这两种类型的 xpaths
在 selenium 中使用哪个 xpath 不会有任何区别,前者可能比后者更快(但它不会被观察到)
绝对 xpath 更容易回归,因为 DOM 的微小变化会使它们无效或引用错误的元素
【讨论】:
/ 开头的表达式。您所描述的似乎是“位置”路径表达式与通过 ID 引用元素。
/html 开头的路径将是绝对路径。
html/body 是 relative location path; /html/body 将是 absolute location path。请更正您的答案或将其删除。谢谢。
考虑下面的Html
<html>
<body>
<input type ="text" id="username">
</body>
</html>
所以 绝对路径= html/body/input 和 相对路径 = //*[@id="username"]
绝对 xpath 的缺点是维护成本很高,如果对 html 进行任何更改,它可能会干扰整个路径,而且有时我们需要编写较长的绝对 xpath,因此首选相对 xpath
【讨论】:
绝对 XPath: 它是查找元素的直接方法,但绝对 XPath 的缺点是,如果元素的路径发生任何更改,那么 XPath 就会失败。
XPath 的关键特性是它以单个正斜杠(/)开头,这意味着您可以从根节点中选择元素。
以下是绝对 xpath 的示例。
/html/body/div[1]/section/div/div[2]/div/form/div[2]/input[3]
相对 Xpath: 相对 Xpath 从 HTML DOM 结构的中间开始。它以双正斜杠 (//) 开头。它可以在网页上的任何位置搜索元素,这意味着无需编写很长的 xpath,您可以从 HTML DOM 结构的中间开始。始终首选相对 Xpath,因为它不是从根元素开始的完整路径。
以下是相对 XPath 的示例。
//input[@name=’email’]
【讨论】:
我们可以说主要有3个不同:
/ 开头,而Relative 将以// 开头
主要是相对是首选,绝对不是首选,因为它是一个完整的路径,并且由于动态性质,元素可能会发生变化,因此可能会破坏路径,因此首选相对。
【讨论】: