引用包来自selenium-java-2.23.1.jar

调用以下代码时,需要引入actions类,以java为例: import org.openqa.selenium.interactions.Actions;

鼠标事件-概述


1.单击 click()、click(WebElement onElement)

2.双击doubleClick() 、 doubleClick(WebElement onElement)

3.右击contextClick()、 contextClick(WebElement onElement)

4.移动/悬浮 moveByOffset(int xOffset, int yOffset)、moveToElement(WebElement toElement)、moveToElement(WebElement toElement, int xOffset, int yOffset)

5.左键按下不释放 clickAndHold()、clickAndHold(WebElement onElement)

6.释放 release()、release(WebElement onElement),经常与clickAndHold相配合

7.拖动dragAndDrop(WebElement source, WebElement target)、 dragAndDropBy(WebElement source, int xOffset, int yOffset)

  •  以上方法返回值均为Actions, 需要调用perform()后才能真正执行。

键盘事件-概述


1.普通键操作:sendKeys(java.lang.CharSequence... keysToSend)、sendKeys(WebElement element, java.lang.CharSequence... keysToSend)

2.修饰键操作

  按下修饰键:keyDown(Keys theKey)、keyDown(WebElement element, Keys theKey)、sendKeys(keysToSend)

  松开修饰键:keyUp(Keys theKey)、keyUp(WebElement element, Keys theKey)、sendKeys(Keys.NULL)

  •  以上方法返回值均为Actions, 需要调用perform()后才能真正执行
  • keyDown\keyUp 参数只能是修饰键,否则抛出llegalArgumentException 异常
  • 执行keyDown(theKey)和sendKeys(修饰键)后,需要明显释放,否则将一直执行;释放方法分别为keyUp(theKey),sendKeys(Keys.NULL)
  • 区分Actions.sendKeys(keysToSend)和 WebElement.sendKeys(CharSequence...)

执行事件


1.build():组合所有actions,生成新的actions

2.perform():执行actions,参考源码发现该方法包含build()

  • 所有Actions事件必须调用perform后才被真正执行

============================================================================================

鼠标事件-案例


1.单击 click()、click(WebElement onElement)

Actions action = new Actions(driver);
action.click().perform();// 鼠标左键在当前停留的位置做单击操作
action.click(driver.findElement(By.***)).perform();// 鼠标左键点击指定的元素

2.双击 doubleClick() 、 doubleClick(WebElement onElement)

Actions action = new Actions(driver);
action.doubleClick().perform();// 鼠标在当前停留的位置做双击操作
action.doubleClick(driver.findElement(By.***)).perform();// 鼠标双击指定的元素

3.右击 contextClick()、 contextClick(WebElement onElement)

Actions action = new Actions(driver);
action.contextClick().perform();// 鼠标右键在当前停留的位置做单击操作
action.contextClick(driver.findElement(By.***)).perform();// 鼠标右键点击指定的元素

4.移动/悬浮 moveByOffset(int xOffset, int yOffset)、moveToElement(WebElement toElement)、moveToElement(WebElement toElement, int xOffset, int yOffset)

Actions action = new Actions(driver);
action.moveToElement(toElement).perform();// 将鼠标移到 toElement 元素中心点
action.moveToElement(toElement,xOffset,yOffset).perform();// 将鼠标移到元素 toElement 的 (xOffset, yOffset) 位置,
//这里的 (xOffset, yOffset) 是以元素 toElement 的左上角为 (0,0) 开始的 (x, y) 坐标轴。 action.moveByOffset(xOffset,yOffset).perform();// 以鼠标当前位置或者 (0,0) 为中心开始移动到 (xOffset, yOffset) 坐标轴

action.moveByOffset(xOffset,yOffset) 这里需要注意,如果 xOffset为负数,表示横坐标向左移动,yOffset 为负数表示纵坐标向上移动。而且如果这两个值大于当前屏幕的大小,鼠标只能移到屏幕最边界的位置同时抛出MoveTargetOutOfBoundsExecption 的异常。

5.左键按下不释放 clickAndHold()、clickAndHold(WebElement onElement)

Actions action = new Actions(driver);
action.clickAndHold().perform();// 鼠标在当前位置点击后不释放
action.clickAndHold(onElement).perform();// 鼠标在 onElement 元素的位置点击后不释放

6.释放 release()、release(WebElement onElement),经常与clickAndHold相配合

Actions action = new Actions(driver);
action.release().perform();// 释放鼠标

7.拖动 dragAndDrop(WebElement source, WebElement target)、 dragAndDropBy(WebElement source, int xOffset, int yOffset)

Actions action = new Actions(driver);
action.dragAndDrop(source,target).perform();// 将 source 元素拖放到 target 元素的位置。
action.dragAndDrop(source,xOffset,yOffset).perform();// 将 source 元素拖放到 (xOffset, yOffset) 位置,其中 xOffset 为横坐标,yOffset 为纵坐标。

  拖拽动作是组合动作可以拆分实现:

