使用selenium进行自动化测试,其实很多时候就是模拟用户的操作,在前端页面对元素进行操作,因此元素的定位在自动化测试中是至关重要的。关于如何

使用id,className,name,linkText这些简单的定位方式查找元素,本文将不多做介绍。

  本文中主要介绍selenium webdriver中的核心定位方式——xpath定位。

  

 1. xpath语法

  //tagname[@attribute=‘value’]

  其中,tagname表示标签名称,@后面跟随属性名称,等号后面是属性值。如果需要查找多重下级,则在父级的xpath路径后继续追加定位,例如://div[@id='car_genre_id']/div/div,表示 id是car_genre_id的div元素的子节点div的子节点div。

2. xpath的绝对路径和相对路径

  1)单斜线‘/’代表绝对路径,表示该富豪后面的元素是上一级节点的子节点的一个,只能一级级按序向下查询,不能跳级;

  2)双斜线'//'代表相对路径,表示下级任何子节点或者任何嵌套子节点中的一个,可以跳级;

 

  举个栗子,在路径//div[@id='root']/input中,表示越过所有父节点,直接在整个html页面中查找id是'root'的div元素,因为div标签前是代表相对定位的双斜线'//';而对于input标签来说,它必须是id是'root'的div的一级子节点,它和div中间不能越过其他的层级,因为input标签前是代表绝对路径的单斜线'/' 。

3. 如何获取元素的xpath路径

  大多浏览器的开发者模式中都具备了输出元素xpath路径的功能。以chrome为例,点击F12后,在DOM树中选中元素,右键> Copy > CopyXpath后,在记事本上黏贴,即可得到该元素的xpath路径。

  

  4. 使用contains属性查找元素

    contains表示查找属性包含该属性值value的页面标签元素,注意是包含,并不是完全等于,类似于sql查找语句中like的用法。

    语法为:  //tagname[contains(attribute1,'value1') and contains(attribute2,'value2') and ... ]

    举个栗子,路径 //div[@id="root"]//div[contains(text(),'共'] ,表示在id是'root'的div中,越过层级关系,查找文本信息包含"共"的div元素;

    路径//div[@id='root']//div[contains(className,'ant-Btn')], 表示在id是'root'的div中,越过层级关系,查找className属性中包含'ant-Btn'属性的元素;

 5. 查找父级节点和平级节点

  

  查找父级节点: xpath-to-some-element//parent::tagname

  向前查找平级节点:xpath-to-some-element//preceding-sibling::tagname

  向后查找平级节点:xpath-to-some-element//following-sibling::tagname

 

6. 使用xpath定位元素时需要注意的地方

  

  1)保证xpath路径的唯一性。

    一定要保证xpath路径在页面中是唯一的。如果不太确定,可以在chrome的开发者工具打开的情况下,点击ctrol+F,在弹出的输入框中输入xpath

的路径,观察当前页面下,以该路径查找到的元素是不是只有一个;

  2)尽量不要使用通配符*

    *表示可以是当前页面中的任意标签,这样在查找时会增大负载,尽量准确地写出标签名称。

  3)建议使用相对路径定位

    如果前面页面的元素结构发生调整,那么之前的绝对定位就会作废。而使用相对路径,可以减少定位对页面HTML元素结构的依赖性,且相对路径

往往长度较短,更加准确美观。在优化定位方式时,可以将此原则作为参考。 

转载于:https://www.cnblogs.com/May-study/p/9851992.html

