使用WebDriver遇到的那些坑

發表于:2014-07-16來源:DiggerPlus作者:陳永達點擊數: 標簽:WebDriver
這是一篇非常好的總結性文章,實戰經驗積累,我們會持續更新這篇文章。 在做web項目的自動化端到端測試時主要使用的是Selenium WebDriver來驅動瀏覽器。Selenium WebDriver的優點是支持的語言多,支持的瀏覽器多。主流的瀏覽器Chrome、Firefox、IE等都支持,手機上的瀏覽器Android、 IPhone等也支持,甚至還支持PhantomJS(由于PhantomJS跑測試時并不需要渲染元素,所以執行速度快)。

  這是一篇非常好的總結性文章,實戰經驗積累,我們會持續更新這篇文章。

  在做web項目的自動化端到端測試時主要使用的是Selenium WebDriver來驅動瀏覽器。Selenium WebDriver的優點是支持的語言多,支持的瀏覽器多。主流的瀏覽器Chrome、Firefox、IE等都支持,手機上的瀏覽器Android、 IPhone等也支持,甚至還支持PhantomJS(由于PhantomJS跑測試時并不需要渲染元素,所以執行速度快)。

使用WebDriver遇到的那些坑

  webdriver 實用干貨

  但是我在使用Selenium WebDriver時,遇到了很多坑。這些問題,有的是因為Selenium WebDriver與瀏覽器不同版本之間兼容性的問題,有的是Selenium WebDriver本身的bug,當然也不乏自己對Selenium WebDriver某些功能理解不透徹。我花時間總結了一下,分享給大家,希望大家以后遇到問題可以避過這些坑,少走彎路。另外也總結了一些使用 WebDriver的比較好的實踐,也一并分享給大家。

  WebDriver每次啟動一個Firefox的實例時,會生成一個匿名的profile,并不會使用當前Firefox的profile。這點一定要注意。比如如果訪問被測試的web服務需要通過代理,你想直接設置Firefox的代理是行不通的,因為WebDriver啟動的Firefox實例并不會使用你這個profile,正確的做法是通過FirefoxProfile來設置。

1
2
3
4
5
6
7
8
public WebDriver create() {
  FirefoxProfile firefoxProfile = new FirefoxProfile();
  firefoxProfile.setPreference("network.proxy.type",1);
  firefoxProfile.setPreference("network.proxy.http",yourProxy);
  firefoxProfile.setPreference("network.proxy.http_port",yourPort);
  firefoxProfile.setPreference("network.proxy.no_proxies_on","");
  return new FirefoxDriver(firefoxProfile);
}

  通過FirefoProfile也可以設置Firefox其它各種配置。如果要默認給Firefox安裝插件的話,可以將插件放置到Firefox安裝目錄下的默認的plugin文件夾中,這樣即使是使用一個全新的profile也可以應用此plugin。

  使用WebDriver點擊界面上Button元素時,如果當前Button元素被界面上其他元素遮住了,或沒出現在界面中(比如Button在頁面底部,但是屏幕只能顯示頁面上半部分),使用默認的WebElement.Click()可能會觸發不了Click事件。

  修正方案是找到該頁面元素后直接發送一條Click的JavaScript指令。

1
((JavascriptExecutor)webDriver).executeScript("arguments[0].click();", webElement);

  當進行了一些操作發生頁面跳轉時,最好加一個Wait方法等待page load完成再進行后續操作。方法是在某個時間段內判斷document.readyState是不是complete。

原文轉自:http://www.huangbowen.net/blog/2013/06/25/practice-of-webdriver/

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97