Среда Protractor-typcript-cucumber: запустить mutiple baseUrl из командной строки - PullRequest
0 голосов
/ 31 декабря 2018

Я борюсь с этой проблемой, мне нужно запустить проект на основе typcript-protractor-cucumber для различных baseUrl через командную строку. Я не могу его выполнить.Не могли бы вы помочь мне с информацией или ссылкой на тот же проект GitHub.Я устанавливаю baseUrl в файле config.ts и пытаюсь вызвать их из файла hook.ts с помощью командной строки.

Hook.ts & config.ts

const { BeforeAll, After, AfterAll, Status } = require("cucumber");
import * as fs from "fs";
import { browser } from "protractor";
import { config } from '../config/config';
import { build$ } from "protractor/built/element";
let env = browser.params.environment;

BeforeAll({timeout: 100 * 1000}, async () => {
//await  browser.get(config.params.baseUrl.prod);
await browser.get(env);

});

After(async function(scenario) {
if (scenario.result.status === Status.PASSED) {
    // screenShot is a base-64 encoded PNG
     const screenShot = await browser.takeScreenshot();
     this.attach(screenShot, "image/png");
}

import * as path from "path";
import { browser, Config } from "protractor";
import { Reporter } from "../support/reporter";
const jsonReports = process.cwd() + "/reports/json";

export const config: Config = {

seleniumAddress: "http://127.0.0.1:4444/wd/hub",

SELENIUM_PROMISE_MANAGER: false,

capabilities: {
    browserName: "chrome",
},

framework: "custom",
frameworkPath: require.resolve("protractor-cucumber-framework"),

specs: [
    "../../features/Search.feature",
],
 params:{
baseUrl:{
 prod:'https://www.abdec.com',
     test: 'https://www.facebook.com'
 }
},
onPrepare: () => {
    // switch(browser.params.baseUrl){
    //    case 'firsturl': browser.get("https://www.abdc.com")
    //    default: browser.get("https://www.facebook.com")
    // }
    browser.ignoreSynchronization = true;
    browser.manage().timeouts().implicitlyWait(12000);
    browser.manage().window().maximize();
    Reporter.createDirectory(jsonReports);
},

cucumberOpts: {
    compiler: "ts:ts-node/register",
    format: "json:./reports/json/cucumber_report.json",
    require: ["../../typeScript/stepdefinitions/*.js","../../typeScript/support/*.js"],
    strict: true,
    tags: "@SampleScenario",
},

onComplete: () => {
    Reporter.createHTMLReport();
},

};

1 Ответ

0 голосов
/ 31 декабря 2018

Вы можете указать параметры в командной строке с помощью --params.key=value и получить переданные параметры в сценарии с помощью browser.params.key.

1) env.ts

exports let config = {
    prod: {
        baseUrl: "https://www.asde.com",
        loginCred:
            {
                username: "asde.sin@ud.com.com",
                password: "asbcde"
            }        
    },

    test: {
        baseUrl: "https://www.facebook.com",
        loginCred: {
            username: "asde.sin12@ud.com",
            password: "asbcdefd"
        }
    }
};

2) Крючки для огурца .ts

const { BeforeAll, After, AfterAll, Status } = require("cucumber");
import { browser } from "protractor";
import { config } from '../config/env.ts';

BeforeAll({timeout: 100 * 1000}, async () => {
    let env = browser.params.env;
    // you need to put above line into this function, rather than
    // put at the top of import section, the hooks.ts will be loaded by
    // nodejs before browser instance inited. Otherwise, the `browser`
    // variable is null, it leads `browser.params.env` fail.

    await browser.get(config[env].baseUrl);
});

3) Конфигуратор транспортира.

export const config: Config = {

    seleniumAddress: "http://127.0.0.1:4444/wd/hub",
    ...

    params: {   
        env: 'test'
    }
};

4) укажите env из командной строки

protractor config.js --params.env=prod

5) HomePageObject

import { config } from './config/env.ts';
export class HomePageObject { 

    constructor(env: string) {
        this.env = browser.params.env;
        this.username = config[this.env].username;
        this.password = config[this.env].password;
    }

    login() {
        element(by.css('input.username')).sendKeys(this.username);
        element(by.css('input.password')).sendKeys(this.password);
        element(by.css('button.login')).click();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...