7.Selenium-WebDriver API詳解
7.1獲取Web頁面
我們第一件要做的事是通過WebDriver取得Web頁面的控制權,一般情況下使用get方法
driver.get("http://www.google.com");
在某些情況下,比如操作系統(tǒng)和瀏覽器的穿插組合,WebDriver有可能不會等待Web頁面加載完成,這種情況下WebDriver會返回錯誤或者直接運行下一步操作。為了保證程序的健壯性,你需要等待頁面中某個元素加載完成后再進行下一步操作,請參考Explicit and Implicit Waits。
7.2定位UI元素
我們可以通過WebDriver實例或者WebElement類來定位UI元素。我們?yōu)槊糠N編程語言都提供了兩種方法:“Find Element”和“Find Elements”。第一種方法返回的一個WebElement,找不到則拋出異常。第二個方法返回一個WebElement鏈表(List),在找不到任何DOM元素的情況下會返回空的鏈表。
Find方法會使用類似探測器的類,類名叫做By。下面列舉By的一些常用方法:
By ID
當我們定位一個UI 元素,這個是有效也是好的方法。不過這個方法不是的,有的前端開發(fā)在設計UI元素時會遺漏ID或者使用動態(tài)ID,這兩種情況下都要避免使用這個方法。這時候使用獲取class名稱方法比By ID更合適。
示例:如何使用該方法定位元素
...
WebElement element = driver.findElement(By.id("coolestWidgetEvah"));
By Class Name
在這種場景下,我們引用DOM元素的屬性。實際情況是很多元素都有一樣的Class Name,因此找到多個有相同Class Name的元素,比找到第一個擁有這個Class Name的元素來的更重要。
示例:如何使用該方法定位元素
Cheddar
Gouda
List cheeses = driver.findElements(By.className("cheese"));
By Tag Name
DOM元素Tag的名稱。
示例:如何使用該方法定位元素
WebElement frame = driver.findElement(By.tagName("iframe"));
By Name
找到與Name屬性相同的Input元素。
示例:如何使用該方法定位元素
WebElement cheese = driver.findElement(By.name("cheese"));
By Link Text
找到與Text屬性精確匹配的超鏈接。
示例:如何使用該方法定位元素
cheese
WebElement cheese = driver.findElement(By.linkText("cheese"));
By Partial Link Text
找到與Text屬性模糊匹配的超鏈接。
示例:如何使用該方法定位元素
search for cheese
WebElement cheese = driver.findElement(By.partialLinkText("cheese"));
By CSS
這個方法名稱意味著它是一個CSS探測器。前提是瀏覽器默認支持這種方法,建議根據(jù)W3C的標準文檔構建CSS選擇器。如果瀏覽器不支持CSS選擇器,可以使用Sizzle。IE6,7和FireFox3.0是使用Sizzle作為CSS查詢引擎。
Selenium WebDriver 介紹(3)
發(fā)表于:2014-04-08來源:博客園作者:思勉點擊數(shù):1584 標簽:
注意不是所有瀏覽器都使用同樣的CSS選擇器表達式,有些CSS可能只在某一個版本中生效。 示例:如何使用該方法定位元素 milk cheese WebElement cheese = driver.
注意不是所有瀏覽器都使用同樣的CSS選擇器表達式,有些CSS可能只在某一個版本中生效。
示例:如何使用該方法定位元素
milkcheese
WebElement cheese = driver.findElement(By.cssSelector("#food span.dairy.aged"));
By XPath
當有需要時,WebDriver還可以使用瀏覽器自帶的XPATH。對于那些不支持XPATH的瀏覽器,我們提供了WebDriver特有的實現(xiàn)方式。請確保熟悉XPATH在不同的引擎中的區(qū)別,否則會導致一些不可預料的問題。