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

您的位置:軟件測試 > 開源軟件測試 > 開源功能測試工具 > Selenium
TeamCity編譯執行Selenium上傳窗口腳本缺陷
作者:網絡轉載 發布時間:[ 2015/7/14 9:50:30 ] 推薦標簽:功能測試工具

  TeamCity編譯selenium腳本,對于上傳窗口處理只支持sendKeys的使用,不支持模擬人為按下Enter鍵和使用autoIt等操作,即使本地調試通過的腳本,提交編譯執行后,也是報錯,原因是teamCity編譯執行腳本的過程中,只是后臺啟動相應瀏覽器的driver,和瀏覽器對應的進程,沒有和人為操作一樣的真實打開一個瀏覽器界面導致的。發現這個缺陷還得從編寫上傳課件測試用例腳本說起。
  一個上傳課程測試用例,功能測試是,填寫課程的基本信息后,上傳課程的圖片,如圖1,圖片上傳成功后,系統會提示“圖片上傳成功”,然后點擊【選擇】按鈕,如圖2,在彈出的窗口中選擇需要作為課程課件的文件后,點擊【打開】按鈕或者直接按Enter鍵,即可選擇文件,如下圖3,課件資源上傳成功后,系統會彈出一個蒙板層,告訴課程資源上傳成功

  為了實現課件圖片和資源的上傳,我一開始打算都用sendKeys,然后發現上傳圖片是成功,上傳課件失敗,因為公司的上傳課件是使用網絡開源控件,所以上傳文件不支持selenium的api之sendKeys的使用,于是我換了思路,準備模擬功能測試操作:
  點擊界面【選擇】按鈕
  在彈出的窗口使用javaAPI之Robot,模擬鍵盤按下Ctrl+V,粘貼課件資源路徑
  再按下Enter鍵,實現了課件的上傳
  判斷此時系統是否有彈出蒙板(ps:此處只要判斷窗口中是否有蒙板中特有的文字出現即可)
  操作的步驟的腳本如下
