WebDriver事件处理(鼠标+按键)

来源:互联网 发布:做淘宝一件代发赚钱吗 编辑:程序博客网 时间:2024/06/14 10:59

我们在使用webdriver的clear方法时,我们需要注意其中selenium下webdriver的clear()方法,那我们首先看看官网上对clear()方法的描述:

  /**
   * If this element is a text entry element, this will clear the value. Has no effect on other
   * elements. Text entry elements are INPUT and TEXTAREA elements.
   *
   * Note that the events fired by this event may not be as you'd expect.  In particular, we don't
   * fire any keyboard or mouse events.  If you want to ensure keyboard events are fired, consider
   * using something like {@link #sendKeys(CharSequence...)} with the backspace key.  To ensure
   * you get a change event, consider following with a call to {@link #sendKeys(CharSequence...)}
   * with the tab key.
   */
  void clear();

我们在使用clear()方法时,有可能将非文本框空间的一些附加的事件函数也要清除掉,所以官方建议使用组合键backspace键做处理;那下面就将WebDriver事件处理的相关资料列出来,供大家使用。

测试工具webdriver的使用过程中,应该会用到使用工具来模拟用的鼠标、键盘的一些输入操作,比如说:
1、鼠标的左键点击、双击、拖拽、右键点击等;
2、键盘的回车、回退、空格、ctrl、alt、shift等;

在webdriver中,有专门的一个类,是用来进行鼠标、键盘的模拟操作的,那就是Actions类,该类使用时,又会涉及到Keyboard、Mouse、CompositeAction(复合动作),先对Mouse的方法做简单罗列,然后再用代码说明:
1、鼠标左键点击:
Actions action = new Actions(driver);
action.click(driver.findElement(By.xpath(xpath)));
左键点击是普通常用的方法,前面已经介绍过一种更简单的方法:
Driver driver=new Driver();
driver.findElement(By.xpath(xpath)).click();

2、鼠标左键双击:
Actions action = new Actions(driver);
action.doubleClick(driver.findElement(By.xpath(xpath)));

3、鼠标左键按下操作:
Actions action = new Actions(driver);
action.clickAndHold(driver.findElemen(By.xpath(xpath)));

4、鼠标左键移动到元素操作:
Actions action = new Actions(driver);
action.moveToElement(driver.findElement(By.xpath(xpath)));

5、鼠标右键点击操作:
Actions action = new Actions(driver) ;
action.contextClick(driver.findElement(By.xpath(xpath)));

6、组合的鼠标操作(将目标元素拖拽到指定的元素上):
Actions action = new Actions(driver);
action.dragAndDrop(driver.findElement(By.xpath(xpath)),driver.findElement(By.xpath(xpath)));

7、组合的鼠标操作(将目标元素拖拽到指定的元素上):
Actions action = new Actions(driver);
action.dragAndDrop(driver.findElement(By.xpath(xpath)),xOffset,yOffset);

代码演示:
driver.get("http://www.baidu.com");
driver.findElement(By.name("wd")).sendKeys("林丹");

//点击操作
driver.findElement(by.id("su")).click();
driver.navigate().back();
Actions action=new Actions(driver);
action.click(driver.findElement(by.id("su")));

//双击操作(略)

//拖拽选择操作,鼠标按住不放,进行拖拽选择,然后释放鼠标,需要三个动作
action.clickAndHold(driver.findElement(By.id("1"))).moveToElement(driver.findElement(By.id("3"))).perform();
action.release();

//拖拽元素,将一个元素拖拽到另一个元素上,然后释放鼠标(略)

键盘的模拟操作,包括普通按键,比如enter、backspace、tab等,还包括四个修饰键(Modifier Keys),分别是Caps Lock,Control,Option,Command。
普通按键使用时,直接使用sendkeys(theKeys)就可以,如按下enter键:
action.sendKeys(Keys.ENTER).perform();

修饰键一般使用时,是和别的按键配合使用的,比如快捷键ctrl+F4,这时就得使用keyDown(theKeys)、keyUp(theKeys)来操作,代码如下:
driver.get("http://www.baidu.com");
driver.findElement(by.name("wd")).sendKeys("林丹");
Actions action=new Actions(driver);
//输入框中输入内容,然后点击回车进行百度
action.sendKeys(Keys.ENTER).perform();
//使用快捷键alt+f4关闭窗口(但是该方法不稳定,时行时不行,不行居多)
action.keyDown(keys.ATL).keyDown(keys.F4).keyUp(keys.ALT).perform();
//使用ctrl+a全选,注意selenium-java-2.42.2.jar下使用该方法不能正常使用,现在我使用的是注意selenium-java-2.41.0.jar(正常使用)。
driver.findElement(By.id("kw")).click();
action.sendKeys(Keys.CONTROL,"a").perform();
//若我们需要多次使用同一个按键时,那我们一定要释放该按键,比如需要多次使用ctrl+a时,
action.sendKeys(Keys.CONTROL,"a").keyUp(Keys.CONTROL).perform();

使用 Robot 类来操作 Keys 没有枚举出来的按键操作

1.在 WebDriver 中,Keys 枚举出了键盘上大多数的非字母类按键,从 F1 到 F10,NUMPAD0 到 NUMPAD9、ALT\TAB\CTRL\SHIFT 等等,你可以通过以下链接查看 Keys 枚举出来的所有按键。 但是并没有列出键盘上的所有按键,比如字母键 a、b、c、d … z,一些符号键比如:‘ {}\[] ’、‘ \ ’、‘。’、‘ ? ’、‘:’、‘ + ’、‘ - ’、‘ = ’、、‘“”’,还有一些不常用到的功能键如 PrtSc、ScrLk/NmLk。对于字母键和符号键,前面我们已经提到可以直接使用 sendKeys(“a”),sendKeys(“/”) 的方式来触发这些键盘事件。而对于一些功能组合键,如 Fn + NmLk 来关闭或者打开数字键,或者 Alt+PrtSC 来抓取当前屏幕的活动窗口并保存到图片,通过 WebDriver 的 Keys 是没办法操作的。 这个时候我们就需要用到 Java 的 Robot 类来实现对这类组合键的操作了。

//使用robot来操作control+a代码如下:
Robot robot = new Robot(); 
// 模拟按下键盘动作,这里通过使用 KeyEvent 类来获取对应键盘(CTRL)的虚拟键码
robot.keyPress(java.awt.event.KeyEvent.VK_CONTROL); 
// 按下 A键
robot.keyPress(java.awt.event.KeyEvent.VK_A); 
// 释放键盘动作,当这个动作完成之后,模拟组合键 Ctrl+ a的过程就已经完成,
// 使用完后,做释放按键处理
robot.keyRelease(java.awt.event.KeyEvent.VK_A); 
robot.keyRelease(java.awt.event.KeyEvent.VK_CONTROL); 

Tips:
1、拖拽选择时,使用clickAndHold和moveToElement时,会受到鼠标所在位置的影响,所以尽量是两个方法一起使用;
2、拖拽元素时,dragAndDrop方法,我没有找到实现的场景,所以没有写代码试验;
3、直接按下普通按键时,直接使用sendkeys(theKeys)方法就能够实现;
4、需要使用修饰键时,需要连贯动作中应该使用keydown和keyup方法;
action.keyDown(keys.ATL).sendKeys(keys.F4).keyUp(keys.ALT).perform();//这是不能实现alt+f4关闭窗口的效果的,只能实现单独按f4的效果
5、对于一些快捷键,如ctrl+a,可以直接sendkeys(Keys.CONTROL,"a") ,注意需要释放按钮;

0 0
原创粉丝点击