驅動器特性和權衡
支持WebDriver的Selenium-RC
Java版的WebDriver提供了一個Selenium RC API實現。這意味着在使用Selenium RC API時,使用潛在的WebDriver技術。這主要是爲了提供向後的兼容性。它允許那些有現存的、使用Selenium RC API的測試集的用戶,可以在外表下使用WebDriver。提供用於使遷移到Selenium-WebDriver的道路變得輕鬆。同樣,這允許人們並行地,在一個相同的測試中使用兩個API。
Selenium-WebDriver像這樣使用:
// 你可以使用任何WebDriver實現。在這裏Firefox被用於作爲一個示例。
WebDriver driver = new FirefoxDriver();// 一個“base url”,Selenium用於解析相對URL。
String baseUrl = "http://www.google.com";// 創建Selenium實現
Selenium selenium = new WebDriverBackedSelenium(driver, baseUrl);// 用Selenium執行動作
selenium.open("http://www.google.com");selenium.type("name=q", "cheese");
selenium.click("name=btnG");
// 返回潛在的WebDriver實現。這將引用相同的WebDriver實例,如同上面的“driver”變量
WebDriver driverInstance = ((WebDriverBackedSelenium) selenium).getWrappedDriver();// 最後,關閉瀏覽器。調用WebDriverBackedSelenium 的stop方法
// 替代調用driver.quit()。否則JVM會繼續在瀏覽器已經關閉後運行
selenium.stop();優點
- 允許WebDriver和Selenium API並行地運行。
- 提供一個簡單的機制用於管理從Selenium RC API到WebDriver的遷移。
- 不需要獨立的Selenium RC服務器被運行。
缺點
- 沒有實現每個方法。
- 更多的高級Selenium用法(使用“browserbot”或其他來自Selenium內核的、內置的Javascript方法)可能不工作。
- 某些方法可能比較慢,由於潛在的實現上的差別
支持WebDriver
WebDriver不支持Selenium RC支持的所有瀏覽器,如此當使用WebDriver API時,爲了提供那種支持,你可以充分利用SeleneseCommandExecutor。
下面的代碼以這種方式支持Safari(確信取消彈出阻塞)
DesiredCapabilities capabilities = new DesiredCapabilities();capabilities.setBrowserName("safari");
CommandExecutor executor = new SeleneseCommandExecutor(new URL("http://localhost:4444/"), new URL("http://www.google.com/"), capabilities);
WebDriver driver = new RemoteWebDriver(executor, capabilities);
用這種方法目前有某些較多的限制,尤其是findElement不能如預期般工作。同樣,因爲我們正在使用Selenium內核驅動瀏覽器,你會受到Javascript沙盒的限制。
Selenium WebDriver wiki你可以在WebDriver的wiki找到進一步的WebDriver資源。
下一步
這一章只是高級別的WebDriver和某些關鍵特徵的瀏覽。一旦熟悉Selenium-WebDriver API,你就會想要學習如何去構造可維護和可擴展的測試集,並在AUT的功能頻繁地變化時降低脆弱性。大多數的Selenium專家現在推薦的方法是使用頁面對象設計模式(Page Object Design Pattern),以及可能的頁面工廠(Page Factory)設計你的測試代碼。Selenium-WebDriver提供對這個的支持,通過提供一個PageFactory類在Java和C#中。這個,以及其他的高級主題,被介紹在下一章。此外,爲了獲得這種技術的高級別描述,你可能希望看看測試設計考慮一章。這些章節介紹了通過使測試代碼更模塊化來編寫更可維護的測試。
© Copyright 2008-2012, Selenium Project. Last updated on Feb 02, 2012.