目录
7. 通过 Partial Link Text 定位链接(模糊定位)
前言必读
一、概念知识
Selenium 是一个广泛使用的开源自动化测试工具,它主要用于Web应用程序的自动化测试。通过 Selenium,开发人员和测试人员可以模拟用户在浏览器中的操作,以自动化执行浏览器操作和验证网页功能。其主要目标是提高测试的效率、准确性,并支持跨浏览器的测试。
一般用于回归测试或者周期比较长的项目,短期项目比较少用,或者用于重复性强的复杂测试。
(一)三大核心组件
1.Selenium WebDriver:
- WebDriver 是 Selenium 的核心组件之一,提供了与浏览器交互的接口。它能够模拟用户在浏览器中的各种操作,如点击按钮、输入文本、选择下拉框选项、验证页面内容等。
- WebDriver 直接与浏览器进行交互,比 Selenium 的早期版本(如 Selenium RC)更为强大和稳定。
2.Selenium IDE (Integrated Development Environment):
- Selenium IDE 是一个浏览器插件(如 Firefox 和 Chrome),可以录制和回放用户的浏览器操作,帮助快速生成自动化测试脚本。适合快速开发和原型测试,但它不如 WebDriver 灵活且功能强大。
3.Selenium Grid:
-
Selenium Grid 是 Selenium 生态中的另一个重要组件,旨在实现并行测试。通过 Selenium Grid,可以在多个机器和浏览器上同时运行测试用例,极大地提高了测试效率。
(二)Selenium 自动化测试的工作原理
Selenium 自动化测试通过模拟用户的行为进行网页操作和验证,主要通过以下步骤实现:
1.启动浏览器: 通过 WebDriver 启动一个浏览器实例(如 Chrome、Firefox、Edge 等)。
2.定位页面元素: 使用 WebDriver 提供的查找方法(如 find_element_by_id, find_element_by_xpath, find_element_by_css_selector 等)定位网页中的各种元素(按钮、文本框、下拉框、链接等)。
3.与页面元素交互: 模拟用户对这些页面元素的操作。例如,点击按钮(click())、输入文本(send_keys())、获取元素的文本内容(text())等。
4.验证测试结果: 比如验证页面是否成功加载、验证是否出现了预期的内容等,通常是通过断言(assertions)来进行验证。
5.关闭浏览器: 在测试完成后,关闭浏览器并结束测试。
(三)Selenium 支持的操作
打开网页
点击按钮
输入文本
获取文本
获取元素的属性值
模拟鼠标操作(如悬停、右键点击等)
使用 ActionChains 类来模拟复杂的鼠标操作。
等待元素加载:
使用显式等待 (WebDriverWait) 或隐式等待来等待元素的加载
(四)Selenium 自动化测试的优点
-
跨浏览器支持: Selenium 支持多种主流浏览器,包括 Chrome、Firefox、Safari、Edge 和 IE。通过不同的浏览器驱动,可以在不同浏览器上进行自动化测试。
-
语言支持: Selenium 支持多种编程语言,包括 Java、Python、C#、Ruby、JavaScript 等,开发者可以选择熟悉的语言进行自动化测试脚本的编写。
-
开放源码: Selenium 是一个开源项目,完全免费使用,且有广泛的社区支持。
-
支持并行执行: Selenium Grid 可以让测试在多台机器和多个浏览器实例上并行执行,大大提高了执行效率。
-
集成性强: Selenium 可以与多种测试框架集成,如 TestNG、JUnit、pytest 等。它还可以与 CI/CD 工具(如 Jenkins、GitLab CI 等)集成,实现自动化测试的持续集成。
-
灵活性: Selenium 可以与各种测试工具、报告工具、以及性能测试工具(如 JMeter、Allure 等)结合使用,增强自动化测试的功能和可视化效果。
(五)Selenium 自动化测试的缺点
-
不支持图形用户界面 (GUI) 测试: Selenium 主要用于 Web 页面测试,并不适用于桌面应用程序或 GUI 测试。
-
在处理动态网页时可能比较复杂: 对于高度动态的网页,Selenium 可能需要配合一些等待机制来确保页面元素的加载(如使用显式等待和隐式等待)。
-
调试复杂性: 当测试出现问题时,调试可能较为困难,尤其是当测试脚本非常庞大时。
-
浏览器兼容性: 尽管 Selenium 支持多浏览器,但不同浏览器的渲染和行为可能有所不同,这要求测试人员在测试时要特别注意。
(六)Selenium 自动化测试的应用场景
-
功能测试: 用于验证 Web 应用程序的各项功能是否按预期工作。例如,登录测试、表单提交测试、链接测试等。
-
回归测试: 在 Web 应用程序修改或新增功能后,进行回归测试以确保其他功能没有受到影响。
-
性能测试: 使用 Selenium Grid 和其他工具(如 JMeter)配合进行负载测试和性能测试。
-
跨浏览器测试: Selenium 可用来在多个浏览器上执行相同的测试,确保 Web 应用程序在不同浏览器中的兼容性。
总结
- Selenium 是一款功能强大的自动化测试工具,广泛应用于 Web 应用的自动化测试。
- 通过模拟用户的浏览器操作,Selenium 提供了一种高效、可靠的方式来执行回归测试、功能测试和跨浏览器测试。
- 它支持多种编程语言,能够与不同的测试框架和工具集成,适用于各种开发和测试流程。
二、实操例子
使用前提--安装步骤
注意事项
一定要注意这个find_element和find_elements的使用,复数多的加s使用,单个不加s,要注意使用
浏览器执行速度太快可能看不起,可以用time.sleep(秒)来控制延长时间方便观察,使用这个要导入time包
配置好要使用的模块
(一)浏览器的操作
ps:单行代码无法使用,结合起来使用
1.打开谷歌浏览器
#导入模块
from selenium import webdriver
#打开谷歌浏览器
driver = webdriver.Chrome()
# 启动 Firefox 浏览器
# driver = webdriver.Firefox()
# 启动 Edge 浏览器
# driver = webdriver.Edge()
2.浏览器窗口最大化
# 调用浏览器对象的maxmize_window()方法,将浏览器窗口最大化
driver.maximize_window()
3.设置浏览器的宽高
driver.set_window_size(1000,800)
4.打开新窗口(不会覆盖)
# #打开百度的页面
driver.get("https://www.baidu.com")
#打开京东页面。不会覆盖
win='window.open("https://www.jd.com")'
#调用新界面
driver.execute_script(win)
5.关闭浏览器和当前页面
driver.quit()#关闭整个浏览器
driver.close()#关闭当前页面
6.打开url
#打开百度的页面
driver.get("https://www.baidu.com")
7.获取页面标题
#获取页面title,赋值给title
title=driver.title
#打印title
print(title)
8.刷新页面
driver.refresh()
9.返回上一页、进入下一页
#返回上一页
driver.back()
#进入下一页
driver.forward()
10.处理弹框
alert = driver.switch_to.alert
alert.accept() # 点击"确定"
alert.dismiss() # 点击"取消"
11.截图浏览器当前页面
ps:默认放到执行文件的同级目录下
#整个浏览器截图,默认放到当前执行文件的同级目录
driver.save_screenshot('screenshot.png')
12.页面滚动条控制
页面滚动到底部
通过 window.scrollTo()
方法来滚动页面
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
页面滚动到顶部
同样,window.scrollTo()
方法也可以将页面滚动到顶部
#页面滚动到顶部
driver.execute_script("window.scrollTo(0, 0);")
页面滚动到指定的位置
ps:用jd示例
# #打开京东的页面
driver.get("https://www.jd.com")
# 可以指定 y 坐标。比如,滚动到页面 1000 像素的位置
driver.execute_script("window.scrollTo(0, 1000);")
滚动一定的距离
每次滚动一定的距离,可以通过滚动 x
和 y
坐标来实现。比如,向下滚动 500 像素,向上就改变y轴的值为负数
# 向下滚动 500 像素
driver.execute_script("window.scrollBy(0, 500);")
#向上滚动 500像素,就是把y轴的值改为负数就好
driver.execute_script("window.scrollBy(0, -500);")
(二)seleium定位方式
Selenium 提供了多种定位方式,你可以根据具体的需求选择最适合的方式。常见的有:
ps:一般来说ID和Name是最常用和最稳定的
ID
Name
Class Name
Tag Name
Link Text 和 Partial Link Text
XPath
CSS Selector
演示页面
1.通过ID定位
根据百度的输入框id定位到输入框,然后输入你好
关键代码
#通过id定位百度的输入框,点击输入自定义内容你好
driver.find_element_by_id("kw").send_keys("你好")
完整的实操代码
# 从Selenium库导入webdriver模块,用于创建浏览器驱动
from selenium import webdriver
# 创建一个Chrome浏览器的实例,driver是一个浏览器对象,使用它可以操作浏览器
driver = webdriver.Chrome()
# 使用driver.get()方法打开指定的URL,"https://baidu.com/"是你要打开的网页地址
driver.get("https://baidu.com/")
# 调用浏览器对象的maxmize_window()方法,将浏览器窗口最大化
driver.maximize_window()
#通过id定位百度的输入框,点击输入自定义内容你好
driver.find_element_by_id("kw").send_keys("你好")
2.通过name属性定位
根据百度的输入框name属性定位到输入框,然后输入云边的快乐猫
关键代码
#通过name定位百度的输入框,点击输入自定义内容云边的快乐猫
driver.find_element_by_name("wd").send_keys("云边的快乐猫")
完整的实操代码
# 从Selenium库导入webdriver模块,用于创建浏览器驱动
from selenium import webdriver
# 创建一个Chrome浏览器的实例,driver是一个浏览器对象,使用它可以操作浏览器
driver = webdriver.Chrome()
# 使用driver.get()方法打开指定的URL,"https://baidu.com/"是你要打开的网页地址
driver.get("https://baidu.com/")
# 调用浏览器对象的maxmize_window()方法,将浏览器窗口最大化
driver.maximize_window()
#通过name定位百度的输入框,点击输入自定义内容云边的快乐猫
driver.find_element_by_name("wd").send_keys("云边的快乐猫")
3.通过class name属性定位
根据百度的输入框class name属性定位到输入框,然后输入云边的快乐猫
ps:class 属性用于指定元素的样式类,但可能有多个元素使用相同的类名。通过 class_name 定位时,Selenium 会返回匹配的第一个元素。
关键代码
#通过class name定位百度的输入框,点击输入自定义内容云边的快乐猫
driver.find_element_by_class_name("s_ipt").send_keys("云边的快乐猫")
完整代码
# 从Selenium库导入webdriver模块,用于创建浏览器驱动
from selenium import webdriver
# 创建一个Chrome浏览器的实例,driver是一个浏览器对象,使用它可以操作浏览器
driver = webdriver.Chrome()
# 使用driver.get()方法打开指定的URL,"https://baidu.com/"是你要打开的网页地址
driver.get("https://baidu.com/")
# 调用浏览器对象的maxmize_window()方法,将浏览器窗口最大化
driver.maximize_window()
#通过class name定位百度的输入框,点击输入自定义内容云边的快乐猫
driver.find_element_by_class_name("s_ipt").send_keys("云边的快乐猫")
4.通过 Tag Name 定位
通过 HTML 元素的标签名称来定位,比如
input
、button
、div
等ps:主要用来根据input标签寻找其他标签
关键代码
注意:这个elements是有s的复数,不是element
#通过class name定位百度的输入框,点击输入自定义内容云边的快乐猫
#注意:这个find_elements_by_tag_name的elements是带s的
s=driver.find_elements_by_tag_name('input')
#遍历input标签里面自己想要的属性,这里再通过id定位
for i in s:
if i.get_attribute('id')=='kw':
i.send_keys('云边的快乐猫')
完整的代码
# 从Selenium库导入webdriver模块,用于创建浏览器驱动
from selenium import webdriver
# 创建一个Chrome浏览器的实例,driver是一个浏览器对象,使用它可以操作浏览器
driver = webdriver.Chrome()
# 使用driver.get()方法打开指定的URL,"https://baidu.com/"是你要打开的网页地址
driver.get("https://baidu.com/")
# 调用浏览器对象的maxmize_window()方法,将浏览器窗口最大化
driver.maximize_window()
#通过input定位百度的输入框,点击输入自定义内容云边的快乐猫
#注意:这个find_elements_by_tag_name的elements是带s的
s=driver.find_elements_by_tag_name('input')
#遍历input标签里面自己想要的属性,这里再通过id定位
for i in s:
if i.get_attribute('id')=='kw':
i.send_keys('云边的快乐猫')
5.通过 XPath 定位(超好用)
ps:超好用,几乎什么都可以定位到
选择方式:选中--右键--copy--点击倒二的xpath
#这里定位百度网页的hao123链接,然后进行点击
#注意,括号里面用单引号
driver.find_element_by_xpath('//*[@id="s-top-left"]/a[2]').click()
# 从Selenium库导入webdriver模块,用于创建浏览器驱动
from selenium import webdriver
# 创建一个Chrome浏览器的实例,driver是一个浏览器对象,使用它可以操作浏览器
driver = webdriver.Chrome()
# 使用driver.get()方法打开指定的URL,"https://baidu.com/"是你要打开的网页地址
driver.get("https://baidu.com/")
# 调用浏览器对象的maxmize_window()方法,将浏览器窗口最大化
driver.maximize_window()
#这里定位百度网页的hao123链接,然后进行点击
#注意,括号里面用单引号
driver.find_element_by_xpath('//*[@id="s-top-left"]/a[2]').click()
6.通过 Link Text 定位链接(精准的定位 )
ps:当元素是一个链接(
<a>
标签)时,你可以通过链接的文本内容来定位。
#通过q标签内的链接定位改链接,然后点击打开hao123的网页
driver.find_element_by_link_text("hao123").click()
完整的代码
# 从Selenium库导入webdriver模块,用于创建浏览器驱动
from selenium import webdriver
# 创建一个Chrome浏览器的实例,driver是一个浏览器对象,使用它可以操作浏览器
driver = webdriver.Chrome()
# 使用driver.get()方法打开指定的URL,"https://baidu.com/"是你要打开的网页地址
driver.get("https://baidu.com/")
# 调用浏览器对象的maxmize_window()方法,将浏览器窗口最大化
driver.maximize_window()
#通过a标签内的链接定位改链接,然后点击打开hao123的网页
driver.find_element_by_link_text("hao123").click()
7. 通过 Partial Link Text 定位链接(模糊定位)
与
LINK_TEXT
类似,但是partial link text
只需要链接文本的部分内容就可以匹配,适用于链接文本较长的情况。
#通过a标签内的链接定位改链接,然后点击打开hao123的网页
driver.find_element_by_partial_link_text("123").click()
完整的代码
# 从Selenium库导入webdriver模块,用于创建浏览器驱动
from selenium import webdriver
# 创建一个Chrome浏览器的实例,driver是一个浏览器对象,使用它可以操作浏览器
driver = webdriver.Chrome()
# 使用driver.get()方法打开指定的URL,"https://baidu.com/"是你要打开的网页地址
driver.get("https://baidu.com/")
# 调用浏览器对象的maxmize_window()方法,将浏览器窗口最大化
driver.maximize_window()
#通过a标签内的链接定位改链接,然后点击打开hao123的网页
driver.find_element_by_partial_link_text("123").click()
8.通过 CSS 选择器定位
CSS 选择器基于 CSS 样式规则来定位元素,通常比 XPath 更简洁。CSS 选择器可以通过标签、类、ID、属性等组合来定位。
关键代码
通过类名(.class的值)
ps:注意:这里用的单引号,还有括号里面记得先加上一个.代表这是来自类的
#这里通过class的值定位找到百度搜索框,再输入云边的快乐猫
#注意:这里用的单引号,还有括号里面记得先加上一个.代表这是来自类的
driver.find_element_by_css_selector('.s_ipt').send_keys("云边的快乐猫")
通过id名(#id的值)
#2.注意:这里用的单引号,还有括号里面记得先加上一个#代表这是来自id的
driver.find_element_by_css_selector('#kw').send_keys("云边的快乐猫")
通过属性('[name=值]')
#单引号,中括号'[name=]'
driver.find_element_by_css_selector('[name=wd').send_keys("云边的快乐猫")
通过class的值('[class=值]')
#单引号,中括号'[class=]'
driver.find_element_by_css_selector('[class=s_ipt]').send_keys("云边的快乐猫")
任意标签内容('[任意标签=对应值]')---好用
#单引号,中括号'[任意标签=对应的值]'。这里是打开了百度的一个其中页面
driver.find_element_by_css_selector('[target=_blank]').click()
上级定位('上级标签头>下级标签头')
ps:这个还能上上级,再上级前面套一个上上级就好
#单引号,通过上级定位到下级标签,并输入内容
driver.find_element_by_css_selector('span>input').send_keys("云边的快乐猫")
部分代码
# 从Selenium库导入webdriver模块,用于创建浏览器驱动
from selenium import webdriver
# 创建一个Chrome浏览器的实例,driver是一个浏览器对象,使用它可以操作浏览器
driver = webdriver.Chrome()
# 使用driver.get()方法打开指定的URL,"https://baidu.com/"是你要打开的网页地址
driver.get("https://baidu.com/")
# 调用浏览器对象的maxmize_window()方法,将浏览器窗口最大化
driver.maximize_window()
#这里通过class的值定位找到百度搜索框,再输入云边的快乐猫
#注意:这里用的单引号,还有括号里面记得先加上一个.代表这是来自类的
driver.find_element_by_css_selector('.s_ipt').send_keys("云边的快乐猫")
三、其他事件
(一)鼠标事件
要额外导入包使用
from selenium.webdriver.common.action_chains import ActionChains
鼠标点击(click())
#点击的地图按钮,进入地图页面
driver.find_element_by_link_text('地图').click()
完整代码
#导入模块
from selenium import webdriver
#打开谷歌浏览器
driver = webdriver.Chrome()
# 调用浏览器对象的maxmize_window()方法,将浏览器窗口最大化
driver.maximize_window()
# #打开百度的页面
driver.get("https://www.baidu.com/")
#点击的地图按钮,进入地图页面
driver.find_element_by_link_text('地图').click()
(二)键盘事件
ps:这个要使用的时候类里面导入这个包
#导入键盘包
from selenium.webdriver.common.keys import Keys
1.框内输入内容
#1.定位百度的输入框,并输入云边的快乐猫这个自定义搜索值
driver.find_element_by_id("kw").send_keys("云边的快乐猫")
2.确定回车键
#相当于按下回车键
driver.find_element_by_id("kw").send_keys(Keys.ENTER)
3.框内全选快捷键
#相当于CTRL+A
driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'a')
4.框内剪切快捷键
#相当于CTRL+x
driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'x')
5.复制粘贴
同理,和剪切全选那些一样,改后面的字符就好了,复制是c,粘贴是v
完整代码
#导入模块
from selenium import webdriver
#导入键盘包
from selenium.webdriver.common.keys import Keys
import time
#打开谷歌浏览器
driver = webdriver.Chrome()
# 调用浏览器对象的maxmize_window()方法,将浏览器窗口最大化
driver.maximize_window()
# #打开百度的页面
driver.get("https://www.baidu.com/")
#1.定位百度的输入框,并输入云边的快乐猫这个自定义搜索值
driver.find_element_by_id("kw").send_keys("云边的快乐猫")
#休眠一会方便观察
time.sleep(1)
#相当于按下回车键
driver.find_element_by_id("kw").send_keys(Keys.ENTER)
#相当于CTRL+A
driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'a')
#相当于CTRL+x
driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'x')
#清除框内的内容
# driver.find_element_by_id("kw").send_keys(Keys.TAB)
#休眠等待一会
time.sleep(3)
driver.quit()#关闭整个浏览器
(三)文件上传
上传成功,旁边会显示上传的文件名
关键代码
driver.定位具体按钮.send_keys(要上传的文件)
#定位到按钮位置,并赋值,后面的senk_keys里面的是要上传的文件,加r是为了防止转义
driver.find_element_by_xpath('//*[@id="file"]').send_keys(r"D:\Users\kkk\Downloads\data.xlsx")
全部代码
#导入模块
from selenium import webdriver
#导入时间的模块。方便后续使用sleep方法
import time
#打开谷歌浏览器
driver = webdriver.Chrome()
# 调用浏览器对象的maxmize_window()方法,将浏览器窗口最大化
driver.maximize_window()
# #打开百度的页面
#前面加个r代表读的意思,防止\这个符号被编译进去
driver.get(r"D:\Users\kkk\Downloads\upload_file.html")
#定位到按钮位置,并赋值,后面的senk_keys里面的是要上传的文件,加r是为了防止转义
driver.find_element_by_xpath('//*[@id="file"]').send_keys(r"D:\Users\kkk\Downloads\data.xlsx")
#等待几秒确保文件上传成功
time.sleep(5)
driver.quit()#关闭整个浏览器
(四)下拉框处理
点击选择学校这个下拉框,然后这里选择北京大学做为例子
关键代码
#定位到下拉框按钮的位置并赋值
d=driver.find_element_by_xpath('/html/body/form/table/tbody/tr[7]/td[2]/select')
#使用赋值,然后定位到要选择的选项,然后点击
d.find_element_by_xpath('/html/body/form/table/tbody/tr[7]/td[2]/select/option[3]').click()
全部代码
#导入模块
from selenium import webdriver
#导入时间的模块。方便后续使用sleep方法
import time
#打开谷歌浏览器
driver = webdriver.Chrome()
# 调用浏览器对象的maxmize_window()方法,将浏览器窗口最大化
driver.maximize_window()
# #打开百度的页面
#前面加个r代表读的意思,防止\这个符号被编译进去
driver.get(r"D:/Users/kkk/Downloads/table.html")
#定位到下拉框按钮的位置并赋值
d=driver.find_element_by_xpath('/html/body/form/table/tbody/tr[7]/td[2]/select')
#使用赋值,然后定位到要选择的选项,然后点击
d.find_element_by_xpath('/html/body/form/table/tbody/tr[7]/td[2]/select/option[3]').click()
#等待几秒便于观察
time.sleep(5)
driver.quit()#关闭整个浏览器
(五)按钮框选择
这个更简单,选择定位到按钮的位置,然后点击就可以了
关键代码
#定位选择框的位置,然后点击按钮
driver.find_element_by_xpath('/html/body/form/table/tbody/tr[6]/td[2]/input[2]').click()
全部代码
#导入模块
from selenium import webdriver
#导入时间的模块。方便后续使用sleep方法
import time
#打开谷歌浏览器
driver = webdriver.Chrome()
# 调用浏览器对象的maxmize_window()方法,将浏览器窗口最大化
driver.maximize_window()
# #打开百度的页面
#前面加个r代表读的意思,防止\这个符号被编译进去
driver.get(r"D:/Users/kkk/Downloads/table.html")
#定位选择框的位置,然后点击按钮
driver.find_element_by_xpath('/html/body/form/table/tbody/tr[6]/td[2]/input[2]').click()
#等待几秒便于观察
time.sleep(5)
driver.quit()#关闭整个浏览器
(六)确认框选择
点击显示确认框,弹框出来了再点击确认按钮,如果觉得太快了,可以设置个sleep睡眠等待便于观察一下
关键代码
#定位弹出框的点击按钮,点击弹出
driver.find_element_by_xpath('/html/body/div/input').click()
#弹出框点击确认按钮
driver.find_element_by_xpath('/html/body').click()
全部代码
#导入模块
from selenium import webdriver
#导入时间的模块。方便后续使用sleep方法
import time
#打开谷歌浏览器
driver = webdriver.Chrome()
# 调用浏览器对象的maxmize_window()方法,将浏览器窗口最大化
driver.maximize_window()
# #打开百度的页面
#前面加个r代表读的意思,防止\这个符号被编译进去
driver.get(r"D:/Users/kkk/Downloads/enter.html")
#定位弹出框的点击按钮,点击弹出
driver.find_element_by_xpath('/html/body/div/input').click()
#弹出框点击确认按钮
driver.find_element_by_xpath('/html/body').click()
#等待几秒确保文件上传成功
time.sleep(5)
driver.quit()#关闭整个浏览器
四、练习文件获取
方式一:csdn下载上传的文件
https://download.youkuaiyun.com/download/m0_52861000/90146557
方式二:文章底部下面扫那个猫
然后去回复就可以拿到了:自动化测试练习
有什么问题都可以评论区留言,看见都会回复的
如果你觉得本篇文章对你有所帮助的,把“文章有帮助的”打在评论区
多多支持吧!!!
点赞收藏评论,当然也可以点击文章底部的红包或者👇订阅付费文章创作支持一下了。抱拳了!