Selenium webdriver中的xpath定位相关推荐

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

    前言 在一般情况下,我们通过简单的xpath即可定位到目标元素,但对于一些既没id又没name,而且其他属性都是动态的情况就很难通过简单的方式进行定位了. 在这种情况下,我们需要使用xpath1.0内 ...

  2. Selenium WebDriver中的TestNG侦听器及示例

    Java提供了不同的接口,使您可以修改TestNG行为. 这些接口在Selenium WebDriver中进一步称为TestNG侦听器. TestNG Listeners还允许您根据项目要求自定义测试 ...

  3. 总结Selenium WebDriver中一些鼠标和键盘事件的使用

    在使用 Selenium WebDriver 做自动化测试的时候,会经常模拟鼠标和键盘的一些行为.比如使用鼠标单击.双击.右击.拖拽等动作:或者键盘输入.快捷键使用.组合键使用等模拟键盘的操作.在 W ...

  4. selenium webdriver 学习总结-元素定位

    webdriver提供了丰富的API,有多种定位策略:id,name,css选择器,xpath等,其中css选择器定位元素效率相比xpath要高些,使用id,name属性定位元素是最可靠,效率最高的一 ...

  5. webdriver中常用的定位方法

    目录 一.单数定位 二.复数定位 三.细讲xpath定位 3.1.xpath属性定位 3.2.xpath其他属性 3.3.文本属性 3.4.xpath标签 3.5.xpath层级 3.6.xpath索 ...

  6. 使用Python在Selenium WebDriver中获取WebElement的HTML源代码

    我正在使用Python绑定来运行Selenium WebDriver. from selenium import webdriver wd = webdriver.Firefox() 我知道我可以抓住 ...

  7. selenium webdriver中执行js(java)

    在代码中import org.openqa.selenium.JavascriptExecutor;就可以使用executeScript.executeAsyncScript这两个方法了 execut ...

  8. python 地址模糊匹配_使用python处理selenium中的xpath定位元素的模糊匹配问题

    # 用contains,寻找页面中style属性值包含有sp.gif这个关键字的所有div元素,其中@后面可以跟该元素任意的属性名. self.driver.find_element_by_xpath ...

  9. java selenium iframe_如何使用java在Selenium WebDriver中处理iframe

    4t43t4 在这种情况下,iframe下有一个iframe.我必须选择外部iframe去内部iframe并写入内部iframe中的主体. 接下来,我必须从内部iframe到外部iframe,然后单击 ...

最新文章

  1. ecshop /api/client/api.php、/api/client/includes/lib_api.php SQL Injection Vul
  2. 浏览器窗口控制---使用localStorage
  3. 关于Zend framework 里一段代码的疑问
  4. 多线程讲座【by lilei005】
  5. BZOJ2693:JZPTAP——题解
  6. hibernate使用sql语句查询实体时,要写上addEntity
  7. 网卡驱动修改服务器,改造INTEL网卡驱动使桌面型网卡支持Windows Server 2012、2016、2019系统...
  8. python汉化补丁包怎么安装_如何安装python包
  9. 苹果怎么应用分身_苹果ios/安卓微信双开技巧
  10. SAP B1 VS女士的Navision ERP的比较 - 知道如何选择软件
  11. OA办公系统能帮助企业做些什么?
  12. 2022谷粒商城学习笔记(二十五)支付宝沙箱模拟支付
  13. elasticsearch 支持中英文搜索和混合搜索
  14. TV新媒体电商发展遇瓶颈
  15. 3万字报告拆解:硅谷寒冬,投资人还在哪些赛道烧钱?|我在硅谷看未来
  16. 远程桌面连接服务器时,键盘不能正常打字
  17. Power BI——地图可视化(气泡地图Bubble Map)
  18. 隐形矫正计算机软件,数字化隐形正畸技术及口腔病例展示
  19. 电容笔和Apple Pencil的区别有哪些?双十二好用电容笔推荐
  20. 【攻略·转载·收藏】手把手教程 | 申请签证很难吗?靠你自己就能搞定!(以英国签证为例)

热门文章

  1. Python中的property类和@property装饰器
  2. ASP.NET2.0 菜单控件menu的动态静态用法
  3. ASP.Net导出EXCEL表(小结)
  4. python下雨动画特效_pygame用blit()实现动画效果
  5. leetcode - 5. 最长回文子串
  6. Multi_thread--Linux进程编程基础介绍
  7. Ubuntu在启动器中添加自定义程序快捷方式
  8. Spring Boot的启动器Starter详解
  9. 基于模型协同过滤推荐离线召回:ALS
  10. NLP(新闻文本分类)——基于机器学习的文本分类