您的位置:軟件測(cè)試 > 開源軟件測(cè)試 > 開源功能測(cè)試工具 > Selenium
Selenium 2.0 WebDriver 使用指南
作者:網(wǎng)絡(luò)轉(zhuǎn)載 發(fā)布時(shí)間:[ 2014/2/14 13:46:43 ] 推薦標(biāo)簽:Selenium WebDriver 功能測(cè)試

  ByClassName
  在這種場(chǎng)景下,我們引用DOM元素的屬性。實(shí)際情況是很多元素都有一樣的ClassName,因此找到多個(gè)有相同ClassName的元素,比找到第一個(gè)擁有這個(gè)ClassName的元素來的更重要。
  示例:如何使用該方法定位元素
  <divclass="cheese"><span>Cheddar</span></div><divclass="cheese"><span>Gouda</span></div>
  List<WebElement>cheeses=driver.findElements(By.className("cheese"));
  ByTagName
  DOM元素Tag的名稱。
  示例:如何使用該方法定位元素
  <iframesrc="..."></iframe>
  WebElementframe=driver.findElement(By.tagName("iframe"));
  ByName
  找到與Name屬性相同的Input元素。
  示例:如何使用該方法定位元素
  <inputname="cheese"type="text"/>
  WebElementcheese=driver.findElement(By.name("cheese"));
  ByLinkText
  找到與Text屬性精確匹配的超鏈接。
  示例:如何使用該方法定位元素
  <ahref="http://www.google.com/search?q=cheese">cheese</a>
  WebElementcheese=driver.findElement(By.linkText("cheese"));
  ByPartialLinkText
  找到與Text屬性模糊匹配的超鏈接。
  示例:如何使用該方法定位元素
  <ahref="http://www.google.com/search?q=cheese">searchforcheese</a>
  WebElementcheese=driver.findElement(By.partialLinkText("cheese"));
  ByCSS
  這個(gè)方法名稱意味著它是一個(gè)CSS探測(cè)器。前提是瀏覽器默認(rèn)支持這種方法,建議根據(jù)W3C的標(biāo)準(zhǔn)文檔構(gòu)建CSS選擇器。如果瀏覽器不支持CSS選擇器,可以使用Sizzle。IE6,7和FireFox3.0是使用Sizzle作為CSS查詢引擎。
  注意不是所有瀏覽器都使用同樣的CSS選擇器表達(dá)式,有些CSS可能只在某一個(gè)版本中生效。
  示例:如何使用該方法定位元素
  <divid="food"><spanclass="dairy">milk</span><spanclass="dairyaged">cheese</span></div>
  WebElementcheese=driver.findElement(By.cssSelector("#foodspan.dairy.aged"));
  ByXPath
  當(dāng)有需要時(shí),WebDriver還可以使用瀏覽器自帶的XPATH。對(duì)于那些不支持XPATH的瀏覽器,我們提供了WebDriver特有的實(shí)現(xiàn)方式。請(qǐng)確保熟悉XPATH在不同的引擎中的區(qū)別,否則會(huì)導(dǎo)致一些不可預(yù)料的問題。
  Driver大小寫敏感屬性值是否可見是否支持XAPTH
  HtmlUnitDriver僅識(shí)別小寫可見是
  IEDriver僅識(shí)別小寫可見否
  FireFoxDiver大小寫不敏感可見是上面的表格有一些抽象,讓我們來看個(gè)例子
  <inputtype="text"name="example"/>
  <INPUTtype="text"name="other"/>
  List<WebElement>inputs=driver.findElements(By.xpath("//input"));
  匹配結(jié)果如下
  XPATH表達(dá)式HtmlUnitDriverFireFoxDriverIEDriver
  //input122
  //INPUT020有些標(biāo)簽的屬性有默認(rèn)值,這種情況下不指定屬性值則匹配默認(rèn)值。比如,"input"標(biāo)簽"type"屬性默認(rèn)為"text"。使用XPATH的首要原則是不要忽略這些隱藏的實(shí)現(xiàn)。
  使用JavaScript
  只要返回的是一個(gè)WebElement,你還可以使用任意的JS代碼查找Web元素,根據(jù)查詢結(jié)果會(huì)自動(dòng)修改為一個(gè)WebElement對(duì)象。
  一個(gè)簡(jiǎn)單的使用jQuery的例子:
  WebElementelement=(WebElement)((JavascriptExecutor)driver).executeScript("return$('.cheese')[0]");
  查找頁面中每個(gè)label的所有Input元素:
List<WebElement>labels=driver.findElements(By.tagName("label"));
List<WebElement>inputs=(List<WebElement>)((JavascriptExecutor)driver).executeScript(
"varlabels=arguments[0],inputs=[];for(vari=0;i<labels.length;i++){"+
"inputs.push(document.getElementById(labels[i].getAttribute('for')));}returninputs;",labels);
  7.3模擬用戶輸入行為
  我們已經(jīng)演示了在文本框輸入文本內(nèi)容,其他Web元素應(yīng)該如何操作呢?你可以觸發(fā)CheckBox的某個(gè)選項(xiàng),也可以選擇Select的某個(gè)選項(xiàng)。WebDriver處理Select元素也很簡(jiǎn)單。
