• 10
  • 10
分享
  • 常用的8种元素定位方法——软件测试圈
  • TIMI 2022-03-24 16:24:33 字数 4861 阅读 2938 收藏 10

一、web页面元素定位工具介绍

1、打开google浏览器,按F12进入开发者模式,如下图:

1.png

2、用鼠标点击下图红色框中的箭头——然后鼠标移动到web页面的元素上(此处为百度框),会自动定位到对应的html代码,如下图:

2.png

二、web页面元素的8种定位方法:

1、通过元素的id属性来定位元素——id是唯一标识(每个id都是不一样的)

driver.find_element_by_id("kw")

3.png

1 from selenium import webdriver
2 driver=webdriver.Chrome()
3 driver.get("https://www.baidu.com/")
4 
5 # 通过元素的id属性来定位——id是唯一的
6 search=driver.find_element_by_id("kw")
7 
8 search.send_keys("selenium")

id.py

2、通过元素的name属性来定位元素,name属性不是绝对唯一的(一个页面内可能存在多个元素的name属性是相同的)

如果name属性的值wd是唯一的,用find_element_by_name定位元素,返回值是一个值

driver.find_element_by_name("wd")

如果name属性的值wd不是唯一的,用find_elements_by_name定位元素,返回符合条件的多个值,保存在列表中,即返回的是列表

driver.find_elements_by_name("wd")
1 from selenium import webdriver
 2 driver=webdriver.Chrome()
 3 driver.get("https://www.baidu.com/")
 4 
 5 #通过元素的name属性来定位元素,name属性不是绝对唯一的(一个页面内可能存在多个元素的name属性是相同的)
 6 
 7 # 如果name属性的值kw是唯一的,用find_element_by_name定位元素,返回值是一个值
 8 search=driver.find_element_by_name("wd")
 9 
10 # 如果name属性的值kw不是唯一的,用find_elements_by_name定位元素,返回符合条件的多个值,保存在列表中,即返回的是列表
11 search=driver.find_elements_by_name("wd")
12 
13 
14 search.send_keys("python")

name.py

3、通过元素的class属性来定位元素,class属性不是绝对唯一的(一个页面内可能存在多个元素的class属性是相同的)

如果class属性的值s_ipt是唯一的,用find_element_by_class_name定位元素,返回值是一个值

driver.find_element_by_class_name("s_ipt")

如果class属性的值s_ipt不是唯一的,用find_elements_by_class_name定位元素,返回符合条件的多个值,保存在列表中,即返回的是列表

driver.find_elements_by_class_name("s_ipt")
1 from selenium import webdriver
 2 driver=webdriver.Chrome()
 3 driver.get("https://www.baidu.com/")
 4 
 5 #通过元素的class属性来定位元素,class属性不是绝对唯一的(一个页面内可能存在多个元素的class属性是相同的)
 6 
 7 # 如果class属性的值s_ipt是唯一的,用find_element_by_class定位元素,返回值是一个值
 8 search=driver.find_element_by_class_name("s_ipt")
 9 
10 # 如果class属性的值s_ipt不是唯一的,用find_elements_by_class定位元素,返回符合条件的多个值,保存在列表中,即返回的是列表
11 search=driver.find_elements_by_class_name("s_ipt")
12 
13 
14 search.send_keys("java")

class.py

4、通过元素的标签名tag来定位元素,标签名不是绝对唯一的(一个页面内可能存在多个相同的标签名)

如果标签名是唯一的,用find_element_by_tag_name定位元素,返回值是一个值

driver.find_element_by_tag_name("input")

如果标签名不是唯一的,用find_elements_by_tag_name定位元素,返回符合条件的多个值,保存在列表中,即返回的是列表

driver.find_elements_by_tag_name("input")

要找的元素是第8个input标签,所以通过列表查找时下标是7

search2[7].send_keys("java")

4.png

备注:上图找到的是15个标签,不是13个

1 from selenium import webdriver
 2 driver=webdriver.Chrome()
 3 driver.get("https://www.baidu.com/")
 4 
 5 #通过元素的标签名来定位元素,标签名不是绝对唯一的(一个页面内可能存在多个相同的标签名)
 6 
 7 # 如果标签名是唯一的,用find_element_by_tag_name定位元素,返回值是一个值
 8 #search=driver.find_element_by_tag_name("input")
 9 
