selenium通过xpath定位元素报错?

这篇具有很好参考价值的文章主要介绍了selenium通过xpath定位元素报错?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

selenium通过xpath定位元素报错?,技术分享,测试工程师,自动化测试,selenium,html,测试工具,自动化测试,软件测试,测试工程师

1.xpath介绍

XPath 是一门在 XML 文档中查找信息的语言。XPath 用于在 XML 文档中通过元素和属性进行导航。而html中也应用了这种语言 ,所以 ,我们定位html页面元素时也会用到xpath这种方法 。

2.xpath定位方式

xpath主要通过以下四种方法定位 :

  • 路径定位
  • 属性定位
  • 多属性定位
  • 路径与属性结合定位

以上的方法都是xpath本身具有的特性 ,它跟selenium现在还没有关系 。而selenium为了支持xpath这种定位方式 。故实现了一个方法,即 :

find_element_by_xpath(定位方法) .

而括号内的定位方法正是以上四种定位方式 ,所以 ,重点还是要理解如何使用以上的四种定位方式 。

3.路径定位

路径可以分为相对路径和绝对路径

  • 绝对路径 : 是从根节点/html开始定位 ,使用/代表元素的层级,直到定位到想要的元素层级 。比如 :/html/body/div/fieled[2]/input 。但是这种定位只能定位到该层级的标签 ,而这样的标签在html会有很多 ,故它定位不了元素的唯一性 ,只能和其他方法结合使用 。
  • 相当路径 :查找元素时不限制元素的位置 ,在定位元素时前面需要加两个斜杠(//) . 如定位input标签 ,编写格式为: //input , 定位的就是html页面的所有Input标签 . 也可以使用//*代替 ,这样查找的就是所有的标签 。

无论使用相当路径还是绝对路径 ,需结合者属性一起使用 ,这样才能完成元素定位的唯一性 。还需要一点需要说明,就是在定位元素时一般不使用绝对路径 ,绝对路径写的比较死 ,不灵活 ,影响后期维护 。

现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:691998057【暗号:csdn999】

selenium通过xpath定位元素报错?,技术分享,测试工程师,自动化测试,selenium,html,测试工具,自动化测试,软件测试,测试工程师

4.属性定位

这应该是xpath定位的核心 ,多数xpath定位 ,都是选取的这种定位方式 。

所谓的属性定位 ,就是从html页面的节点中找到其中一个属性来完成定位,如果这个属性唯一 ,它就能代表页面的对象 。

它的编写格式为 ://标签[@属性名='属性值'] ,对这句代码的解释是 :

包含格式 说明
//标签 这是相对路径,标明要查找节点的标签,加上标签,能起到缩小定位范围的作用,比如//input,就只查找input标签。
[] 查找某个特定节点或某个指定的值的节点 ,这是固定格式 。
@ 查找的属性

举例 :

  • xpath属性编写格式: //input[@name='username'] ,意思是定位input标签下属性名为name, 属性值为username的元素 。
  • selenium的xpath编写方法 :find_element_by_xpath("//input[@name='username']")
  • 代码编写为 :
driver.find_element_by_xpath("//input[@name='username']").send_keys("13988888888")

xpath的这种方法能定位大多数元素 ,所以很多人都喜欢使用这种方式定位 。

总结如下 ,若使用xpath定位 ,具体步骤 :

  1. 通过浏览器找到要定位对象的属性 ,确定它就是唯一值 。
  2. 使用find_element_by_xpath() 方法 ,括号内编写xpath对应属性的格式 。
  3. 进行调试 ,若能定位到,说明你的方法没有问题 。

5.属性与逻辑定位

在前面我们介绍到使用属性定位 ,但是如若使用一个属性定位不到怎么办 ? 你就可以是用两个属性或者多个属性同时定位 。

这里就不得不说的一个逻辑运算符 ,and(逻辑与) . 它的意思是并且,大白话就是两者都要求满足 。比如 属性1 and 属性2 ,代表这两个属性都要同时都满足 。

所以 ,如果你一个属性定位不到的话 ,再加一个属性就可以进一步缩小范围,从而提高定位准确率 。

而这种写法也正好是xpath语言中所支持的,它的编写格式为 ://标签[@属性1='值1' and @属性2='值2'] 。

举例 :

  • xpath两个属性的编写格式 ://input[@class='text_cmu' and @name='username']
  • selenium xpath方法编写格式 :find_element_by_xpath("//input[@class='text_cmu' and @name='username']")

以上的定位虽然使用到了and逻辑运算符 ,但是xpath中,其实并不仅仅支持这一个逻辑运算符 。以下的都可以使用 :

  • 算术运算符 : = ,!= , < , <= , >, >=
  • 逻辑运算符 : or , and

只是以上运算符中,用在定位上的可能只有and比较有用 。

6.路径与属性结合定位

如果你使用了上面的各种方法 ,依然定位不到元素 ,那这个时候 ,你就可以考虑把路径加进来 。

一般原则是先加它的父路径 ,然后再加上当前路径 ,结合使用 。

具体格式为 :

  • //*[@id='um']/input : 父路径属性 + 子标签
  • //bookstore/[@price='30'] : 父路径标签 + 子属性
  • //div[@class='login_bnt']/a[@class='J-login-submit' : 父路径属性 + 子属性

不管咋写 ,只要能确定元素的唯一性 ,就都可以 ,不过这种写法很明显是逼不得已 ,因为你可能使用其它方法都无效的情况下 ,才会使用这种方法 。

7.定位总结

我们将以上所有方法总结为,可以使用以下的几种方法进行定位 。

定位方式 xpath
id属性定位 //*[@id='值']
class属性定位 //*[@class='值']
属性定位 //*[@属性名='值']
标签+属性定位 //标签[@属性名='值']
逻辑+属性定位 //标签[@属性名='值' and @属性名1='值1']
路径定位 //标签[@属性名='值']/标签[@属性名='值']

8.项目案例

需求:通过selenium完成对tpshop的登录操作,具体如下 :

  1. 使用xpath属性定位首页登录按钮 ,
  2. 使用逻辑与属性定位用户名输入框,并输入账号,如13988888888
  3. 使用属性定位确认密码输入框,并输入123456 。
  4. 使用属性定位验证码输入框,并输入8888
  5. 使用路径与属性结合定位登录按钮,并点击确定 。

selenium通过xpath定位元素报错?,技术分享,测试工程师,自动化测试,selenium,html,测试工具,自动化测试,软件测试,测试工程师

# 使用xpath属性进行定位 : //标签[@属性名='属性值']

from selenium import webdriver
import time

# 1. 创建浏览器对象
driver = webdriver.Chrome()
driver.maximize_window()

# 2. 输入地址 :http://localhost
driver.get("http://localhost")

# 3. 点击登录 : 使用xpath属性定位
driver.find_element_by_xpath("//a[@href='/Home/user/login.html']").click()
time.sleep(3)

# 输入用户名,密码,验证码 :使用逻辑与属性集合定位
driver.find_element_by_xpath("//input[@class='text_cmu' and @name='username']").send_keys("13988888888")
driver.find_element_by_xpath("//input[@id='password']").send_keys("123456")
driver.find_element_by_xpath("//input[@name='verify_code']").send_keys("8888")

# 使用层级与属性结合定位
driver.find_element_by_xpath("//div[@class='login_bnt']/a[@class='J-login-submit']").click()
time.sleep(5)
driver.quit()

下面是配套资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!

selenium通过xpath定位元素报错?,技术分享,测试工程师,自动化测试,selenium,html,测试工具,自动化测试,软件测试,测试工程师

最后: 可以在公众号:程序员小濠 ! 免费领取一份216页软件测试工程师面试宝典文档资料。以及相对应的视频学习教程免费分享!,其中包括了有基础知识、Linux必备、Shell、互联网程序原理、Mysql数据库、抓包工具专题、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试、安全测试等。

如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一键三连哦!文章来源地址https://www.toymoban.com/news/detail-845095.html

到了这里,关于selenium通过xpath定位元素报错?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • selenium:元素定位之xpath、css

    元素定位是在做UI自动化测试中最重要的一环,要牢牢掌握定位的方法,才能更有效率的进行UI自动化测试。 常见的元素定位方式: id name tag_name class_name link_text partial_link_text xpath css 其中id,name是具有唯一性的,所以定位起来比较简单,直接使用即可 在UI自动化测试中,xpa

    2024年02月09日
    浏览(50)
  • Selenium定位元素的方法css和xpath的区别!

    selenium是一种自动化测试工具,它可以通过不同的定位方式来识别网页上的元素,如id、name、class、tag、link text、partial link text、css和xpath。 css和xpath是两种常用的定位方式,它们都可以通过元素的属性或者层级关系来定位元素,但是它们也有一些区别: css: css是级联样式表,

    2024年02月04日
    浏览(59)
  • 【selenium】八大元素定位方式|xpath css id name...

    目录 一、基础元素定位 二、cssSelector元素定位——通过元素属性定位 三、xpath元素定位——通过路径  1 、xpath绝对定位 (用的不多) 缺点:一旦页面结构发生变化(比如重新设计时,路径少两节),该路径也随之失效,必须重新写 2、 xpath相对定位 2.1  路径解释: 2.2  定

    2024年02月22日
    浏览(55)
  • Python 的 Selenium 库进行元素定位时,XPath的详细用法

    使用 Python 的 Selenium 库进行元素定位时,XPath 是一种常用的定位方式。XPath 是一种在 XML 文档中导航和定位元素的语言,同时也适用于 HTML 文档。下面是 XPath 的详细用法以及一个封装了通过 XPath 定位各种元素的类的示例。 XPath 详细用法: 绝对路径和相对路径 : 绝对路径:

    2024年01月19日
    浏览(56)
  • 解决selenium定位不到xpath元素: “NoSuchElementException: Message: no such element: Unable

    在使用selenium爬取的时候用xpath定位元素,最常见的报错就是这个,通常要么是xpath写错了,要么就是元素还没加载出来。 如果是前者可以用谷歌浏览器的xpath helper插件检查xpath是否正确,后者可以增加等待时间或使用以下语句等到元素可见再执行后续操作: 这次我遇到的问题

    2024年02月16日
    浏览(40)
  • 用selenium和xpath定位元素并获取属性值以及str字符型转json型

    页面html如图所示: 要使用xpath定位这个div元素,并且获取其属性data-config的内容值。  结果如图:  蓝色的为str类型,红色的为json类型。 那么先得到的是str类型,如何转换为json类型呢?使用如下代码即可。 import json json_attr=json.loads(str_attr) 读取json数据用json_attr[\\\'video\\\'][\\\'url\\\'

    2024年02月08日
    浏览(38)
  • 【软件测试】selenium中元素的定位

    不管用那种方式,必须保证页面上该属性的唯一性 CSS(Cascading Style Sheets) 是一种语言,它被用来描述 HTML 和 XML 文档的表现。 CSS 使用选择器来为页面元素绑定属性。这些选择器可以被 selenium 用作另外的定位策略 CSS 的获取可以用 chrome 的 F12 开发者模式中 Element- 右键 -copy-cop

    2024年02月16日
    浏览(43)
  • 软件测试/测试开发丨Selenium的常用元素定位方法

    Selenium是一个流行的开源框架,目前在 Web 自动化方面运用最为广泛的一个开源、无浏览器要求、可支持多语言、设计测试用例非常灵活的自动化测试框架。支持多种编程语言,并且能够模拟用户操作,例如点击、输入、提交等等。 在Selenium中,元素定位是一个非常重要的步骤

    2024年01月16日
    浏览(66)
  • xpath定位元素(F12开发者工具xpath定位、xPath Helper扩展程序xpath定位)

    对于UI自动化初学者来说,可能不知道如何下手,我们安装好了python、selenium等环境,如何去进行元素定位,如何编写自动化测试用例呢?今天就讲一下xpath元素定位。 1.F12开发者工具xpath定位 首先我们使用谷歌进行测试,打开需要测试的页面,点击键盘F12,进入开发者模式,

    2024年02月16日
    浏览(59)
  • 【selenium自动化测试】如何定位页面元素,及对页面元素的操作方法

    selenium元素定位 ​selenium定位元素的方式有8种。 fild_element(by,value):by表示使用的定位方式,定位方式可以参见By类。value表示值,例如:根据id定位 By.ID,value=id属性的值。该方法返回元素对象,返回值如下: 这个返回结果说明:返回值为WebElement类的对象,元素在使用方法时

    2024年02月10日
    浏览(68)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包