上一篇我們講了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 });
相關文章