前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >在Selenium Webdriver中使用XPath Contains、Sibling函数定位

在Selenium Webdriver中使用XPath Contains、Sibling函数定位

作者头像
苦叶子
发布2018-04-04 16:08:35
2K0
发布2018-04-04 16:08:35
举报
文章被收录于专栏:开源优测
前言

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

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

  • Contains
  • Sibling

Contains函数

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

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

代码语言:javascript
复制
"//div/a[contains(text(), 新闻)]"

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

代码语言:javascript
复制
driver.find_element_by_xpath("//div/a[contains(text(), 新闻)]")

sibling函数

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

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

代码语言:javascript
复制
"//div/following-sibling::a[contains(text(), 新闻)]"

python selenium代码片段为如下

代码语言:javascript
复制
driver.find_element_by_xpath(
u"//div/a[contains(text(), '%s')]/following-sibling::*" % u"新闻")

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

python selenium代码片段如下(注意这里用的是find_elements_by_xpath):

代码语言:javascript
复制
driver.find_elements_by_xpath(
u"//div/a[contains(text(), '%s')]/following-sibling::*" % u"新闻")

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

代码语言:javascript
复制
#_*_ 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函数进行了说明和代码演示,对于其他的函数建议大家自己写代码去实践,理解其原理,将会更有利于后续的自动化测试实践。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-04-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 开源优测 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Contains函数
  • sibling函数
  • xpath常用函数
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档