您好,登錄后才能下訂單哦!
【2016/8/2 9:00 更新】
Web Driver
Selenium 2.0 是WebDriver API的集合。
Selenium-WebDriver的開(kāi)發(fā)目的是為了更好地支持動(dòng)態(tài)網(wǎng)頁(yè)技術(shù)。
WebDriver 的目標(biāo)是供應(yīng)一套完善的面向?qū)ο蟮腁PI,為當(dāng)下的web應(yīng)用測(cè)試提供更好的支持。
其他不翻,小白翻不好怕引起歧義。
Web Server
需不需要下載Selenium Server,取決于你如何使用Selenium-WebDriver。
不需要Server的情況
測(cè)試用例的執(zhí)行和測(cè)試所使用的瀏覽器都在同一機(jī)器上。
需要Selenium Server的情況
1:使用Selenium-Grid把測(cè)試集分配到多部機(jī)器或虛擬機(jī)器上執(zhí)行。
2:連接一臺(tái)擁有某個(gè)特定版本瀏覽器的遠(yuǎn)程機(jī)器。
3:不使用Java bindings(也就是Python,C#,Ruby)而使用HtmlUnit Driver來(lái)設(shè)置一個(gè)Selenium-WebDriver Project。
Java
【個(gè)人筆記】
現(xiàn)在我們知道Selenium2.0(即WebDriver)是一系列可以運(yùn)用在web應(yīng)用上的API了,那么我們就使用自己掌握的語(yǔ)言,通過(guò)調(diào)用對(duì)應(yīng)API編寫(xiě)測(cè)試程序,進(jìn)行自動(dòng)化測(cè)試工作。
Java下使用Selenium,文檔只推薦了Maven,入門小白又多了一樣工具要學(xué),真是心塞。但在招聘中我也曾看到會(huì)使用項(xiàng)目管理工具的要求,那么花一些時(shí)間熟悉Maven基本操作也是可以的。找了好些時(shí)間,找到了一個(gè)Maven入門視頻,鏈接及視頻存在的一些問(wèn)題貼在另一篇文章《Maven入門及筆記 》里,傳送門:http://maise.blog.51cto.com/11149607/1829580
【結(jié)束】
創(chuàng)建一個(gè)Selenium 2.0 Java工程,最便捷的方式就是使用Maven。通過(guò)設(shè)置Maven的pom.xml文件,Maven將為你創(chuàng)建工程,下載Java bindings(即Selenium 2.0 java client庫(kù))和所有項(xiàng)目依賴JAR包,然后你就可以把工程導(dǎo)入你常用的IDE, IntelliJ IDEA or Eclipse了。
1. 新建一個(gè)文件夾(例 C:\Maven)。
2. 在“Maven”下新建一個(gè).txt文件,更名為“pom.xml”。范例如下:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>MySel20Proj</groupId> <artifactId>MySel20Proj</artifactId> <version>1.0</version> <dependencies> <dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-java</artifactId> <version>2.53.1</version> </dependency> </dependencies> </project>
以上內(nèi)容中的版本信息為此文檔編輯時(shí)的最新版本信息,實(shí)際操作中請(qǐng)以當(dāng)下最新版本信息為主。
【個(gè)人筆記】
學(xué)習(xí)過(guò)Maven入門視頻(一)的人對(duì)Selenium給出的pom.xml的范例就能大致理解了。上文提供的最新版本信息,指的是“dependencies”下的version,要查詢最新version,直接在搜索引擎上輸入artifactId項(xiàng)的文字加version,就能找到相關(guān)網(wǎng)站查詢最新版本信息。
“dependencies”下可添加多個(gè)“dependency”,保存完畢執(zhí)行命令如“mvn clean install”,Maven就為你自行下載對(duì)應(yīng)的JAR包。
【結(jié)束】
3. 現(xiàn)在可以通過(guò)命令行窗口,CD進(jìn)入工程文件夾,輸入指令:mvn clean install,Maven將自動(dòng)下載Selenium和所有項(xiàng)目依賴JAR包到文件夾中。最后,把工程導(dǎo)入IDE中,就可以開(kāi)始編程了。
【個(gè)人筆記】
建立一個(gè)項(xiàng)目實(shí)戰(zhàn)步驟:
1. 安裝好Maven,復(fù)制setting.xml到"C:\Users\Administrator\.m2"下。
2. cd到你想放置工程的路徑下,輸入: mvn archetype:generate -DgroupId=MySel20Proj -
DartifactId=MySel20Proj -Dversion=1.0。Build succes后檢查路徑下的文件是否正確建立。
3. 打開(kāi)pom.xml,Dependencies下Maven已經(jīng)為我們下載了junit,junit是在單元測(cè)試中使用的包。參照
Selenium官網(wǎng)提供的范例增加dependency。
注意我們使用的語(yǔ)言是Java:
<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> <dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-java</artifactId> <version>2.16.1</version> </dependency> </dependencies>
4. cd到pom.xml所在的路徑下,執(zhí)行mvn eclipse:clean(這一步會(huì)刪除已存在的classpath和project文件),再執(zhí)行mvn eclipse:eclipse,你可以看到pom.xml所以的路徑下生成了classpath文件。然后打開(kāi)eclipse,F(xiàn)ile->Import->Maven->Existing Maven project->選擇路徑,就可以看到新建的工程->Finish。
通過(guò)范例介紹Selenium-WebDriver API
工程新建完畢,你可以體會(huì)到WebDriver和其他普通的庫(kù)一樣:它十分完善,通常你不需要在使用它前再做其他補(bǔ)充步驟或安裝,這點(diǎn)比Selenium-RC可方便多了。
注意:使用ChromeDriver,Opera Driver,Android Driver或iOS Driver需要再增加相應(yīng)的操作。
現(xiàn)在你已經(jīng)可以開(kāi)始編程了,先用這個(gè)范例練練手吧。此范例通過(guò)谷歌搜索“Cheese”并打印頁(yè)面的標(biāo)題。
package MySel20Proj; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.firefox.FirefoxDriver; import org.openqa.selenium.support.ui.ExpectedCondition; import org.openqa.selenium.support.ui.WebDriverWait; public class Selenium2Example { public static void main(String[] args) { //【個(gè)人筆記】如果程序報(bào)錯(cuò)找不到路徑: //System.setProperty( "WebDriver.Firefox.bin", "找到Firefox.exe的安裝路徑,復(fù)制路徑"); //Syste.setProperty("WebDriver.chromedriver.exe", "同上"); // 創(chuàng)建一個(gè) Firefox driver的實(shí)例 // 注意,接下來(lái)的代碼依賴于接口(即WebDriver) // 而不是實(shí)現(xiàn)(即FirefoxDriver) // 注:FirefoxDriver implements WebDriver WebDriver driver = new FirefoxDriver(); // 訪問(wèn)谷歌【打不開(kāi)谷歌就換百度】 driver .get("http://www.google.com" ); // 你也可以用以下語(yǔ)句實(shí)現(xiàn)訪問(wèn)動(dòng)作 // driver.navigate().to(" // 通過(guò)name來(lái)定位搜索框元素【百度 By.name("wd")】 WebElement element = driver .findElement(By.name ("q" )); // 搜索cheese! element .sendKeys("Cheese!" ); // 提交. WebDriver會(huì)為我們執(zhí)行搜索動(dòng)作 element .submit(); // 確認(rèn)下頁(yè)面title System. out .println("Page title is: " + driver.getTitle()); // 谷歌【百度】的搜索是使用JavaScript進(jìn)行動(dòng)態(tài)呈現(xiàn) // 等待頁(yè)面的加載,倒計(jì)時(shí)十秒 ( new WebDriverWait(driver , 10)).until( new ExpectedCondition<Boolean>() { public Boolean apply(WebDriver d ) { return d .getTitle().toLowerCase().startsWith( "cheese!"); } }); // 打印輸出"" System. out .println("Page title is: " + driver.getTitle()); //關(guān)閉瀏覽器 driver .quit(); } }
【個(gè)人筆記】
我選擇ChromeDriver實(shí)現(xiàn)段代碼, 運(yùn)行時(shí),eclipse console窗口總是出現(xiàn)一行文字“Only local connections are allowed”,這句話是什么意思?查一下API文檔,ChromeDriver的定義:
1. A WebDriver implementation that controls a Chrome browser running on the local machine.
2. The control server which each instance communicates with will live and die with the instance.
也就是說(shuō),ChromeDriver在本機(jī)生成一個(gè)server,server通過(guò)本機(jī)的一個(gè)開(kāi)放端口進(jìn)行監(jiān)聽(tīng),收集上層的請(qǐng)求,操控本機(jī)的chrome瀏覽器。那當(dāng)然就是“只能允許本地連接”了。根據(jù)stackoverflow最高票的回答,這句話只是一句提示性的信息而已。
http://stackoverflow.com/questions/25080500/when-run-webdriver-with-chrome-browser-getting-message-only-local-connection
Selenium-WebDriver API 命令和操作
讀取網(wǎng)頁(yè)
driver.get("http://www.google.com");
WebDriver不一定會(huì)等待頁(yè)面的加載,這其中有幾個(gè)因素的影響,包括何種操作系統(tǒng)搭配何種瀏覽器。在某些情況下,WebDriver可能會(huì)在頁(yè)面加載之前,甚至加載一開(kāi)始或加載中,返回control(【個(gè)人筆記】目前理解等同于Java的Event)。為了保證健壯性(【個(gè)人筆記】什么的健壯性?),你要使用顯性/隱性等待來(lái)等待element(s)的出現(xiàn)。
定位UI元素
定位元素可通過(guò)WebDriver的實(shí)例或通過(guò)WebElement來(lái)實(shí)現(xiàn)。每種綁定語(yǔ)言(Selenium支持的語(yǔ)言)都有“Find Element”和“Find Elements”方法。前一個(gè)方法返回符合查詢的WebElement對(duì)象,如果元素不存在則拋出異常。后一種方法返回一個(gè)含多個(gè)WebElement的list,如果查詢無(wú)結(jié)果則返回一個(gè)空表。
“Find”方法需要搭配“By”來(lái)使用。
未完待續(xù)...
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。