selenium2 XPath定位

2021-07-02 17:05 更新

XPath​是用来定位​XML​文档节点的语言。不过HTML可以看成是XML(XHTML)的一种实现。Selenium用户可以使用这个强力的语言来定位Web应用的元素。 ​XPath​拓展了用​id​或者​name​属性来定位的单一方法,开创了许多可能性,例如定位页面的第三个复选框。

用​XPath​的主要理由之一,就是你想定位的元素没有合适的​id​或者​name​属性的时候,你可以用​XPath​来对元素进行绝对定位(不推荐)或者把这个元素和另外一个有确定​id​或者​name​的元素关联起来(即相对定位)。​XPath​定位器也可以用来找出那些具有​id​,​name​以外属性的元素。

绝对的​XPath​定位包含了从HTML根节点起的所有元素,并且一些轻微的改变就会失效。而用​id​或者​name​属性来找到一个靠近的元素(比较理想的是父元素),这样你就可以依靠他们的相对关系来确定目标元素的位置。这种情况改变的可能就小了很多了,我们写的测试程序也会更可靠。

再来看一个实例:

<html>
 <body>
  <form id="loginForm">
   <input name="username" type="text" />
   <input name="password" type="password" />
   <input name="continue" type="submit" value="Login" />
   <input name="continue" type="button" value="Clear" />
  </form>
</body>
<html>

form​元素可以这样定位:

login_form = driver.find_element_by_xpath("/html/body/form[1]")
login_form = driver.find_element_by_xpath("//form[1]")
login_form = driver.find_element_by_xpath("//form[@id='loginForm']")

(译者注:这里下标是从1开始的)

  1. 绝对路径(如果HTML有细微的改变就会失效)
  2. HTML的第一个​form​元素
  3. id​属性为​'loginForm'​的​form​元素

username​元素可以这样定位:

username = driver.find_element_by_xpath("//from[input/@name='username']")
username = driver.find_element_by_xpath("//form[@id='loginForm']/input[1]")
username = driver.find_element_by_xpath("//input[@name='username']")
  1. 第一个​form​元素的 ​name​属性是​'username'​的​input​子元素
  2. id​属性为​'loginForm'​的​form​元素的第一个​input​子元素
  3. name​属性为​'username'​的第一个​input​元素

'clear'​按钮可以这样定位:

clear_button = driver.find_element_by_xpath("//input[@name='continue'][@type='button']")
clear_button = driver.find_element_by_xpath("//form[@id='loginForm']/input[4]")
  1. type​属性为​'button'​,​name​属性为​'continue'​的第一个​input​元素
  2. id​为​'loginForm'​的表单的第四个​input​子元素

这些例子只覆盖了一些基本的使用情况,如果想学习更具体的,推荐下面这些地方: 

Xpath教程  Firebug教程

另外,善用开发者工具也可以帮助我们测试,Chrome和Firefox浏览器的F12开发者工具都有很好的调试支持,可以直接查看元素的Xpath等定位器。

 注:Firebug现在已经内置集成在Firefox DevTools中


以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号