在这种情况下,当我尝试运行单个测试用例脚本时,为什么会打开多个浏览器实例?

我试图使用 Page Factory Model 和 Cucumber 自动化一些示例测试场景,但似乎不明白为什么当我尝试运行单个测试用例时会出现多个驱动程序实例。


当我尝试通过 Runner.java 文件仅运行测试用例 1 时


package execution;


import java.io.File;


import org.junit.AfterClass;

import org.junit.runner.RunWith;


import com.cucumber.listener.Reporter;


import cucumber.api.CucumberOptions;

import cucumber.api.junit.Cucumber;


@RunWith(Cucumber.class)

@CucumberOptions(features = "D:\\Eclipse Wokspace\\EcommerceProject\\Features\\Test1.feature", 

                 glue = { "stepDefinition" }, 

                 plugin = { "html:target/cucumber-html-report",

        "pretty:target/cucumber-pretty.txt", "usage:target/cucumber-usage.json",

        "junit:target/cucumber-results.xml","com.cucumber.listener.ExtentCucumberFormatter:target/cucumber-reports/report.html" }, 

                 dryRun = false, 

                 monochrome = true, 

                 strict = true)

public class Runner {

    @AfterClass

    public static void writeExtentReport() {

        Reporter.loadXMLConfig(

                new File("D:\\Eclipse Wokspace\\EcommerceProject\\src\\test\\resources\\extent-config.xml"));

        Reporter.setSystemInfo("User Name", System.getProperty("user.name"));

        Reporter.setSystemInfo("Time Zone", System.getProperty("user.timezone"));

        Reporter.setSystemInfo("Machine", "Windows 10 " + "64 Bit");

        Reporter.setSystemInfo("Selenium", "3.7.0");

        Reporter.setSystemInfo("Maven", "3.5.2");

        Reporter.setSystemInfo("Java Version", "1.8.0_151");

    }

}


婷婷同学_
浏览 172回答 1
1回答

湖上湖

问题是 Cucumber 正在执行在各种包类中定义的所有@Before和@After方法stepDefinition。这也是预期的情况,因为除非您专门告诉它,否则黄瓜不知道要执行哪些方法。对此的一个简单解决方案是为每个测试用例创建不同的包来保存不同的类,但正如 OP 正确指出的那样,对于 100 个用例来说,这不是一个可行的解决方案,并且这种方法将限制用户无法从单个运行程序类执行所有功能文件。解决方案 -1)对于这个特定情况下,使用@BeforeClass和@AfterClassJUnit标注,而不是@Before和@After黄瓜注解。由于每个测试用例 Step Def 都有自己的类,这应该适用于您的情况。2) 你也可以使用Tagged Hooks。它基本上是将钩子附加到场景中的名称。前任 -功能文件 -@Test1Scenario: blah blah@Test2Scenario: blah blah 2步骤定义 -    @Before("@Test1")    public void beforeFirst(){        //This will run only before the Scenario Test1    }       @Before("@Test2")    public void beforeSecond(){       //This will run only before the Scenario Test2    }
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java