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

1.1 Xpath定位

1.1.1 选取节点

1.1.1.1 精确选择节点

XPath 使用路径表达式在 XML 文档中选取节点。节点是通过沿着路径或者 step 来选取的

路径表达式


表达式


描述


nodename


选取此节点的所有子节点。


/


从根节点选取。


//


从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。


.


选取当前节点。


..


选取当前节点的父节点。


@


选取属性。

1.1.1.2 选取未知节点

XPath 通配符可用来选取未知的 XML 元素。


通配符


描述


*


匹配任何元素节点。


@*


匹配任何属性节点。


node()


匹配任何类型的节点。

1.1.1.3 选取若干路径

通过在路径表达式中使用“|”运算符,您可以选取若干个路径。

1.1.2 绝对路径定位

绝对路径表示从html的根节点开始一层一层的往下查找元素,始于正斜杠(/)并且每层元素之间使用正斜杠(/)

  • 目标

查找第一个a标签下的“猜猜看”

  • 实现

Xpath定位表达式

/html/body/a[.=”猜猜看”]

/html/body/a[text()=”猜猜看”]

Python定位语句

element1 = driver.find_element_by_xpath(‘/html/body/a[.=”猜猜看”]’)

element2 = driver.find_element_by_xpath(‘/html/body/a[text()=”猜猜看”]’)

  • 说明

使用绝对定位是十分不灵活的,一旦页面结构发生变化,原来的表达式就可能失效,需要重新维护,成本会增加。而且在实际项目中页面结构可能非常复杂,会造成xpath表达式非常长,不容易理解。所以不建议使用绝对定位。

1.1.3 相对路径定位

