Geb等待元素消失

时间:2018-11-14 20:10:43

标签: groovy cucumber geb

当我在页面上执行操作时,将显示一个微调器,一旦操作完成,该微调器将消失。我想等待微调框消失,以便执行assert语句。

我阅读了文档,该文档告诉我如何等待元素出现,但未提供有关如何等待元素消失的信息 我不知道如何在Cucumber,Geb,Groovy项目中实现这一目标。

2 个答案:

答案 0 :(得分:2)

当我有更多时间时,我将稍作编辑/解释:

在您的页面对象中:

static content = {
    loadingSpinner(wait:3, required:false) { $("mat-spinner") } 
    //this wait:3 is redundant (i think) if we also give the waitFor() a timeout
    //required:false allows our wait !displayed to pass even if the element isnt there
}

def "Handle the loader"() {
    try {
        waitFor(2) { loadingSpinner.isDisplayed() }
    } catch (WaitTimeoutException wte) {
        //do nothing, if spinner doesnt load then thats ok
        //most likely the spinner has come and gone before we finished page load
        //if this is not the case, up our waitFor timeout
        return true;    
    }
    waitFor(10) { !loadingSpinner.isDisplayed() }
}

答案 1 :(得分:0)

documentation中所述,waitFor块使用Groovy Truth知道何时等待足够长的时间。当您将导航器放入其中且当前不存在该元素时,它将等待它出现或直到经过最长等待时间。

因此,如果要等待某个元素消失,可以将其放在waitFor中,如下所示:

// go to the page
waitFor(2) { $(".loadingspinner").displayed }
waitFor(10) { !$(".loadingspinner").displayed }
// do your assertions

如果加载微调框已经消失,waitFor将立即返回。万一它永不消失,它将在10秒后抛出WaitTimeoutException,这将使您的测试失败。