zoukankan      html  css  js  c++  java
  • 在Selenium Webdriver中使用XPath Contains、Sibling函数定位

    前言

    在一般情况下,我们通过简单的xpath即可定位到目标元素,但对于一些既没id又没name,而且其他属性都是动态的情况就很难通过简单的方式进行定位了。

    在这种情况下,我们需要使用xpath1.0内置的函数来进行定位,下面我们重点讨论一下3个函数:

    • Contains
    • Sibling

    Contains函数

    通过contains函数,我们可以提取匹配特定文本的所有元素。

    例如在百度首页,我们使用contains定位包含“新闻”文本的元素。


    baidu_news.png
    "//div/a[contains(text(), 新闻)]"

    在python selenium中使用xpath contains定位,代码片段如下:

    driver.find_element_by_xpath("//div/a[contains(text(), 新闻)]")

    sibling函数

    通过sibling函数我们可以提取指定元素的所有同级元素,即获取目标元素的所有兄弟节点。

    例如通过刚才“新闻”节点来定位“hao123”节点。

    "//div/following-sibling::a[contains(text(), 新闻)]"

    python selenium代码片段为如下

    driver.find_element_by_xpath(
    u"//div/a[contains(text(), '%s')]/following-sibling::*" % u"新闻")

    通过刚才“新闻”节点来定位其所有的兄弟节点。

    python selenium代码片段如下(注意这里用的是find_==elements==_by_xpath):

    driver.find_elements_by_xpath(
    u"//div/a[contains(text(), '%s')]/following-sibling::*" % u"新闻")

    下面我们看一个完整的代码示例:

    #_*_ coding:utf-8 _*_
    
    __author__ = '苦叶子'
    
    from selenium import webdriver
    
    import sys
    reload(sys)
    sys.setdefaultencoding("utf-8")
    
    
    if __name__ == '__main__':
    
        driver = webdriver.Ie()
    
        driver.get(u"http://www.baidu.com")
    
        # 定位 通过contains 定位包含“新闻”的元素
        new_node = driver.find_element_by_xpath(
        u"//div/a[contains(text(), '%s')]" % u"新闻")
        print new_node.text
    
        # 定位 “新闻”元素的兄弟节点“hao123”
        hao123_node = driver.find_element_by_xpath(
        u"//div/a[contains(text(), '%s')]/following-sibling::*" % u"新闻")
        print hao123_node.text
    
        # 定位 “新闻”元素的所有兄弟节点
        all_node = driver.find_elements_by_xpath(
        u"//div/a[contains(text(), '%s')]/following-sibling::*" % u"新闻")
        for ee in all_node:
            print ee.text
    
        driver.quit()

    xpath常用函数

    1. child 选取当前节点的所有子节点
    2. parent 选取当前节点的父节点
    3. descendant 选取当前节点的所有后代节点
    4. ancestor 选取当前节点的所有先辈节点
    5. descendant-or-self 选取当前节点的所有后代节点及当前节点本身
    6. ancestor-or-self 选取当前节点所有先辈节点及当前节点本身
    7. preceding-sibling 选取当前节点之前的所有同级节点
    8. following-sibling 选取当前节点之后的所有同级节点
    9. preceding 选取当前节点的开始标签之前的所有节点
    10. following 选去当前节点的开始标签之后的所有节点
    11. self 选取当前节点
    12. attribute 选取当前节点的所有属性
    13. namespace 选取当前节点的所有命名空间节点

    总结

    在本文中对xpath常用的contains、sibling函数进行了说明和代码演示,对于其他的函数建议大家自己写代码去实践,理解其原理,将会更有利于后续的自动化测试实践。

    微信公众号:DeepTest 专注软件测试领域开源技术、资讯、工具、解决方案(涵盖自动化测试、接口测试、性能测试等等[python、selenium/webdriver、robotframework、soapui、jmeter])。 每日更新...
  • 相关阅读:
    单片机课程设计——基于51单片机温湿度检测系统的设计与实现
    CC2530微处理器接口开发技术——信号灯的设计与实现
    ACM菜鸡退役帖——ACM究竟给了我什么?
    JAVA课程设计——一个简单的教务人事管理系统
    嵌入式系统及应用课程设计——基于STM32的温湿度监测系统
    Web前端课程设计——个人主页
    如何快速使用Access实现一个登录验证界面?
    2018亚洲区域赛青岛站参赛总结
    2018亚洲区域赛焦作站参赛总结
    2018 ACM-ICPC Asia Beijing Regional Contest (部分题解)
  • 原文地址:https://www.cnblogs.com/lym51/p/6673533.html
Copyright © 2011-2022 走看看