java actionchains,UI自动化测试:模拟组合按键操作的2种方式
前言
在UI自动化测试的时候,可能会遇到键盘按键的组合操作,比如ctrl+c,ctrl+v等,类似于我们手动操作的快捷键。可以有两种方式实现:一种是selenium中自带的ActionChains结合Keys;另外一种是使用系统的win32api。
代码示例
方法一:ActionChains+Keys
#encoding=utf-8
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.keys import Keys
import time
#启动chrome浏览器
driver = webdriver.Chrome(executable_path="f:\\chromedriver")
#访问百度首页
driver.get("http://www.baidu.com")
#定位到搜索输入框,并输入"陈伟霆"
driver.find_element_by_id("kw").send_keys("陈伟霆")
time.sleep(1)
#模拟ctrl+a,全选
ActionChains(driver).key_down(Keys.CONTROL).send_keys('a').\
key_up(Keys.CONTROL).perform()
#模拟ctrl+x,剪切
ActionChains(driver).key_down(Keys.CONTROL).send_keys('x').\
key_up(Keys.CONTROL).perform()
time.sleep(1)
#重新访问百度首页
driver.get("http://www.baidu.com")
#将焦点切换到搜索框中
driver.find_element_by_id("kw").click()
#模拟ctrl+v,粘贴
ActionChains(driver).key_down(Keys.CONTROL).send_keys('v').\
key_up(Keys.CONTROL).perform()
# 点击“百度一下”搜索按钮
time.sleep(1)
driver.find_element_by_id('su').click()
time.sleep(3)
#断言
assert "陈伟霆" in driver.page_source
#退出浏览器
driver.quit()
方法二:win32api(推荐)
需要安装win32clipboad:py -3 -m pip install pywin32
#encoding=utf-8
from selenium import webdriver
# 导入模拟组合按键需要的包
import win32clipboard as w
import win32api
import win32con
import time
#定义一个字典,存储常用按键对应的值
VK_CODE ={
'enter':0x0D,
'ctrl':0x11,
'a':0x41,
'v':0x56,
'x':0x58
}
def getText():
'''读取剪切板'''
w.OpenClipboard()
d = w.GetClipboardData(win32con.CF_TEXT)
w.CloseClipboard()
return d
def setText(aString):
'''设置剪切板内容'''
w.OpenClipboard()
w.EmptyClipboard()
w.SetClipboardData(win32con.CF_UNICODETEXT, aString)
w.CloseClipboard()
def keyDown(keyName):
'''键盘键按下(固定用法)'''
win32api.keybd_event(VK_CODE[keyName], 0, 0, 0)
def keyUp(keyName):
'''键盘键抬起(固定用法)'''
win32api.keybd_event(VK_CODE[keyName], 0, win32con.KEYEVENTF_KEYUP, 0)
#设置剪贴板内容为"陈伟霆"
setText("陈伟霆")
#从剪贴板读取内容
content = getText()
#启动chrome浏览器
driver = webdriver.Chrome(executable_path="f:\\chromedriver")
#访问百度首页
driver.get("http://www.baidu.com")
#将焦点切换到搜索输入框中
driver.find_element_by_id("kw").click()
time.sleep(1)
#模拟ctrl+v操作
keyDown('ctrl')
keyDown('v')
keyUp('v')
keyUp('ctrl')
# 点击“百度一下”搜索按钮
time.sleep(1)
driver.find_element_by_id('su').click()
time.sleep(3)
#断言
assert content in driver.page_source
#退出浏览器
driver.quit()
比较
1.第一种方法在多线程时启动多个浏览器,使用Keys这种方法测试很可能会失败,因为焦点不一定在自己想要的地方;而且一定要执行perform(),否则没有效果;
2.第二种方法时系统提供的api,支持的键也很多,即使有多个浏览器也不会有问题(推荐使用)
java actionchains,UI自动化测试:模拟组合按键操作的2种方式相关推荐
- android模拟按键方法,Android随笔之——模拟按键操作的几种方式
前几天转过一篇Android上模拟按键操作.触屏事件的博客,昨天又去找了百度.谷歌了一下,写了一点简单的测试代码,留待不时之需.有需要看之前转载的那篇博客的请看这里→_→转:Android随笔之--使 ...
- java制作oracle程序,Java程序操作Oracle两种方式之简单实现
Java程序操作Oracle两种方式之简单实现 1.通过JDBC-ODBC桥连接Oracle数据库 (1)创建odbc源,在控制面板->管理工具->数据源(odbc)中添加DSN,比如取名 ...
- Java操作Excel三种方式POI、Hutool、EasyExcel
Java操作Excel三种方式POI.Hutool.EasyExcel 1. Java操作Excel概述 1.1 Excel需求概述 1.2 Excel操作三种方式对比 2. ApachePOIExc ...
- Android按键响应的几种方式、安卓页面的跳转、页面跳转传参、页面自动跳转、Activity(页面)的生命周期
按键响应的第一种方式: 在XML文件里面设置按键的onClick绑定函数.就像下面的代码,给Button设置onClick属性,在按键被按下的时候,会调用java文件里面的onClickbtton1这 ...
- Android中实现SQLite数据库CRUD操作的两种方式
Android中实现SQLite数据库CRUD操作的两种方式 SQLite是一款轻量级的关系型数据库,具有运行速度.占用资源少的特点.通常只需要几百KB的内存就够了,因此特别适合在移动设备上使用.SQ ...
- 最近总结了串口(COM)读写操作的三种方式
最近总结了串口(COM)读写操作的三种方式: 第1种方式是采用微软在.NET2.0推出了一个串口控件,SerialPort类,但必须是.NET2.0才可以 第2种方式是用API写串口通信,虽然难度高, ...
- 创建一对多表结构实例 /操作的三种方式
例 1.注册App01 完成各项配置 2. 写完后自动生成一个id自增列(主键) 如果不想生成 自己写 创建两张表 3.执行创建语句 (其中还进行了一个小修改) 4.按照之前的方法 打开数据库 并输 ...
- SilkTest 对 Excel 表操作的两种方式
SilkTest 对 Excel 表操作的两种方式 这两种方式都是对 SilkTest 运用的最基础的东西,我写得也比较简单.国内这方面的资料实在太少,对初学者可能有帮助. 方式一 : Data D ...
- java解析遍历List集合(其实现子类)的三种方式
java解析遍历List集合(其实现子类)的三种方式 1 使用迭代器对象 1.1 底层 1.1.1 List接口继承了Collection接口 1.1.2 而Collection接口又继承了Itera ...
最新文章
- java 类的合成_Java设计模式-合成模式
- String比较 运用String.equals
- php roadrunner,使用RoadRunner 加速 Laravel 应用
- 1.21 Lambda表达式
- GUI for git|SourceTree|入门基础
- 【IT笔试面试题整理】寻找二叉树两节点的最近的公共祖先
- 将DataSet中的操作更新到Access数据库
- CSS浏览器兼容性----Hack
- python实现食品推荐_Python分析亚马逊赞不绝口食物评论
- 理光打印机如何设置邮件服务器,技术员帮您win10系统网络共享理光打印机的设置方法的操作办法...
- java地址有什么构成_IP地址采用分层结构,由( )组成。
- 多线程中的死锁举例与分析(转)
- 带你玩转Visual Studio——带你高效开发
- python寻找所有三位数素数_寻找所有的素数的python实现
- 图片不能承受之重-转
- php 化学泥浆,天水化学泥浆
- 论简历解析及其步骤(一)步骤及理论
- 微信发红包、QQ登录、搜索框、水杯、聊天窗口、两台电梯、微信/淘宝支付、笔、 抖音发布短视频等功能测试用例
- php模板引擎jinja,django使用jinja2模板引擎报错: ‘django.template.backends.django.DjangoTemplates’...
- 数据库 多表 查询练习题