10 # 如果标签名不是唯一的,用find_elements_by_tag_name定位元素,返回符合条件的多个值,保存在列表中,即返回的是列表
11 search2=driver.find_elements_by_tag_name("input")
12 
13 #打印出15个元素
14 print(search2)
15 
16 #要找的元素是第8个input标签,所以通过列表查找时下标是7
17 search2[7].send_keys("java")

input

5&6、通过链接元素的文本内容来精确匹配和模糊匹配定位元素,不是绝对唯一的(一个页面内可能存在多个链接元素的文本内容是相同的)

1、精确匹配——文本内容为“新闻”

如果文本内容时唯一的,用find_element_by_link_text定位元素,返回值是一个值

driver.find_element_by_link_text("新闻")

如果文本内容不是唯一的,用elements_by_link_text定位元素,返回符合条件的多个值,保存在列表中,即返回的是列表

driver.find_elements_by_link_text("新闻")

2、模糊匹配——通过文本内容的部分内容,例如“hao123”,通过“hao”定位

如果文本内容时唯一的,用find_element_by_partial_link_text定位元素,返回值是一个值

driver.find_element_by_partial_link_text("hao123")

如果文本内容不是唯一的,用find_elements_by_partial_link_text定位元素,返回符合条件的多个值,保存在列表中,即返回的是列表

driver.find_elements_by_partial_link_text("hao123")
1 # 1、精确匹配——文本内容为“新闻”
 2 # 如果文本内容时唯一的,用find_element_by_link_text定位元素,返回值是一个值
 3 search=driver.find_element_by_link_text("新闻")
 4 
 5 # 如果文本内容不是唯一的,用elements_by_link_text定位元素,返回符合条件的多个值,保存在列表中,即返回的是列表
 6 search=driver.find_elements_by_link_text("新闻")
 7 
 8 search.click()
 9 
10 # 2、模糊匹配——通过文本内容的部分内容,例如“hao123”,通过“hao”定位
11 # 如果文本内容时唯一的,用find_element_by_partial_link_text定位元素,返回值是一个值
12 aa=driver.find_element_by_partial_link_text("hao123")
13 
14 # 如果文本内容不是唯一的,用find_elements_by_partial_link_text定位元素,返回符合条件的多个值,保存在列表中,即返回的是列表
15 
16 aa=driver.find_elements_by_partial_link_text("hao123")

linktext

7、通过Xpath定位

1、绝对路径定位方法如下图:

find_element_by_xpath("/html/body/div[2]/div/form/div/input")——以/开头,从根目录逐级查找(父子关系),这种方式太依赖元素的位置和顺序,稍微调整就会找不到,后期维护成本太高,所以一般不会用绝对定位

5.png

2、相对定位——以//开头,在整个页面中寻找符合定位表达式的元素,不在乎元素的顺序和位置

6.png

单属性定位://标签名[@属性名称=值]

7.png

如果单属性定位不到,就需要组合属性定位://标签名[@属性名称=值and@属性名称=值and@属性名称=值]

8.png

如果页面存在2个一模一样的元素,只是位置不同,定位方式如下图:从父类开始找,父类还不能唯一确定,继续从父类的父类就找

9.png

另外的方式:通过父类去找:

10.png

11.png

xpath模糊匹配:

12.png

a.用contains关键字,寻找页面中href属性值包含有logout这个单词的所有a元素,由于这个退出按钮的href属性里肯定会包含logout,所以这种方式是可行的,也会经常用到。其中@后面可以跟该元素任意的属性名,定位代码如下:

driver.find_element_by_xpath("//a[contains(@href,‘logout’)]")

这句话的意思是

b.用start-with:寻找rel属性以nofo开头的a元素。其中@后面的rel可以替换成元素的任意其他属性,定位代码如下

