变量增加不正确

时间:2017-06-13 06:04:01

标签: javascript json protractor

我正在使用量角器编写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

2 个答案:

答案 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成为上次迭代中分配的值时,即A3let

作为解决方案,您可以使用es6 var代替value来声明letit('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