• 在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])。 每日更新...
  • 相关阅读:
    (Bug修复)C#爬虫,让你不再觉得神秘
    C#高级特性(反射)
    Linux 宝塔部署 ASP.NET Core 应用
    WPF 的内部世界(Binding)
    渗透攻击红队内网靶场
    销量最优解
    遗传算法实现旅行商问题求解
    用java手写了个JSON解析&生成器
    Vue项目里面用a标签下载本地文件
    20192422李俊洁 实验六 Metasploit攻击渗透实践
  • 原文地址:https://www.cnblogs.com/lym51/p/6673533.html
Copyright © 2020-2023  润新知