您的位置:軟件測(cè)試 > 開源軟件測(cè)試 > 開源功能測(cè)試工具 > Selenium
TeamCity編譯執(zhí)行Selenium上傳窗口腳本缺陷
作者:網(wǎng)絡(luò)轉(zhuǎn)載 發(fā)布時(shí)間:[ 2015/7/14 9:50:30 ] 推薦標(biāo)簽:功能測(cè)試工具

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

  為了實(shí)現(xiàn)課件圖片和資源的上傳,我一開始打算都用sendKeys,然后發(fā)現(xiàn)上傳圖片是成功,上傳課件失敗,因?yàn)楣镜纳蟼髡n件是使用網(wǎng)絡(luò)開源控件,所以上傳文件不支持selenium的api之sendKeys的使用,于是我換了思路,準(zhǔn)備模擬功能測(cè)試操作:
  點(diǎn)擊界面【選擇】按鈕
  在彈出的窗口使用javaAPI之Robot,模擬鍵盤按下Ctrl+V,粘貼課件資源路徑
  再按下Enter鍵,實(shí)現(xiàn)了課件的上傳
  判斷此時(shí)系統(tǒng)是否有彈出蒙板(ps:此處只要判斷窗口中是否有蒙板中特有的文字出現(xiàn)即可)
  操作的步驟的腳本如下
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();//點(diǎn)擊【選擇】按鈕
this.useSysClipboard("D:1.mp4");//將要上傳的文件路徑復(fù)制到剪切板然后粘貼出來并按下Enter鍵
Assert.assertTrue(driver.getPageSource().contains("上傳課件成功"));//判斷是否有上傳課件成功提示字符串
/**
* 復(fù)制數(shù)據(jù)到剪切板并粘貼出來
* @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);//清空系統(tǒng)剪切板
Transferable tText = new StringSelection(writeMe);  //將文件路徑復(fù)制到系統(tǒng)剪切板
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);
}
  腳本寫完后,是運(yùn)行調(diào)試,很好,本地執(zhí)行這個(gè)步驟的腳本運(yùn)行ok,很開心,于是提交腳本到公司的svn,然后是teamCity去編譯我提交的腳本,這里說明下,teamCity在編譯的過程中是會(huì)根據(jù)我腳本中指定的瀏覽器類型,打開相應(yīng)的driver去執(zhí)行腳本的,此時(shí)編譯過程中是不會(huì)打開真實(shí)的瀏覽器,不過發(fā)現(xiàn)在teamCity編譯的過程上傳圖片步驟通過,但是上傳課件資源步驟報(bào)錯(cuò)了,錯(cuò)誤日志顯示腳本在Assert.assertTrue(driver.getPageSource().contains("上傳課件成功!"))報(bào)錯(cuò)了,這種情況出現(xiàn)的原因是上傳課件步驟沒有成功,所以找不到蒙板層中的字符串,于是我覺得奇怪,理論上本機(jī)調(diào)試ok的腳本,在teamCity編譯執(zhí)行的過程中是不會(huì)有錯(cuò)誤的,于是為了排除是網(wǎng)絡(luò)延遲導(dǎo)致的,我加長(zhǎng)了sleep的時(shí)間,發(fā)現(xiàn)還是報(bào)一樣的錯(cuò)誤,此時(shí)我懷疑是不是teamCity在編譯執(zhí)行的的過程中不支持Robot的模擬操作,于是我換了思路,借助autoIt3這個(gè)工具。
  使用autoIt3直接寫了一個(gè)小腳本并轉(zhuǎn)換成可執(zhí)行的.exe文件,這個(gè)腳本的作用是在彈出上傳窗口的時(shí)候,在窗口中輸入文件路徑并點(diǎn)擊窗口【打開】鍵,于是腳本變成了下面這個(gè)
  driver.findElement(By.xpath("//ul/li[5]/div[1]/label/div/object")).click();//點(diǎn)擊【選擇】按鈕
  Runtime.getRuntime().exec("d:1.exe");//執(zhí)行.exe文件上傳課件
  Assert.assertTrue(driver.getPageSource().contains("上傳課件成功!"));判斷是否有上傳課件成功提示字符串
  然后接著本地調(diào)試可以運(yùn)行通過,但是提交teamCity編譯還是報(bào)錯(cuò),這個(gè)時(shí)候我排除了之前的想法“teamCity在編譯執(zhí)行的的過程中不支持Robot的模擬操作”這個(gè)假設(shè)。
  這個(gè)時(shí)候我又懷疑是不是teamCity編譯執(zhí)行的時(shí)候沒有打開真實(shí)的瀏覽器,導(dǎo)致我上傳課件資源失敗,為了證明我的假設(shè),我把上傳課程圖片腳本也是改成了使用模擬鍵盤復(fù)制粘貼操作并結(jié)合Enter鍵盤來實(shí)現(xiàn),不用sendKeys,腳本修改如下
  driver.findElement(By.id("updatePicId")).click();//點(diǎn)擊【上傳圖片】按鈕
  this.useSysClipboard("D:1.jpg");//通過復(fù)制粘貼方式上傳圖片
  Assert.assertTrue(driver.getPageSource().contains("上傳圖片成功"));//判斷是否有上傳圖片成功提示字符串
  driver.findElement(By.xpath("//ul/li[5]/div[1]/label/div/object")).click();//點(diǎn)擊【選擇】按鈕
  Runtime.getRuntime().exec("d:1.exe");//執(zhí)行.exe文件上傳課件
  Assert.assertTrue(driver.getPageSource().contains("上傳課件成功!"));//判斷是否有上傳課件成功提示字符串
  果然teamCity在編譯的時(shí)候報(bào)錯(cuò)了,找不到“圖片上傳成功”這個(gè)字符串的,這個(gè)時(shí)候我確定了我的假設(shè)“ TeamCity編譯selenium腳本,對(duì)于上傳窗口處理只支持sendKeys的使用,不支持模擬人為按下Enter鍵和使用autoIt等操作”這個(gè)假設(shè)

軟件測(cè)試工具 | 聯(lián)系我們 | 投訴建議 | 誠聘英才 | 申請(qǐng)使用列表 | 網(wǎng)站地圖
滬ICP備07036474 2003-2017 版權(quán)所有 上海澤眾軟件科技有限公司 Shanghai ZeZhong Software Co.,Ltd