鼠標點擊操作
鼠標點擊事件有以下幾種類型:
//記得最後一定要調用perform,否則click並沒有真正執行
清單 1. 鼠標左鍵點擊
Actions action = new Actions(dr);action.click();// 鼠標左鍵在當前停留的位置做單擊操作action.click(dr.findElement(element)).perform();;// 鼠標左鍵點擊指定的元素
清單 2. 鼠標右鍵點擊
Actions action = new Actions(dr);
action.contextClick(dr.findElement(element)).perform();// 鼠標右鍵點擊指定的元素
清單 3. 鼠標雙擊操作
Actions action = new Actions(dr);
action.doubleClick();// 鼠標在當前停留的位置做雙擊操作
action.doubleClick(dr.findElement(element).perform();// 鼠標雙擊指定的元素
清單 4.鼠標拖拽動作(可以用來測試鼠標是否手型顯示)
Actions action = new Actions(dr);
WebElement source = dr.findElement(element);
WebElement target = dr.findElement(element));
// 鼠標拖拽動作,將 source 元素拖放到 target 元素的位置。
action.dragAndDrop(source, target);
action.clickAndHold(source).moveToElement(target).perform();
action.release();
清單 5. 鼠標懸停操作(可以測試鼠標放到超鏈接或者按鈕上字體顏色發生變化,及頁面左下角顯示超鏈接地址)
Actions action = new Actions(dr);
action.clickAndHold();// 鼠標懸停在當前位置,既點擊並且不釋放
action.clickAndHold(onElement);// 鼠標懸停在 onElement 元素的位置
action.clickAndHold(onElement).perform(); //這個方法實際上是執行了兩個動作,首先是鼠標移動到元素 onElement,然後再 clickAndHold, 所以這個方法也可以寫成 action.moveToElement(onElement).clickAndHold()。
清單 6.鼠標釋放操
Actions action = new Actions(driver);
action.release();//釋放鼠標
鍵盤模擬操作
Actions action = new Actions(driver);
WebElement element = dr.findElement(By.id("kw"));
action.keyUp(element,Keys.SHIFT).sendKeys("222",Keys.ENTER).keyDown(Keys.SHIFT).perform();
Assert.assertTrue(element.getAttribute("value").contains("@@@"));
keyDown表示按下鍵盤,keyUp表示鬆開鍵盤。上述代碼中先是執行keyDown,這時shift鍵按下後面的sendKeys內容也是在shift鍵按下的情況輸入的,所以實際輸入的是@@@
清單 8.
驗證焦點顯示
當 Actions的 sendKeys(keysToSend)執行完之後,焦點就不在當前元素了。所以我們可以使用sendKeys(Keys.TAB)來切換元素的焦點,從而達到選擇元素的作用,這個最常用到的場景就是在用戶名和密碼的輸入過程中。
element.sendKeys("dddd",Keys.TAB);
清單 9.修飾鍵方法 KeyDown(theKey)、keyUp(theKey)
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鍵
所以要通過 Alt+F4來關閉當前的活動窗口,可以通過下面語句來實現:action.keyDown(Keys.ALT).keyDown(Keys.F4).keyUp(Keys.ALT).perform();
而如果是對於像鍵盤上面的字母鍵 a,b,c,d...等的組合使用,可以通過以下語句實現:action.keyDown(Keys.CONTROL).sednKeys(“a”).perform();
清單 10.批量上傳文件
/**
*
* @Description:在百度雲上測試文件批量上傳功能,主要是通過循環的方式去做單一
*的上傳動作 , 登陸過程已經去掉
*/
@Test
public void test_mutilUploadFile() throwsException {
System.out.println("upload start");
//獲取上傳控件元素
WebElement uploadButton =driver.findElement(By.name("html5uploader"));
//構建上傳文件路徑,將需要上傳的文件添加到 CharSequence數組
CharSequence[] files = new CharSequence[5];
files[0] ="C:\\test\\test1.txt";
files[1] = "C:\\test\\test2.txt";
files[2] ="C:\\test\\test3.txt";
files[3] ="C:\\test\\test4.txt";
files[4] ="C:\\test\\test5.txt";
//循環列出每支需要上傳的文件路徑,做單一上傳動作
for(CharSequencefile: files){
uploadButton.sendKeys(file);
}
Thread.sleep(2000);
System.out.println("upload end");
}
當執行結束後,效果如圖 1。
圖 1.批量上傳文件
結束語
在 SeleniumWebDriver中,有了 Actions類和 Keys 枚舉對鍵盤和鼠標的操作已經做的非常到位,再結合 Java本身 Robot、KeyEvent等類的使用,基本上可以滿足工作中遇到的對鼠標鍵盤操作的應用了。
其次要注意的地方是 WebDriver對瀏覽器的支持問題,Selenium WebDriver支持的瀏覽器非常廣泛,從 IE、Firefox、Chrome到 Safari 等瀏覽器, WebDriver 都有相對應的實現:InterntExplorerDriver、FirefoxDriver、ChromeDriver、SafariDriver、AndroidDriver、 IPhoneDriver、HtmlUnitDriver等。根據個人的經驗,Firefox以及 Chrome 瀏覽器對 WebDriver 的支持最好了,Firefox 搭上 Firebug 以及 Firepath, 在寫腳本的過程中非常方便,而 ChromeDriver是 Google 公司自己支持與維護的項目。HtmlUnitDriver速度最快,一個純 Java實現的瀏覽器。IE 比較慢,而且對於 Xpath 等支持不是很好。更多關於 SeleniumWebDriver的知識,大家可以從下面的鏈接去訪問 Selenium官方文檔。
js滾動
JavascriptExecutor JS=(JavascriptExecutor) driver;
Stringhigh="scroll(0,10000);";
JS.executeScript(high);
模仿鍵盤複製粘貼
Actions action = new Actions(dr);
dr.findElement(By.id("kw")).sendKeys("das1111111111",Keys.ENTER);
Thread.sleep(3000);
dr.findElement(By.id("kw")).click();
action.sendKeys(Keys.CONTROL+"a").perform();
Thread.sleep(3000);
action.sendKeys(Keys.CONTROL+"c").perform();
Thread.sleep(3000);
action.sendKeys(Keys.CONTROL+"v").perform();
不知道爲什麼把我的代碼複製到文本框?合適讓我無語呢。。。