Cuke test 封裝得特别好,不需要測試人員再去內建:case管理、測試報告。 非常适合自動化入門
但也正因為如此,假如碰到一些特殊的場景,想要修改架構,同時對他得封裝不熟悉就會非常頭疼
以下是場景是因為需要在使用浏覽器模拟Mobile 的同時還需要對pc的浏覽器操作的解決方案
1.web_driver.js 全部替換
require('chromedriver')
const webDriver = require('selenium-webdriver');
const { Options } = require('selenium-webdriver/chrome')
//建立浏覽器驅動
function createBrowserDriver() {
console.log('Create Driver');
let browserConfig = process.env.BROWSER || 'chrome';
let browser = browserConfig.toLowerCase();
if (['chrome', 'firefox', 'ie'].indexOf(browser) < 0) browser = 'chrome'; //default to chrome
return new webDriver.Builder().forBrowser(browser).build();
}
// 建立手機驅動
function createMobileDriver() {
const { Options } = require('selenium-webdriver/chrome')
console.log('Create Mobile Driver');
let chrome = require('selenium-webdriver/chrome');
let { Builder } = require('selenium-webdriver');
return new Builder()
.forBrowser('chrome')
.setChromeOptions( new Options().setMobileEmulation({ deviceName: 'iPhone 6/7/8' }))
.build();
}
function choose(params) {
if(params === 1) return createBrowserDriver();
if(params === 2) return createMobileDriver();
}
exports. createDriver= choose;
2.hooks.js 檔案全部替換
const { After, Before, AfterAll, setDefaultTimeout } = require('cucumber');
const { driver } = require('./web_driver');
//set default step timeout
setDefaultTimeout(90 * 1000);
3.腳本js 代碼示範
const { Given, When, Then } = require('cucumber');
const assert = require('assert');
const { createDriver } = require('../support/web_driver');
const { By, until } = require('selenium-webdriver');
Then(/^Browser浏覽器通路'([^']*)'$/, async function (url) {
const driver = createDriver(1);
await driver.get(url);
console.log("啟動浏覽器驅動")
await driver.sleep(3000);
let screenshot = await driver.takeScreenshot();
this.attach(screenshot, 'image/png');
driver.quit();
});
Then(/^\*Mobile 通路百度$/, async function () {
driver=createDriver(2);
await driver.get('https://www.jianshu.com/');
await driver.sleep(3000);
let screenshot = await driver.takeScreenshot();
this.attach(screenshot, 'image/png');
driver.quit();
});
總結:
以上改動會導緻hooks 檔案不會在每個動作結束後:截圖、清除緩存、關閉浏覽器
需要在每個腳本中自己選擇添加:
1.建立driver
const driver = createDriver(1); //1Mobil 2:browser
let screenshot = await driver.takeScreenshot();
this.attach(screenshot, 'image/png');
await driver.manage().deleteAllCookies();
driver.quit();