ont*_*ntk 7 grails functional-testing spock geb
我正在编写功能测试并处理淡入淡出的模态窗口.
显示和现在有什么区别?
例如,我有:
settingsModule.container.displayed and settingsModule.container.present
Run Code Online (Sandbox Code Playgroud)
其中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()
}
Run Code Online (Sandbox Code Playgroud)
等等.在我的模块中,我有:
void openSettingsModal() {
username.click()
settingsLink.click()
}
void closeSettingsModal() {
form.cancel().click()
}
Run Code Online (Sandbox Code Playgroud)
我总是抱怨:"必须显示元素才能点击".
在我的openSettingsModal和closeSettingsModal中,我尝试了许多waitFor与时间间隔的组合并使用present或not ...无法弄明白.
任何指针都将受到高度赞赏.谢谢!
我认为主要的区别是,present会检查你的DOM中是否有一个元素,而显示检查这个元素的可见性.
请记住,webdriver模拟用户使用鼠标单击网站的实际体验,因此如果元素对他们不可见,他们将无法点击它.
我想知道你的问题是否与首次加载页面时不在DOM中的settingsLink有关.如果您正在等待弹出对话框并在此对话框中显示实时链接,那么您可能希望设置类似的内容
content{
settingsLink( required: false ) { $( '...' }
settingsModal( required: false ) { $( '#modalDialog' ) }
}
Run Code Online (Sandbox Code Playgroud)
你的等待应该看起来像
username.click()
waitFor{ settingsModal.displayed }
settingsLink.click()
Run Code Online (Sandbox Code Playgroud)
我会坚持使用geb约定书,并且只是一直使用显示.
| 归档时间: |
|
| 查看次数: |
10159 次 |
| 最近记录: |