【发布时间】:2023-03-08 17:32:01
【问题描述】:
我在使用 appium + nodejs (wd) + mocha 时遇到了问题,因为我有一个加载视图(黑盒测试,我不是 android 应用程序开发人员),我想等待它消失。所以我尝试了这样的事情:
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 独立控制台输出:
信息:[debug] [BOOTSTRAP] [debug] 使用:UiSelector[RESOURCE_ID=de.myapp.foo:id/loadingView] 信息:[debug] [BOOTSTRAP] [debug] getElements 选择器:UiSelector[RESOURCE_ID=de.myapp.foo:id/loadingView] 信息:[debug] [BOOTSTRAP] [debug] Element[] 为空:(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 ...
感谢阅读和帮助!
【问题讨论】:
标签: javascript android node.js mocha.js appium