driver.findElement(By.id("updatePicId")). sendKeys("D:1.jpg");//上傳圖片
Assert.assertTrue(driver.getPageSource().contains("上傳圖片成功"));//判斷是否有上傳圖片成功提示字符串
driver.findElement(By.xpath("//ul/li[5]/div[1]/label/div/object")).click();//點擊【選擇】按鈕
this.useSysClipboard("D:1.mp4");//將要上傳的文件路徑復制到剪切板然后粘貼出來并按下Enter鍵
Assert.assertTrue(driver.getPageSource().contains("上傳課件成功"));//判斷是否有上傳課件成功提示字符串
/**
* 復制數據到剪切板并粘貼出來
* @param writeMe
* @throws java.awt.AWTException
*/
public void useSysClipboard(String writeMe) throws AWTException {
Sleeper.sleepTight(800);
Robot robot=new Robot();
Clipboard clip = Toolkit.getDefaultToolkit().getSystemClipboard();
clip.setContents(new StringSelection(""), null);//清空系統剪切板
Transferable tText = new StringSelection(writeMe);  //將文件路徑復制到系統剪切板
clip.setContents(tText, null);
robot.keyPress(KeyEvent.VK_CONTROL);//模擬按ctrl鍵
robot.keyPress(KeyEvent.VK_V);//模擬按v鍵
Sleeper.sleepTight(500);
robot.keyRelease(KeyEvent.VK_V);//模擬釋放v鍵
robot.keyRelease(KeyEvent.VK_CONTROL);//模擬釋放ctrl鍵
Sleeper.sleepTight(500);
robot.keyPress(KeyEvent.VK_ENTER);//模擬按Enter鍵
Sleeper.sleepTight(500);
}
  腳本寫完后,是運行調試,很好,本地執行這個步驟的腳本運行ok,很開心,于是提交腳本到公司的svn,然后是teamCity去編譯我提交的腳本,這里說明下,teamCity在編譯的過程中是會根據我腳本中指定的瀏覽器類型,打開相應的driver去執行腳本的,此時編譯過程中是不會打開真實的瀏覽器,不過發現在teamCity編譯的過程上傳圖片步驟通過,但是上傳課件資源步驟報錯了,錯誤日志顯示腳本在Assert.assertTrue(driver.getPageSource().contains("上傳課件成功!"))報錯了,這種情況出現的原因是上傳課件步驟沒有成功,所以找不到蒙板層中的字符串,于是我覺得奇怪,理論上本機調試ok的腳本,在teamCity編譯執行的過程中是不會有錯誤的,于是為了排除是網絡延遲導致的,我加長了sleep的時間,發現還是報一樣的錯誤,此時我懷疑是不是teamCity在編譯執行的的過程中不支持Robot的模擬操作,于是我換了思路,借助autoIt3這個工具。
  使用autoIt3直接寫了一個小腳本并轉換成可執行的.exe文件,這個腳本的作用是在彈出上傳窗口的時候,在窗口中輸入文件路徑并點擊窗口【打開】鍵,于是腳本變成了下面這個
  driver.findElement(By.xpath("//ul/li[5]/div[1]/label/div/object")).click();//點擊【選擇】按鈕
  Runtime.getRuntime().exec("d:1.exe");//執行.exe文件上傳課件
  Assert.assertTrue(driver.getPageSource().contains("上傳課件成功!"));判斷是否有上傳課件成功提示字符串
  然后接著本地調試可以運行通過,但是提交teamCity編譯還是報錯,這個時候我排除了之前的想法“teamCity在編譯執行的的過程中不支持Robot的模擬操作”這個假設。
  這個時候我又懷疑是不是teamCity編譯執行的時候沒有打開真實的瀏覽器,導致我上傳課件資源失敗,為了證明我的假設,我把上傳課程圖片腳本也是改成了使用模擬鍵盤復制粘貼操作并結合Enter鍵盤來實現,不用sendKeys,腳本修改如下
  driver.findElement(By.id("updatePicId")).click();//點擊【上傳圖片】按鈕
  this.useSysClipboard("D:1.jpg");//通過復制粘貼方式上傳圖片
  Assert.assertTrue(driver.getPageSource().contains("上傳圖片成功"));//判斷是否有上傳圖片成功提示字符串
  driver.findElement(By.xpath("//ul/li[5]/div[1]/label/div/object")).click();//點擊【選擇】按鈕
  Runtime.getRuntime().exec("d:1.exe");//執行.exe文件上傳課件
  Assert.assertTrue(driver.getPageSource().contains("上傳課件成功!"));//判斷是否有上傳課件成功提示字符串
  果然teamCity在編譯的時候報錯了,找不到“圖片上傳成功”這個字符串的,這個時候我確定了我的假設“ TeamCity編譯selenium腳本,對于上傳窗口處理只支持sendKeys的使用,不支持模擬人為按下Enter鍵和使用autoIt等操作”這個假設

軟件測試工具 | 聯系我們 | 投訴建議 | 誠聘英才 | 申請使用列表 | 網站地圖
滬ICP備07036474 2003-2017 版權所有 上海澤眾軟件科技有限公司 Shanghai ZeZhong Software Co.,Ltd
主站蜘蛛池模板: 在线久操| 韩日色图 | 最新中文字幕在线视频 | 日韩福利视频高清免费看 | 天天射天天爱天天干 | 欧美一级特黄高清免费 | 黄网站色成年片在线观看 | 丝袜视频在线 | 中文国产成人精品久久一区 | 好男人在线社区影院www | 国产成人99| 在线天堂中文字幕 | 全网毛片免费| 一级特黄色毛片免费看 | 欧美一区二区三区不卡免费 | 99精品欧美 | 欧美一级三级在线观看 | 免费精品国产日韩热久久 | 26uuu久久| 欧美日韩一区二区三区视频 | 亚洲成a人v在线观看 | 婷婷综合在线 | 亚洲 欧美 日韩在线综合福利 | 日本天堂在线观看 | 免费看黄色片视频 | 国产男女猛烈无遮档免费视频网站 | 成a人v欧美综合天堂 | 在线观看免费精品国产 | 91四虎国自产在线播放线 | 国产91精品一区 | 99在线视频播放 | 羞羞影院男女午夜爽爽影视 | 亚洲第一网址 | 国产日产欧美一区二区三区 | www.国产精品| 日本欧美中文字幕 | 久久精品国产亚洲a不卡 | 天天爽天天摸 | 国产一区二区在线观看动漫 | 玖草福利视频 | 国产成人午夜91精品麻豆剧场 |