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