WebDriverIO:等待 2 个可能结果中的任何一个

问题描述 投票:0回答:1

我将 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 */
javascript appium webdriver-io winappdriver
1个回答
0
投票

根据 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();
    }
});
© www.soinside.com 2019 - 2024. All rights reserved.