Input 量角器:browser.variableName有时未定义,有时有值

Input 量角器:browser.variableName有时未定义,有时有值,input,browser,protractor,global-variables,Input,Browser,Protractor,Global Variables,我在用量角器测试非三角形页面。我有一个变量,我在存储为浏览器对象的等级库中使用它。问题是我在某些规范中使用它,但有时它没有定义。奇怪的是,在同一个spec文件中,在使用它之前很少出现没有问题的情况。它似乎在两者之间失去了价值,即使我没有调用或操纵它 形态: 我在其中定义此变量的规范1: // page objects var createUserPage = require('... // variables var username = ''; describe(... { it(

我在用量角器测试非三角形页面。我有一个变量,我在存储为浏览器对象的等级库中使用它。问题是我在某些规范中使用它,但有时它没有定义。奇怪的是,在同一个spec文件中,在使用它之前很少出现没有问题的情况。它似乎在两者之间失去了价值,即使我没有调用或操纵它

形态:

我在其中定义此变量的规范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;
        });
    });
});
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();
    });
});
我在其中使用此变量的规范2:

// 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;
        });
    });
});
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:每个键必须是多个字符串;没有定义


这种情况并非总是发生,而是偶尔发生。我做错了什么?

我会在您的配置中声明变量,要么作为
global
,要么作为
param
。我可能会采用
global
的方式,因为在运行测试之前,参数通常是在配置中分配的

onPrepare: function() {
    global.username;
}

然后,您可以在规范中指定值(不记得是否在规范中使用了
global.username
或仅使用
username
),只要驱动程序会话保持活动状态,变量就会持续存在。

而不是在全局范围中创建新变量,它可以在配置文件的
params
对象中创建,并且可以使用
browser.params.username
@SudharsanSelvaraj访问。是的,我在answer@Gunderson这正是我想要的,持久的全局变量。我在onPrepare函数中将其设置为global.username,然后在specs中也将其称为global.username。@Gunderson坏消息,仍然是相同的问题,global.username中设置的值仍然偶尔丢失。我使用了你的建议,所以让我困惑的是,以前很少有描述能完美地工作,价值仍然存在,同时我不使用或操纵它。你有没有想过还有什么不对劲?我的目标是在一个规范中定义一个具有持久值的全局变量,然后在另一个规范中使用。@jurijk-Hmm我不确定,我自己对一些变量使用了
global
方法。在配置中声明,在一个规范中指定值,然后在另一个规范中使用该值。。。从来没有这个问题。我现在唯一的想法可能是你自己意外地覆盖了它。这些规范在同一个驱动程序会话中运行,对吗?您确定它只声明一次,然后只定义一次吗?