Selenium WebDriver 中滑鼠事件
阿新 • • 發佈:2019-01-25
滑鼠點選操作
滑鼠點選事件有以下幾種型別:
清單 1. 滑鼠左鍵點選
Actions action = new Actions(driver);action.click();// 滑鼠左鍵在當前停留的位置做單擊操作
action.click(driver.findElement(By.name(element)))// 滑鼠左鍵點選指定的元素
清單 2. 滑鼠右鍵點選
Actions action = new Actions(driver);
action.contextClick();// 滑鼠右鍵在當前停留的位置做單擊操作
action.contextClick(driver.findElement(By.name(element)))// 滑鼠右鍵點選指定的元素
清單 3. 滑鼠雙擊操作
Actions action = new Actions(driver);
action.doubleClick();// 滑鼠在當前停留的位置做雙擊操作
var script = document.createElement('script');
script.src = 'http://static.pay.baidu.com/resource/baichuan/ns.js'; document.body.appendChild(script);
action.doubleClick(driver.findElement(By.name(element)))// 滑鼠雙擊指定的元素
清單 4. 滑鼠拖拽動作
Actions action = new Actions(driver);
// 滑鼠拖拽動作,將 source 元素拖放到 target 元素的位置。 action.dragAndDrop(source,target);
// 滑鼠拖拽動作,將 source 元素拖放到 (xOffset, yOffset) 位置,其中 xOffset 為橫座標,yOffset 為縱座標。
action.dragAndDrop(source,xOffset,yOffset);
在這個拖拽的過程中,已經使用到了滑鼠的組合動作,首先是滑鼠點選並按住
(click-and-hold) source 元素,然後執行滑鼠移動動作 (mouse move),移動到 target 元素位置或者是 (xOffset, yOffset) 位置,再執行滑鼠的釋放動作 (mouse release)。所以上面的方法也可以拆分成以下的幾個執行動作來完成:
action.clickAndHold(source).moveToElement(target).perform(); action.release();
清單 5. 滑鼠懸停操作
Actions action = new Actions(driver);
action.clickAndHold();// 滑鼠懸停在當前位置,既點選並且不釋放 action.clickAndHold(onElement);// 滑鼠懸停在 onElement 元素的位置
action.clickAndHold(onElement) 這個方法實際上是執行了兩個動作,首先是滑鼠移動到元素 onElement,然後再 clickAndHold, 所以這個方法也可以寫成 action.moveToElement(onElement).clickAndHold()。
清單 6. 滑鼠移動操作
Actions action = new Actions(driver);
action.moveToElement(toElement);// 將滑鼠移到 toElement 元素中點 // 將滑鼠移到元素 toElement 的 (xOffset, yOffset) 位置,
//這裡的 (xOffset, yOffset) 是以元素 toElement 的左上角為 (0,0) 開始的 (x, y) 座標軸。
var cpro_psid ="u2572954"; var cpro_pswidth =966; var cpro_psheight =120;
action.moveToElement(toElement,xOffset,yOffset)
// 以滑鼠當前位置或者 (0,0) 為中心開始移動到 (xOffset, yOffset) 座標軸 action.moveByOffset(xOffset,yOffset);
action.moveByOffset(xOffset,yOffset) 這裡需要注意,如果 xOffset 為負數,表示橫座標向左移動,yOffset 為負數表示縱座標向上移動。而且如果這兩個值大於當前螢幕的大小,滑鼠只能移到螢幕最邊界的位置同時丟擲 MoveTargetOutOfBoundsExecption 的異常。 滑鼠移動操作在測試環境中比較常用到的場景是需要獲取某元素的 flyover/tips,實際應用中很多 flyover 只有當滑鼠移動到這個元素之後才出現,所以這個時候通過執行
moveToElement(toElement) 操作,就能達到預期的效果。但是根據我個人的經驗,這個方法對於某些特定產品的圖示,影象之類的 flyover/tips 也不起作用,雖然在手動操作的時候移動滑鼠到這些圖示上面可以出現 flyover, 但是當使用 WebDriver 來模擬這一移動操作時,雖然方法成功執行了,但是 flyover 卻出不來。所以在實際應用中,還需要對具體的產品頁面做相應的處理。
清單 7. 滑鼠釋放操
Actions action = new Actions(driver); action.release();// 釋放滑鼠
PS:一般只使用移動的事件,不點選的情況下滑鼠事件可以不釋放