我在使用appium + nodejs(wd)+ mocha时遇到了问题,因为我有一个加载视图(blackbox测试&我不是android app开发者),我想等待它的消失。所以我试过这样的事情:
wd.addPromiseChainMethod('waitForElementByIdDisappears', function (id, retries) {
var self = this;
return new Promise(function (resolve, reject) {
(function waitForElementDisappears(retry, context){
if(retry < 0) {
return reject();
}
else {
try {
context.elementByIdIfExists(id, function(err, element) {
console.log('Element found: ' + element + ' retry: ' + retry);
if(typeof element === 'undefined') {
return resolve();
}
else {
setTimeout(() => waitForElementDisappears(retry-1, context), 1000);
}
});
}
catch (error) {
console.log(error);
return reject();
}
}
})(retries, self);
});
});
一切正常,直到加载视图消失,因为nodejs开始挂起appium独立控制台输出:
info:[debug] [BOOTSTRAP] [debug]使用:UiSelector [RESOURCE_ID = de.myapp.foo:id / loadingView] info:[debug] [BOOTSTRAP] [debug] getElements selector:UiSelector [RESOURCE_ID = de.myapp.foo:id / loadingView] info:[debug] [BOOTSTRAP] [debug] Element []为null:(0)
一遍又一遍地重复,直到它在超时时间内运行。
我也尝试过:
hasElementById(value, cb) -> cb(err, boolean)
elementByIdOrNull(value, cb) -> cb(err, element)
elementsById(value, cb) -> cb(err, element)
(并检查元素列表是否为空)
和其他句法方式如:
context.elementByIdIfExists(id).then(element => { ... })
但每次我的输出都是这样的:
Element found: 15 retry: 30
Element found: 15 retry: 29
Element found: 15 retry: 28
Element found: 15 retry: 27
# hangs because the loading view was disappeared and appium standalone starts to repeat the [debug][info] section above ...
感谢阅读&amp;帮助!
答案 0 :(得分:0)
我之前使用过appium独立版,现在更改为最新的npm appium版本1.6.x.But最后在我的方法之前设置.setImplicitWaitTimeout(250)
并在该方法之后重置它为我做了诀窍。