您的位置:軟件測試 > 開源軟件測試 > 開源功能測試工具 > Selenium
Selenium 2.0 WebDriver 使用指南
作者:網絡轉載 發(fā)布時間:[ 2014/2/14 13:46:43 ] 推薦標簽:Selenium WebDriver 功能測試

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

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