Как закрыть браузер каждый раз после выполнения сценария и повторного запуска URL при запуске следующего сценария? - PullRequest
0 голосов
/ 08 апреля 2019

Я использую инфраструктуру protractor-cucumber -typescript, где в моем требовании - запустить 2 сценария из файла объектов.После выполнения одного сценария он должен закрыть браузер, а затем снова запустить URL-адрес в браузере и запустить второй сценарий.Я понимаю, что мне необходимо соответственно обновить файл ловушек, но я не могу его идентифицировать.

Я попытался вызвать browser.get ("URL");в сценарии beforeEach и закрытие браузера (т. е.) browser.quit ();в afterEach, но это не сработало (VError: после каждой ошибки хука).

hooks.ts:

const { BeforeAll, After, Before, Status } = require("cucumber");
import * as fs from "fs";
import { browser } from "protractor";
import { config } from "../config/config";
import { async } from "q";
import { AfterAll } from "cucumber";

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

After(async function (scenario) {
    if (scenario.result.status === Status.FAILED) {
        // screenShot is a base-64 encoded PNG
        const screenShot = await browser.takeScreenshot();
        this.attach(screenShot, "image/png");
    }
    else {
        var attach = this.attach;
        return browser.takeScreenshot().then(function (png) {
            var decodedImage = new Buffer(png, "base64");
            return attach(decodedImage, "image/png");
        })
    }
});

AfterAll({ timeout: 1000 * 1000 }, async () => {
    await browser.quit();
});

config.ts:

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,
    baseUrl: "url",
    capabilities: {
        browserName: "chrome",
    },
    framework: "custom",
    frameworkPath: require.resolve("protractor-cucumber-framework"),

    specs: [
        "../../features/*.feature",
    ],

    onPrepare: () => {
        browser.ignoreSynchronization = true;
        browser.manage().window().maximize();
        browser.manage().deleteAllCookies();
        browser.manage().timeouts().implicitlyWait(20000);
        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: "(@Scenario1 or @Scenario2 )",
    },
    onComplete: () => {
        Reporter.createHTMLReport();
    },
};

Ожидается, что браузер следует закрывать после каждого сценария, запускать URL-адрес и запускать следующий сценарий, поскольку каждый из сценариев представляет собой отдельную страницу.

1 Ответ

0 голосов
/ 09 апреля 2019

Добавьте ниже в вашей конфигурации

restartBrowserBetweenTests: true

Это перезапускает ваш браузер для каждого it блока.

Надеюсь, это поможет вам

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...