python+selenium xpath应用

  xpath是XML路径语言(XML Path Language),它是一种用来确定XML文档中某部分位置的语言。在selenium做UI自动化也应用很广,虽然selenium有很多定位方式,但是优先推荐的是xpath,不然你在实际应用会遇到各种问题,比如前端界面是ext js完全由后台生成,其每个标签都是有id,但都是动态生成,每次刷新都不同的情况。

xpath语法

表达式 描述
nodename 选取此节点的所有子节点。
/ 从根节点选取。
// 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。
. 选取当前节点。
.. 选取当前节点的父节点。
@ 选取属性。

更多xpath教程可以参看http://www.runoob.com/xpath/xpath-tutorial.htmlhttp://www.w3school.com.cn/xpath/index.asp

selenium常用xpath定位方式

#按标签属性,查找属性name值为xxx的元素
find_element_by_xpath('//*[@name="xxx"]')  
#按标签文本,查找标签文本为xxx的元素
find_element_by_xpath('//*[text()="xxx"]') 
#按父元素属性,查找属性name值为xxx的下级第一个div元素
find_element_by_xpath('//*[@name="xxx"]/div[1]') 
#按子元素属性,查找属性name值为xxx的父元素
find_element_by_xpath('//*[@name="xxx"]/..') 
find_element_by_xpath('//*[@name="xxx"]/parent::') 
#按兄弟元素属性,查找属性name值为xxx的同级第一个div元素
find_element_by_xpath('//*[@name="xxx"]/../div[1]') 
find_element_by_xpath('//*[@name="xxx"]/preceding-sibling::a[1]')  #该节点的同级前一个元素
find_element_by_xpath('//*[@name="xxx"]/following-sibling::a[1]')  #该节点的同级后一个元素 
#按模糊匹配
find_element_by_xpath('//*[contains(str1,str2)]') #str1为标签的属性或是文本,str2为要匹配的字符串

其实firefox和chrome浏览器都有直接copy元素的xpath,但是建议只可参看,不可一味的盲目使用;因为copy下来的xpath会优先以最近一个元素的id为起始点,然后来定位元素。这样会出现,假如ext js生成的前端界面id是动态的,xpath是 //*[@id="button-1049-btnInnerEl"] ,下次使用界面刷新id变换,这样代码也不会健壮;

 还要就是遇到copy的xpath是绝对路径(一般整个界面没有id元素的情况会出现),这样xapth是死的,有时候前端对整个结构稍微一变,这个定位方式就不能用;

总之xpath是实战selenium用的最多的定位方式,需要大家多多去了解xpath的语法和定位方式,然后手动编写xpath的定位规则!!!

猜你喜欢

转载自www.cnblogs.com/shiyuheng/p/9934079.html