web自动化笔记一:元素定位的八种方式

news2025/2/26 11:37:45

一、元素定位
优先使用id定位,超链接使用link和paryial_link

二、自动化测试流程(先定位后操作)
1、自动化测试方案->2、自动化脚本编写(定位元素、操作元素、验证操作、记录测试结果)->3、执行测试用例->4、结果分析、报告

三、定位元素
find_element找的是单个元素,必须定位到,找不到元素会报错和find_elements的区别,是找到所有匹配的元素放到一个列表里,找不到会返回一个空列表

①、通过id定位 

from selenium import webdriver
import time
driver=webdriver.Chrome()
driver.get("https://www.baidu.com")
 
# 通过id定位
driver.find_element_by_id('kw').send_keys('新冠肺炎')#定位搜索框输入新冠肺炎
driver.find_element_by_id('su').click()#点击百度一下
# 等待3秒
time.sleep(3)
# 退出浏览器
driver.quit()

②、通过name定位

from selenium import webdriver
import time
driver=webdriver.Chrome()
driver.get("https://www.baidu.com")
 
# 通过name定位
driver.find_element_by_name('wd').send_keys('新冠肺炎')#通过name定位搜索框输入新冠肺炎
driver.find_element_by_id('su').click()#点击百度一下
# 等待3秒
time.sleep(3)
# 退出浏览器
driver.quit()

 补充知识点:通过name定位搜索框,输入新冠肺炎后,加上\n直接回车

from selenium import webdriver
import time
driver=webdriver.Chrome()
driver.get("https://www.baidu.com")
#
# 通过name定位搜索框,输入新冠肺炎后,加上\n直接回车
driver.find_element_by_name('wd').send_key('新冠肺炎\n')#通过name定位搜索框输入新冠肺炎
# 等待3秒
time.sleep(3)
# 退出浏览器
driver.quit()

③通过class定位

from selenium import webdriver
import time
driver=webdriver.Chrome()
driver.get("https://www.baidu.com")
 
# 通过class定位
driver.find_element_by_class_name('s_ipt').send_keys('新冠肺炎')#定位搜索框输入新冠肺炎
driver.find_element_by_class_name('s_btn').click()#点击百度一下,注意class名属性不能有空格,如有空格删掉空格前
# 等待3秒
time.sleep(3)
# 退出浏览器
driver.quit()

④通过超链接link文本去定位

from selenium import webdriver
import time
driver=webdriver.Chrome()
driver.get("https://www.baidu.com")
 
# 通过超链接link文本去定位
driver.find_element_by_link_text('地图').click()#点击百度页面上的地图
# 等待3秒
time.sleep(3)
# 退出浏览器
driver.quit()

⑤tag name去定位元素

from selenium import webdriver
import time
driver=webdriver.Chrome()
driver.get("https://www.baidu.com")
#
# tag name去定位元素
taglist = driver.find_elements_by_tag_name('input')
for one in taglist:
	if one.get_attribute('name')=='wd':
		one.send_keys('新冠肺炎')
time.sleep(3)
driver.find_element_by_id('su').click()#点击百度一下
time.sleep(3)
#打印标题
print(driver.title)
# 退出浏览器
driver.quit()

⑥XPath定位:按路径去找元素
(以百度为例)
绝对路径:从跟目录寻找,可以先定位元素ctrl+f
driver.find_element_by_xpath('绝对路径').send_keys('新冠疫情')
#按索引去取值/html/body/div/div/div/div/div/form/span[2]/input,索引是从1开始
#通过标签+属性去取值://html/body/div/div/div/div/div/form/span/input[@属性名称='属性值']
可以在浏览器f12中copy xpath可以获取绝对路径 ,ctrl+f验证
代码:

from selenium import webdriver
import time
driver=webdriver.Chrome()
driver.get("https://www.baidu.com")
 
# 通过xpath定位
driver.find_element_by_xpath('/html/body/div[1]/div[1]/div[5]/div/div/form/span[1]/input').send_keys('花瓣网')
time.sleep(2)
driver.find_element_by_xpath('/html/body/div[1]/div[1]/div[5]/div/div/form/span[2]/input').click()
#打印标题
print(driver.title)
# 退出浏览器
driver.quit()

相对路径:// 标签[@属性=‘属性值’] 
也可以通过索引取值://标签[索引值]
可以copy xpath相对路径//*[id='id属性值']
*是通配符。代表所有可以使用//*[@属性='属性值']
代码:

