codecamp

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开始的)

  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中


selenium2 根据name定位
selenium2 用链接文本定义超链接
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }