python3 selenium自动化测试 xpath定位元素2018-08-13

  selenium自动化测试中,元素定位是有8种基本方式,如id、Name、class、CSS、XPath、link_text等。方法多样,但是具体的定位中如何选择何种定位比较合适? 如何能跳出定位错误的坑,如何能准确的定位到元素呢?这是值得我们思考的问题。

      首先我们会疑问为什么要选择xpath定位呢?它有什么优势?这是大部分的人的疑问。xpath定位在定位路径的基础上结合了id、name、class等属性,让定位更准确。相比单个id、name、class属性定位,xpath定位的优势是很明显的。下面我们对xpath做详细的介绍。文章中有疏漏的地方请多包涵。

      xpath常用符号

        /   表示绝对路径绝对路径是指从根目录开始

  //   表示相对路径

  .   表示当前层

  ..   表示上一层

  *   表示通配符

  @   表示属性

  []   属性的判断条件表达式

        xpath常用函数

contains ():  xpath(‘//div[contains(@id,”widget”)]’),选择id属性中包含'widget'的div

text():    xpath(‘//a[text()=”hello world”]’),选择文本值为'hello world'的节点

last():     选择最后一个

starts-with():  xpath(‘//div[starts-with(@id,”common”)]’),选择id属性中’common’开头的div节点

not():       否定

 xpath绝对路径定位

    从html标签开始,一层一层往下写标签,直到这个标签位置。

比如:dr.find_element_by_xpath("/html/body/div[2]/form/input")

div][2] 代表第2个 div标签,注意,索引从1开始而不是0,此方法缺点显而易见,当页面元素位置发生改变时,都需要修改。这种定位标签需要一个个的找,也是比较麻烦的事情。因此,并不推荐使用。

Xpath相对路径定位

  相对路径,以‘//’开头,具体格式为 xxx.find_element_by_xpath("//标签")

比如:dr.find_element_by_xpath("//input[x]")     #定位第x个input标签,[x]可以省略,默认为第一个

相对路径的长度和开始位置并不受限制,也可以采取以下方法:

xxx.find_element_by_xpath("//div[x]/form[x]/input[x]"),      [x]依然是可以省略的

xxx.find_element_by_xpath("//*[x]/form[x]/input[x]"),         用*代替tag标签


  xpath标签属性定位

  标签属性定位,相对比较简单,也要求属性能够定位到唯一元素,如果存在多个相同条件的标签,默认只是第一个,具体格式dr.find_element_by_xpath("//标签[@属性=‘属性值’]")

属性判断条件:最常见为id,name,class等等,目前属性的类别没有特殊限制,只要能够唯一标识一个元素都是可以的

具体例子:

   dr.find_element_by_xpath("//a[@href='/industryMall/hall/industryIndex.ht']")

dr.find_element_by_xpath("//input[@value='确定']")

       dr.find_element_by_xpath("//div[@class = 'submit']/input")

当某个属性不足以唯一区别某一个元素时,通过逻辑运算符and去定位 ,具体例子:

 dr.find_element_by_xpath("//input[@type='name' and @name='kw1']")

当标签属性很少,不足以唯一区别元素时,但是标签中间中间存在唯一的文本值,也可以定位,其具体格式:   dr.find_element_by_xpath("//标签[contains(text(),'文本值')]")

具体例子:xxx.find_element_by_xpath("//iunpt[contains(text(),'型号:')]")  

注意:尽量在html中复制此段文本,避免因为肉眼无法分辨的字符导致定位失败


 xpath截取文字定位

其他的属性值如果太长,也可以采取截取文字方法定位,请看示例

属性higy=‘https://blog.csdn.net/huiseqiutian/article/details’

dr.find_element_by_xpath(“//a[contains(@higy,‘details’)]”)


  xpath网页中的动态属性定位

例如,在某些网页中动态生成id属性值,可以有以下方法:

1.starts-with例子: //input[starts-with(@id,'ctrl')]            解析:匹配以ctrl开始的属性值

2.ends-with例子://input[ends-with(@id,'_userName')]       解析:匹配以userName结尾的属性值

3.contains()例子://Input[contains(@id,'userName')]        解析:匹配含有userName属性值

你可能感兴趣的:(python3 selenium自动化测试 xpath定位元素2018-08-13)