請確認你使用的WebDriver是新的當前版本。在這篇文檔撰寫時,上述示例給出的是新的版本。在Selenium2.0發(fā)布不久WebDriver有過頻繁的更新。請在這個鏈接MavenDownloadPage確認當前的版本,相應地修改你工程中的pon.xml。
現(xiàn)在,你可以通過dos界面使用CD命令進入工程所在文件夾,通過以下命令運行Maven。
mvncleaninstall
運行之后會自動下載Selenium及相關套件,并加載到你的工程中去。
后,將你的工程導入到你偏好的IDE中。如果你對導入的過程不是很清楚,我們已經準備了操作指南。
ImportingamavenprojectintoIntelliJIDEA.ImportingamavenprojectintoEclipse
5.如何將自動化工程從Selenium1.0遷移到Selenium2.0
已經在Selenium1.0上構建測試工程的用戶,我們?yōu)槟峁┝艘环葜笇绾螌⒁延械拇a遷移到Selenium2.0。Selenium2.0的首席開發(fā)工程師SimonStewart為此撰寫了一片文章:MagratingFromSeleniumRCtoSeleniumWebDriver。
6.Selenium-WebDriverAPI簡介
WebDriver可以用來實現(xiàn)Web應用程序的自動化測試,特別適合于驗證實際結果是否符合預期結果的場景。WebDriver旨在提供比Selenium1.0更加易用、友好的API,便于用戶的探索和理解,從而使測試用例變得容易閱讀和維護。WebDriver沒有使用任何第三方測試框架,所以它可以很好與單元測試工具或者古老的main函數(shù)結合使用。本章節(jié)將介紹如何使用WebDriver的API,幫助你慢慢開始了解WebDriver。如果你還沒有新建一個Selenium工程,請先完成這個操作,在這個章節(jié)的上面有詳細的描述。
當你創(chuàng)建完Selenium工程后,你會發(fā)現(xiàn)WebDriver和普通的第三方庫一樣是完全獨立的,在你使用之前不需要啟動任何額外的進程或者安裝程序,相反如果你使用Selenium-RC需要先啟動代理服務器。
注意:當你使用如下WebDriver時需要額外的步驟:ChromeDriver,OperaDriver,AndroidDriver,IPhoneDriver。
現(xiàn)在你肯定躍躍欲試要寫一些代碼了。我們以一個簡單的例子來開始第一段旅程:在Google上搜索“Cheese”,并打印出搜索結果網(wǎng)頁的標題。
packageorg.openqa.selenium.example;
importorg.openqa.selenium.By;
importorg.openqa.selenium.WebDriver;
importorg.openqa.selenium.WebElement;
importorg.openqa.selenium.firefox.FirefoxDriver;
importorg.openqa.selenium.support.ui.ExpectedCondition;
importorg.openqa.selenium.support.ui.WebDriverWait;
publicclassSelenium2Example{
publicstaticvoidmain(String[]args){
//創(chuàng)建一個FirefoxDriver實例
//這個類依賴于接口而不是接口的實現(xiàn)
WebDriverdriver=newFirefoxDriver();
//使用get方法訪問Google
driver.get("http://www.google.com");
//使用下面這個方法也能夠達到訪問Google的目的
//driver.navigate().to("http://www.google.com");
//找到html輸入框的name
WebElementelement=driver.findElement(By.name("q"));
//輸入要查找的內容
element.sendKeys("Cheese!");
//提交表單,WebDriver會自動找到我們需要提交的元素所在的表單
element.submit();
//打印網(wǎng)頁的標題
System.out.println("Pagetitleis:"+driver.getTitle());
//Google的搜索網(wǎng)頁會通過JS動態(tài)渲染
//等待頁面加載完畢,超時時間為10秒
(newWebDriverWait(driver,10)).until(newExpectedCondition<Boolean>(){
publicBooleanapply(WebDriverd){
returnd.getTitle().toLowerCase().startsWith("cheese!");
}
});
//控制臺上將打印如下信息:"cheese!-GoogleSearch"
System.out.println("Pagetitleis:"+driver.getTitle());
//關閉瀏覽器
driver.quit();
}
}
在本章節(jié)的接下來篇幅,我們將學習如何使用WebDriver操作你的瀏覽器,如何使用框架和窗口來測試Web網(wǎng)站。當然,我們將提供更加翔實的論述和舉例。
7.Selenium-WebDriverAPI詳解
7.1獲取Web頁面
我們第一件要做的事是通過WebDriver取得Web頁面的控制權,一般情況下使用get方法
driver.get("http://www.google.com");
在某些情況下,比如操作系統(tǒng)和瀏覽器的穿插組合,WebDriver有可能不會等待Web頁面加載完成,這種情況下WebDriver會返回錯誤或者直接運行下一步操作。為了保證程序的健壯性,你需要等待頁面中某個元素加載完成后再進行下一步操作,請參考ExplicitandImplicitWaits。
7.2定位UI元素
我們可以通過WebDriver實例或者WebElement類來定位UI元素。我們?yōu)槊糠N編程語言都提供了兩種方法:“FindElement”和“FindElements”。第一種方法返回的一個WebElement,找不到則拋出異常。第二個方法返回一個WebElement鏈表(List),在找不到任何DOM元素的情況下會返回空的鏈表。
Find方法會使用類似探測器的類,類名叫做By。下面列舉By的一些常用方法:
ByID
當我們定位一個UI元素,這個是有效也是好的方法。不過這個方法不是的,有的前端開發(fā)在設計UI元素時會遺漏ID或者使用動態(tài)ID,這兩種情況下都要避免使用這個方法。這時候使用獲取class名稱方法比ByID更合適。
示例:如何使用該方法定位元素
<divid="coolestWidgetEvah">...</div>
WebElementelement=driver.findElement(By.id("coolestWidgetEvah"));