总而言之,我试图使用Maven来运行Selenium WebDriver集成测试。 (这些是JUnit测试。)为此,我可以发出如下命令:
mvn -Dit.test=MyTestClass#MyTestMethod verify
具体来说,我想这样做:
mvn -Dit.test=*#*CaseID* verify
在上面的命令中,CaseID实际上是一个与我的测试用例管理系统中的测试用例相对应的数字。这实际上是有效的,因为它运行方法名称与案例ID匹配的测试方法。
但是,当我使用*通配符作为测试类名称时,我实际上会将几个Chrome窗口作为ChromeDriver实例启动,然后我的实际测试方法将会运行。
为什么会发生这种情况,如何调试它以找出哪些测试类导致错误的浏览器窗口?我已经认为可能是一些较旧的测试类(WebDriver实例初始化为类字段之一,未在Junit @Method或构造函数中初始化),但这似乎不是导致问题的原因。我编辑了其中一个类,将初始化移动到仅在运行实际测试时才运行的地方,并且我仍然有随机的Chrome窗口。
以下是我认为可能导致问题的示例:
public MyTestClass {
WebDriver driver = new ChromeDriver();
@Test
public void testMe(){
driver.get("http://google.com");
}
然而,更改它并不能解决问题。
答案 0 :(得分:1)
我认为你的期望有点偏差。
mvn只运行 stuff ,具体取决于您在生命周期中传递的内容。请参阅this handy intro。
在您的情况下,您传入"验证",您将注意到上面的链接" test"。在" test"期间,mvn hands控制到JUnit。 JUnit需要实例化每个类,因此它会触发你的行WebDriver driver = new ChromeDriver();
。我假设你的每个班级都在哪?仅用于踢:比较打开的浏览器的数量和类的数量。
此外,对于每个被启动的类,JUnit会搜索您在it.test=
中指定的测试并运行它。请注意,还会运行任何@BeforeClass
和@AfterClass
方法,但只有在运行测试时才会运行@Before
和@After
方法。
没有问题。你所描述的是预期的行为!