相对路径的每一步都根据当前节点集中的节点来进行计算,起始于双正斜杠(//)

  • 目标

查找第一个a标签下的“猜猜看”

  • 实现

Xpath表达式

//a[.=”猜猜看”]

//a[text()=”猜猜看”]

  • Python表达式

element1 = driver.find_element_by_xpath(‘//a[.=”猜猜看”]’)

element2 = driver.find_element_by_xpath(‘//a[text()=”猜猜看”]’)

  • 说明

相对路径xpath定位表达式简洁易读,而且不容易受页面结构变化的影响。使用时应尽量保证表达的简洁性。

1.1.4 索引定位

索引定位表示摸个被定位的页面元素在其父元素节点下的同名元素中的位置序号,起始序号为1

  • 目标

查询页面中的第二个div

  • 实现

Xpath表达式

//div[2]

  • Python表达式

element = driver.find_element_by_xpath(“//div[2]”)

1.1.5 属性定位

1.1.5.1 精确属性定位

  • 目标

选择alt值等于“点我试试呀”的img元素

实现

  • Xpath表达式

//img[@alt=”点我试试呀”]

  • Python表达式

element = driver.find_element_by_xpath(‘//img[@alt=”点我试试呀”]’)

1.1.5.2 模糊属性定位

模糊定位的函数有如下三个:starts-with (str1,st2), contains (str1,str2),text()

  • 目标

查找alt属性值包含“点我”的元素

  • 实现
  • Xpath表达式

//img[starts-with(@alt,”点我”)

//img[contains(@alt,”点我”)

  • Python表达式

element1 = driver.find_element_by_xpath(‘//img[starts-with(@alt,”点我”)’)

element2 = driver.find_element_by_xpath(‘//img[contains(@alt,”点我”)’)

1.1.6 轴定位


Xpath轴关键字


轴的定义说明


定位表达式实例


表达式解释


parent


选取当前节点的父节点


//img[@alt=‘div2-img2‘]/parent::div


查找到alt属性为div2-img2的img元素,并基于图片找到其上一级的div元素


child


选取当前节点的子节点


//div[@id=‘div1‘]/child::img


查找id为div1的div标签,基于当前div查找标签为img的子节点


ancestor


选取当前节点的所有上层节点


//img[@alt=‘div2-img2‘]/ancestor::div


查找alt属性为div2-img2的图片,基于当前图片找到其上级的div页面元素


descendant


选取当前节点所有下层节点


//div[@id=‘div2‘]/descendant::img


查找id属性为div2的div元素,在查找其下级所有节点中的img元素


following


选取当前节点之后显示的所有节点


//div[@id=‘div1‘]/following::img


查找到ID属性为div1的div元素,并基于div的位置找到它后面节点中的img元素


following-sibling


选取当前节点所有的平级节点


//img[@alt=‘div1-img1‘]/following-sibling::input


查找到alt属性为div1-img1的img页面元素,并基于img的位置找到后续节点中的input元素


preceding


选取当前节点前面所有的节点


//img[@alt=‘div2-img2‘]/preceding::div


查找到alt属性为div2-img2的图片页面元素,并基于图片的位置找到它前面节点中的div元素


preceding-sibling


选取当前节点前面所有平级的节点


//img[@alt=‘div2-img2‘]/preceding-sibling::a[1]


查找到alt属性值为div2-img2的图片元素,基于图片位置找到它前面同级节点的第二个链接页面元素


ancestor-or-self


选取当前节点的所有先辈(父、祖父等)以及当前节点本身。


 


 


attribute


选取当前节点的所有属性


 


 


namespace


选取当前节点的所有命名空间节点。


 


 


self


选取当前节点。


 


 

附录:

xpath运算符


运算符


描述


实例


返回值


|


计算两个节点集


//book | //cd


返回所有拥有 book 和 cd 元素的节点集


+


加法


6 + 4


10


-


减法


6 - 4


2


*


乘法


6 * 4


24


div


除法


8 div 4


2


=


等于


price=9.80


如果 price 是 9.80,则返回 true。
如果 price 是 9.90,则返回 false。


!=


不等于


price!=9.80


如果 price 是 9.90,则返回 true。
如果 price 是 9.80,则返回 false。


<


小于


price<9.80


如果 price 是 9.00,则返回 true。
如果 price 是 9.90,则返回 false。


<=


小于或等于


price<=9.80


如果 price 是 9.00,则返回 true。
如果 price 是 9.90,则返回 false。


>


大于


price>9.80


如果 price 是 9.90,则返回 true。
如果 price 是 9.80,则返回 false。


>=


大于或等于


price>=9.80


如果 price 是 9.90,则返回 true。
如果 price 是 9.70,则返回 false。


or



price=9.80 or price=9.70


如果 price 是 9.80,则返回 true。
如果 price 是 9.50,则返回 false。


and



price>9.00 and price<9.90


如果 price 是 9.80,则返回 true。
如果 price 是 8.50,则返回 false。


mod


计算除法的余数


5 mod 2


1

原文地址:https://www.cnblogs.com/ianduin/p/12684439.html

时间: 2024-10-30 16:56:25

selenium自动化测试之元素定位二(xpath定位)的相关文章

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

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

selenium自学笔记---ecshop购买脚本 xpath定位元素(下拉框,单选框)

本机环境:xamppv3.2.1+ecshop3.0  1.元素定位写对,却一直报错,发现是页面元素加载的太慢,所以加上延时 from selenium import webdriverimport timedriver=webdriver.Chrome()driver.implicitly_wait(10) #自动延时10sdriver.get("http://localhost/ecshop")# driver.find_element_by_xpath('//div[@class

Selenium 自动化测试之道--学习总结-WebDriver

最近正在看Ping++测试团队编著的<Selenium 自动化测试之道>,非常非常好的一本书,不仅仅是工具的介绍使用,还有非常珍贵的实践总结,自己的公司也在做自动化,由于是基于B/S,要考虑到硬件环境,而且主要使用的是RobotFramework去构建自动化脚本验证系统的可靠性. 之前自己也学习过关于Selenium的知识,但是总感觉知识很零散,自己在网上搜了很长时间,买了这本书,发现自己还欠缺很多,很庆幸能读到这本书,下面开始一点点的搭建自己的知识框架. 一.工作原理 Selenium We

【Selenium 3+Java自动化(5)】-xpath定位

package com.mypro.jase; import java.net.URL; import java.security.cert.PKIXRevocationChecker.Option; import java.util.concurrent.TimeUnit; import javax.xml.bind.annotation.XmlID; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; im

使用Selenium必会之技能,xpath 定位元素

<跟着日邢一珊,学习自动化测试>-----第四讲20170824 WEB自动化测试Selenium 的使用 (四)  XPATH元素定位. 作者:日邢一珊 自动化测试脚本分享群:654395302  . 567415093 打赏,就是鼓励我写作的动力. 2.88 3.88 6.88 12.88 都是不错的数字呢~ 第一种方法:通过绝对路径做定位(相信大家不会使用这种方式) By.xpath("html/body/div/form/input") 第二种方法:通过相对路径做定

Selenium自动化测试之学会元素定位

这是我经常被问到的一个问题,也是我很讨厌回答的问题,因为要想回答这个问题需要知道上下文.什么样式的元素,有哪些属性,是否有表单嵌套,都尝试了哪些定位方法...而且没几个提问者能事先详细的说明这些.哪儿像提bug一样描述重现步骤,而且每一步都截图,生怕开发重现不了.反正,向我提问者没见过这样的,大多就报着试试态度,你爱回不回,碰碰运气说不定就回我了. 当然,我写这一篇文章的目的肯定不是为了吐槽,我是打算拿这个链接丢给他看,所以,这里会总结常见几种情况,以及解决办法.如果本文能不解决你的问题,你问我

自动化定位——通过XPath定位元素

XPath是一种XML文档中定位元素的语言.该定位方式也是比较常用的定位方式 1通过属性定位元素 find_element_by_xpath("//标签名[@属性='属性值']") id属性: find_element_by_xpath("//input[@id='kw']") class属性: find_element_by_xpath("//input[@class='s_ipt']") name属性: find_element_by_xpa