from selenium import webdriver
import time
driver=webdriver.Chrome()
driver.get("https://www.baidu.com")
 
# 通过xpath定位:相对路径查找
driver.find_element_by_xpath('//*[@id="kw"]').send_keys('花瓣网')
driver.find_element_by_xpath('//*[@id="su"]').click()
time.sleep(2)
#打印标题
print(driver.title)
# 退出浏览器
driver.quit()

⑦css定位(以百度搜索为例)
css定位方式:1、根据id:'#id'
          2、通过class:'.class'
          3、通过标签去定位+id或者class:'标签#id'   或者  '标签.class'
          4、通过标签+属性:标签[属性='属性值']
                注释:xpath里属性要加@ css不用
         5、模糊查询:以什么开头

from selenium import webdriver
import time
driver=webdriver.Chrome()
driver.get("https://www.baidu.com")
 
# 通过css定位
# 模糊查询:以什么开头
driver.find_element_by_css_selector("input[name^='w']").send_keys('新冠疫情')#input标签中name属性以w开头的
# 通过css定位:用input下的id属性定位
driver.find_element_by_css_selector('input#su').click()#input标签中id属性以s开头的
time.sleep(2)
#打印标题
print(driver.title)
# 退出浏览器
driver.quit()

          6、以什么结尾

 
from selenium import webdriver
import time
driver=webdriver.Chrome()
driver.get("https://www.baidu.com")
 
# 通过css定位
# 模糊查询:以什么结尾
driver.find_element_by_css_selector("input[name$='d']").send_keys('新冠疫情')#input标签中name属性以d结尾的
# 通过css定位:用input下的id属性定位
driver.find_element_by_css_selector('input#su').click()
time.sleep(2)
#打印标题
print(driver.title)
# 退出浏览器
driver.quit()

          7、在中间 *

from selenium import webdriver
import time
driver=webdriver.Chrome()
driver.get("https://www.baidu.com")
 
# 通过css定位
# 模糊查询:以中间属性查询
driver.find_element_by_css_selector("input[name*='ubmi']").send_keys('新冠疫情')#input标签中name属性以ubmi在中间的
# 通过css定位:用input下的id属性定位
driver.find_element_by_css_selector('input#su').click()
time.sleep(2)
#打印标题
print(driver.title)
# 退出浏览器
driver.quit()

#子元素查询
#(A>B>C :三个必须连着的所属层级关系爷爷>爸爸>儿子)(不能使用下标:例C>D[1])
1、driver.find_element_bu_css_selector(div>form>span>input).send_keys('新冠疫情')   

#A  C  A后代的任意标签,爷爷   可以匹配儿子的标签,也可以匹配孙子的标签
2、driver.find_element_bu_css_selector(form   input[id='kw']).send_keys('新冠疫情') 

标签:nth-child(num):一般用在下拉框中,代表第几个儿子。
#frist-child 第一个儿子  #last-child最后一个儿子
3、driver.find_element_bu_css_selector(select.select-small>option:nth-child(3))

代码:

from selenium import webdriver
import time
driver=webdriver.Chrome()
driver.get("https://www.baidu.com")
 
# 通过css定位
# 子元素查询
driver.find_element_by_css_selector('form>span>input[id="kw"]').send_keys('新冠肺炎')
time.sleep(5)
driver.find_element_by_css_selector('form input[id="su"]').click()
time.sleep(5)
driver.quit()
#打印标题
print(driver.title)
# 退出浏览器
driver.quit()

⑧定位封装
driver.find_element()

需求
使用driver.find_element()定位用户名
使用driver.find_element()定位密码 

扩展8种元素定位的底层实现
方式:driver.find_element(By.XXX,’value’)
参数说明:
    By.xxx:为By类的类型 如:By.ID
    value:元素的定位值  如 “userA”
By需要进行导包

元素操作方法
为什么要学习?
1、需要让脚本模拟用户给指定元素输入值
2、需要让脚本模拟人为删除元素内容
3、需要让脚本模拟点击操作

元素常用操作方法
1、click()  单击元素
2、send_keys(value)  模拟输入
3、clear ()  清除文本

案例:

from selenium import webdriver
import time
from selenium.webdriver.common.by import By
 
# 需求:打开某某网站注册页面,完成以下操作
# 1).通过脚本执行输入用户名:admin;密码:123456;电话号码:18611111111;电子邮件:123@qq.com
# 2).间隔3秒,修改电话号码为:18600000000
# 3).间隔3秒,点击‘注册’按钮
# 4).间隔3秒,关闭浏览器
# 5).元素定位方法不限
 
