需求:在实际的UI自动化测试工作过程中,需要配合键盘按键和鼠标来操作,那么UI自动化中如何模拟键盘操作呢?
1.键盘操作
在webdriver的keys()类提供键盘上所有按键的操作,还可以模拟组合键进行操作。
基本常见的键盘操作有以下几种:
send_keys(Keys.BACK_SPACE) # 删除键(BackSpace) send_keys(Keys.SPACE) # 空格键(Space) send_keys(Keys.TAB) # 制表键(Tab) send_keys(Keys.ESCAPE) # 回退键(Esc) send_keys(Keys.ENTER) # 回车键(Enter) send_keys(Keys.CONTROL,'a') # 全选(Ctrl+A) send_keys(Keys.CONTROL,'c') # 复制(Ctrl+C) send_keys(Keys.CONTROL,'x') # 剪切(Ctrl+X) send_keys(Keys.CONTROL,'v') # 粘贴(Ctrl+V) send_keys(Keys.F5) # 键盘 F5 send_keys(Keys. NUMPAD7) # 键盘 数字7
结合键盘操作,代码如下:
from selenium import webdriver # 导入selenium中的webdriver
from selenium.webdriver.common.keys import Keys # 导入keys
from time import sleep # 导入time模块中的sleep
driver = webdriver.Chrome()
driver.get("https://www.baidu.com") # 打开百度首页网站
sleep(2) # 等待两秒
driver.find_element_by_id("kw").send_keys("它石软件测试a") # 在百度首页输入框中输入它石软件测试a
sleep(2)
driver.find_element_by_id("kw").send_keys(Keys.BACK_SPACE) # 删除多余的字母a
sleep(2)
driver.find_element_by_id("kw").send_keys(Keys. NUMPAD6) # 键盘 增加数字6
sleep(2)
driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'a') # ctrl+a,全选
sleep(2)
driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'c') # 复制输入的内容
sleep(2)
driver.find_element_by_id("kw").send_keys(Keys.F5) # 刷新界面
sleep(2)
driver.get("https://www.baidu.com") # 打开百度首页网站
sleep(2)
driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'v') # 粘贴文字到搜狐搜索框
sleep(2)
driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'a') # ctrl+a,全选
sleep(2)
driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'x') # ctrl+x,剪切
sleep(2)
driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'v') # 粘贴文字到搜狐搜索框
sleep(2)
driver.find_element_by_id("su").click() # 点击百度一下按钮
sleep(2)
driver.quit() # 关闭浏览器
2.鼠标操作
在webdriver的ActionChains()类基本可以满足我们对鼠标操作的需求。比如单击,双击、右击,元素的拖拽等。
ActionChains的执行原理:当调用ActionChains方法的时候不会立即执行,而是将所有的操作暂时存储在一个队列中,当调用perform()的方法时候,队列会按照放入的先后顺序依次执行。
基本的鼠标操作有以下几种:
click() #单击鼠标左键 click_and_hold() #点击鼠标左键,按住不放 context_click() #点击鼠标右键 double_click() #双击鼠标左键 drag_and_drop() #拖拽到某个元素然后松开 drag_and_drop_by_offset() #拖拽到某个坐标然后松开 move_to_element() # 移动到某个元素上 perform() #执行链中的所有动作
场景:打开百度首页,将首页中的热榜关闭。
以上场景中,如果定位设置中的关闭热榜是无法直接点击的,需要先鼠标悬置在设置上,然后才能关闭热榜,代码如下:
如果直接定位元素进行关闭热榜,代码会报错,代码如下:
from selenium import webdriver # 导入selenium中的webdriver from time import sleep # 导入time模块中的sleep driver = webdriver.Chrome() driver.get("https://www.baidu.com") # 打开百度首页网站 driver.maximize_window() # 最大化浏览器 driver.find_element_by_xpath('//a[@]').click() sleep(2) driver.quit() # 关闭浏览器
报错信息如下,提示需要让元素可见之后才能操作:
selenium.common.exceptions.ElementNotVisibleException: Message: element not interactable
解决方案:先将鼠悬置在元素上,出现之后再关闭热榜,代码如下:
from selenium import webdriver # 导入selenium中的webdriver
from selenium.webdriver.common.action_chains import ActionChains # 导入ActionChains鼠标操作
from time import sleep # 导入time模块中的sleep
driver = webdriver.Chrome()
driver.get("https://www.baidu.com") # 打开百度首页网站
driver.maximize_window() # 最大化浏览器
sleep(2) # 等待两秒
element = driver.find_element_by_xpath('//span[@id="s-usersetting-top"]') # 定位到百度的首页设置元素
ActionChains(driver).move_to_element(element).perform() # 鼠标移动到设置元素上
sleep(2)
driver.find_element_by_xpath('//a[@]').click()
sleep(2)
driver.quit() # 关闭浏览器
其他的方法根据具体的情况使用不同的方法即可。
最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走
这些资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。希望对大家有所帮助…..关注下方我的微信公众号【程序员小濠】免费获取~



