zoukankan      html  css  js  c++  java
  • 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为要匹配的字符串
    #组合定位 用于界面一个div下有两个一模一样的div,例如时间控件选择
    find_element_by_xpath('//div[@name-"xxx"]/div[2]//div[@value="xxx"]')
    find_element_by_xpath('//<HTML tag>[@attribute_name1='attribute_value1'][@attribute_name2='attribute_value2]')

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

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

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

  • 相关阅读:
    remove white space from read
    optimize the access speed of django website
    dowload image from requests
    run jupyter from command
    crawl wechat page
    python version 2.7 required which was not found in the registry windows 7
    health
    alternate rows shading using conditional formatting
    word
    【JAVA基础】static 关键字
  • 原文地址:https://www.cnblogs.com/shiyuheng/p/9934079.html
Copyright © 2011-2022 走看看