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