2023年11月25日发(作者:)
(七)⾃动化测试之selenium学习⼼得-实战技巧
⼀、Selenium 提供的 类 实现⿏标右键点击、双击、移动⿏标到某个元素、⿏标拖拽等应⽤场景
ActionChains
我们以移动⿏标到某个元素为例。⿏标移动到百度页⾯【设置】上显⽰下拉列表
代码如下:
from selenium import webdriver
# 导⼊ActionChains 类
from _chains import ActionChains
wd = ()
itly_wait(10)
('/')
# 使⽤ ActionChains 来 模拟⿏标移动到设置,下拉列表显⽰的操作
ac = ActionChains(wd)
_to_element(_element_by_id('s-usersetting-top')).perform()
⼆、冻结界⾯
有些⽹站上⾯的元素, 我们⿏标放在上⾯,会动态弹出⼀些内容。
⿏标⼀移⾛后⼜消失,⽆法定位到元素属性,我们可以这么办哦
在 开发者⼯具栏 console ⾥⾯执⾏如下js代码
setTimeout(function(){debugger}, 5000)
这句代码什么意思呢?
表⽰在 5000毫秒后,执⾏ debugger 命令
执⾏该命令会 浏览器会进⼊debug状态。 debug状态有个特性, 界⾯被冻住, 不管我们怎么点击界⾯都不会触发事件。
所以,我们可以在输⼊上⾯代码并回车 执⾏后, ⽴即 ⿏标放在我们需要的动态内容上⾯。
然后,我们仔细等待 5秒 到了以后, 界⾯就会因为执⾏了 debugger 命令⽽被冻住。
如下图所⽰:
然后,我们就可以点击 开发者⼯具栏的 查看箭头, 再去 点击 我们需要的内容 ,查看其属性了。
三、弹出对话框
3.1、Alert
Alert 弹出框,⽬的就是显⽰通知信息,只需⽤户看完信息后,点击 OK(确定) 就可以了。
那么,⾃动化的时候,代码怎么模拟⽤户点击 OK 按钮呢?
selenium提供如下⽅法进⾏操作
_()
注意:如果我们不去点击它,页⾯的其它元素是不能操作的。 {: .notice–info}
如果程序要获取弹出对话框中的信息内容, 可以通过 如下代码
_
代码例⼦如下:
from selenium import webdriver
wd = ()
itly_wait(10)
('/files/selenium/')
# alert对话框选中,点击⼀下
_element_by_id('b1').click()
# 打印出弹框上的提⽰信息
print(_)
# 点击OK按钮,关闭弹框
_()
3.2、Confirm
Confirm弹出框,主要是让⽤户确认是否要进⾏某个操作。
⽐如:当管理员在⽹站上选择删除某个账号时,就可能会弹出 Confirm弹出框, 要求确认是否确定要删除。
Confirm弹出框 有两个选择供⽤户选择,分别是 OK 和 Cancel, 分别代表 确定 和 取消 操作。
那么,⾃动化的时候,代码怎么模拟⽤户点击 OK 或者 Cancel 按钮呢?
selenium提供如下⽅法进⾏操作
如果我们想点击 OK 按钮, 还是⽤刚才的 accept⽅法,如下
_()
如果我们想点击 Cancel 按钮, 可以⽤ dismiss⽅法,如下
_s()
代码例⼦如下:
from selenium import webdriver
wd = ()
itly_wait(10)
('/files/selenium/')
# alert对话框选中,点击⼀下
_element_by_id('b2').click()
# 打印出弹框上的提⽰信息
print(_)
# 点击OK按钮,关闭弹框
_s()
3.3、Prompt
出现 Prompt 弹出框 是需要⽤户输⼊⼀些信息,提交上去。
⽐如:当管理员在⽹站上选择给某个账号延期时,就可能会弹出 Prompt 弹出框, 要求输⼊延期多长时间。
可以调⽤如下⽅法
__keys()
代码例⼦如下:
from selenium import webdriver
wd = ()
itly_wait(10)
('/files/selenium/')
# prompt对话框选中,点击⼀下
_element_by_id('b3').click()
# 获取弹框对象
alt = _
# 打印出弹框上的提⽰信息
print()
# 输⼊信息,点击OK按钮,提交信息
_keys('我们⼀起学selenium')
()
# 点击取消按钮
_element_by_id('b3').click()
alt = _
s()
注意 : 有些弹窗并⾮浏览器的alert 窗⼝,⽽是html元素,这种对话框,只需要通过之前介绍的选择器选中并进⾏相应的操作就可以了。
四、其他技巧
下⾯是⼀些其他的 Selenium ⾃动化技巧
窗⼝⼤⼩
有时间我们需要获取窗⼝的属性和相应的信息,并对窗⼝进⾏控制
获取窗⼝⼤⼩
_window_size()
⽐如,做⾃动化测试时,⼀个测试⽤例检查点发现错误,我们可以截屏为⽂件,以便测试结束时进⾏⼈⼯核查。
可以使⽤ WebDriver 的 get_screenshot_as_file⽅法来截屏并保存为图⽚。
from selenium import webdriver
driver = ()
itly_wait(5)
# 打开⽹站
('/')
# 截屏保存为图⽚⽂件
_screenshot_as_file('')
⼿机模式
我们可以通过 desired_capabilities 参数,指定以⼿机模式打开chrome浏览器
参考代码,如下
from selenium import webdriver
mobile_emulation = { "deviceName": "Nexus 5" }
chrome_options = Options()
chrome__experimental_option("mobileEmulation", mobile_emulation)
driver = ( desired_capabilities = chrome__capabilities())
('')
input()
()
上传⽂件
有时候,⽹站操作需要上传⽂件。
通常,⽹站页⾯上传⽂件的功能,是通过 type 属性 为 file 的 HTML input 元素实现的。
如下所⽰:
使⽤selenium⾃动化上传⽂件,我们只需要定位到该input元素,然后通过 send_keys ⽅法传⼊要上传的⽂件路径即可。
如下所⽰:
# 先定位到上传⽂件的 input 元素
ele = _element_by_css_selector('input[type=file]')
# 再调⽤ WebElement 对象的 send_keys ⽅法
_keys(r'h:')
如果需要上传多个⽂件,可以多次调⽤send_keys,如下
ele = _element_by_css_selector('input[type=file]')
_keys(r'h:')
_keys(r'h:')
但是,有的⽹页上传,是没有 file 类型 的 input 元素的。
如果是Windows上的⾃动化,可以采⽤ Windows 平台专⽤的⽅法:
执⾏
pip install pypiwin32
确保 pywin32 已经安装,然后参考如下⽰例代码
# 找到点击上传的元素,点击
_element_by_css_selector('.dropzone').click()
sleep(2) # 等待上传选择⽂件对话框打开
# 直接发送键盘消息给 当前应⽤程序,
# 前提是浏览器必须是当前应⽤
import
shell = ch("")
# 输⼊⽂件路径,最后的'n',表⽰回车确定,也可能时 'r' 或者 'rn'
ys(r"h:" + 'n')
sleep(1)
⾃动化Edge浏览器
点击这⾥,边看视频讲解,边学习下⾯的内容
⾃动化基于Chromium内核的 微软最新Edge浏览器,⾸先需要查看Edge的版本。
点击菜单 帮助和反馈 > 关于Microsoft Edge ,在弹出界⾯中,查看到版本,⽐如
版本 79.0.309.71 (官⽅内部版本) (64 位)
然后 点击这⾥,打开Edge浏览器驱动下载⽹页 ,并选择下载对应版本的驱动。
在⾃动化代码中,指定使⽤Edge Webdriver类,并且指定 Edge 驱动路径,如下所⽰
from selenium import webdriver
driver = (r'd:')
('')
⾃动化Electron程序
Electron程序都是基于基于Chromium技术开发的,所以基本也可以⽤Chromedriver驱动⾃动化。
要⾃动化,⾸先需要得到内置 Chromium的版本号。
向开发⼈员查询打开 Dev Tools 窗⼝的快捷键(通常是ctrl + Shift + I),打开Dev Tools 窗⼝后, 在 Console tab中输⼊ 如下语句,查看版
本
> (/.*Chrome([0-9.]+)/)[1]
"79.0.3945.130"
然后去 chromedriver下载⽹址 ,下载对应版本的驱动。
在⾃动化程序中需要指定打开的可执⾏程序为Electron程序,⽽不是 Chrome浏览器。
如下所⽰
from selenium import webdriver
from s import Options
ops = Options()
# 指定Electron程序路径
_location = r"C:"
driver = (r"e:",
options = ops)
发布评论