web自动化笔记一:元素定位的八种方式
一、元素定位
优先使用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()
注意:输入框有数据,在输入之前一定要清空,尤其是保存密码,用户名不被清空的情况
web自动化笔记一:元素定位的八种方式相关推荐
- selenium+python:元素定位的八种方式
id,name,class_name(这三种是元素的属性,而selenium单独针对这三种属性提供了对应的定位方法) tag_name(这个针对标签名称定位) link_text,partial_li ...
- Selenium Webdriver元素定位的八种常用方式
在使用selenium webdriver进行元素定位时,通常使用findElement或findElements方法结合By类返回的元素句柄来定位元素.其中By类的常用定位方式共八种,现分别介绍如下 ...
- Selenium自动化测试-元素定位的八种方法,你知道的有几种?
大家好 我就是那个人见人爱,花见花开的阿里大叔 今天继续selenium系列 实例示范 即学即用 学成之后 你就是整条gai最靓的仔 这次我们要分享的是对元素的定位,在一个页面中有很多不同的策略来定位 ...
- python元素定位的八种方法_selenium webdriver基于Python系列之八种元素定位方法
1.id.name.class name.tag name.link text.partial link text.xpath.css selector在 Python 语言中对应的定位方法如下: f ...
- 【转载保存】Selenium Webdriver元素定位的八种常用方式
转载地址:https://www.cnblogs.com/qingchunjun/p/4208159.html
- web自动化时,怎么定位鼠标悬浮时才出现的元素
web自动化时,怎么定位鼠标悬浮时才出现的元素 如图所示, 想要定位"修改密码",必须先鼠标悬浮在头像位置,才能看到 修改密码,然后按正常操作在F12里就没办法定位"修改 ...
- Selenium Web 自动化 - 如何找到元素
Selenium Web 自动化 - 如何找到元素 2016-07-29 1. 什么是元素? 元素:http://www.w3school.com.cn/html/html_elements.asp ...
- selenium学习笔记之元素定位
selenium学习笔记之元素定位 Selenium是一个用于Web应用程序测试的工具.Selenium测试直接运行在浏览器中,就像真正的用户在操作一样. 首先需要创建浏览器驱动: from sele ...
- web服务器攻击的八种方式
随着互联网的高速发展,网络走进了千家万户,同时也有很大一部分人架设起了自己的网站.继而不安分的黑客们,又将目光对准了服务器攻击这个方式,从而破坏或取得服务器的管理权限.本文将主要讲述针对web服务器攻 ...
最新文章
- Ouath 验证过程
- 图论文快讯|AAAI2020图相关论文合集,涉及各个方面
- quartz获取开始结束时间_王者荣耀s21什么时候开始是9月24日吗?王者荣耀s20赛季结束时间...
- openstack的vnc启动ssl
- SpringBoot配置图片虚拟映射
- 计算机专业开题报告指导老师意见评语,开题报告指导教师评语
- 城轨的两类时钟系统均同步于_推介中央电视台4K IP化移动外场系统搭建中解决的主要问题...
- python地图热力图是什么意思_python热力图
- 四则运算2之设计思路篇
- Deep-Z:使用深度学习对荧光显微镜图像进行三维虚拟重建
- taskmgr(任务管理器)无法出来的解决办法
- Sql Server——Sql Server中进行查询操作时提示“对象名无效”
- Wox插件之程序员不安装会死系列
- vs2013下git的使用
- Angular2属性绑定
- 随机种子 seed()到底是怎么回事。
- 一文分析 Web3 尚未被主流采用的 6 个主要原因
- Leetcode 576. 出界的路径数
- C# VLC视频播放器
- 关于auto_prt