selenium xpath定位方式

1. 绝对定位:
   此方法最为简单,具体格式为
          xxx.find_element_by_xpath("绝对路径")
    具体例子:
         xxx.find_element_by_xpath("/html/body/div[x]/form/input") x 表明第x个 div标签,注意,索引从1开始而不是0
        此方法缺点显而易见,当页面元素位置发生改变时,都须要修改,所以,并不推荐使用。
2.相对路径:
相对路径,以‘//’开头,具体格式为
 xxx.find_element_by_xpath("//标签")
具体例子:
xxx.find_element_by_xpath("//input[x]") 定位第x个input标签,[x]能够省略,默认为第一个
  相对路径的长度和开始位置并不受限制,也能够采起如下方法
xxx.find_element_by_xpath("//div[x]/form[x]/input[x]"), [x]依然是能够省略的  
("//*[@id='J_login_form']/dl/dt/input[@id='J_password']"
3.标签属性定位:
           3.1标签属性定位,相对比较简单,也要求属性可以定位到惟一一个元素,若是存在多个相同条件的标签,默认只是第一个,具体格式
      xxx.find_element_by_xpath("//标签[@属性==‘属性值’]")
属性判断条件:最多见为id,name,class等等,目前属性的类别没有特殊限制,只要可以惟一标识一个元素都是能够的
具体例子
       xxx.find_element_by_xpath("//a[@href='/industryMall/hall/industryIndex.ht']")
       xxx.find_element_by_xpath("//input[@value='肯定']")
       xxx.find_element_by_xpath("//div[@class = 'submit']/input")
          当某个属性不足以惟一区别某一个元素时,也能够采起多个条件组合的方式,具体例子
        xxx..find_element_by_xpath("//input[@type='name' and @name='kw1']")
       3.2 当标签属性不多,不足以惟一区别元素时,可是标签中间中间存在惟一的文本值,也能够定位,其具体格式
       xxx.find_element_by_xpath("//标签[contains(text(),'文本值')]") 
     具体例子:
        xxx.find_element_by_xpath("//iunpt[contains(text(),'型号:')]")  
       注意:尽可能在html中复制此段文本,避免由于肉眼没法分辨的字符致使定位失败
      3.3 其余的属性值若是太长,也能够采起模糊方法定位,直接上示例
 
       xxx.find_element_by_xpath(“//a[contains(@href, ‘logout’)]”)
  3.4 XPath 关于网页中的动态属性的定位,例如,ASP.NET应用程序中动态生成id属性值,能够有如下四种方法:
      a.starts-with 例子: input[starts-with(@id,'ctrl')] 解析:匹配以ctrl开始的属性值
      b.ends-with 例子:input[ends-with(@id,'_userName')] 解析:匹配以userName结尾的属性值
      c.contains() 例子:Input[contains(@id,'userName')] 解析:匹配含有userName属性值
固然,若是上面的单一方法不能完成定位,也能够采起组合式定位 相似("//input[@id='kw1']//input[start-with(@id,'nice']/div[1]/form[3])
 
以上是普通的状况,存在能够定位的属性,当某个元素的各个属性及其组合都不足以定位时,咱们能够利用其兄弟节点或者父节点等各类能够定位的元素进行定位,先看看xpath中支持的方法:
     一、child 选取当前节点的全部子元素
     二、parent 选取当前节点的父节点
     三、descendant选取当前节点的全部后代元素(子、孙等)
     四、ancestor 选取当前节点的全部先辈(父、祖父等)
     五、descendant-or-self选取当前节点的全部后代元素(子、孙等)以及当前节点自己
     六、ancestor-or-self 选取当前节点的全部先辈(父、祖父等)以及当前节点自己
     七、preceding-sibling选取当前节点以前的全部同级节点
     八、following-sibling选取当前节点以后的全部同级节点
     九、preceding 选取文档中当前节点的开始标签以前的全部节点
    十、following 选取文档中当前节点的结束标签以后的全部节点
    十一、self 选取当前节点
    十二、attribute 选取当前节点的全部属性
    1三、namespace选取当前节点的全部命名空间节点
上图实例,须要点击订单号为17051915200001的发货按钮,这时候不能直接定位到发货按钮,而是先要定位到订单号元素,再定位他的兄弟节点。参照上图,咱们首先定位到td标签中包含订单号的td元素,而后选择其以后的同级节点,following-sibling,咱们要找的元素在后面的第8个td标签下,所以定位能够写名为下面的格式
Xxx.find_element_by_xpath("//td[contains(text(),’17051915200001’)]/following-sibling::td[8]/a[@class='link']")  
preceding-sibling 状况相似,可是全部元素的排列顺序是相反的(和following-sibling相反),如图:
 
 
--------------------- 
原文:https://blog.csdn.net/huiseqiutian/article/details/73739707 
相关文章
相关标签/搜索