亚洲好骚综合-亚洲黄色录像-亚洲黄色网址-亚洲黄色网址大全-99久久99久久-99久久99久久精品国产

您的位置:軟件測試 > 開源軟件測試 > 開源功能測試工具 > Selenium
使用WebDriver遇到的那些坑
作者:網(wǎng)絡(luò)轉(zhuǎn)載 發(fā)布時間:[ 2014/12/8 16:56:45 ] 推薦標(biāo)簽:Selenium 自動化測試 瀏覽器

  這是一篇非常好的總結(jié)性文章,實(shí)戰(zhàn)經(jīng)驗(yàn)積累,我們會持續(xù)更新這篇文章。
  在做web項(xiàng)目的自動化端到端測試時主要使用的是Selenium WebDriver來驅(qū)動瀏覽器。Selenium WebDriver的優(yōu)點(diǎn)是支持的語言多,支持的瀏覽器多。主流的瀏覽器Chrome、Firefox、IE等都支持,手機(jī)上的瀏覽器Android、IPhone等也支持,甚至還支持PhantomJS(由于PhantomJS跑測試時并不需要渲染元素,所以執(zhí)行速度快)。
  使用WebDriver遇到的那些坑
  webdriver實(shí)用干貨
  但是我在使用Selenium WebDriver時,遇到了很多坑。這些問題,有的是因?yàn)镾elenium WebDriver與瀏覽器不同版本之間兼容性的問題,有的是Selenium WebDriver本身的bug,當(dāng)然也不乏自己對Selenium WebDriver某些功能理解不透徹。我花時間總結(jié)了一下,分享給大家,希望大家以后遇到問題可以避過這些坑,少走彎路。另外也總結(jié)了一些使用WebDriver的比較好的實(shí)踐,也一并分享給大家。
  WebDriver每次啟動一個Firefox的實(shí)例時,會生成一個匿名的profile,并不會使用當(dāng)前Firefox的profile。這點(diǎn)一定要注意。比如如果訪問被測試的web服務(wù)需要通過代理,你想直接設(shè)置Firefox的代理是行不通的,因?yàn)閃ebDriver啟動的Firefox實(shí)例并不會使用你這個profile,正確的做法是通過FirefoxProfile來設(shè)置。
  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也可以設(shè)置Firefox其它各種配置。如果要默認(rèn)給Firefox安裝插件的話,可以將插件放置到Firefox安裝目錄下的默認(rèn)的plugin文件夾中,這樣即使是使用一個全新的profile也可以應(yīng)用此plugin。
  使用WebDriver點(diǎn)擊界面上Button元素時,如果當(dāng)前Button元素被界面上其他元素遮住了,或沒出現(xiàn)在界面中(比如Button在頁面底部,但是屏幕只能顯示頁面上半部分),使用默認(rèn)的WebElement.Click()可能會觸發(fā)不了Click事件。
  修正方案是找到該頁面元素后直接發(fā)送一條Click的JavaScript指令。
  ((JavascriptExecutor)webDriver).executeScript("arguments[0].click();",webElement);
  當(dāng)進(jìn)行了一些操作發(fā)生頁面跳轉(zhuǎn)時,好加一個Wait方法等待page load完成再進(jìn)行后續(xù)操作。方法是在某個時間段內(nèi)判斷document.readyState是不是complete。
  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中填充數(shù)據(jù),則寫一個方法判斷該DropDownList中元素是否多余0個。
  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());
  }
  以此類推,我們可以判斷某個元素是否呈現(xiàn)、某個class是否append成功等一系列方法來判斷ajax是否執(zhí)行完成。
  如果網(wǎng)站使用了JQuery的動畫效果,我們在運(yùn)行測試的時候其實(shí)可以disable JQuery的animation,一方面可以加快測試的速度,另一方面可以加強(qiáng)測試的穩(wěn)定性(如果啟用了Animation,使用WebDriver驅(qū)動瀏覽器時可能會出現(xiàn)一些無法預(yù)料的異常)。
  ((JavascriptExecutor)driver).executeScript("jQuery.fx.off=true");
  由于WebDriver要驅(qū)動瀏覽器,所以測試運(yùn)行的時間比較長,我們可以并行跑測試以節(jié)省時間。如果你使用的是maven構(gòu)建工具,可以配置surefire plugin時,在configruation節(jié)點(diǎn)加入以下配置。(網(wǎng)易Dagger框架支持的做法)
  <parallel>classes</parallel>
  <threadCount>3</threadCount>
  <perCoreThreadCount>false</perCoreThreadCount>
  當(dāng)測試fail的時候,如果當(dāng)前使用的WebDriver實(shí)現(xiàn)了TakesScreenshot接口,我們可以調(diào)用相應(yīng)的方法截下當(dāng)前瀏覽器呈現(xiàn)的web頁面,這樣有利于快速定位出錯的原因。
  public void getScreenShot(){
  if(webDriver instanceof TakesScreenshot){
  TakesScreenshot screenshotTaker=(TakesScreenshot)webDriver;
  File file=screenshotTaker.getScreenshotAs(savePath);
  }
  }
  如果頁面彈出了瀏覽器自帶的警告框(使用JavaScript的Alert方法),Selenium WebDriver在點(diǎn)選次警告框時會偶發(fā)性失敗。具體原因還未查明。解決方案是盡量不使用Alert方法的警告框,而是自己實(shí)現(xiàn)模式窗口(比如Jquery UI的模式窗口)來實(shí)現(xiàn)警告框效果。這樣即保證了測試的穩(wěn)定性,另外我們自己可以控制警告框的樣式,給用戶帶來更好的體驗(yàn)。
  經(jīng)常更新Selenium的版本。注意經(jīng)常上Selenium的官網(wǎng)看是否發(fā)布了新的版本,新的版本都修復(fù)了那些bug,如果包含你遇到的bug,可以升級到目前的版本。

