Selenium Grid总是执行我的测试中不需要的额外实例 出身背景

Selenium Grid总是执行我的测试中不需要的额外实例 出身背景,selenium,gradle,groovy,selenium-grid,selenide,Selenium,Gradle,Groovy,Selenium Grid,Selenide,我设置了一个Selenium网格项目,在两种不同的浏览器Chrome和Firefox中执行测试。我用Gradle来执行我的测试。测试将成功执行两次,一次在Chrome中,一次在Firefox中,正如预期的那样,然后第三个实例将在默认浏览器中执行并失败 预期结果 一个Chrome实例将打开,规范将运行,它将通过。 一个使用geckodriver的Firefox实例将打开,规范将运行,它将通过。 Gradle任务将成功完成。 实际结果 一个Chrome实例将打开,规范将运行,它将通过。 一个使用ge

我设置了一个Selenium网格项目,在两种不同的浏览器Chrome和Firefox中执行测试。我用Gradle来执行我的测试。测试将成功执行两次,一次在Chrome中,一次在Firefox中,正如预期的那样,然后第三个实例将在默认浏览器中执行并失败

预期结果 一个Chrome实例将打开,规范将运行,它将通过。 一个使用geckodriver的Firefox实例将打开,规范将运行,它将通过。 Gradle任务将成功完成。 实际结果 一个Chrome实例将打开,规范将运行,它将通过。 一个使用geckodriver的Firefox实例将打开,规范将运行,它将通过。 使用firefoxdriver的新Firefox实例将打开,规范将不会运行,并且将失败。 由于最后一次测试执行失败,Gradle任务将失败。 我的想法 我曾经遇到过Gradle两次执行Spock测试的问题。要解决此问题,我必须添加以下代码:

test {
    actions = []
}
我还注意到,当我的Selenium测试再次执行时,它将使用默认的firefox驱动程序打开它,而不是gecko或木偶驱动程序

firefox驱动程序很旧,不支持最新版本的firefox,但当您不指定要在其中执行测试的浏览器时,它是Selenium的默认浏览器。 我设置了两个Selenium网格节点,所以我想知道Gradle是否正在执行与其中一个节点不匹配的第三个版本的测试,但我只告诉它运行两个测试。 密码 我创建了一个示例项目,在上复制了这个问题。自述文件中包含了有关如何运行示例测试的说明

作为一个片段,这是我的样例规范:

class W3SchoolsFormExampleSpec extends Specification {

    def 'Test form submission is successful on W3Schools'() {
        when: 'Name info is submitted into the form'
            open('https://www.w3schools.com/html/html_forms.asp')

            $(byName('firstname')).setValue('Clark')
            $(byName('lastname')).setValue('Kent')

            $x('//*[@id="main"]/div[3]/div/form/input[3]').click()

        and: 'Switch to newly opened tab'
            switchTo().window(1)

        then: 'New page should display the passed-in request params'
            $x('/html/body/div[1]').shouldHave(text('firstname=Clark&lastname=Kent'))
    }
}
这是我的build.gradle文件的一个片段:


关于为什么我的测试的第三个实例会在默认的Selenium浏览器中执行,有什么想法吗?

经过几天的尝试和错误,并通过发布在上找到解决方案,我找到了原因,这可能对未来的读者有所帮助

创建自定义测试任务时要小心。 默认情况下,应用Java或Groovy插件将自动创建一个默认测试任务,该任务将执行测试源目录下的所有测试

通过执行以下操作创建自定义测试任务时:

task testABC(type: Test) {
    filter {
        include "ABCTest"
    }
}
…执行此测试任务也将执行默认测试任务。如果希望禁用默认测试任务的执行,请将test.enabled设置为false

task testABC(type: Test) {
    filter {
        include "ABCTest"
    }
}