天天看點

二、Cuke test 使用chrome模拟mobile 自動化測試

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();