为什么为测试 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] 时才是 运行 =].
没有问题。您所描述的是预期的行为!
长话短说,我正在尝试使用 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] 时才是 运行 =].
没有问题。您所描述的是预期的行为!