WebElementselect=driver.findElement(By.tagName("select"));
List<WebElement>allOptions=select.findElements(By.tagName("option"));
for(WebElementoption:allOptions){
System.out.println(String.format("Valueis:%s",option.getAttribute("value")));
option.click();
}
  上面的例子,將選擇Web頁面中的第一個(gè)Select元素,并將循環(huán)打印出選項(xiàng)的取值并單擊選項(xiàng);蛟S你已經(jīng)注意到,使用這個(gè)方法并不是有效的。WebDriver提供一個(gè)“Select”類,這個(gè)類的方法更適合于處理上述這種場(chǎng)景。
Selectselect=newSelect(driver.findElement(By.tagName("select")));
select.deselectAll();
select.selectByVisibleText("Edam");
  上面的例子,首先去除選定第一個(gè)選項(xiàng)的焦點(diǎn),然后選中取值為"Edam"的選項(xiàng)。
  一旦你完成了所有表單字段的輸入,下一步是提交表單。一種方法是找到Web頁面中的Submit按鈕并單擊:
  driver.findElement(By.id("submit")).click();
  作為另一種選擇,WebDriver的Element類有一個(gè)更加便利的方法"sublmit"。如果你對(duì)表單中的某個(gè)Element使用該方法,WebDriver將會(huì)走讀其所在的DOM對(duì)象,直到找到其所屬的表單,并提交。如果該Element并不在某個(gè)表單中,將會(huì)拋出異常NoSuchElementException。
  element.submit();
  7.4在windows和frames間切換
  有些Web程序包含許多Frame和窗口,WebDriver提供"switchto"方法在這之間進(jìn)行切換:
  driver.switchTo().window("windowName");
  所有傳輸給WebDriver的指定將被傳輸給切換后的窗口。如何直到窗口的名稱呢?查看JS并打開該窗口可以了:
  <ahref="somewhere.html"target="windowName">Clickheretoopenanewwindow</a>
  作為另一種選擇,你可以使用一個(gè)“窗口句柄”傳遞給"switchTo().window()"方法。根據(jù)此方法,將會(huì)使用迭代器遍歷所有打開的窗口:
  for(Stringhandle:driver.getWindowHandles()){
  driver.switchTo().window(handle);
  }
  你也可以在Frame之間切換(或者進(jìn)入Frame):
  driver.switchTo().frame("frameName");
  你還可以根據(jù)路徑使用Frame的子Frame,而且可以通過索引定位Frame。
  driver.switchTo().frame("frameName.0.child");
  以上方法將切換到名稱為“frameName”的Frame的第一個(gè)子Frame,所有Frame都是Web頁面的頂端開始計(jì)數(shù)。
  7.5彈出框
  Selenium2.0beta1版本,我們提供方法獲取彈出框。在你觸發(fā)彈出框的操作后,你可以用一下方法進(jìn)入彈出框:
  Alertalert=driver.switchTo().alert();
  以上方法將會(huì)返回當(dāng)前當(dāng)前打開的alert對(duì)象,你可以對(duì)這個(gè)對(duì)象進(jìn)行任何可操作:點(diǎn)擊取消,點(diǎn)擊確定,關(guān)閉窗口,獲取alert的文本內(nèi)容等。這個(gè)接口在alerts、confirms、prompts對(duì)象上都有很好的應(yīng)用,具體請(qǐng)參見API文檔。
  7.6Navigation:瀏覽器本地歷史記錄
  前文中,我們使用get方法來獲取網(wǎng)頁(driver.get("http://www.example.com"))。正如你看到的,WebDriver有不少輕量級(jí)的功能聚焦的接口,Navigation是這樣一個(gè)。正因?yàn)榧虞d網(wǎng)頁是一個(gè)再普通不過的需求,這個(gè)方法存在于Driver類下面,但是用法很簡(jiǎn)單:
  driver.navigate().to("http://www.example.com");
  重申一下,"navigate().to()"和"get()"做的是同樣的事情,只不過其中一個(gè)更適合打印。
  Navigate接口還提供方法可以在瀏覽器歷史記錄中前后翻頁。
  driver.navigate().forward();
  driver.navigate().back();
  請(qǐng)注意,以上功能完全取決于底層的瀏覽器。如果你習(xí)慣跨瀏覽器操作,當(dāng)你使用這些接口時(shí)可能會(huì)出現(xiàn)意想不到的的異常。

上一頁1234下一頁
軟件測(cè)試工具 | 聯(lián)系我們 | 投訴建議 | 誠(chéng)聘英才 | 申請(qǐng)使用列表 | 網(wǎng)站地圖
滬ICP備07036474 2003-2017 版權(quán)所有 上海澤眾軟件科技有限公司 Shanghai ZeZhong Software Co.,Ltd