【Selenium專題】鼠標鍵盤事件

引用包來自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

  •  以上方法返回值均爲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.F四、Keys.NUMPAD二、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/

文中部分案例摘自網絡博客,僅用於學習記錄。

相關文章
相關標籤/搜索