自动化测试
技术手段模拟人工,执行重复性任务,准确率100%,高于人工
selenium
可通过浏览器驱动控制浏览器,通过元素定位模拟人工,实现web自动化,没有焦点(把浏览器放在最小化依然可以)的情况下依然可以进行,浏览器开20个窗口,每个都可以执行自己的代码
安装环境配置
Selenium
在pycharm控制台输入如下指令安装selenium第三方库
pip install selenium
安装成功
Webdriver浏览器驱动安装
https://googlechromelabs.github.io/chrome-for-testing/
我的chrome版本,大版本是136.0
stable的大版本与我的浏览器一致都是136.0
点击stable,确保chrome版本和chromedriver的大版本(136.0)一致
复制搜索该网址,自动开始下载,将下载后的压缩包解压缩后如下
将最上面的驱动文件复制粘贴到自己的pycharm项目下,后续只要输入相对路径即可
因为浏览器版本号更新的非常频繁,驱动器不能一更新就重新安装,因此需要关闭浏览器的自动更新 ,ctrl+R进入下面的运行台,输入services.msc回车
找到有关谷歌的如下所有谷歌开头的,启动类型全部改为禁用
右键点击属性,找到启动类型点禁用 ,点击应用,再点击确定
应用后如下
再次查看属性显示无法自动更新,说明设置禁用成功
此时浏览器和浏览器驱动都已经具备,自动更新也已经关闭
简单操作入门
01打开网页、关闭网页、浏览器
代码:
from selenium import webdriver # 操作浏览器
from selenium.webdriver.chrome.options import Options # 设置谷歌浏览器
from selenium.webdriver.chrome.service import Service # 管理驱动
import time
#设置+启动浏览器
def set_lauch():
#01创建一个用于设置浏览器的对象q1
q1 = Options()
#禁用沙箱-增加兼容性
q1.add_argument('--no-sandbox')
#保持浏览器打开(默认代码执行完自动关闭)
q1.add_experimental_option('detach', True)
#02创建浏览器a1并启动浏览器
a1 = webdriver.Chrome(service=Service('chromedriver.exe'), options=q1)
#return用于接收
return a1
a1 = set_lauch()
#打开指定网址
url = 'https://www.baidu.com'
a1.get(url)
time.sleep(3)#单位s
#只关闭当前标签页
a1.close()
#彻底退出浏览器,释放驱动
a1.quit()
结果 :打开三秒自动关闭
02 浏览器最大化、最小化
接着上面的代码
a1.maximize_window()#最大化
time.sleep(2)
a1.minimize_window()#最小化
03浏览器打开位置、尺寸(单位像素)
代码:
a1.set_window_position(200,0)
a1.set_window_size(600,10)
04浏览器截图&刷新当前网页
可应用于某个画面正在变化的网页,隔几秒就对这个网页进行截图并重新刷新
浏览器截图
代码:
a1.get_screenshot_as_file('1.png')
截图如下图所示,并不是电脑屏幕的截图,只针对这个浏览器页面的大小的截图
刷新当前网页
代码:
a1.refresh()
Selenium核心功能
元素概念
任何一个网页都是由各种各样的元素组成的,如按钮元素、图片链接元素、文字元素
01元素定位
例:用代码自动在百度的搜索框中输入自己想搜索的内容,元素定位的作用就是在百度这个页面自动定位找到搜索框这个元素
右键搜索框->点击检查,可快速定位到这个元素的前端代码
代码:导入包By
from selenium.webdriver.common.by import By#在元素定位里面需要定位的类型
八大定位
八大定位,如下图先导入By包以后,By.后面提示出现的8种定位类型如ID、NAME等就是Selenium的核心功能
定位一个元素(ID唯一)
代码:后面跟的是在检查页面检查到的搜索框的ID的value值kw
a2 = a1.find_element(By.ID, 'kw')
print(a2)
结果,找到了这个元素
定位多个元素
代码:
#07多个元素定位--返回列表
a3 = a1.find_elements(By.ID, 'kw')
print(a3)
定位多个元素返回的是一个列表
02元素交互
1)元素输入
代码:
#08元素输入--发送内容
a2 = a1.find_element(By.ID, 'kw')
a2.send_keys('dafait')
结果 :由代码自动完成输入
2)元素点击
找到百度一下这个按钮的id如下图所示为su
代码:
a2 = a1.find_element(By.ID, 'kw')
a2.send_keys('周杰伦')
a2 = a1.find_element(By.ID,'su')
a2.click()
这里结合上面第一个元素交互操作元素输入为例,输入周杰伦并用代码进行百度一下这个搜索按钮的自动点击,得到结果如下图所示,成功输入周杰伦并点击了搜索按钮返回了百度匹配信息的结果
3)元素清空
操作代码:
a2.clear()
综合例子实战:
实现先在搜索框中输入周杰伦(不点击百度一下这个按钮),操作睡眠两秒(截图)后清空搜索框,再输入周杰伦年轻并点击百度一下按钮,操作睡眠两秒(截图)
代码:
a2 = a1.find_element(By.ID, 'kw')
a2.send_keys('周杰伦')
a1.get_screenshot_as_file('周杰伦输入.png')
time.sleep(2)
a2.clear()
a2.send_keys('周杰伦年轻')
time.sleep(2)
a2 = a1.find_element(By.ID, 'su')
a2.click()
a1.get_screenshot_as_file('周杰伦年轻输入并点击.png')
程序代码自动截图结果如下图所示