量角器 - 如果元素是 displayed/presented

Protractor - If element is displayed/presented

所以我有一个非常奇怪的场景,我想在我的代码中添加一个 if-else 语句,这是由于:

如您所见,13:00 没有复选框,而 16:00 有一个复选框,基本上我想做的是一个简单的测试用例,如果有,请单击复选框否则我们继续按下一步按钮。意思...

如果我们得到一个要点击的复选框,那么我们点击该复选框,然后点击下一步。如果我们没有得到任何复选框 displayed/presented 那么我们就跳过它。 (我们不需要等待函数来查看它是否加载,因为它会在我按下特定时间后立即自动加载(没有来自 backend/api 的调用)所以如果我按下 16:00 它会立即弹出复选框,反之亦然。

 it("Has truck and choose first avaliable delivery",
            async function () {
                const nextStep = servicesPage.getForm().buttons.nextStep;
                let lateDelivery = element(by.className("checkbox-label"));

                if (lateDelivery.isPresent()) {
                    console.log("Checkbox")
                    await utils.elementToBeClickable(lateDelivery, "Late hour checkbox should be clickable");
                    await utils.click(lateDelivery);

                }

                console.log("Click")
                await utils.elementToBeClickable(nextStep, "Next step button should be clickable");
                await utils.click(nextStep);
            })

即使我确实有 isPresent() 也会发生什么,它似乎仍然在 if 语句中,即使当我检查页面时,网页上根本没有显示 element(by.className("checkbox-label"))。每当我在 16:00 之后按下一个时间,它就会出现。我该怎么做才能让它发挥作用?

lateDelivery.isPresent()

returns 一个承诺,defined 这就是为什么它是真的。

一样同步你的代码
const isPresent = await lateDelivery.isPresent()
if (isPresent) {
// code
}

或解决

lateDelivery.isPresent().then(res => {
   if (res) {
   // code
   }
}