前言

在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种方式相关推荐

  1. android模拟按键方法,Android随笔之——模拟按键操作的几种方式

    前几天转过一篇Android上模拟按键操作.触屏事件的博客,昨天又去找了百度.谷歌了一下,写了一点简单的测试代码,留待不时之需.有需要看之前转载的那篇博客的请看这里→_→转:Android随笔之--使 ...

  2. java制作oracle程序,Java程序操作Oracle两种方式之简单实现

    Java程序操作Oracle两种方式之简单实现 1.通过JDBC-ODBC桥连接Oracle数据库 (1)创建odbc源,在控制面板->管理工具->数据源(odbc)中添加DSN,比如取名 ...

  3. Java操作Excel三种方式POI、Hutool、EasyExcel

    Java操作Excel三种方式POI.Hutool.EasyExcel 1. Java操作Excel概述 1.1 Excel需求概述 1.2 Excel操作三种方式对比 2. ApachePOIExc ...

  4. Android按键响应的几种方式、安卓页面的跳转、页面跳转传参、页面自动跳转、Activity(页面)的生命周期

    按键响应的第一种方式: 在XML文件里面设置按键的onClick绑定函数.就像下面的代码,给Button设置onClick属性,在按键被按下的时候,会调用java文件里面的onClickbtton1这 ...

  5. Android中实现SQLite数据库CRUD操作的两种方式

    Android中实现SQLite数据库CRUD操作的两种方式 SQLite是一款轻量级的关系型数据库,具有运行速度.占用资源少的特点.通常只需要几百KB的内存就够了,因此特别适合在移动设备上使用.SQ ...

  6. 最近总结了串口(COM)读写操作的三种方式

    最近总结了串口(COM)读写操作的三种方式: 第1种方式是采用微软在.NET2.0推出了一个串口控件,SerialPort类,但必须是.NET2.0才可以 第2种方式是用API写串口通信,虽然难度高, ...

  7. 创建一对多表结构实例 /操作的三种方式

    例 1.注册App01  完成各项配置 2. 写完后自动生成一个id自增列(主键) 如果不想生成 自己写 创建两张表 3.执行创建语句 (其中还进行了一个小修改) 4.按照之前的方法 打开数据库 并输 ...

  8. SilkTest 对 Excel 表操作的两种方式

    SilkTest 对 Excel 表操作的两种方式  这两种方式都是对 SilkTest 运用的最基础的东西,我写得也比较简单.国内这方面的资料实在太少,对初学者可能有帮助. 方式一 : Data D ...

  9. java解析遍历List集合(其实现子类)的三种方式

    java解析遍历List集合(其实现子类)的三种方式 1 使用迭代器对象 1.1 底层 1.1.1 List接口继承了Collection接口 1.1.2 而Collection接口又继承了Itera ...

最新文章

  1. java 类的合成_Java设计模式-合成模式
  2. String比较 运用String.equals
  3. php roadrunner,使用RoadRunner 加速 Laravel 应用
  4. 1.21 Lambda表达式
  5. GUI for git|SourceTree|入门基础
  6. 【IT笔试面试题整理】寻找二叉树两节点的最近的公共祖先
  7. 将DataSet中的操作更新到Access数据库
  8. CSS浏览器兼容性----Hack
  9. python实现食品推荐_Python分析亚马逊赞不绝口食物评论
  10. 理光打印机如何设置邮件服务器,技术员帮您win10系统网络共享理光打印机的设置方法的操作办法...
  11. java地址有什么构成_IP地址采用分层结构,由(     )组成。
  12. 多线程中的死锁举例与分析(转)
  13. 带你玩转Visual Studio——带你高效开发
  14. python寻找所有三位数素数_寻找所有的素数的python实现
  15. 图片不能承受之重-转
  16. php 化学泥浆,天水化学泥浆
  17. 论简历解析及其步骤(一)步骤及理论
  18. 微信发红包、QQ登录、搜索框、水杯、聊天窗口、两台电梯、微信/淘宝支付、笔、 抖音发布短视频等功能测试用例
  19. php模板引擎jinja,django使用jinja2模板引擎报错: ‘django.template.backends.django.DjangoTemplates’...
  20. 数据库 多表 查询练习题

热门文章

  1. 通过命令下载执行恶意代码的几种姿势
  2. Java - 常用类 - 结业 - 课堂练习
  3. 随笔录2014.5.17
  4. 时空序列预测问题1: LSTM 的理解
  5. 数字商业帝国-亚马逊
  6. matlab数据分析工具箱,测风数据分析工具包WindAnalysis给大家分享
  7. PPT投影时常用快捷键
  8. 加密保护软件 WinLicense常见问题整理大全(七)
  9. 深度复盘我的2020秋招面试,互联网 — 国企/银行 — 事业单位分析的明明白白!
  10. 3D Human Body Reconstruction