我正在使用量角器编写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"
]
下面的是结果的一部分 -
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
答案 0 :(得分:1)
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
。 let
。
作为解决方案,您可以使用es6 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()
确定参数是否为承诺 基于此异步或同步执行。
为什么每次迭代都在进行tr = tf.Variable(initial_value="aaa@gamail.com", dtype=tf.string)
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
print(sess.run(tr))
p = tf.assign(tr,"somethingelse")
sess.run(p)
?目的不明确。
答案 1 :(得分:1)
问题是你正在检查一个做为异步的promise的值。
重构您的代码,以便expect()为您解决承诺:
expect(element(by.binding('yourName'))).getText())).toEqual('Hello '+ value+'!');
可以找到更多信息on the protractor documentation