使用 Selenium WebDriver 做web自动化测试的时候,会经常模拟鼠标和键盘的一些行为:

比如使用鼠标单击、双击、右击、拖拽、悬浮等动作
或者键盘输入、快捷键使用、组合键使用等模拟键盘的操作
在 WebDeriver 中,有专门的类来负责实现这些测试场景,那就是 ActionChains和Keys类。

一、鼠标事件操作
ActionChains类中封装了对鼠标事件操作的方法,常见方法有:

  • context_click() 右击 --> 此方法模拟鼠标右键效果
  • double_click() 双击 --> 此方法模拟鼠标双击效果
  • drag_and_drop() 拖动 --> 此方法模拟鼠标拖动效果
  • move_to_element() 悬停 --> 此方法模拟鼠标悬停效果
  • perform() 执行 --> 此方法用来执行封装在ActionChains的行为

在ActionChains类中所有提供的鼠标事件方法,在调用的时候所有的行为都存储在ActionChains类中,需要调用perform()方法才能真正执行。

#导包、创建浏览器对象、获取百度的首页
from selenium import webdriver
#导入鼠标事件的ActionChains类
from selenium.webdriver.common.action_chains import ActionChains
import time
driver = webdriver.Chrome()
driver.get("https://www.baidu.com")
driver.maximize_window()

# 案例1:控制鼠标悬浮到百度首页“设置”按钮上
# setButton = driver.find_element_by_link_text("设置")
# 将对“设置”按钮的操作行为封装到ActionChains
# element = ActionChains(driver).move_to_element(setButton)
# 并调用perform方法执行悬浮操作
# element.perform()

# 案例2:在百度文本框中鼠标右键
webEdit = driver.find_element_by_id("kw")
element = ActionChains(driver).context_click(webEdit)
element.perform()

time.sleep(5)
driver.quit()

2、鼠标拖拽动作

方法的格式:drag_and_drop(source,target)

from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from time import sleep
 
driver = webdriver.Firefox()
url = "http://www.runoob.com/try/try.php?filename=jqueryui-api-droppable"

driver.get(url)
#切换到目标元素所在的frame
driver.switch_to.frame("iframeResult")
#确定拖拽目标的起点
source = driver.find_element_by_id("draggable")
#确定拖拽目标的终点
target = driver.find_element_by_id("droppable")
#执行动作
actions = ActionChains(driver)
actions.drag_and_drop(source,target)

#执行
actions.perform()
sleep(5)

Keys中封装了键盘上的按键或者组合键的字段,sendkeys()方法可以用来模拟键盘输入,除此之外还可以使用sendkeys方法发送文件到服务器(上传功能以input标签实现),常见的键盘事件操作有:

  • send_keys(Keys.Back_SPACE):删除键
  • send_keys(Keys.SPACE):空格键
  • send_keys(Keys.TAB):制表键
  • send_keys(Keys.ESCAPE):esc键
  • send_keys(Keys.ENTER):回车键
  • send_keys(Keys.CONTROL,’a’):全选
  • send_keys(Keys.CONTROL,’c’):复制
  • send_keys(Keys.CONTROL,’x’):剪切
  • send_keys(Keys.CONTROL,’v’):粘贴
  • send_keys(Keys.F1):F1键

键盘事件使用步骤:

  1. 导包:from selenium.webdriver.common.keys import keys
  2. 使用send_keys()方法发送Keys中定义的键、组合键及功能键
##导包、创建浏览器对象、获取一下url地址
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time

#driver:就是一个普通的变量,dr也行
driver = webdriver.Chrome()
driver.get("https://www.baidu.com")

# 1、百度“seleniumm”
driver.find_element_by_id("kw").send_keys("seleniumm")
time.sleep(1)
# 2、删除多输入的m
driver.find_element_by_id("kw").send_keys(Keys.BACK_SPACE)
time.sleep(1)
# 3、再输入“空格 教程”,再次发送字符串,是和前面的进行拼接
driver.find_element_by_id("kw").send_keys(" 教程")
time.sleep(1)
# 4、ctrl+a,全选文本框内容
driver.find_element_by_id("kw").send_keys(Keys.CONTROL,"a")
time.sleep(1)
# 5、ctrl+x,剪切选择的内容
driver.find_element_by_id("kw").send_keys(Keys.CONTROL,"x")
time.sleep(1)
# 6、ctrl+v,粘贴复制的内容
driver.find_element_by_id("kw").send_keys(Keys.CONTROL,"v")
time.sleep(1)
# 7、回车代替单击,完成搜索
driver.find_element_by_id("kw").send_keys(Keys.ENTER)
time.sleep(1)
# 8、退出浏览器
driver.quit()