Возможности браузера в описании спецификации в Protractor Jasmine - PullRequest
0 голосов
/ 19 декабря 2018

Я хочу создать два отдельных отчета для одного теста.Для этого я использую метод browser.getCapabitities в тесте, по которому я получаю имя и версию браузера.

Теперь, когда я использую эту переменную в конце описания спецификации, значение равно undefined.browserNameforSpec получает значение перед описанием.Только когда я использую это значение в конце спецификации, оно показывает неопределенное.Я не могу понять причину, по которой это происходит.Есть ли способ изменить имя этого описания спецификации до начала теста.

Мой код

let capsPromise = browser.getCapabilities();
let browserNameforSpec;
capsPromise.then(function(caps) {
    console.log(caps);
    let browserName = caps.get('browserName');
    let browserVersion = caps.get('version');
    browserNameforSpec = browserName + '-' + browserVersion + '-';
    console.log(browserNameforSpec);

});

describe( '0030 Test for login' + browserNameforSpec, function () { // this.browserNameforSpec value is undefined

    // 1.
    it('Navigate to the login page', async () => {
        await navigate.to.the(loginPage);
    });

    // 2
    it('Click onto language button', async() => {
        await click.onto(languageButton);
        await expect(languageDropdown.isDisplayed());
    });

    // 3
    it('English Language is selected', async() => {    
        await click.onto(englishLanguage);
        await expect(languageButton.getText()).toBe('English');
    });

    // 4.
    it('Correct user name is written into email field', async() => {
        await usernameField.click();
        await enter(correctUsername, into(usernameField));    
    });

    // 5.
    it('Correct password is written into password field', async() => {
            await passwordField.click().then(function () {
                passwordField.clear();
                enter(correctPassword, into(passwordField));
            })    
    });

    // 6.
    it('Login button is clicked and home page is opened', async() => {
        await click.onto(loginButton);
    });    
});

Ответы [ 2 ]

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

Добавьте приведенный ниже код в onPrepare()

browser.getCapabilities().then(function (cap) {
  browser.browserName = cap.caps_.browserName;
});

Вы называете свой тест, как показано ниже

describe( '0030 Test for login' + browser.browserName, function () {

    // 1.
    it('Navigate to the login page', async () => {
        await navigate.to.the(loginPage);
    });

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

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

Проблема: 1. Вы используете this.browserNameforSpec, который будет неопределенным при изменении контекста функции. Вы объявили browserNameforSpec как переменную, которая непосредственно доступна во всех функциях, но вы вызываетеthis) 2. browser.getCapabilities (), возвращающий экземпляр Promise, поэтому поток выполнения отличается.Сначала выполняется эта функция и описать ().Но.они должны вызываться синхронно.

Ниже код использует другой .hen для последовательного выполнения.Попробуйте использовать следующий код:

let capsPromise = browser.getCapabilities();
let browserNameforSpec;

capsPromise
    .then(function(caps) {
        console.log(caps);
        let browserName = caps.get('browserName');
        let browserVersion = caps.get('version');
        browserNameforSpec = browserName + '-' + browserVersion + '-';
        console.log(browserNameforSpec);

    })
    .then(function() {
        describe( '0030 Test for login' + browserNameforSpec, function () {

            // 1.
            it('Navigate to the login page', async () => {
                await navigate.to.the(loginPage);
            });

            // 2
            it('Click onto language button', async() => {
                await click.onto(languageButton);
                await expect(languageDropdown.isDisplayed());
            });

            // 3
            it('English Language is selected', async() => {

                await click.onto(englishLanguage);
                await expect(languageButton.getText()).toBe('English');
            });

            // 4.
            it('Correct user name is written into email field', async() => {
                await usernameField.click();
                await enter(correctUsername, into(usernameField));

            });

            // 5.
            it('Correct password is written into password field', async() => {
                    await passwordField.click().then(function () {
                        passwordField.clear();
                        enter(correctPassword, into(passwordField));
                    })

            });

            // 6.
            it('Login button is clicked and home page is opened', async() => {
                await click.onto(loginButton);
            });
        });
    });
...