Selenium Grid总是执行我的测试中不需要的额外实例 出身背景
我设置了一个Selenium网格项目,在两种不同的浏览器Chrome和Firefox中执行测试。我用Gradle来执行我的测试。测试将成功执行两次,一次在Chrome中,一次在Firefox中,正如预期的那样,然后第三个实例将在默认浏览器中执行并失败 预期结果 一个Chrome实例将打开,规范将运行,它将通过。 一个使用geckodriver的Firefox实例将打开,规范将运行,它将通过。 Gradle任务将成功完成。 实际结果 一个Chrome实例将打开,规范将运行,它将通过。 一个使用geckodriver的Firefox实例将打开,规范将运行,它将通过。 使用firefoxdriver的新Firefox实例将打开,规范将不会运行,并且将失败。 由于最后一次测试执行失败,Gradle任务将失败。 我的想法 我曾经遇到过Gradle两次执行Spock测试的问题。要解决此问题,我必须添加以下代码: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
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"
}
}