driver = webdriver.Chrome()
driver.get('www.XXXX.com/')
# 输入用户名
driver.find_element(By.CSS_SELECTOR,'#userA').send_keys('admin')
# 输入密码
driver.find_element(By.CSS_SELECTOR,'#passwordA').send_keys('123456')
# 输入手机号码
driver.find_element(By.CSS_SELECTOR,'#telA').send_keys('18611111111')
# 输入邮箱
driver.find_element(By.CSS_SELECTOR,'#emailA').send_keys('123@qq.com')
time.sleep(3)
# 清空手机号码,重新输入手机号码
driver.find_element(By.CSS_SELECTOR,'#telA').clear()
driver.find_element(By.CSS_SELECTOR,'#telA').send_keys('18600000000')
time.sleep(3)
# 点击注册
driver.find_element(By.XPATH,'//*[@id="zc"]/fieldset/button').click()
time.sleep(3)
# 关闭浏览器
driver.quit()

注意:输入框有数据,在输入之前一定要清空,尤其是保存密码,用户名不被清空的情况

作为一个软件测试的过来人,我想尽自己最大的努力,帮助每一个伙伴都能顺利找到工作。所以我整理了下面这份资源,现在免费分享给大家,有需要的小伙伴可以关注【公众号:开心螺蛳粉】自提!

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。在这里插入图片描述

在这里插入图片描述

行动吧,在路上总比一直观望的要好,未来的你肯定会感谢现在拼搏的自己!如果想学习提升找不到资料,没人答疑解惑时,请及时加入群:1150305204,里面有各种测试开发资料和技术可以一起交流哦。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1477332.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MATLAB环境下基于人工蜂群优化算法的卷积神经网络CNN图像识别

地球上的所有生物包括人类都在不断演变、进化,在这样的过程中逐渐适应了外界的环境,找到了适合自己的生存方式。不同的生物有不同的生存机制,群体活动作为一种常见的生存机制广泛存在于自然界中,例如蚂蚁、鸟群、鱼群、峰群甚至人…

手机和windows的便签怎么共享账号使用

在忙碌的生活中,我经常需要在手机和电脑之间同步记事信息。可是,每次当我在手机上记下一些重要事项后,想要在电脑上查看或继续编辑时,总是遇到各种麻烦。因为手机和电脑上的便签软件各不相同,无法实现账号共享和内容同…

系统性学习vue-vue3

系统性学习vue-vue3 Vue3简介创建Vue3.0工程使用vue-cli创建使用vite创建工程 分析工程结构(cli创建的)main.jsApp.vue 安装开发者工具初识setupref函数处理基本类型处理对象类型 reactive函数回顾Vue2的响应式原理vue3响应式原理—Proxyreactive对比ref…

C++面试宝典第33题:数组组成最大数

题目 给定一组非负整数nums,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数。注意:输出结果可能非常大,所以你需要返回一个字符串而不是整数。 示例1: 输入:nums = [10, 2] 输出:"210" 示例2: 输入:nums = [3, 30, 34, 5, 9] 输出:"…

开发一款跨境电商APP的流程是什么

开发一款跨境电商系统的流程大致如下: 1.需求分析:这是开发任何软件系统的第一步。在这个阶段,你需要与客户进行深入沟通,了解他们的业务模式、目标用户、产品特点以及竞争对手等信息。通过这一步骤,你可以确定系统的…

报`Uncaught (in promise) TypeError: NetworkError when attempting to fetch resource.`错误解决办法

使用了promise,但是在使用的过程中报Uncaught (in promise)错误,第一次遇到这种错误,所以在此记录下,方便以后解决问题 Uncaught (in promise) TypeError: NetworkError when attempting to fetch resource.错误通常出现在使用fetch API发起…

pytorch 图像数据集管理

目录 1.数据集的管理说明 2.数据集Dataset类说明 3.图像分类常用的类 ImageFolder 1.数据集的管理说明 pytorch使用Dataset来管理训练和测试数据集,前文说过 torchvision.datasets.MNIST 这些 torchvision.datasets里面的数据集都是继承Dataset而来&#xff0c…

【QT+QGIS跨平台编译】之五十六:【QGIS_CORE跨平台编译】—【qgsmeshcalclexer.cpp生成】

