Input 量角器:browser.variableName有时未定义,有时有值
我在用量角器测试非三角形页面。我有一个变量,我在存储为浏览器对象的等级库中使用它。问题是我在某些规范中使用它,但有时它没有定义。奇怪的是,在同一个spec文件中,在使用它之前很少出现没有问题的情况。它似乎在两者之间失去了价值,即使我没有调用或操纵它 形态: 我在其中定义此变量的规范1: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(
// 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
方法。在配置中声明,在一个规范中指定值,然后在另一个规范中使用该值。。。从来没有这个问题。我现在唯一的想法可能是你自己意外地覆盖了它。这些规范在同一个驱动程序会话中运行,对吗?您确定它只声明一次,然后只定义一次吗?