我在获取正确的驱动程序实例时遇到问题。 以下是我的设置
public class SeleniumBase{
public static WebDriver driver;
public static void setUp(url,browser,port){
driver = new FirefoxDriver();
}
public static void tearDown(){
driver.manage().deleteAllCookies();
driver.close();
driver.quit();
}
}
public class BuildTest extends SeleniumBase{
@BeforeClass
public static void seleniumSetup(){
try{
// read properties
url = prop.getProp("baseUrl");
browser = prop.getProp("browser");
port = prop.getProp("port");
}
SeleniumBase.setUp(url,browser,port);
waitForLoginPage();
App.login();
}
@AfterClass
public static void seleniumTearDown(){
App.logOut();
SeleniumBase.tearDown();
}
}
@RunWith(Suite.class)
@Suite.SuiteClasses(
{
Test1.class,
Test2.class
})
public class SmokeSuite {
}
现在,对于 Test1.class,一切正常,但是当从套件中调用 Test2.class 时,会使用 setUp 方法创建新的驱动程序实例,但 App.Login() 会抛出错误,提示 "The FirefoxDriver cannot be在调用 quit() 之后使用”
我的设置/拆卸过程中有什么问题吗?
最佳答案
正如对您问题的评论已经提到的,您的 setUp()
和 tearDown()
方法以及您的 WebDriver
实例是 < strong>static
。所以一旦你调用了driver.quit()
,你的驱动就不能再使用了。需要获取新的驱动程序。
但是,您不使用 JUnit 的 @Before
和 @After
注释,而是使用 @BeforeClass
和 @AfterClass
。所以我猜你在 Test2
类中有多个测试,驱动程序在第一个测试后退出,并且在第二个测试前没有重新初始化。
最好使 WebDriver
、setUp()
和 tearDown
不是静态的,并使用 @Before
和 @After
在你的测试类中。然后你的问题应该消失了。
关于java - 调用 quit() 后无法使用 WebDriver FirefoxDriver,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20477743/