python selenium xpath_python+selenium xpath应用

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

xpath语法

表达式

描述

nodename

选取此节点的所有子节点。

/

从根节点选取。

//

从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。

.

选取当前节点。

..

选取当前节点的父节点。

@

选取属性。

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为要匹配的字符串

#组合定位 用于界面一个div下有两个一模一样的div,例如时间控件选择

find_element_by_xpath('//div[@name-"xxx"]/div[2]//div[@value="xxx"]')

find_element_by_xpath('//[@attribute_name1='attribute_value1'][@attribute_name2='attribute_value2]')

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

7650f3814d282d44144b6710c536b258.png

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

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


版权声明:本文为weixin_30177835原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。