我正在使用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:每个键必须是多个字符串;未定义
这并不是一直发生的,而是偶尔发生的。我做错了什么?
答案 0 :(得分:2)
我会在您的配置中声明该变量,可以是global
或param
。我可能会以global
的方式进行,因为params通常在运行测试之前在配置中分配。
onPrepare: function() {
global.username;
}
然后在您的规范中,您可以分配值(如果您在规范中使用global.username
或仅username
,则无法记住),只要该驱动程序会话保持活动状态,该变量将保持不变。