日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

使用WebDriver遇到的那些坑

發布時間:2023/12/10 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用WebDriver遇到的那些坑 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

http://blog.csdn.net/oWuFeng1/article/category/2722111

?

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

但是我在使用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 9 10 11 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。
1 2 3 4 5 6 7 8 9 10 11 12 13 protected Function<WebDriver, Boolean> isPageLoaded() { return new Function<WebDriver, Boolean>() { @Override public Boolean apply(WebDriver driver) { return ((JavascriptExecutor) driver).executeScript("return document.readyState").equals("complete"); } }; } public void waitForPageLoad() { WebDriverWait wait = new WebDriverWait(webDriver, 30); wait.until(isPageLoaded()); }
  • 如果頁面有Ajax操作,需要寫一個Wait方法等待Ajax操作完成。方式與上一條中的基本相同。比如一個Ajax操作是用于向DropDownList中填充數據,則寫一個方法判斷該DropDownList中元素是否多余0個。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 private Function<WebDriver, Boolean> haveMoreThanOneOption(final By element) { return new Function<WebDriver, Boolean>() { @Override public Boolean apply(WebDriver driver) { WebElement webElement = driver.findElement(element); if (webElement == null) { return false; } else { int size = webElement.findElements(By.tagName("option")).size(); return size >= 1; } } }; } public void waitForDropDownListLoaded() { WebDriverWait wait = new WebDriverWait(webDriver, 30); wait.until(isPageLoaded()); }

以此類推,我們可以判斷某個元素是否呈現、某個class是否append成功等一系列方法來判斷ajax是否執行完成。

  • 如果網站使用了JQuery的動畫效果,我們在運行測試的時候其實可以disable JQuery的animation,一方面可以加快測試的速度,另一方面可以加強測試的穩定性(如果啟用了Animation,使用WebDriver驅動瀏覽器時可能會出現一些無法預料的異常)。
1 ((JavascriptExecutor)driver).executeScript("jQuery.fx.off=true");
  • 由于WebDriver要驅動瀏覽器,所以測試運行的時間比較長,我們可以并行跑測試以節省時間。如果你使用的是maven構建工具,可以配置surefire plugin時,在configruation節點加入以下配置。
1 2 3 <parallel>classes</parallel> <threadCount>3</threadCount> <perCoreThreadCount>false</perCoreThreadCount>
  • 當測試fail的時候,如果當前使用的WebDriver實現了TakesScreenshot接口,我們就可以調用相應的方法截下當前瀏覽器呈現的web頁面,這樣有利于快速定位出錯的原因。
1 2 3 4 5 6 public void getScreenShot() { if (webDriver instanceof TakesScreenshot) { TakesScreenshot screenshotTaker = (TakesScreenshot) webDriver; File file = screenshotTaker.getScreenshotAs(savePath); } }
  • 如果頁面彈出了瀏覽器自帶的警告框(使用JavaScript的Alert方法),Selenium WebDriver在點選次警告框時會偶發性失敗。具體原因還未查明。解決方案是盡量不使用Alert方法的警告框,而是自己實現模式窗口(比如Jquery UI的模式窗口)來實現警告框效果。這樣即保證了測試的穩定性,另外我們自己可以控制警告框的樣式,給用戶帶來更好的體驗。

  • 經常更新Selenium的版本。注意經常上Selenium的官網看是否發布了新的版本,新的版本都修復了那些bug,如果包含你遇到的bug,就可以升級到目前的版本。

轉載于:https://www.cnblogs.com/shengs/p/5907080.html

總結

以上是生活随笔為你收集整理的使用WebDriver遇到的那些坑的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。