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,支持的键也很多,即使有多个浏览器也不会有问题(推荐使用)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值