Javascript样式更改中断了Selenium(GEB)测试
我目前正在开发一个非常简单的输入表单,其中包含各种输入元素,如选择、文本和单选按钮。post时验证表单,如果未成功验证,则再次显示表单,并突出显示错误字段。突出显示是通过添加类Javascript样式更改中断了Selenium(GEB)测试,javascript,css,selenium,geb,selenium-firefoxdriver,Javascript,Css,Selenium,Geb,Selenium Firefoxdriver,我目前正在开发一个非常简单的输入表单,其中包含各种输入元素,如选择、文本和单选按钮。post时验证表单,如果未成功验证,则再次显示表单,并突出显示错误字段。突出显示是通过添加类has error并在div后面附加一条错误消息来实现的。在更正错误时(比如检查组中的一个单选按钮),捕获onChange事件,并删除has error类和div: if ($(obj).parents('div.has-error')) { $(obj).parents('div.has-error').remo
has error
并在div后面附加一条错误消息来实现的。在更正错误时(比如检查组中的一个单选按钮),捕获onChange
事件,并删除has error
类和div:
if ($(obj).parents('div.has-error')) {
$(obj).parents('div.has-error').removeClass('has-error');
$(obj).parents('div.has-error').find('div.help-block').remove();
}
当由“真实”用户执行时,它完全按照预期工作。但是,当硒(GEB)测试执行完全相同的操作时,不会检查单选按钮。在很短的一段时间内,它有一条“焦点”虚线,就好像它在元素中做了标记一样
因此,测试失败,因为从未检查radiobutton。如果我删除上面提到的javascript,它就可以正常工作。。。同样,如果我只删除两个语句中的一个
测试使用GEB编写,并使用“表单控件快捷方式”按名称设置字段值,如:
class FormModule extends Module {
static base = { $('form#personform') }
static content = {
personskoen { "person.koen"().module(RadioButtons) }
}
}
class OpretPersonPage extends Page {
static url = "person/opret"
static at = { title.contains("person.opret.titel") }
static content = {
form { module FormModule }
}
}
测试中的值设置如下:
def () {
given:
at OpretPersonPage
when:
page.form.persoenskoen = "KVINDE"
then:
page.form.persoenskoen == "KVINDE"
}
我完全陷入困境,没有进一步的想法来测试。我真的希望你们有一些
我正在使用:
org.seleniumhq.selenium:selenium-firefox-driver:2.52.0
org.seleniumhq.selenium:selenium-support:2.52.0
org.seleniumhq.selenium:selenium-server:2.52.0
这:
$(obj).parents('div.has-error')
将始终是“truthy”,因为.parents()
始终返回jQuery对象。您必须测试jQuery对象的.length
,以检查它们是否为空。尽管如此,不幸的是它并不能解决问题。这也有点令人担忧,因为这意味着无论是否有错误,代码总是在运行。这反过来又让我认为这在某种程度上是因为对dom/页面的更改导致了selenium。。。只有单选按钮有此问题:(this:$(obj).parents('div.has-error')
将始终是“真实的”,因为.parents()
总是返回一个jQuery对象。你必须测试jQuery对象的.length
,以检查它们是否为空。尽管如此,它不幸没有解决问题。这也有点令人担忧,因为这意味着代码总是在运行——无论是否有错误。这反过来让我认为这是一个至少,由于对dom/页面的更改与selenium有关…只有单选按钮存在此问题:(