gpt4 book ai didi

grails - 在 Geb 中,displayed 和 present 有什么区别?

转载 作者:行者123 更新时间:2023-12-04 11:10:34 25 4
gpt4 key购买 nike

我正在编写功能测试并处理淡入淡出的模态窗口。

显示和呈现有什么区别?

例如我有:

settingsModule.container.displayed and settingsModule.container.present

其中 settingsModule 代表我的模态窗口。

在测试我的模态窗口(来自 Twitter Bootstrap 的模态窗口)时,我通常这样做:
def "should do ... "() {
setup:
topMenu.openSettingsModal()

expect:
settingsModule.timeZone.value() == "Asia/Hong_Kong"

cleanup:
settingsModule.closeSettingsModal()
}

def "should save the time zone"() {
setup:
topMenu.openSettingsModal()
settingsModule.timeZone = "Japan"

when:
settingsModule.saveSettings()

then:
settingsModule.alertSuccess.size() == 1
settingsModule.alertSuccess.text() == "Settings updated"

when:
settingsModule.saveSettings()

then:
settingsModule.alertSuccess.size() == 1

cleanup:
settingsModule.closeSettingsModal()
}

不断地。在我的模块中,我有:
    void openSettingsModal() {                  
username.click()
settingsLink.click()
}

void closeSettingsModal() {
form.cancel().click()
}

我总是提示:“必须显示元素才能点击”。

在我的 openSettingsModal 和 closeSettingsModal 中,我尝试了许多 waitFor 与时间间隔的组合以及是否使用存在......无法弄清楚。

任何指针将不胜感激。谢谢!

最佳答案

我认为主要区别在于 present 会检查你的 DOM 中是否有一个元素,而 display 会检查这个元素的可见性。

请记住,webdriver 模拟用户使用和使用鼠标单击网站的实际体验,因此如果元素对他们不可见,他们将无法单击它。

我想知道您的问题是否与首次加载页面时 settingsLink 不在 DOM 中有关。如果您正在等待弹出对话框并在此对话框中显示链接,那么您可能需要设置类似

content{
settingsLink( required: false ) { $( '...' }
settingsModal( required: false ) { $( '#modalDialog' ) }
}

你的等待应该看起来像
username.click()
waitFor{ settingsModal.displayed }
settingsLink.click()

我会坚持使用 geb 约定书,并且一直使用 display 。

Geb Manual - Determining visibility

关于grails - 在 Geb 中,displayed 和 present 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12098273/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com