selenium之WebDriver

一、什麼狀況下選用WebDriver?
(1)Selenium-1.0不支持的瀏覽器功能。
(2)multiple frames, multiple browser windows, popups, and alerts.
(3)頁面導航。
(4)下拉。
(5)基於AJAX的UI元素。

二、WebDriver的幾個實現:
Name of driver                 Available on which OS?       Class to instantiate
HtmlUnit Driver                All                      org.openqa.selenium.htmlunit.HtmlUnitDriver
Firefox Driver                   All                      org.openqa.selenium.firefox.FirefoxDriver
Internet Explorer Driver   Windows           org.openqa.selenium.ie.InternetExplorerDriver
Chrome Driver                 All                      org.openqa.selenium.chrome.ChromeDriver

(1)HtmlUnit Driver是純java的驅動器,所有在內存中運行,不會實際打開瀏覽器,但其速度很快。
(2)Firefox Driver:速度慢。

三、WebDriver經常使用的函數接口(以HtmlUnitDriver爲例)
WebDriver driver = new HtmlUnitDriver();
(1)頁面導航
driver.get( "http://www.google.com" ); 徹底裝載頁面後將控制返回給測試腳本。
注意:當頁面又不少AJAX調用時,該接口沒法確認頁面是否徹底裝載,這是須要使用"waits"。
(2)與頁面交互
例如:<input type= "text" name= "passwd" id= "passwd-id" />
WebElement element;
element = driver.findElement(By.id( "passwd-id" ));
element = driver.findElement(By.name( "passwd" ));
element = driver.findElement(By.xpath( "//input[@id=’passwd-id’]" ));
(XPATH返回第一個匹配到的元素,若是沒有匹配到,拋出NoSuchElementException)
element.sendKeys( "some text" );
element.sendKeys( " and some" , Keys.ARROW_DOWN); (按向下箭頭)
(任何頁面元素均可以調用sendKeys,例如能夠測試一些快捷方式鍵,鍵盤的每次輸入都是附加在文本串的後面)
element.clear(); 清除文本域內容

四、填寫表單
(1)處理SELECT標籤:
WebElement select = driver.findElement(By.xpath( "//select" ));
List<WebElement> allOptions = select.findElements(By.tagName( "option" ));
for (WebElement option : allOptions) {
System.out.println(String.format( "Value is: %s" , option.getValue()));
option.setSelected();
}
(2)使用Select類處理SELECT標籤:
Select select = new Select(driver.findElement(By.xpath( "//select" )));
select.deselectAll();
select.selectByVisibleText( "Edam" );

五、提交:
(1)driver.findElement(By.id( "submit" )).click();
(2)element.submit();(要求element必須在表單中,不然拋出NoSuchElementException)

六、檢查元素是否在頁面上(而且能夠獲取元素的尺寸和位置,拖拉元素):
WebElement plain = driver.findElement(By.name( "q" ));
RenderedWebElement element = (RenderedWebElement) element;(例如HtmlUnit Driver就沒法顯示出內容)

對元素拖拉:
RenderedWebElement element = (RenderedWebElement) driver.findElement(By.name( "source" ));
RenderedWebElement target = (RenderedWebElement) driver.findElement(By.name( "target" ));
element.dragAndDropOn(target);

七、在窗口和frame之間移動
(1)在命名的窗口之間移動:switchTo
driver.switchTo().window( "windowName" ); (能夠經過js或者打開窗口的連接獲取窗口名稱)
(2)也可經過窗口句柄切換:
for (String handle : driver.getWindowHandles()) {
driver.switchTo().window(handle);
}
(3)frame之間切換或者切換到iframe:
driver.switchTo().frame( "frameName" );
經過索引訪問subframe:
driver.switchTo().frame( "frameName.0.child" );(frameName的第一個subframe的明價child的frame)

八、彈出對話框:
窗口彈出後,可使用以下語句訪問到彈出窗口:
Alert alert = driver.switchTo().alert();
獲取到alert窗口後,可進行各類操做。

九、頁面導航:
navigate().to()和get()功能徹底同樣。
driver.navigate().to( "http://www.example.com" );

瀏覽器的前進和後退
driver.navigate().forward();
driver.navigate().back();
(注意這兩個方法取決於瀏覽器的實現,能夠會出現某些調用失敗)


十、Cookies(必須首先在目標url域上)
// Go to the correct domain
driver.get( "http://www.example.com" );
// Now set the cookie. This one’s valid for the entire domain
Cookie cookie = new Cookie( "key" , "value" );
driver.manage().addCookie(cookie);
// And now output all the available cookies for the current URL
Set<Cookie> allCookies = driver.manage().getCookies();
for (Cookie loadedCookie : allCookies) {
System.out.println(String.format( "%s -> %s" , loadedCookie.getName(), loadedCookie.getValue()));
}

十二、WebDriver支持的瀏覽器不如Selenium RC多: 爲了支持更多的瀏覽器而且使用WebDriver API,可使用SeleneseCommandExecutor Capabilities capabilities = new DesiredCapabilities() capabilities.setBrowserName( "safari" ); CommandExecutor executor = new SeleneseCommandExecutor( "http:localhost:4444/" , "http://WebDriver driver = new RemoteWebDriver(executor, capabilities); 這種方法的限制條件:目前findElements方法不能使用,而且首先js沙盒。
相關文章
相關標籤/搜索