• xpath定位方法


    xpath方法

    绝对路径表示法:

      从根节点(html)开始,路径分割符是/(斜杠,类似于linux中路径分割符)
      如:/html/body/div/span
      表示对应路径下的span元素

    相对路径表示法:

      以//开头后面加元素名称, 用法类似于css中的后代选择器,可以把//对应css中空格
      如://span
      表示html文档下所有的span元素
      如://div//span
      表示方法类似于CSS中的 div span

    属性选择器:

      //*[@属性] 表示选择具有某个属性的元素
      //*[@属性=”属性值“] 表示选择具有某个属性值的元素,属性值必须加引号(单引号双引号都可以)
      //*[@style] 选择所有具有style属性的元素
      //p[@spec='len2'] 选择所有具有spec 值为 len2 的元素
      Tips:在xpath中没有表示id和class的特殊方法,id 、class 也是属性
      根据部分属性选择元素的方法:
        //*[contains(@属性,”value“)] 表示属性包含value 例子//*[contains(@id,'food')]
        //*[starts-with(@属性,”value“)] 表示属性以value开头 例子://*[starts-with(@id,'choose_')]
        //a[ends-with(@href,'51job.com')] 表示属性href以51job.com结尾(目前浏览器还不支持这种表示方法)
        使用text()函数匹配元素文本://a[text()="高级搜索"]

    子元素选择器:

      1、通过下标方式获取,下标从1开始 
    ("//*[@id='food']/p[1]") # 获取id为food下p元素中的第一个
    ("//*[@id='food']/*[1]") # 获取id为food下所有元素中的第一个
      2、倒数索引:
        使用last()可以计数,代表最大数量   
    //*[@id='food']/span[last()] 获取id为food下span元素中的最后一个 
    //*[@id='food']/span[last()-1] 获取id为food下span元素中的倒数第二个
    //*[@id='food']/*[last()] 获取id为food下所有元素中的倒数第一个
      3、position()用法:
    //*[@id='food']/p[position()=1]  获取id为food下p元素中的第一个
    //*[@id='food']/*[position()=2]  获取id为food下所有元素中的第二个
    //*[@id='food']/*[position()=last()]  获取id为food下所有元素中的最后一个
     

    组选择器:xpath中 用竖线来隔开 //p | //button 等价于css中的 p, button

    相邻兄弟选择器:

      向后查找
        获取id为food下第一个span元素的相邻span元素,可以是多个,指定下标为1,最近的一个 last()最远的一个
        //*[@id='food']/span[1]/following-sibling::span
      向前查找
         //*[@id='food']/preceding-sibling::div[1] 指定下标1代表离的最近

    父元素选择器:

      使用场景:通常你想定位的元素没有特征,只有他的子节点有id这种特征
      
        <select id="choose_car">
           <option value="volvo">沃尔沃</option>
           <option value="corolla">卡罗拉</option>
           <option value="fiat">菲亚特</option>
           <option value="audi">奥迪</option>
       </select>
     
      //*[@value='volvo']/.. 定位到属性value的值为volvo的父元素也就是id="choose_car">的select
      然后依次类推,还可以获取父元素的父元素
    相对定位法:
       food = driver.find_element_by_id("food")
       vegetable = food.find_element_by_xpath('./p[2]')
       如果我想获取的是food这个元素范围内的呢,大家就要在这个表达式前面加一个点,这个点表示在当前的元素范围内。
    例子:
    <div id="food" style="margin-top:10px">
            <span class="vegetable good">黄瓜</span>所有元素第一个
            <span class="meat">牛肉</span>
            <p class="vegetable">黄瓜pp</p>  p元素第一个
            <p class="vegetable">青菜</p>
        </div>
    driver = webdriver.Chrome()
    driver.get('file:///C:/Users/Administrator/Desktop/lesson_code/autoUI_selenium/lesson05/s1.html')
    # 获取id为food下p元素中的第一个
    ele = driver.find_element_by_xpath("//*[@id='food']/p[1]")
    print(ele.text) #黄瓜pp
    # 获取id为food下所有元素中的第一个
    ele2 = driver.find_element_by_xpath("//*[@id='food']/*[1]")
    print(ele2.text) #黄瓜
    # 获取id为food下span元素中的最后一个
    ele3 = driver.find_element_by_xpath("//*[@id='food']/span[last()]")
    print(ele3.text) #牛肉
    # 获取id为food下span元素中的倒数第二个
    ele4 = driver.find_element_by_xpath("//*[@id='food']/span[last()-1]")
    print(ele4.text) #黄瓜
    # 获取id为food下所有元素中的倒数第一个
    ele5 = driver.find_element_by_xpath("//*[@id='food']/*[last()]")
    print(ele5.text) #青菜
    # 获取id为food下p元素中的第一个
    ele6 = driver.find_element_by_xpath("//*[@id='food']/p[position()=1]")
    print(ele6.text) #黄瓜pp
    # 获取id为food下所有元素中的第二个
    ele7 = driver.find_element_by_xpath("//*[@id='food']/*[position()=2]")
    print(ele7.text) #牛肉
    # 获取id为food下所有元素中的最后一个
    ele8 = driver.find_element_by_xpath("//*[@id='food']/*[position()=last()]")
    print(ele8.text) #青菜
    # 获取id为food下第一个span元素的相邻span元素,可以是多个,指定下标为1,最近的一个 last()最远的一个
    ele9 = driver.find_element_by_xpath("//*[@id='food']/span[1]/following-sibling::span[1]")
    print(ele9.text) #牛肉
    
    food = driver.find_element_by_id("food")
    vegetable = food.find_element_by_xpath('./p[2]')
    print(vegetable.text) #青菜
    driver.quit()
  • 相关阅读:
    使用openssl搭建CA并颁发服务器证书
    PKCS#1规范阅读笔记2--------公私钥ASN.1结构
    PKCS#1规范阅读笔记1--------基本概念
    Chrome 扩展机制
    Docker部署zookeeper集群和kafka集群,实现互联
    ASP.NET Identity实现分布式Session,Docker+Nginx+Redis+ASP.NET CORE Identity
    Transmission添加SSL访问
    重磅来袭,水木PC客户端全面改版,欢迎使用!
    CLR via C# 3rd
    IL命令
  • 原文地址:https://www.cnblogs.com/aiyumo/p/12576380.html
Copyright © 2020-2023  润新知