一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

Selenium WebDriver學(xué)習(xí)文檔(二)

 漫漫長夜有你 2013-08-15
文章轉(zhuǎn)于:
http://www./2013/01/selenium-webdriver%E5%AD%A6%E4%B9%A0%E6%96%87%E6%A1%A3%EF%BC%88%E4%BA%8C%EF%BC%89.html

Selenium WebDriver學(xué)習(xí)文檔(二)

注:本文翻譯自http:///docs/03_webdriver.jsp,翻譯不完全,次要部分沒有翻譯。文中只涉及了Java編程語言,翻譯過程中稍有改動(dòng)。如有什么問題需要交流,請(qǐng)聯(lián)系我

SeleniumWebDriver的API命令和操作

加載頁面

你可能想使用WebDriver做的第一件事情是導(dǎo)航到一個(gè)頁面。正常的方式是通過調(diào)用“get”方法:

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

依賴于幾個(gè)因素,包括OS /瀏覽器組合等,WebDriver可能或可能不會(huì)等待頁面加載完全。在某些情況下,WebDriver可能在頁面加載完全之前返回控制權(quán),或者在頁面剛 剛加載時(shí),或加載中等。為保證持續(xù)健壯性,你需要使用顯式和隱式等待等待元素在頁面中存在 。

定位UI元素(WebElements)

在WebDriver中定位Web頁面的元素,可以使用WebDriver實(shí)例,也可以使用WebElement實(shí)例。每種編程語言綁定都暴露一個(gè) “Find Element”和“Find Elements”的方法。前者返回WebElement對(duì)象,否則拋出一個(gè)異常。后者則返回WebElement列表。如果沒有匹配查詢的DOM元素, 則返回一個(gè)空列表。
查找定位元素方法,需要一個(gè)By類型的一個(gè)定位器或查詢對(duì)象。By類型支持如下:

通過ID 

這是最有效、優(yōu)先的定位元素的方式。UI開發(fā)人員設(shè)下的常見的陷阱是,頁面上的元素ID不唯一,或者頁面渲染時(shí)每次都自動(dòng)生成,這應(yīng)該都是可以避免的。請(qǐng)使用html元素的class屬性,而不要使用自動(dòng)生成的ID。

HTML示例:

<div id="coolestWidgetEvah">...</div>

代碼示例:

WebElement element = driver.findElement(By.id("coolestWidgetEvah"));

通過class屬性

在本部分,class指的是DOM元素的類屬性。在實(shí)際使用中, 通常許多DOM元素使用相同的類屬性.從而定位多個(gè)元素比只定位第一個(gè)元素更有實(shí)際意義。
示例:
HTML示例:

<div class="cheese"><span>Cheddar</span></div><div class="cheese"><span>Gouda</span></div>

代碼示例:

List<WebElement> cheeses = driver.findElements(By.className("cheese"));

按標(biāo)簽名稱
按DOM元素的標(biāo)簽名稱定位元素.例如:
HTML示例:

<iframe src="..."></iframe>

代碼示例:

WebElement frame = driver.findElement(By.tagName("iframe"));

按名稱屬性
按DOM元素的名稱屬性定位元素.例如:
HTML示例:

<input name="cheese" type="text"/>

代碼示例:

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

按鏈接文本
定位匹配可見的文本的鏈接元素,例如:
HTML示例:

<a href="http://www.google.com/search?q=cheese">cheese</a>

代碼示例:

WebElement cheese = driver.findElement(By.linkText("cheese"));

按鏈接文本部分匹配定位
定位部分匹配的可見文本的鏈接元素,例如:
HTML示例:

<a href="http://www.google.com/search?q=cheese">search for cheese</a>

代碼示例:

WebElement cheese = driver.findElement(By.partialLinkText("cheese"));

通過CSS
顧名思義,這是一個(gè)使用CSS的元素定位戰(zhàn)略。默認(rèn)情況下,使用瀏覽器內(nèi)建支持,所以請(qǐng)參考w3c css選擇器http://www./TR/CSS/#selectors來了解可用的CSS選擇器。如果瀏覽器沒有內(nèi)置的CSS查詢器,使 用Sizzl css查詢引擎,比如,IE 6,7和FF3.0等。
要注意的是:不是所有的瀏覽器工作方式都一樣,一些css在一些版本的瀏覽器工作,但是有些可能無法在另一個(gè)版本瀏覽器工作。
HTML示例:

<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"));

通過XPATH
一般來講,如若可行,WebDriver使用瀏覽器內(nèi)置的XPath特性。在那些沒有內(nèi)置XPATH特性支持的瀏覽器中,使用WebDriver的實(shí)現(xiàn)。需要注意不同XPTAH引擎的不同,否則會(huì)引起不期望的一些結(jié)果。

Driver 標(biāo)簽和屬性名稱 屬性值 內(nèi)置XPath支持
HtmlUnit Driver 小寫 如HTML所展示 Yes
Internet Explorer Driver 小寫 如HTML所展示 No
Firefox Driver 大小寫不敏感 如HTML所展示 Yes

 

HTML示例:

<input type="text" name="example" />
<INPUT type="text" name="other" />

代碼示例:

List<WebElement> inputs = driver.findElements(By.xpath("http://input"));

使用JavaScript
您可以執(zhí)行任意的JavaScript來定位頁面元素,只要javascript函數(shù)返回一個(gè)DOM元素,它會(huì)自動(dòng)轉(zhuǎn)換到WebElement對(duì)象。加載jQuery函數(shù)的頁面上的例子如下:

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

發(fā)現(xiàn)所有的緊挨著label元素的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);