文章目录 一、Flex二、生成来源三、构建过程一、Flex Flex (fast lexical analyser generator) 是 Lex 的另一个替代品。它经常和自由软件 Bison 语法分析器生成器 一起使用。Flex 最初由 Vern Paxson 于 1987 年用 C 语言写成。 “flex 是一个生成扫描器的工具,能够识别文本中…

【Python笔记-设计模式】状态模式

一、说明 状态模式是一种行为设计模式,用于解决对象在不同状态下具有不同行为 (一) 解决问题 在对象行为根据对象状态而改变时,规避使用大量的条件语句来判断对象的状态,提高系统可维护性 (二) 使用场景 当对象的行为取决于其状态&#…

vue 部署后修改配置文件(接口IP)

近期,有一个项目,运维在部署的时候,接口ip还没有确定,而且ip后面的路径一直有变动,导致我这里一天打包至少四五次才行,很麻烦,然后看了下有没有打包后修改配置文件修改接口ip的方法,…

kubectl使用及源码阅读

目录 概述实践样例yaml 中的必须字段 kubectl 代码原理kubectl 命令行设置pprof 抓取火焰图kubectl 中的 cobra 七大分组命令kubectl createcreateCmd中的builder模式createCmd中的visitor访问者模式外层VisitorFunc分析 结束 概述 k8s 版本 v1.24.16 kubectl的职责 1.主要的…

深入理解网络通信基本原理和tcp/ip协议

深入理解网络通信基本原理和tcp/ip协议 一、计算机网络体系1,计算机网络体系结构2,网络中数据传输2.1,浏览器中输入一个url的执行流程2.2,数据在网络中是的传输流程 3,三次握手和四次挥手3.1,三次握手3.1.1…

代理IP安全问题:在国外使用代理IP是否安全

目录 前言 一、国外使用代理IP的安全风险 1. 数据泄露 2. 恶意软件 3. 网络攻击 4. 法律风险 二、保护国外使用代理IP的安全方法 1. 选择可信的代理服务器 2. 使用加密协议 3. 定期更新系统和软件 4. 注意网络安全意识 三、案例分析 总结 前言 在互联网时代&…

xilinix 的硬件资源分布

从官方手册UG475中可以看出,下图中的V690T系列的i芯片,其具有的bank数量,已经上下半区的bufg对应的bank关系,实际在开发过程中,可能面临局部资源集中度过高,导致bufg的数量不够的情况,bufg的位置…

Docker数据集与自定义镜像:构建高效容器的关键要素

目录 博客前言 一.数据卷 1.数据卷介绍 2.实战 宿主机和容器共享目录 容器和容器之间共享目录 二.自定义镜像 1.自定义镜像介绍 2.实战 2.1自定义centos,具备vim及ifconfig作用 构建镜像 通过镜像运行一个容器进行测试 2.2自定义tomact(文件为…

人工智能_Centos7.9中CPU安装ChatGLM3-6B大模型_安装使用_010---人工智能工作笔记0105

从一个空的虚拟机开始安装: https://www.modelscope.cn/models/ZhipuAI/chatglm3-6b/files 可以看到这里有很多的数据文件,那么这里 这里点击模型文件就可以下载,这个就是chatglm3-6B的文件,需要点击每个文件,然后点击右边的下载,把文件都下载下来

Python3中真真假假True、False、None等含义详解

在Python中,不仅仅和类C一样的真假类似,比如1代表真,0代表假。Python中的真假有着更加广阔的含义范围,Python会把所有的空数据结构视为假,比如 [] (空列表)、 {} (空集合)、 (空字符…

初探2b blender

总结 按照youtube 教程 做了个雏形 心得 从正面, 侧面 视图整体上调整外轮廓流线型趋向, 比如正面看这个发型像个鸡蛋的外轮廓头发重要的是丝滑, 流畅 集束 层次 交错

Flutter开发进阶之Flutter Web加载速度优化

Flutter开发进阶之Flutter Web加载速度优化 通常使用Flutter开发的web加载速度会比较慢,原因是Flutter web需要加载的资源处于国外,以下是据此所做的相应优化。 一、FlutterWeb打包 flutter build web --web-renderer canvaskit使用新命令打包 flut…

面试经典150题——插入区间

"The future belongs to those who believe in the beauty of their dreams." - Eleanor Roosevelt 1. 题目描述 2. 题目分析与解析 2.1 思路一 解决这个问题的思路是基于区间排序和合并的经典算法。这个问题的关键在于如何处理新区间与现有区间的关系&#xff0c…