这太奇怪了。我的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);
}
});
});
答案 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);
});
});