为什么为测试 class 名称指定通配符会导致 Maven 使用 WebDriver 打开空浏览器?

Why does specifying a wildcard for a test class name cause Maven to open empty browsers with WebDriver?

长话短说,我正在尝试使用 Maven 运行 Selenium WebDriver 集成测试。 (这些是 JUnit 测试。)为此,我可以发出如下命令:

mvn -Dit.test=MyTestClass#MyTestMethod verify

具体来说,我想这样做:

mvn -Dit.test=*#*CaseID*  verify   

上面命令中的CaseID其实就是我的测试用例管理系统中对应测试用例的一个编号。这实际上有效,因为它 运行s 是方法名称与案例 ID 匹配的测试方法。

但是,当我使用 * 通配符作为测试 class 名称时,我实际上得到了几个 Chrome windows 作为 ChromeDriver 实例启动,然后我的实际测试方法将 运行 之后。

为什么会发生这种情况,我如何调试它以找出我的哪个测试 classes 导致了错误的浏览器 windows?我已经想到也许一些较旧的测试 classes(WebDriver 实例初始化为 class 字段之一,而不是在 Junit @Method 或构造函数中初始化)但这似乎不是问题的原因。我编辑了其中一个 classes 以将初始化移动到只有 运行s 的地方,如果实际测试将是 运行,我仍然得到随机 Chrome windows.

这是我认为可能导致问题的示例:

public MyTestClass {
WebDriver driver = new ChromeDriver();

@Test
public void testMe(){
driver.get("http://google.com");
}

但是,更改并不能解决问题。

我觉得你的期望有点不对。

mvn just 运行s stuff,取决于你为生命周期传递的内容。参见 this handy intro

在你的例子中,你传入了 "verify",从上面的 link 你会注意到它出现在 "test" 之后。在 "test" 期间,mvn 将控制权移交给 JUnit。 JUnit 需要实例化您的每个 classes,因此它触发您的行 WebDriver driver = new ChromeDriver();。我假设在您的每个 classes 中都有?只是为了好玩:比较打开浏览器的数量,以及你的 classes.

的数量

此外,对于每个被激发的 class,JUnit 会搜索您在 it.test= 和 运行 中指定的测试。请注意,任何 @BeforeClass@AfterClass 方法也是 运行,但是 @Before@After 方法只有在测试为 [=34] 时才是 运行 =].

没有问题。您所描述的是预期的行为!