我将 WebdriverIO 与 appium-windows-driver 和 WinAppDriver 一起使用。
在我的测试用例场景中,用户可能会加载文件,这可能是一个相当长的过程。所以我必须等到加载旋转消失。
它可能会导致两种不同的结果:
- 显示提示(并且加载旋转器在下面仍然可见)
- 或者旋转器消失并且用户返回到 HMI
到目前为止,我一直在研究所有 waitFor 或 waitUntil 方法来实现这一点。据我了解,我无法使用任何 waitForClickable - waitForDisplayed - waitForEnabled - waitForExist - waitForStable - waitUntil 方法,因为我无法预测要等待哪个元素。如果这两种结果中的任何一个发生,我需要继续执行我的脚本。
await loadFile(fileName);
/* loading in progress... */
const element1 = await driver.$('~automationId1');
const element2 = await driver.$('~automationId2');
await element1.waitForDisplayed({ timeout: 60 * 1000, interval: 2000 });
await element1.click();
/* AND go on with my scenario */
OR
await element2.waitForClickable({ timeout: 60 * 1000, interval: 2000 });
/* AND go on with my scenario */
根据 Joao Jesus 的意见,我重新将其视为经典的异步情况。
await loadFile(fileName);
/* loading in progress... */
const element1 = await driver.$('~automationId1');
const element2 = await driver.$('~automationId2');
const element1DisplayPromise = element1.waitForDisplayed({ timeout: 60 * 1000, interval: 2000 });
const element2ClickablePromise = element2.waitForClickable({ timeout: 60 * 1000, interval: 2000 });
Promise.any([element1DisplayPromise , element2ClickablePromise])
.then(async () => {
const element1Displayed = await element1.isDisplayed();
if (isNoButtonDisplayed) {
await noButton.click();
}
});