【问题标题】:Protractor - If element is displayed/presented量角器 - 如果元素被显示/呈现
【发布时间】:2020-08-10 22:38:52
【问题描述】:

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

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

如果我们得到一个复选框来点击,那么我们点击复选框,然后点击下一步。如果我们没有显示/呈现任何复选框,那么我们将跳过它。 (我们不需要等待功能来查看它是否加载,因为它会在我按下特定时间后自动加载(没有来自后端/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 之后按下某个时间时,它就会出现。我该怎么做才能让它工作?

【问题讨论】:

    标签: javascript selenium jasmine protractor


    【解决方案1】:
    lateDelivery.isPresent()
    

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

    同步你的代码

    const isPresent = await lateDelivery.isPresent()
    if (isPresent) {
    // code
    }
    

    或者解决它

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

    【讨论】:

    • 天哪,真的有这么简单吗...我编写了第一个代码,它确实按我的意愿工作!真的很感激!
    猜你喜欢
    • 2019-12-28
    • 1970-01-01
    • 2019-04-29
    • 1970-01-01
    • 1970-01-01
    • 2020-02-08
    • 1970-01-01
    • 1970-01-01
    • 2012-03-24
    相关资源
    最近更新 更多