引用包來自selenium-java-2.23.1.jarhtml
調用如下代碼時,須要引入actions類,以java爲例: import org.openqa.selenium.interactions.Actions; java
鼠標事件-概述git
1.單擊 click()、click(WebElement onElement)api
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)ui
6.釋放 release()、release(WebElement onElement),常常與clickAndHold相配合google
7.拖動 dragAndDrop(WebElement source, WebElement target)、 dragAndDropBy(WebElement source, int xOffset, int yOffset)spa
鍵盤事件-概述
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)
WebElement.sendKeys(CharSequence...)
執行事件
1.build():組合全部actions,生成新的actions
2.perform():執行actions,參考源碼發現該方法包含build()
============================================================================================
鼠標事件-案例
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)位置->釋放左鍵
鍵盤事件-案例
鍵盤的劃分:
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...)區別
WebElement.sendKeys()直接釋放參數
Actions action = New Actions(driver);
action.sendKeys(element,「C:\\test\\upload\\test.jpg」); 或 action.click(element).sendKeys(「C:\\test\\upload\\test.jpg」);
按下修飾鍵: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/
文中部分案例摘自網絡博客,僅用於學習記錄。