Actions action = new Actions(driver);
action.clickAndHold(source).moveToElement(target).release().perform(); //选中source元素->移动到target元素位置->释放左键
action.clickAndHold(source).moveByOffset(xOffset,yOffset).release().perform(); //选中source元素->拖放到(xOffset,yOffset)位置->释放左键

键盘事件-案例


键盘的划分:

  • 普通键

    • 已枚举:Keys.TAB、Keys.SPACE、Keys.F4、Keys.NUMPAD2、Keys.ARROW_DOWN、Keys.BACK_SPACE等;更多枚举键可参考selenium api中的keys类
    • 未枚举:的字母键(a、b、c...)和符号键(‘ {}\[]’、‘ \ ’、‘。’、‘ ? ’、‘:’、‘ + ’、‘ – ’、‘ = ’、、‘“”’)等
  • 修饰键  Keys.CONTROL、Keys.SHIFT、Keys.ALT等,单独按下修饰键本身一般不会触发任何键盘事件,通常和普通建组合使用。
  • 更多信息可参考Modifier key

1.普通键盘操作

Actions action = new Actions(driver);
action.sendKeys(Keys.TAB).perform();// 模拟按下并释放 TAB 键
action.sendKeys(element,Keys.SPACE).perform();// 对element输入并释放空格键--可拆分为 action.click(element).sendKeys(Keys.SPACE).perform();
action.sendKeys("a").perform();// 模拟输入a
action.sendKeys(",").perform();// 模拟输入,

  Actions.sendKeys(keysToSend)和 WebElement.sendKeys(CharSequence...)区别

    • Actions.sendKeys(keysToSend) ,操作修饰键时不会释放,等于actions.sendKeys(keysToSend),需要action.sendKeys(keys.NULL) 释放修饰键;WebElement.sendKeys()直接释放参数
    • 其次就是当 Actions 的 sendKeys(keysToSend) 执行完之后,焦点就不在当前元素了。所以我们可以使用sendKeys(Keys.TAB) 来切换元素的焦点,从而达到选择元素的作用,这个最常用到的场景就是在用户名和密码的输入过程中。
    • WebElement.sendKeys(keysToSend) 可以上传附件,比如element.sendKeys(“C:\\test\\uploadfile\\test.jpg”); 这个操作将 test.jpg上传到服务器;但是使用以下方法不会报错,但是实际上传失败:

      Actions action = New Actions(driver);
      action.sendKeys(element,“C:\\test\\upload\\test.jpg”); 或 action.click(element).sendKeys(“C:\\test\\upload\\test.jpg”);

2.修饰键操作:

  按下修饰键:keyDown(Keys theKey)、keyDown(WebElement element, Keys theKey)、sendKeys(keysToSend)

  松开修饰键:keyUp(Keys theKey)、keyUp(WebElement element, Keys theKey)、sendKeys(Keys.NULL)

  1)修饰键惯用操作:

   Actions action = new Actions(driver);
  action.keyDown(Keys.CONTROL);// 按下 Ctrl 键
  action.keyDown(Keys.SHIFT);// 按下 Shift 键
  action.keyDown(Key.ALT);// 按下 Alt 键
  action.keyUp(Keys.CONTROL);// 释放 Ctrl 键
  action.keyUp(Keys.SHIFT);// 释放 Shift 键
  action.keyUp(Keys.ALT);// 释放 Alt 键
   sendKeys(keysToSend);//按下修饰键
   sendKeys(Keys.NULL);//释放修饰键

  2)组合件输入-案例

  SHIFT+a   预期输入A

Actions action = new Actions(driver); 
action.keyDown(Keys.SHIFT).sendKeys(driver.findElement(By.tagName("input")),"a").keyUp(Keys.SHIFT).perform();//按下Shift->输入a->释放Shift,结果输入A

  3)输入修饰键后需要明显释放-案例

WebElement input = driver.findElement(By.tagName("input"));
Actions action = new Actions(driver);
action.keyDown(Keys.SHIFT).sendKeys(input,"a").perform();//按下Shift->输入a,结果输入A ;未释放Shift
action.sendKeys(input, "b").perform();//输入大写B
WebElement input = driver.findElement(By.tagName("input"));
Actions action = new Actions(driver);
action.keyDown(Keys.SHIFT).sendKeys(input,"a").keyUp(Keys.SHIFT).perform();//按下Shift->输入a->释放Shift,结果输入A ; 已释放Shift
action.sendKeys(input, "b").perform();//输入小写b

同理,使用Actions.sendKeys(修饰键)后,需要使用sendKeys(Keys.NULL) 释放修饰键,否则修饰键一直处于被按下状态

3.robot类处理未枚举键:(未验证)

