量角器:sql查询中的webdriverjs命令看不到元素

时间:2015-07-31 01:48:54

标签: mysql protractor

这太奇怪了。我的it()函数中有一个sql查询。如果我将常规浏览器点击到我的it()函数内部但在sql查询函数之外,则点击处理没有问题。但是当我剪切/粘贴这些命令并放入sql查询时,我得到了ElementNotVisibleError:元素不可见。为什么呢?

    it('test1',function(){
       webElem.click(); //if I put out here, I dont get error

       sql = "UPDATE table users set users = 1";

       db.connection.query(sql, function(err, rows, fields) {
           if (!err) {
           //if I put webElem.click();in here, I get ElementNotVisibleError: element not visible
           }
           else {
                console.log('ERROR ' + err);
           }                 
       });
});

1 个答案:

答案 0 :(得分:1)

请记住,虽然量角器看起来像测试代码是同步的,但一切都是异步的。

it不太可能等待db.connection.query完成(它是异步接口)。因此,您调用的回调调用量角器方法会在随机上下文中调用。 (可能在随后的it或某事 - 当数据库准备就绪时。)

如果db.connection.query返回看似承诺的内容,那么您可以将结果作为it的结果返回,并且事情应该有效。否则,您需要在承诺中包装db connect,或使用done的显式it回调样式:

it('test1',function(done){
       sql = "UPDATE table users set users = 1";

       db.connection.query(sql, function(err, rows, fields) {
           if (!err) {
              // This is safe because this test won't finish until done is invoked.
              webElem.click();
           }
           done(err);
       });
});