【问题标题】:Browser capabilities in spec description in Protractor JasmineProtractor Jasmine 规范描述中的浏览器功能
【发布时间】:2018-12-19 08:13:32
【问题描述】:

我想为一个测试用例生成两个单独的报告。为此,我在测试中使用browser.getCapabitities 方法来获取浏览器名称和版本。

现在,当我在规范描述的末尾使用这个变量时,值是undefinedbrowserNameforSpec 在描述之前获得了价值。只有当我在规范末尾使用此值时,它才会显示未定义。我无法得到发生这种情况的原因。有什么方法可以在测试开始之前更改此规范描述的名称。

我的代码是

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

【问题讨论】:

    标签: javascript angular jasmine protractor httpbrowsercapabilities


    【解决方案1】:

    在您的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);
        });
    

    希望对你有帮助..

    【讨论】:

    • 我在第一行收到此错误 TypeError: Cannot read property 'browserName' of undefined
    【解决方案2】:

    问题是: 1. 您正在使用 this.browserNameforSpec,它会随着函数上下文的变化而未定义,您已将 browserNameforSpec 声明为可在所有函数中直接使用的变量,但您正在调用它) 2. browser.getCapabilities() 返回一个 Promise 实例,这就是执行流程不同的原因。首先它正在执行这个函数和describe()。但。它们需要以同步方式调用。

    以下代码使用另一个 .then 以顺序方式执行它。尝试使用以下代码:

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

    【讨论】:

    • 该值仍未定义。这是结果 1. 0030 测试是否正确登录 undefined[chrome #01]
    • 我认为在这个测试中不会运行。因为我没有定义任何规格!尝试删除文件夹时出现问题。并且没有运行规范
    • 不确定,你在做什么?
    • 测试没有运行。错误是未定义规范。我以前试过这种方法。但这不起作用
    猜你喜欢
    • 2014-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-28
    • 2020-09-06
    • 1970-01-01
    • 2011-11-22
    • 2014-09-04
    • 2021-12-01
    相关资源
    最近更新 更多