亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

【Selenium專題】鼠標鍵盤事件

系統 1986 0

引用包來自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專題】鼠標鍵盤事件


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 四虎com| 免费深夜福利 | 色综合免费视频 | 亚洲va欧美va | 免费视频毛片 | 亚洲成在人天堂一区二区 | 狠狠狠狠狠狠狠 | 欧美日韩激情在线一区 | 日日干夜夜拍 | 青青青国产高清免费视频 | 天天干天天色综合网 | 国产一区曰韩二区欧美三区 | 国产成人99久久亚洲综合精品 | 在线成人国产 | 国产精品成人久久久 | 欧美特级一级毛片 | 黄色影院免费 | 一级毛片免费播放视频 | 久久久久久久久免费影院 | 狠狠色丁香久久婷婷综合丁香 | 国产精品色婷婷在线观看 | 97精品在线 | 国产成人精品永久免费视频 | 国产精品ady9 | 麻豆成人在线 | 大片刺激免费播放视频 | 台湾一级毛片免费播放 | 欧美午夜精品久久久久免费视 | 欧美洲久久日韩欧美 | 久久国产精品岛国搬运工 | 91久久澡人人爽人人添 | 亚洲精品一区二区深夜福利 | 天天干天天拍 | 国产与自拍 | 四虎午夜剧场 | 精品精品国产自在香蕉网 | 日日狠狠太爽爽 | 国产精品成人观看视频国产奇米 | 精品久久久久久免费影院 | 成人高清视频在线观看大全 | 天天射天天操天天 |