量角器:browser.variableName有时是未定义的,有时它有一个值

时间:2017-04-12 10:38:56

标签: input browser protractor global-variables

我正在使用Protractor测试nonAngular页面。我有一个变量,我使用存储为浏览器对象的specs。问题是我在某些规范中使用它,但有时它未定义。奇怪的是,在相同的spec文件中,很少使用它之前没有问题。即使我没有打电话或操纵它,它似乎也失去了它之间的价值。

CONF:

onPrepare: function() {
    ...
    beforeAll(function) {
        return browser.ignoreSynchronization = true;
    }
}

我在其中定义此变量的规范1:

// page objects
var createUserPage = require('...

// variables
var username = '';

describe(... {
    it(... {
        ...
        // initializing page objects
        var createUser = new createUserPage();

        // store useername text in global variable
        createUser.successfullyCreatedUserText.getText().then(function(text) {
            browser.username = text;
        });
    });
});

我使用此变量的规范2:

describe(... {
    it(... {
        ...
        // display username
        console.log("Username: " + browser.username);

        // enter username
        home.usernameInput.clear().sendKeys(browser.username);

        // pause browser
        browser.sleep(500);

        // click on Search button
        home.searchButton.click();
    });
});

在我得到控制台输出之前写的如下:

  

用户名:未定义

和堆栈跟踪错误:

  

TypeError:每个键必须是多个字符串;未定义

这并不是一直发生的,而是偶尔发生的。我做错了什么?

1 个答案:

答案 0 :(得分:2)

我会在您的配置中声明该变量,可以是globalparam。我可能会以global的方式进行,因为params通常在运行测试之前在配置中分配。

onPrepare: function() {
    global.username;
}

然后在您的规范中,您可以分配值(如果您在规范中使用global.username或仅username,则无法记住),只要该驱动程序会话保持活动状态,该变量将保持不变。