selenium2 XPath定位
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开始的)
- 绝对路径(如果HTML有细微的改变就会失效)
- HTML的第一个
form
元素 -
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']")
- 第一个
form
元素的 name
属性是'username'
的input
子元素 -
id
属性为'loginForm'
的form
元素的第一个input
子元素 -
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]")
-
type
属性为'button'
,name
属性为'continue'
的第一个input
元素 -
id
为'loginForm'
的表单的第四个input
子元素
这些例子只覆盖了一些基本的使用情况,如果想学习更具体的,推荐下面这些地方:
另外,善用开发者工具也可以帮助我们测试,Chrome和Firefox浏览器的F12开发者工具都有很好的调试支持,可以直接查看元素的Xpath等定位器。
注:Firebug现在已经内置集成在Firefox DevTools中
更多建议: