selenium自动化之xpath定位*必会技能*

相信写过ui自动化,对xpath定位感觉会特别亲戚,那么下面给大家分享些我们常常在写脚本时易忽略的一些小细节和技巧。
首先使用xpath定位时切忌

  • 不要使用带有空格的属性
  • 不要使用自动生成的id、class 等
  • 使用firebug会事半功倍
  • 定位时一定要找到唯一的属性要确保定位的唯一性,根据唯一的属性进行各种定位
  • 查看是否存在frame

Xptah定位

1、按F12打开firepath点击1处的箭头,指定到要定位的元素,此时查看5出匹配的个数,若只有一个匹配则直接复制3初的路径即可使用(需要关注2处的位置,是否在Top window中,若在frame中则需要先切换frame,调用切换frame的action即可)。

2、用contains关键字,定位代码如下:
//a[contains(text(),‘忘记密码‘)],contains中的text()表示标签中的文本信息同时contains也支持@属性名称等如://a[contains(@id,’*****’)]等。

3、使用元素属性定位,定位代码如下:
//input[@id = ‘pass‘],只要是该标签中存在的属性,理论上都可以使用(有些动态生成的属性无法使用,过长的属性也不推荐使用)例://input[@placeholder= ‘密码‘]等。

4、使用层级定位,定位代码如下:
//form[@id = ‘login-form‘]//input[@placeholder= ‘密码‘],先定位该元素的父节点或祖先节点,再定位当前节点,中间以“//”连接。层级定位可以结合parent::、ancestor::灵活使用。

5、使用兄弟节点定位,定位代码如下:
//p[contains(text(),‘Dior会员登录‘)]//following-sibling::ul[contains(@class,‘form-list‘)],following-sibling::表示往下查找该元素的兄弟节点,preceding-sibling::表示往上查找该元素的兄弟节点。

6、最不推荐的定位方式,定位代码如下:
//*[@id="login-form"]/div/div[2]/div[1]/ul,F12打开chrome浏览器的开发者工具,点击左上角的箭头并移到需要定位的元素,在html中右击>Copy>Copy XPath。
最后

1、firebug一定要看,上面表示当前元素在哪,是在主页还是在frame里面,要看好做对应的切换
2、下面表示你所写的xpath对应的或者到的元素个数一定要唯一!一定要唯一!一定要唯一!!!
XPATH的几个常用函数
1、contains ():
//div[contains(@id,‘in‘)] ,表示选择id中包含有’in’的div节点
2、text():
由于一个节点的文本值不属于属性,比如“<a class=”baidu“ href=”http://www.baidu.com“>baidu</a>”,所以,用text():函数来匹配节点://a[text()=‘baidu‘]
3、last():
函数位置定位
4、starts-with():
//div[starts-with(@id,‘in‘)] ,表示选择以’in’开头的id属性的div节点
5、not()函数,表示否定
//input[@name=‘identity’ and not(contains(@class,‘a’))] ,表示匹配出name为identity并且class的值中不包含a的input节点。

原文地址:https://www.cnblogs.com/jiachangwei/p/12153128.html

时间: 2024-08-11 23:36:14

selenium自动化之xpath定位*必会技能*的相关文章

Python selenium PO By.XPATH定位元素报错

Python selenium PO  By.XPATH定位元素报错 如下代码经常报错: # 首页的“新建投放计划”按钮 new_ads_plan = (By.XPATH, "//*[text()='百度新闻']/..") print(type(self.new_ads_plan)) self.driver.find_element(self.new_ads_plan).click() 运行经常报错:selenium.common.exceptions.WebDriverExcepti

selenium+python自动化之xpath定位

在上一篇简单的介绍了用工具查看目标元素的xpath地址,工具查看比较死板,不够灵活,有时候直接复制粘贴会定位不到.这个时候就需要自己手动的去写xpath了,这一篇详细讲解xpath的一些语法. 什么是xpath呢?官方介绍:XPath即为XML路径语言,它是一种用来确定XML(标准通用标记语言的子集)文档中某部分位置的语言.反正小编看这个介绍是云里雾里的,通俗一点讲就是通过元素的路径来查找到这个元素的,相当于通过定位一个对象的坐标,来找到这个对象. 一. xpath:属性定位 xptah也可以通

selenium自动化测试之元素定位二(xpath定位)

1.1 Xpath定位 1.1.1 选取节点 1.1.1.1 精确选择节点 XPath 使用路径表达式在 XML 文档中选取节点.节点是通过沿着路径或者 step 来选取的 路径表达式 表达式 描述 nodename 选取此节点的所有子节点. / 从根节点选取. // 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置. . 选取当前节点. .. 选取当前节点的父节点. @ 选取属性. 1.1.1.2 选取未知节点 XPath 通配符可用来选取未知的 XML 元素. 通配符 描述 * 匹配

Selenium自动化测试之元素定位

一.Selenium定位方法 自动化测试的关键是要准确的操作测试对象,所以就需要对被测系统的页面元素做精确的定位:有以下几种定位方法: By.classNme(String className) By.cssSelector(String selector) By.id(String id) By.linkText(String linkText) By.name(String name) By.partialLinkText(String linkText) By.tagName(String

python+selenium基础之XPATH定位

世界上最远的距离大概就是明明看到一个页面元素矗在那里,但是我却定位不到!! selenium定位元素的方法有很多种,像是通过id.name.class_name.tag_name.link_text等等,但是这些方法局限性太大,拿id属性来说,首先一定不会每个元素都有id属性,其次元素的id属性也不一定是固定不变的.所以这些方法了解一下即可,我们真正需要熟练掌握的是通过xpath和css定位,一般只要掌握一种就可以应对大部分定位工作了. 下面总结一下xpath的定位方法,结合自己练习的实例加深一

selenium入门:Xpath定位-绝对定位

Xpath定位 Xpath即为XML路径语言,它是一种用来确定XML文档中某部分位置的语言.XPath基于XML的树状结构,提供在数据结构树中找寻节点的能力. from selenium import webdriver from time import sleep driver=webdriver.Firefox() driver.find_element_by_xpath("/html/body/div[2]/div[1]/div/div[1]/div/form/span[1]/input&

selenium自动化测试之元素定位一

Selenium元素定位方法总共有八大类,分别是:id,name,class name,tag name,link text,partial link text,xpath,css.八种定位方法没有哪个是最好的,在不同的场景下需要使用不用的定位方法. 示例html文件如下: <!DOCTYPE html> <html lang="zh-cn"> <head> <meta charset="utf-8"/> <me

selenium自动化测试之元素定位三(css定位)

1.1 CSS定位 1.1.1 绝对路径定位 目标 查找第一个文本为“猜猜看”的a标签 实现 CSS表达式 html>body>div>a[.=”猜猜看”] python表达式 driver.find_element_by_css_selector(‘html>body>div>a[.=”猜猜看”]’) 1.1.2 相对路径定位 目标 查找第一个文本为“猜猜看”的a标签 实现 CSS表达式 a[.=”猜猜看”] Python表达式 driver.find_element

使用python处理selenium中的xpath定位元素的模糊匹配问题

# 用contains,寻找页面中style属性值包含有sp.gif这个关键字的所有div元素,其中@后面可以跟该元素任意的属性名. self.driver.find_element_by_xpath('//div[contains(@style,"sp.gif")]').click() # 用start-with,寻找style属性以position开头的div元素,其中@后面可以跟该元素任意的属性名. self.driver.find_element_by_xpath('//div