【发布时间】:2014-06-06 12:18:23
【问题描述】:
是否可以在本地使用多个 selenium webdrivers 而不使用 selenium 网格同时运行多个测试?
我正在通过调用 new FireFoxDriver() 创建多个实例,但窗口中的会话似乎相互干扰。
驱动程序由如下所示的 JUnit-Methods 创建和销毁。对于每个测试类,都有一个 WebDriver,但每个测试用例都有不同的执行持续时间。在第一个 Test-class 完成并调用该类的 tearDownClass() 之后。
这个异常抛出:
org.openqa.selenium.remote.SessionNotFoundException: 调用 quit() 后无法使用 FirefoxDriver。 构建信息:版本:'2.39.0',修订:'14fa800511cc5d66d426e08b0b2ab926c7ed7398',时间:'2013-12-16 13:18:38' 系统信息:主机:'T61',ip:'127.0.1.1',os.name:'Linux',os.arch:'i386',os.version:'3.11.0-15-generic',java.version :'1.7.0_51'
@BeforeClass
public static void setUpClass() {
driver = new FireFoxDriver();
}
@AfterClass
public static void tearDownClass() {
driver.quit(); // this should only kill the current driver
}
【问题讨论】:
-
使用 FirefoxDriver() 调用的多个 firefox 实例不会相互干扰,除非我们在处理 webdriver 实例时搞砸了。你能告诉我们,调用是如何发生的吗?
-
@Harsha 我添加了一个如何创建和销毁驱动程序的示例
-
我更喜欢遵循这种方式 在 JUnit 类中,需要使所有内容都非静态,因此,我们将摆脱与其他实例的干扰 使用线程围绕您的 JUnit 类创建一个包装器,以便您可以根据要执行的测试用例或测试方法的参数调用所需的方法
-
@Harsha 我对并发测试执行的更改建立在此框架中的其他测试类之上,并且驱动程序是静态引用。 :(
-
您可以使用由所有子类继承的超类,这样就可以在没有静态的情况下共享 webdriver 实例,并且基于超类创建线程,使其覆盖在有无静电,无跨线程干扰
标签: java selenium junit selenium-webdriver selenium-grid