我在页面中显示了一个字符串,我想将此字符串存储在变量中,以便我可以在测试过程中使用此变量进行检查。
这是它的样子:
let storedValue: string;
element(by.id('myElement')).getText().then((elementValue: string) => {
storedValue = elementValue;
console.log('stored value: ' + storedValue);
});
// Some unrelated code will go here in the future
browser.wait(() => storedValue !== null, 5000, 'browser.wait timeout');
expect(element(by.id('myElement')).getText()).toEqual(storedValue);
如果页面中的字符串是 hello ,则测试将失败并显示日志Expected 'Hello' to equal undefined.
为什么它仍未定义?
我认为Protractor会在ControlFlow中同步排队最后两条指令。
也许存在另一种存储此变量的方法,或者等待定义storedValue
?
答案 0 :(得分:0)
browser.wait(() => storedValue !== null, 5000, 'browser.wait timeout').then(function(){
expect(element(by.id('myElement')).getText()).toEqual(storedValue);
});
在等待中设置期望将解决您的问题。但是,我对ControlFlow的具体细节知之甚少,无法解释为什么你的工作不起作用。希望其他人能够出现并做到这一点。
答案 1 :(得分:0)
您可以通过执行browser.call强制期望在控制流内运行
browser.call(() => expect(element(by.id('myElement')).getText()).toEqual(storedValue));
但你不应该这样做。可能是一个错误。