在Selenium Webdriver中使用XPath Contains、Sibling函数定位
前言
在一般情况下,我们通过简单的xpath即可定位到目标元素,但对于一些既没id又没name,而且其他属性都是动态的情况就很难通过简单的方式进行定位了。
在这种情况下,我们需要使用xpath1.0内置的函数来进行定位,下面我们重点讨论一下3个函数:
- Contains
- Sibling
Contains函数
通过contains函数,我们可以提取匹配特定文本的所有元素。
例如在百度首页,我们使用contains定位包含“新闻”文本的元素。
"//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常用函数
- child 选取当前节点的所有子节点
- parent 选取当前节点的父节点
- descendant 选取当前节点的所有后代节点
- ancestor 选取当前节点的所有先辈节点
- descendant-or-self 选取当前节点的所有后代节点及当前节点本身
- ancestor-or-self 选取当前节点所有先辈节点及当前节点本身
- preceding-sibling 选取当前节点之前的所有同级节点
- following-sibling 选取当前节点之后的所有同级节点
- preceding 选取当前节点的开始标签之前的所有节点
- following 选去当前节点的开始标签之后的所有节点
- self 选取当前节点
- attribute 选取当前节点的所有属性
- namespace 选取当前节点的所有命名空间节点
总结
在本文中对xpath常用的contains、sibling函数进行了说明和代码演示,对于其他的函数建议大家自己写代码去实践,理解其原理,将会更有利于后续的自动化测试实践。
在Selenium Webdriver中使用XPath Contains、Sibling函数定位的更多相关文章
- Selenium WebDriver中一些鼠标和键盘事件的使用
转自:http://www.ithov.com/linux/133271.shtml 在使用 Selenium WebDriver 做自动化测试的时候,会经常模拟鼠标和键盘的一些行为.比如使用鼠标单击 ...
- 转:总结Selenium WebDriver中一些鼠标和键盘事件的使用
在使用 Selenium WebDriver 做自动化测试的时候,会经常模拟鼠标和键盘的一些行为.比如使用鼠标单击.双击.右击.拖拽等动作:或者键盘输入.快捷键使用.组合键使用等模拟键盘的操作.在 W ...
- Selenium WebDriver 中鼠标和键盘事件分析及扩展[转载]
原文:http://www.ibm.com/developerworks/cn/java/j-lo-keyboard/ 概念 在使用 Selenium WebDriver 做自动化测试的时候,会经常模 ...
- 总结Selenium WebDriver中一些鼠标和键盘事件的使用
在使用 Selenium WebDriver 做自动化测试的时候,会经常模拟鼠标和键盘的一些行为.比如使用鼠标单击.双击.右击.拖拽等动作:或者键盘输入.快捷键使用.组合键使用等模拟键盘的操作.在 W ...
- Selenium WebDriver 中鼠标和键盘事件分析及扩展
[From] http://www.51testing.com/html/18/631118-861557.html 在使用 Selenium WebDriver 做自动化测试的时候,会经常模拟鼠标和 ...
- Selenium WebDriver 中鼠标和键盘事件分析及扩展(转)
本文将总结 Selenium WebDriver 中的一些鼠标和键盘事件的使用,以及组合键的使用,并且将介绍 WebDriver 中没有实现的键盘事件(Keys 枚举中没有列举的按键)的扩展.举例说明 ...
- Selenium WebDriver 中鼠标事件(全)
Selenium WebDriver 中鼠标事件(全) 鼠标点击操作 鼠标点击事件有以下几种类型: 清单 1. 鼠标左键点击 Actions action = new Actions(driv ...
- Selenium Webdriver 中的 executeScript 使用方法
1.使用executeScript 返回一个WebElement . 下例中我们将一个浏览器中的JavaScript 对象返回到客户端(C#,JAVA,Python等). IWebElement el ...
- Selenium WebDriver中鼠标事件
鼠标点击操作 鼠标点击事件有以下几种类型: 清单 1. 鼠标左键点击 Actions action = new Actions(driver);action.click();// 鼠标左键在当 ...
随机推荐
- flask扩展模块flask-sqlachemy 的使用---mysql数据库
该篇博客配置环境为:python版本3.5,flask2.0,python3中已经不再支持MySQLdb模块,所有这里我用了pymysql,所有使用前应该 安装pymysql:pip install ...
- 查看hive中某个表中的数据、表结构及所在路径
查看hive中action_data_myisam表中的数据.表结构及所在路径 1.客户端进入hive环境:hive 2.查看表数据,鉴于数据量大,这里只显示前五条:select * from act ...
- 了解 : angular controller link ng-init 顺序
controller 会先跑,接着是view 里的ng-init,最后是link (指令里的). 所有在指令里如果用link去拿$attr,会有拿不到ng-init想setup的值
- javascipt : filter
过滤 var List = sizes.filter(function (size) { return size.id == 12; }); sizes = [ {id : 10,,stock:130 ...
- R语言入门(二)基础语法
1.help可以提供帮助,如help(nchar), help("[["),或者用?nchar也能获取帮助.example(nchar)可以获取到某个主题的使用方法. 2.ncha ...
- nodejs学习第一天之模块
1.运行js文件 2.node 与 js 的区别 相同:数据类型,语法结构,对象 等基本一致 不同:在js中的顶层对象window 在node中没有在node中 顶层对象为global对象 其不对外 ...
- 3399: [Usaco2009 Mar]Sand Castle城堡
3399: [Usaco2009 Mar]Sand Castle城堡 Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 37 Solved: 32[Sub ...
- 3407: [Usaco2009 Oct]Bessie's Weight Problem 贝茜的体重问题
3407: [Usaco2009 Oct]Bessie's Weight Problem 贝茜的体重问题 Time Limit: 3 Sec Memory Limit: 128 MBSubmit: ...
- webots自学笔记(三)控制器与电机控制
原创文章,来自“博客园,_阿龙clliu” http://www.cnblogs.com/clliu/,装载请注明原文章出处. 上一次建了四足机器人的模型,模型文件在上一篇有下载地址,这一次用控制器让 ...
- 会话控制之session和cookie(20161107)
注:除了登录页面,每个页面,包括处理页面也要加,为了提高安全性 session尽量不用,因为很占内存 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML ...