java.awt.Robot robot = new Robot();
robot.keyPress(java.awt.event.KeyEvent.VK_ALT);
robot.keyPress(java.awt.event.KeyEvent.VK_ALT);

===========================================================================================

更多参考资料:

Selenium java api http://selenium.googlecode.com/git/docs/api/java/index.html

Selenium 源码 git clone https://code.google.com/p/selenium/

文中部分案例摘自网络博客,仅用于学习记录。

【Selenium专题】鼠标键盘事件的更多相关文章

  1. Python - selenium_WebDriver 鼠标键盘事件

    from selenium import webdriver #引入ActionChains类 提供了鼠标的操作方法 from selenium.webdriver.common.action_cha ...

  2. Selenium4.0+Python3系列(四) - 常见元素操作(含鼠标键盘事件)

    一.写在前面 上篇文章介绍的是关于浏览器的常见操作,接下来,我们将继续分享关于元素的常见操作,建议收藏.转发! 二.元素的状态 在操作元素之前,我们需要了解元素的常见状态. 1.常见元素状态判断,傻傻 ...

  3. Linux 模拟 鼠标 键盘 事件

    /************************************************************************ * Linux 模拟 鼠标 键盘 事件 * 说明: ...

  4. Python——pyHook监听鼠标键盘事件

    pyHook包为Windows中的全局鼠标和键盘事件提供回调. 底层C库报告的信息包括事件的时间,事件发生的窗口名称,事件的值,任何键盘修饰符等. 而正常工作需要pythoncom等操作系统的API的 ...

  5. Tkinter 鼠标键盘事件(一)

    一: 鼠标事件 <Button-1>                                                                     鼠标左键单击 ...

  6. 自动化测试基础篇--Selenium鼠标键盘事件

    摘自https://www.cnblogs.com/sanzangTst/p/7477382.html 前面几篇文章我们学习了怎么定位元素,同时通过实例也展示了怎么切换到iframe,怎么输入用户名和 ...

  7. No.3 selenium学习之路之鼠标&键盘事件

    鼠标事件 from selenium.webdriver.common.action_chains import ActionChains contest_click()  右击 double_cli ...

  8. selenium模拟鼠标键盘操作

    简单操作: 1.点击(鼠标左键)页面按钮:click() 2.清空输入框:clear() 3.输入字符串:send_keys()submit提交表单: 1.一般情况可以点击搜索按钮来搜索 2.也可以用 ...

  9. Python-selenium:鼠标键盘事件

    鼠标事件 # 每个模拟事件后需加.perform() 才会执行 # context_click() 右击 # double_click() 双击 # drag_and_drop(source, tar ...

随机推荐

  1. Python学习笔记---切片 列表 元祖 字典 集合

    列表[1,2,3,2]#[] 元祖(1,2,3,2)#() 字典{1:2,3:2}#{} 集合{1,2,3,2}#{} 1,集合与列表的区别,集合里不能有重复元素 2.字典与集合的区别,都是用花括号表 ...

  2. subString(index,end) 用法

    sb = sb.Substring(0, sb.Length - 1); 获取当前字符串的前一部分去掉最后一个字符

  3. Android Studio Intent使用(显式、隐式)

    https://blog.csdn.net/u012005313/article/details/47006689 使用Intent能够使程序在不同活动中跳转,意及能够使用不同界面.Intent用法分 ...

  4. Reboot-less node fencing in Oracle Clusterware 11g Release 2

    在进行一次RAC的高可用性测试时,当private网卡的网线被拔掉之后,没有出现传说中的有一个节点被CRS强制重启,取而代之的是node2上面的ASM实例和RDBMS实例被关闭:当网线被重新插上时,n ...

  5. springmvc controller方法返回值

  6. P1147连续自然数和-(尺取法)

    https://www.luogu.org/problemnew/show/P1147 题意:输入一个n,求连续几个数加起来等于n,输出这几个连续的数的第一个和最后一个.10<=n<=20 ...

  7. 爬虫 1 requests 、beautifulsoup

    1.requests 1.method 提交方式:post.get.put.delete.options.head.patch 2.url 访问地址 3.params 在url中传递的参数,GET p ...

  8. Pandas合并数据集之concat、combine_first方法

    轴向连接(concat) Numpy import numpy as np import pandas as pd from pandas import Series arr = np.arange( ...

  9. NodeJs学习相关网址

    node官方中文 https://nodejs.org/zh-cn/   Node.js 中文网 https://nodejs.org/zh-cn/   Node.js 教程 | 菜鸟教程 http: ...

  10. 图像处理项目——生成csv文件提高读取效率

    利用pyhton脚本生成csv文件 *开发环境为windows PyCharm*使用的是pyhton脚本*生成人脸和人脸对应的标签的csv文件 一:主要步骤 1.载入对应路径2.提取每一张图片对应的位 ...