用戶輸入-填寫表格
我們已經(jīng)看到了如何將文本輸入到一個(gè)textarea或text輸入域,但對(duì)于其他元素,應(yīng)該怎么做呢?你可以“toggle”來切換復(fù)選框的狀態(tài),您可以使用“click”來點(diǎn)擊選擇的OPTION標(biāo)簽。處理SELECT標(biāo)簽不是很麻煩:
代碼示例:

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();
}

這段腳本將定位頁面上的第一個(gè)“SELECT”元素,依次循環(huán)它的OPTIONs選項(xiàng),打印出它們的值,并依次選擇選項(xiàng)。這不是最有效的處理SELECT元素的方式。WebDriver包括一個(gè)名為“Select”的方法,來處理下拉選擇框。
代碼示例:

Select select = new Select(driver.findElement(By.tagName("select")));
select.deselectAll();
select.selectByVisibleText("Edam");

這段代碼會(huì)先反選全部的選項(xiàng)表,然后選“Edam”選項(xiàng)。
一旦你完成填寫表單時(shí),你可能要提交。方法之一是要找到“提交”按鈕,然后單擊它:
代碼示例:

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

另外,WebDriver在每一個(gè)元素上有一個(gè)方便的“submit方法。如果你調(diào)用處于表單內(nèi)的元素的提交方法,會(huì)喚醒DOM找到from標(biāo)簽的結(jié)束符號(hào)并提交表單。如果該元素是不在form表單,NoSuchElementException異常將被拋出。
代碼示例:

element.submit();

在窗口和幀(Frame)之間移動(dòng)
一些web應(yīng)用程序有很多的幀和窗口。WebDriver支持在命名的窗口間移動(dòng),使用switchTo方法:
代碼示例:

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

自此,所有的driver的調(diào)用都針對(duì)當(dāng)前窗口執(zhí)行。但是你怎么獲取窗口的名稱?你可以試試打開該窗口的javascript或鏈接。

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

另外,你也可以傳遞一個(gè)“窗口句柄”的“switchTo().window()”方法。知道了這一點(diǎn),就可以遍歷所有打開的窗口,像這樣:
代碼示例:

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

你還可以在幀間進(jìn)行切換,或者進(jìn)入子幀:
代碼示例:

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

還可以使用點(diǎn)操作符和索引訪問子幀,如:
代碼示例:

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

該腳本會(huì)定位到名為“child”的幀,它為名為“frameName”的幀的第一個(gè)子幀。
彈出對(duì)話框:
從Selenium2.0測試版1起,就支持處理彈出對(duì)話框。當(dāng)你觸發(fā)一個(gè)打開彈出窗口的動(dòng)作,您可以訪問編寫下述腳本訪問該警示窗口:
代碼示例:

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

導(dǎo)航:歷史和位置
在前文,我們介紹了WebDriver如何使用 “get”命令(driver.get(“http://www.”) )來加載頁面。正如你所看到的一樣 ,WebDriver有一些較小的,服務(wù)特定任務(wù)的API接口。導(dǎo)航是一個(gè)非常有用的任務(wù),可以用來加載頁面,也可以用來模擬前進(jìn)和后退操作。 navigate().to()和get()執(zhí)行的操作是一樣的,互為同義詞。
代碼示例:

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

driver.navigate().forward();
driver.navigate().back();

Cookies
在進(jìn)入下一部分前,你可能有興趣了解如何使用Cookie。首先,你需要進(jìn)入cookie有效的域。如果你試圖預(yù)先設(shè)定cookie,然后再與網(wǎng)站進(jìn)行交 互,且您的主頁較大/需要一段時(shí)間加載,你可以在網(wǎng)站上找到一個(gè)更小的頁面進(jìn)行加載,通常404頁較小(http:// /some404page)。
定制瀏覽器選項(xiàng):
在Firefox瀏覽器上,定制操作比較簡單:
代碼示例:

FirefoxProfile profile = new FirefoxProfile();
profile.addAdditionalPreference("general.useragent.override", "some UA string");
WebDriver driver = new FirefoxDriver(profile);

拖拽操作
使用Action類進(jìn)行拖拽的例子:
代碼示例:

WebElement element = driver.findElement(By.name("source"));
WebElement target = driver.findElement(By.name("target"));
(new Actions(driver)).dragAndDrop(element, target).perform();

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    亚洲午夜av一区二区| 日韩欧美一区二区久久婷婷| 日韩不卡一区二区三区色图| 国产伦精品一区二区三区高清版 | 欧美日韩国产另类一区二区| 大尺度激情福利视频在线观看| 欧美日韩校园春色激情偷拍| 国产视频在线一区二区| 国内精品偷拍视频久久| 国产麻豆视频一二三区| 国产av熟女一区二区三区四区| 制服丝袜美腿美女一区二区 | 国产熟女一区二区精品视频| 国产精品不卡高清在线观看 | 日韩av生活片一区二区三区| 国产精品欧美激情在线观看| 日本美国三级黄色aa| 欧美熟妇一区二区在线| 日本高清一区免费不卡| 国产女高清在线看免费观看| 中文字幕免费观看亚洲视频| 国产成人精品视频一二区| 精品精品国产欧美在线| 免费高清欧美一区二区视频| 欧美尤物在线观看西比尔| 91麻豆精品欧美一区| 久久精品国产在热亚洲| 国自产拍偷拍福利精品图片| 午夜传媒视频免费在线观看| 亚洲欧美日本国产不卡| 日本加勒比不卡二三四区| 国产精品一区二区成人在线| 视频在线观看色一区二区| 国产精品激情在线观看| 九九热国产这里只有精品| 久久中文字幕中文字幕中文| 国产精品不卡免费视频| 老熟妇2久久国内精品| 中文字幕亚洲精品在线播放| 国产精品午夜福利在线观看| 精品熟女少妇一区二区三区|