軟件測試工具 | 聯(lián)系我們 | 投訴建議 | 誠聘英才 | 申請使用列表 | 網(wǎng)站地圖
滬ICP備07036474 2003-2017 版權(quán)所有 上海澤眾軟件科技有限公司 Shanghai ZeZhong Software Co.,Ltd
主站蜘蛛池模板: 日韩高清免费观看 | 制服丝袜中文 | 黄色成年人视频 | 成人播放 | 涩涩屋黄| 91啪国自产中文字幕在线 | www.国产精品视频 | 日韩在线你懂的 | 日韩伦理剧 | 夜色私人影院永久入口 | 亚洲欧美日韩中文字幕网址 | 欧美成人免费全部色播 | 国产成人精品日本亚洲语音1 | 日本xxxx18vr69| 亚洲综合网国产福利精品一区 | 日本免费一区二区三区看片 | 欧美特黄特刺激a一级淫片 欧美特黄视频在线观看 | 99视频精品全部在线播放 | 亚洲成人免费网址 | 美女羞羞免费网站 | 91精品国产自产91精品 | 欧美人成一本免费观看视频 | 欧美成在人线a免费 | 欧美精品hdvideosex | 日本亚洲欧美国产日韩ay高清 | 亚洲人成在线播放网站岛国 | 亚洲字幕久久 | 亚洲国产精品乱码一区二区三区 | 精品日韩欧美一区二区三区 | 亚洲欧美日韩高清一区二区三区 | 新版天堂资源中文在线 | 91在线视频免费91 | 不卡一区在线观看 | 色综合久久天天综合绕观看 | 18pao国产成视频永久免费 | 老司机精品影院一区二区三区 | 欧美一级特黄乱妇高清视频 | 999香蕉视频 | 在线观看毛片视频 | 成人自拍网站 | 亚洲午夜天堂 |