变量正在递增不正确
我正在用量角器编写下面的JS代码。这里我使用了一个data.json文件来读取我的测试用例的数据。在这个测试用例中,我很简单地从这个JSON中读取项目,并将其与我从浏览器中读取的值进行比较。变量正在递增不正确
我在这里面临的问题是在我的Expect语句中,来自JSON文件的值不正确。
有没有人可以帮助找出问题。
var datafile = require('./Data.json')
beforeEach(() => {
browser.get("https://angularjs.org");
});
describe('Test Angular Page ',() =>
{
it('user name should be displayed correctly #try',() =>
{
var count = datafile.length;
for (var i=0; i<count; i++)
{
var value = datafile[i];
browser.refresh();
element(by.model('yourName')).sendKeys(value);
(element(by.binding('yourName'))).getText()
.then(function (txt)
{
expect(txt).toEqual('Hello '+ value+'!');
//this is failing
})
}
});
下面
是我data.json
[
"A1","A2","A3"
]
下面
是的result-
1) Test Angular Page user name should be displayed correctly #try
Message:
Expected 'Hello A1!' to equal 'Hello A3!'.
Stack:
Error: Failed expectation
at D:\Demo_Protractor\test.spec.js:24:44
at elementArrayFinder_.then (C:\User s\leenasharma\AppData\Roaming\npm\node_modules\protractor\lib\element.ts:840:22)
at ManagedPromise.invokeCallback_ (C:\Users\leenasharma\AppData\Roaming\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\promise.js:1366:14)
at TaskQueue.execute_ (C:\Users\leenasharma\AppData\Roaming\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\promise.js:2970:14)
at TaskQueue.executeNext_ (C:\Users\leenasharma\AppData\Roaming\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\promise.js:2953:27)
at asyncRun (C:\Users\leenasharma\AppData\Roaming\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\promise.js:2813:27)
at C:\Users\leenasharma\AppData\Roaming\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\promise.js:676:7
at process._tickCallback (internal/process/next_tick.js:109:7)
Message:
Expected 'Hello A2!' to equal 'Hello A3!'.
Stack:
Error: Failed expectation
it('user name should be displayed correctly #try',() => {
var count = datafile.length;
var value, i;
for (i = 0; i < count; i++) {
value = datafile[i];
browser.refresh();
element(by.model('yourName')).sendKeys(value);
(element(by.binding('yourName'))).getText()
.then(function(txt) {
expect(txt).toEqual('Hello ' + value + '!');
//this is failing
})
}
});
var
某些部分具有唯一的功能水平范围,不存在块级别范围。在for循环中添加var value
不会为每次迭代创建变量。它将被悬挂在变量提升功能的顶部。您的getText()
是异步的,到then
被称为循环结束时,value
成为上次迭代中指定的值,即。 A3
。
作为解决方案,您可以使用es6 let
而不是var
来声明您的value
。 let
会给你块级别的范围。
it('user name should be displayed correctly #try',() => {
var count = datafile.length;
for (let i = 0; i < count; i++) {
let value = datafile[i];
browser.refresh();
element(by.model('yourName')).sendKeys(value);
(element(by.binding('yourName'))).getText()
.then(function(txt) {
expect(txt).toEqual('Hello ' + value + '!');
//this is failing
})
}
});
话虽这么说,量角器/茉莉犯规的最新版本要求getText()
这样处理与then
。您使用的是哪种角度,茉莉花和量角器?
expect()
确定参数是否是一个承诺或不和 基于执行异步或同步。
为什么在每次迭代时都要做browser.refresh()
?我的意图不明确。
非常感谢。有效。 – Pheonix68410
关于browser.refresh,我试着每次在新页面上运行这个测试用例。我也可以使用清除功能。试验和学习。史蒂夫在下面的回应中提供的解决方案也在起作用。现在我正试图将两者联系起来。再次感谢! – Pheonix68410
问题是您正在检查异步完成的承诺中的值。
重构代码因此预计()解析对您的承诺:
expect(element(by.binding('yourName'))).getText())).toEqual('Hello '+ value+'!');
的更多信息,可以发现on the protractor documentation
非常感谢史蒂夫! – Pheonix68410
如上所述,我想了解如何通过使用expect来解决变量的范围问题。有没有什么好的指针和引用来理解JS的这些异步概念? – Pheonix68410
在【例5】看看(https://*.com/ a/111111/4472840) –