Selenium2.0之WebDriver學習總結(2)

(三)   命令和操做javascript

這一部分將介紹一下WebDriver的一些具體操做和命令,實際操做中,咱們須要兩大工具來幫助咱們:FireBugXpath工具,這二者都是Firefox上的插件。接下來咱們所講解的都是以FirefoxDriver爲基礎的,且基於WebDriver driver = new FirefoxDriver();建立的一個driver實例:css

a)         訪問一個頁面html

第一件你想使用WebDriver作的事情確定是訪問一個頁面,最基礎的方法是調用「get」方法:java

driver.get("http://www.google.com");

一樣咱們可使用:web

driver.navigate().to("http://www.google.com");

 

WebDriver會自動等待到該頁面徹底加載才執行接下來的測試和腳本的執行。可是若是你的頁面存在不少的AJAX加載,此時WebDriver是沒法知道是否完成加載。檢查此類頁面是否加載完成,那麼咱們就須要ExplicitImplicit Wait(這兩個將在後面文章解釋)。瀏覽器

 

b)         定位UI元素工具

WebDriver能夠經過WebDriver實例來定位元素,任何語言庫都含有「Find Element」和「Find Elements」的方法。第一個方法返回一個WebElement或者拋出異常。後者返回全部WebElement的列表,或者空列表。學習

獲取和定位元素咱們調用「By」方法。下面具體解釋下「By」方法:測試

By IDgoogle

這是一個極爲有效定位元素的方法。廣泛的現狀是UI工程師在實際編寫頁面時不多寫id或者自動生產一個ID,這些都是須要避免的。對於一個頁面Element來講,class比自動生產的id更好。

經過id定位元素的例子:

<div id="coolestWidgetEvah">...</div>WebElement element = driver.findElement(By.id("coolestWidgetEvah"));


 

 By Class Name

        這裏的class指的是DOM中的元素,在實際使用過程當中,咱們也會發現不少DOM元素含有相同的class名。

經過class name定位元素例子:


<div class="cheese"><span>Cheddar</span></div><div class="cheese"><span>Gouda</span></div>List<WebElement> cheeses = driver.findElements(By.className("cheese"));


By Tag Name

DOMTag元素

Tag name 定位元素的例子:

<iframe src="..."></iframe>WebElement frame = driver.findElement(By.tagName("iframe"));


By Name

例子:

<input name="cheese" type="text"/>WebElement cheese = driver.findElement(By.name("cheese"));


By Link Text

例子:


<a href="http://www.google.com/search?q=cheese">cheese</a>>WebElement cheese = driver.findElement(By.linkText("cheese"));


By Partial Link Text

根據連接的部分文字

例子:


<a href="http://www.google.com/search?q=cheese">search for cheese</a>>WebElement cheese = driver.findElement(By.partialLinkText("cheese"));


By CSS

從名字上看,這是根據CSS來定位元素。

例子:

<div id="food">         <span class="dairy">milk</span>         <span class="dairy aged">cheese</span></div>WebElement cheese = driver.findElement(By.cssSelector("#food span.dairy aged"));


By XPATH

在高級的水平下,WebDriver儘量使用瀏覽器的原生的XPath能力。在那些沒有原生的XPath支持的瀏覽器,咱們提供本身的實現方式。可是三個Driver有必定的區別。Selenium2.0之WebDriver學習總結(2) - 網易杭州QA - 網易杭州 QA Team

例子:

 <input type="text" name="example" />    <INPUT type="text" name="other" />    List<WebElement> inputs = driver.findElements(By.xpath("//input"));

 

查找結果:

HTML元素有時並不需明確聲明,由於他們將默認爲已知值的屬性。例如,input標籤,就不須要設置typetext,默認屬性就是text,經驗原則:WebDriver在使用中的XPath時,不該該指望可以對這些隱含屬性相匹配。

Selenium2.0之WebDriver學習總結(2) - 網易杭州QA - 網易杭州 QA Team 

使用javascript

您能夠執行任意JavaScript找到一個元素,只要你返回一個DOM元素,它會自動轉換到一個WebElement對象。

例子:

jQuery的頁面加載一個簡單的例子:

WebElement element = (WebElement) ((JavascriptExecutor)driver).executeScript("return $('.cheese')[0]");

尋求全部的頁面上的input元素:

List<WebElement> labels = driver.findElements(By.tagName("label"));List<WebElement> inputs = (List<WebElement>) ((JavascriptExecutor)driver).executeScript(      "var labels = arguments[0], inputs = []; for (var i=0; i < labels.length; i++){" +"inputs.push(document.getElementById(labels[i].getAttribute('for'))); } return inputs;", labels);


用戶表單填充

例子:

遍歷select標籤

WebElement select = driver.findElement(By.tagName("select"));List<WebElement> allOptions = select.findElements(By.tagName("option"));for (WebElement option : allOptions) {             System.out.println(String.format("Value is: %s", option.getAttribute("value")));             option.click();}


選擇某一個選項:

Select select = new Select(driver.findElement(By.tagName("select")));select.deselectAll();select.selectByVisibleText("Edam");
上傳文件:

WebElement FileUpload =driver.findElement(By.id("upload"));

String filePath = "C:\test\\uploadfile\\media_ads\\test.jpg";

FileUpload.sendKeys(filePath);


提交:

Submitform

driver.findElement(By.id("submit")).click();


submit不在form

WebElement.submit();


拖拽操做:

WebElement element = driver.findElement(By.name("source"));

WebElement target = driver.findElement(By.name("target"));

(new Actions(driver)).dragAndDrop(element, target).perform();



WindowsFrames之間的切換

一些web應用程序有許多Frames或多個Windows WebDriver支持使用「switchTo」的方法實現的窗口之間切換。

driver.switchTo().window("windowName");

 

全部對driver的調用都會指向特定的窗口,可是咱們怎麼知道窗口的名字呢?咱們能夠查看javascript代碼和打開他的連接:

<a href="somewhere.html" target="windowName">Click here to open a new window</a>

 

另外,還能夠經過「window handle」去調用「switchTo().window()」,經過這個,咱們就遍從來找到全部打開的窗口:

for (String handle : driver.getWindowHandles()) { driver.switchTo().window(handle); }


Switch一樣支持frame

driver.switchTo().frame("frameName");

 

一樣可使用他訪問subframe,找frameName的第一個subframe中叫作childframe

driver.switchTo().frame("frameName.0.child");


彈出框:

selenium2.0開始,已經支持對彈出框的獲取

Alert alert = driver.switchTo().alert();

 

這個方法會返回當前被打開打警告框,你能夠進行統一,取消,讀取提示內容,後則進入到提示,這個一樣使用alertsconfirmsprompts


NavigationHistory and Location

以前咱們就能夠經過get方法來打開一個網頁,像咱們所看到的,WebDriver一樣還有許多小接口,Navigation就是其中一個小接口:

driver.navigate().to("http://www.example.com");

 

navigate().toget()其實做用是同樣的,可是navigate還能夠進行瀏覽器的前進後退操做:

driver.navigate().forward();

driver.navigate().back();

相關文章
相關標籤/搜索