(七)⾃动化测试之selenium学习⼼得-实战技巧⼀、Selenium 提供的ActionChains类实现⿏标右键点击、双击、移动⿏标到某个元素、⿏标拖拽等应⽤场景
我们以移动⿏标到某个元素为例。⿏标移动到百度页⾯【设置】上显⽰下拉列表
代码如下:
from selenium import webdriver
# 导⼊ActionChains 类
from selenium.webdrivermon.action_chains import ActionChains
wd = webdriver.Chrome()
wd.implicitly_wait(10)
<('www.baidu/')
# 使⽤ ActionChains 来模拟⿏标移动到设置,下拉列表显⽰的操作
ac = ActionChains(wd)
⼆、冻结界⾯
有些⽹站上⾯的元素,我们⿏标放在上⾯,会动态弹出⼀些内容。
⿏标⼀移⾛后⼜消失,⽆法定位到元素属性,我们可以这么办哦
在开发者⼯具栏 console ⾥⾯执⾏如下js代码
setTimeout(function(){debugger}, 5000)
这句代码什么意思呢?
表⽰在 5000毫秒后,执⾏ debugger 命令
执⾏该命令会浏览器会进⼊debug状态。 debug状态有个特性,界⾯被冻住,不管我们怎么点击界⾯都不会触发事件。
所以,我们可以在输⼊上⾯代码并回车执⾏后,⽴即⿏标放在我们需要的动态内容上⾯。
然后,我们仔细等待 5秒到了以后,界⾯就会因为执⾏了 debugger 命令⽽被冻住。
如下图所⽰:
然后,我们就可以点击开发者⼯具栏的查看箭头,再去点击我们需要的内容,查看其属性了。
三、弹出对话框
3.1、Alert
Alert 弹出框,⽬的就是显⽰通知信息,只需⽤户看完信息后,点击 OK(确定)就可以了。
那么,⾃动化的时候,代码怎么模拟⽤户点击 OK 按钮呢?
selenium提供如下⽅法进⾏操作
driver.switch_to.alert.accept()
注意:如果我们不去点击它,页⾯的其它元素是不能操作的。 {: .notice–info}
如果程序要获取弹出对话框中的信息内容,可以通过如下代码
driver.switch_
代码例⼦如下:
from selenium import webdriver
wd = webdriver.Chrome()
wd.implicitly_wait(10)
<('cdn1.python3.vip/files/selenium/test4.html')
# alert对话框选中,点击⼀下
wd.find_element_by_id('b1').click()
# 打印出弹框上的提⽰信息
print(wd.switch_)
# 点击OK按钮,关闭弹框
wd.switch_to.alert.accept()
3.2、Confirm
Confirm弹出框,主要是让⽤户确认是否要进⾏某个操作。
⽐如:当管理员在⽹站上选择删除某个账号时,就可能会弹出 Confirm弹出框,要求确认是否确定要删除。Confirm弹出框有两个选择供⽤户选择,分别是 OK 和 Cancel,分别代表确定和取消操作。
那么,⾃动化的时候,代码怎么模拟⽤户点击 OK 或者 Cancel 按钮呢?
selenium提供如下⽅法进⾏操作
如果我们想点击 OK 按钮,还是⽤刚才的 accept⽅法,如下
driver.switch_to.alert.accept()
如果我们想点击 Cancel 按钮,可以⽤ dismiss⽅法,如下
driver.switch_to.alert.dismiss()
代码例⼦如下:
from selenium import webdriver
wd = webdriver.Chrome()
wd.implicitly_wait(10)
<('cdn1.python3.vip/files/selenium/test4.html')
# alert对话框选中,点击⼀下
wd.find_element_by_id('b2').click()
# 打印出弹框上的提⽰信息
print(wd.switch_)
# 点击OK按钮,关闭弹框
wd.switch_to.alert.dismiss()
3.3、Prompt
出现 Prompt 弹出框是需要⽤户输⼊⼀些信息,提交上去。
⽐如:当管理员在⽹站上选择给某个账号延期时,就可能会弹出 Prompt 弹出框,要求输⼊延期多长时间。可以调⽤如下⽅法
driver.switch_to.alert.send_keys()
代码例⼦如下:
from selenium import webdriver
wd = webdriver.Chrome()
wd.implicitly_wait(10)
<('cdn1.python3.vip/files/selenium/test4.html')
# prompt对话框选中,点击⼀下
wd.find_element_by_id('b3').click()
# 获取弹框对象
alt = wd.switch_to.alert
# 打印出弹框上的提⽰信息
)
# 输⼊信息,点击OK按钮,提交信息
alt.send_keys('我们⼀起学selenium')
alt.accept()
# 点击取消按钮
wd.find_element_by_id('b3').click()
alt = wd.switch_to.alert
alt.dismiss()
注意:有些弹窗并⾮浏览器的alert 窗⼝,⽽是html元素,这种对话框,只需要通过之前介绍的选择器选中并进⾏相应的操作就可以了。
四、其他技巧
下⾯是⼀些其他的 Selenium ⾃动化技巧
窗⼝⼤⼩
有时间我们需要获取窗⼝的属性和相应的信息,并对窗⼝进⾏控制
获取窗⼝⼤⼩
<_window_size()
改变窗⼝⼤⼩
driver.set_window_size(x, y)
获取当前窗⼝标题
浏览⽹页的时候,我们的窗⼝标题是不断变化的,可以使⽤WebDriver的title属性来获取当前窗⼝的标题栏字符串。
driver.title
获取当前窗⼝URL地址
driver.current_url
例如,访问⽹易,并获取当前窗⼝的标题和URL
from selenium import webdriver
driver = webdriver.Chrome()
driver.implicitly_wait(5)
# 打开⽹站
<('www.163')
# 获取⽹站标题栏⽂本
print(driver.title)
# 获取⽹站地址栏⽂本
print(driver.current_url)
截屏
有的时候,我们需要把浏览器屏幕内容保存为图⽚⽂件。
⽐如,做⾃动化测试时,⼀个测试⽤例检查点发现错误,我们可以截屏为⽂件,以便测试结束时进⾏⼈⼯核查。
可以使⽤ WebDriver 的 get_screenshot_as_file⽅法来截屏并保存为图⽚。
from selenium import webdriver
driver = webdriver.Chrome()
driver.implicitly_wait(5)
# 打开⽹站
<('www.baidu/')
# 截屏保存为图⽚⽂件
<_screenshot_as_file('1.png')
⼿机模式
我们可以通过 desired_capabilities 参数,指定以⼿机模式打开chrome浏览器
参考代码,如下
from selenium import webdriver
mobile_emulation = { "deviceName": "Nexus 5" }
chrome_options = webdriver.ChromeOptions()
chrome_options.add_experimental_option("mobileEmulation", mobile_emulation)
driver = webdriver.Chrome( desired_capabilities = _capabilities())
<('www.baidu')
input()
driver.quit()
上传⽂件
有时候,⽹站操作需要上传⽂件。
通常,⽹站页⾯上传⽂件的功能,是通过 type 属性为 file 的 HTML input 元素实现的。
如下所⽰:
<input type="file" multiple="multiple">
使⽤selenium⾃动化上传⽂件,我们只需要定位到该input元素,然后通过 send_keys ⽅法传⼊要上传的⽂件路径即可。如下所⽰:
# 先定位到上传⽂件的 input 元素
ele = wd.find_element_by_css_selector('input[type=file]')
# 再调⽤ WebElement 对象的 send_keys ⽅法
ele.send_keys(r'h:\g02.png')
如果需要上传多个⽂件,可以多次调⽤send_keys,如下
ele = wd.find_element_by_css_selector('input[type=file]')
自动弹窗代码ele.send_keys(r'h:\g01.png')
ele.send_keys(r'h:\g02.png')
但是,有的⽹页上传,是没有 file 类型的 input 元素的。
如果是Windows上的⾃动化,可以采⽤ Windows 平台专⽤的⽅法:
执⾏
pip install pypiwin32
确保 pywin32 已经安装,然后参考如下⽰例代码
# 到点击上传的元素,点击
driver.find_element_by_css_selector('.dropzone').click()
sleep(2) # 等待上传选择⽂件对话框打开
# 直接发送键盘消息给当前应⽤程序,
# 前提是浏览器必须是当前应⽤
import win32com.client
shell = win32com.client.Dispatch("WScript.Shell")
# 输⼊⽂件路径,最后的'\n',表⽰回车确定,也可能时 '\r' 或者 '\r\n'
shell.Sendkeys(r"h:\a2.png" + '\n')
sleep(1)
⾃动化Edge浏览器
点击这⾥,边看视频讲解,边学习下⾯的内容
⾃动化基于Chromium内核的微软最新Edge浏览器,⾸先需要查看Edge的版本。
点击菜单帮助和反馈 > 关于Microsoft Edge ,在弹出界⾯中,查看到版本,⽐如
版本 79.0.309.71 (官⽅内部版本) (64 位)
然后点击这⾥,打开Edge浏览器驱动下载⽹页,并选择下载对应版本的驱动。
在⾃动化代码中,指定使⽤Edge Webdriver类,并且指定 Edge 驱动路径,如下所⽰
from selenium import webdriver
driver = webdriver.Edge(r'd:\tools\')
<('www.51job')
⾃动化Electron程序
Electron程序都是基于基于Chromium技术开发的,所以基本也可以⽤Chromedriver驱动⾃动化。
要⾃动化,⾸先需要得到内置 Chromium的版本号。
向开发⼈员查询打开 Dev Tools 窗⼝的快捷键(通常是ctrl + Shift + I),打开Dev Tools 窗⼝后,在 Console tab中输⼊如下语句,查看版本
> navigator.appVersion.match(/.*Chrome\/([0-9\.]+)/)[1]
"79.0.3945.130"
然后去 chromedriver下载⽹址,下载对应版本的驱动。
在⾃动化程序中需要指定打开的可执⾏程序为Electron程序,⽽不是 Chrome浏览器。
如下所⽰
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
ops = Options()
# 指定Electron程序路径
ops.binary_location = r"C:\"
driver = webdriver.Chrome(r"e:\",
options = ops)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论