driver.find_element_by_xpath(("//a[starts-with(@rel,‘nofo’)]")

c.用Text关键字,寻找包含“退出”文本的所有a元素,定位代码如下:

driver.find_element_by_xpath("//a[contains(text(),’退出’)]")

3.XPath关于网页中的动态属性的定位,例如,ASP.NET应用程序中动态生成id属性值,可以有以下三种方法:

a.starts-with例子:input[starts-with(@id,'ctrl')]解析:匹配以ctrl开始的属性值
b.ends-with例子:input[ends-with(@id,'userName')]解析:匹配以userName结尾的属性值
c.contains()例子:Input[contains(@id,'userName')]解析:匹配含有userName属性值

G.xpath文本精准定位

//a[text()='新闻']#精准定位到本文属性,contains则是模糊定位


作者:YLG001

原文链接:https://www.cnblogs.com/yhms/p/10728765.html

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          • 测试员想要在竞争激烈的职场中拥有一席之地,就需要提前做好准备。前人栽树,后人乘凉一次面试就能入职自己心仪的公司,就需要通过“前人”积累的面试题来了解面试官的“套路”,通过不断的优化答案来提升自己的竞争力。基本问题◆ 自我介绍自我介绍时间不能太长,最多3分钟即可。介绍自己要简明扼要,主要突出重点。如果你是应届生,先介绍自己的专业,再侧重你在校获得的成就,参加的社团活动等重大的事情,一定要简明扼要,突出获得的成就即可。如果你有工作经验,教育经历稍微描述一下,主要侧重点在之前的担任的测试岗位,测试的内容,获得的成就。◆ 项目经验项目经验并不是越多越好,而是越符合招聘单位的需求越精准越好。如果你去应聘...
            0 1 2771
            分享
          • 沐沐一开始学习python的时候也会觉得枯燥无味,面对各种python的变量、赋值、数字、字符串、列表、元祖等基本知识总是昏昏欲睡。似乎怎么学习都很难将python应用于实际的测试工作。直到我遇到了django,才慢慢的对python有了进一步的实践和认知,所以很有必要安利给大家。比如大家可以用django框架进行简单的博客开发、测试框架开发等、或者可以下载一些开源的测试框架,在本地搭建起来后,熟悉框架的源码,会在框架学习的过程中,慢慢掌握python的各种语法。这里先简单介绍一下,Django是一个开源的Web应用框架,是Python众多框架中的爆款,采用了经典的MVC设计模式。Django...
            1 0 3722
            分享
          • 读者提问:手机滚动截屏软件有推荐的吗 ?阿常回答:1、第三方软件:滚动截屏(iPhone)2、iOS 13 自带的长截图功能(iPhone)3、微信自带的图片合成功能(我 → 收藏 → 右上角+号,在笔记页面里可以导入多张截屏图片,再将这个笔记导出为图片就是一张长图了。)4、大多数安卓手机自带的长截图功能(Android)5、第三方软件:滚动截屏长截图(Android)6、第三方软件:截图大师(Android)阿常碎碎念:阿常平时会使用方法 1 更多一些,大家可以根据自己所用机型来选取合适的截屏方法。看完今天的分享对你是不是有所启发呢,有任何想法都欢迎大家私信阿常,一起探讨交流。
            0 0 1169
            分享
          • 北京时间9月7日早间消息,据报道,巴西政府下令,要求苹果停止在该国销售没有电池充电器的iPhone。此外,巴西司法部还对苹果处以1227.5万雷亚尔(约合238万美元)的罚款,并下令停止销售iPhone12及更新机型。对此,苹果表示将上诉,并称这样做能减少浪费,对环境有利。苹果在邮件声明中表示:“苹果会考虑自身所做一切对人和地球的影响。充电器用到了大量的锌和塑料,从包装盒开始就将它剔除能减少200万吨碳排放,相当于每年从公路上移除50万辆汽车。”2020年苹果宣布新iPhone销售时包装盒内不再搭配充电器,一些客户不满,他们认为苹果这样做是为了降低成本,苹果则说全球已经有几十亿USB-A充电器...
            0 0 918
            分享
          • 最近公司需要开发一个简单的报名系统,供外网用户提供报名服务,由于我们公司是个初创的微型公司,开发人员都是刚毕业不久,开发经验相当缺乏。对于服务器性能测试这块的经验更是少得可以忽略。迫使不得不让我们去尝试了解测试的知识。首先我们的需求场景如下:服务器硬件:(只有一台) 系统:Windows 2003 WebServer:Tomcat 7.0 Jdk:7.0 CPU:8核 2.9GHz两个 内存:16G报名应用系统:只需要向外提供一个报名和找回报名号的接口。我们需要:测试服务器能同时承受多少条HTTP请求。通过各种百度后发现LoadRunner是好,但是使用起来短时间...
            10 11 1618
            分享
      • 51testing软件测试圈微信