Javascript样式更改中断了Selenium(GEB)测试

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

我目前正在开发一个非常简单的输入表单,其中包含各种输入元素,如选择、文本和单选按钮。post时验证表单,如果未成功验证,则再次显示表单,并突出显示错误字段。突出显示是通过添加类
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有关…只有单选按钮存在此问题:(