在Selenium Webdriver中使用XPath Contains、Sibling函数定位
2017-04-06 15:04
393 查看
前言
在一般情况下,我们通过简单的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常用函数
child 选取当前节点的所有子节点parent 选取当前节点的父节点
descendant 选取当前节点的所有后代节点
ancestor 选取当前节点的所有先辈节点
descendant-or-self 选取当前节点的所有后代节点及当前节点本身
ancestor-or-self 选取当前节点所有先辈节点及当前节点本身
preceding-sibling 选取当前节点之前的所有同级节点
following-sibling 选取当前节点之后的所有同级节点
preceding 选取当前节点的开始标签之前的所有节点
following 选去当前节点的开始标签之后的所有节点
self 选取当前节点
attribute 选取当前节点的所有属性
namespace 选取当前节点的所有命名空间节点
总结
在本文中对xpath常用的contains、sibling函数进行了说明和代码演示,对于其他的函数建议大家自己写代码去实践,理解其原理,将会更有利于后续的自动化测试实践。相关文章推荐
- 在Selenium WebDriver中使用By.Xpath快速定位页面元素
- 使用selenium webdriver进行元素定位
- 在Selenium WebDriver中使用By.Xpath快速定位页面元素
- 在使用selenium webdriver进行元素定位时,通常使用findElement或findElements方法结合By类返回的元素句柄来定位元素。其中By类的常用定位方式共八种,现分别介绍如下
- Selenium2 webdriver的简单使用(基于163邮箱的写信功能)
- Selenium WebDriver使用经验杂记
- selenium webdriver 学习总结-元素定位
- Selenium 2.0 WebDriver 使用指南
- WebDriver拾级而上·之十一 在selenium2.0中使用selenium1.0的API
- selenium webdriver 学习总结-元素定位(一)
- Selenium 2.0 WebDriver 使用指南
- Selenium(四)――webdriver 之定位页面元素
- selenium webdriver 学习总结-元素定位
- Selenium-webdriver—如何定位测试元素
- selenium webdriver定位不到元素的五种原因及解决办法
- selenium webdriver学习(四)------------定位页面元素
- selenium webdriver定位不到元素的五种原因及解决办法
- Selenium2(webdriver)_定位不到元素常见原因及解决办法
- 7.在用selenium2(WebDriver)做自动化时候,如果有的元素通过ID,Xpath,CSS selector不能定位的解决方案。
- Selenium WebDriver使用IE浏览器 属性设置