上一篇我們講了CukeTest+Puppeteer的相關理論知識,帶大家認識熟悉了CukeTest如何執行與如何編寫劇本,Puppeteer大體的理論體系與如何結合使用,但一直沒有給大家進行上手實戰操作。這一篇,我就帶大家一起來實戰燥起來~~~
測試頁面以百度首頁為例,我們用CukeTest+Puppeteer編寫功能測試Demo,將上篇講的相關知識點結合起來練手。
CukeTest官方文件:http://www.cuketest.com/zh-cn/
Puppeteer官方文件:https://zhaoqize.github.io/puppeteer-api-zh_CN/
一、例項1
功能測試:引數化形式開啟多個網頁
1、開啟CukeTest我們來新建一個空專案,安裝Node和Puppeteer,注意(兩者版本相容問題),上文中已提到過的。
2、編輯劇本相關引數
3、編寫劇本對應的指令碼
4、執行
如下圖
劇本的文字如下
# language: zh-CN 功能: 百度首頁 開啟百度首頁 @openPage 場景大綱: 頁面開啟 假如開啟百度首頁"<param1>" @pageOne 例子: | param1 | | https://www.baidu.com/ | | https://www.runoob.com/ | @pageTwo 例子: | param1 | | https://www.csdn.net/ | | https://www.cnblogs.com/ | @baiduSearch 場景: 百度首頁搜尋 開啟百度首頁,搜尋'puppeteer',百度查詢並截圖儲存結果 假如開啟百度首頁"https://www.baidu.com/" 當輸入"puppeteer",點選百度一下 那麼截圖儲存搜尋結果
劇本對應的指令碼
1 //引用cucumber和puppeteer,使用各自相關的API 2 const { 3 Given, 4 When, 5 Then 6 } = require('cucumber'); 7 const puppeteer = require('puppeteer'); 8 //預設情況下,非同步hook和步驟在5000毫秒後超時,這個可以全域性修改超時時長 9 const { 10 setDefaultTimeout 11 } = require('cucumber'); 12 setDefaultTimeout(60 * 1000); 13 //變數定義 14 let browser = null; 15 let page = null; 16 17 //// 你的步驟定義 ///// 18 19 Given("開啟百度首頁{string}", async function (arg1) { 20 /* 21 當 Puppeteer 連線到一個 Chromium 例項的時候會通過 puppeteer.launch 建立一個 Browser 物件。 22 建立一個 Browser 類的例項物件 23 executablePath:可執行 Chromium 或 Chrome 可執行檔案的路徑 24 headless: 是否以 無頭模式 執行瀏覽器 25 defaultViewport: null, args: ['--start-maximized']:檢視視窗最大化 26 defaultViewport選項設定為null以禁用800x600解析度。它需要最大解析度 27 ignoreDefaultArgs: ['--enable-automation']: 28 禁止展示chrome左上角有個Chrome正受自動軟體控制,避免puppeteer被前端JS檢測到 29 */ 30 browser = await puppeteer.launch({ 31 executablePath: 'D:\\Demo\\node_modules\\puppeteer\\.local-chromium\\win64-722234\\chrome-win\\chrome.exe', 32 headless: false, 33 defaultViewport: null, 34 args: ['--start-maximized'], 35 ignoreDefaultArgs: ['--enable-automation'] 36 }); 37 //建立一個新的Page物件 38 page = await browser.newPage(); 39 //開啟連結 40 await page.goto(arg1); 41 //等待3s 42 await page.waitFor(3000); 43 //關閉chromium 44 await browser.close(); 45 });
執行:瀏覽器按順序開啟劇本中編輯的四個網頁,開啟一個網頁後關閉瀏覽器,緊接著開啟下一個。
二、例項2
功能:開啟百度首頁搜尋,並儲存截圖。
在基於上面的例項1,接著編寫場景2,如下圖
場景對應的指令碼:
1 //場景2:百度首頁搜尋 2 When("輸入{string},點選百度一下", async function (arg1) { 3 //匹配定位元素,定位輸入框元素,並輸入'puppeteer' 4 await page.type('#kw', arg1); 5 //等待2s 6 await page.waitFor(2000); 7 //點選“百度一下”按鈕 8 await page.click('#su'); 9 //等待3s 10 await page.waitFor(3000); 11 }); 12 13 Then("截圖儲存搜尋結果", async function () { 14 //截圖並儲存,截圖路徑為path,截圖型別可以是 jpeg 或者 png,預設 'png'. 15 await page.screenshot({ path: 'baiduHomeSearch.png' }); 16 //關閉chromium 17 await browser.close(); 18 });