Java+Selenium会话ID为null.调用quit()后使用WebDriver



我在尝试以特定方式运行Selenium Web驱动程序时遇到问题,我已经在我的框架中设置了TestNG+Selenium Web驱动程序,我想完成的事情是运行我在TestNG.xml文件中设置的两个套件,如下所示:

TestNG.xml

<suite>
<suite-files>
<suite-file path="src/testNG/suites/UserSignsOn.xml" />
<suite-file path="src/testNG/suites/PreSetup.xml" />
</suite-files>
</suite>

PreSetup.xml

<suite name="Pre Setup">
<test name="pre setup suite">
<classes>
<class name="Tests.PreSetup" />
</classes>
</test>
</suite>

UserSignsOn.xml

<suite name="User Signs On">
<test name="Get the Web Application">
<classes>
<class name="Tests.LoginPageTest" />
</classes>
</test>
</suite>

我的测试文件如下:

登录页面测试.class

public class LoginPageTest extends BaseTest {
@Test
@Description("Login to the web application")
public void signInTheWebApplicationLocalHost(){ // some steps here }
}

预设置.class

public class PreSetup extends BaseTest {
@Test
@Description("Pre setup")
public void preSetupSteps(){ // some steps here }
}

正如你所看到的,我的测试文件扩展了一个类,如下所示:

BaseTest.class

public class BaseTest {
protected EnvironmentManager environmentManager;
@BeforeTest
public void testSetup() {
environmentManager = EnvironmentManager.getInstance();
if(environmentManager.getDriver() == null){
// Here I am set up the driver!!!
environmentManager.initWebdriver();
environmentManager.startWebApplication();
}
}
@BeforeMethod
public void testName(ITestResult result){ // perform some actions }
@AfterMethod
public void status(ITestResult result){ // perform some actions }
@AfterTest // Here I am shutting down the driver
public void tearDown() { environmentManager.shutdownDriver(); }
}

BaseTest.class调用EnvironmentManager.class它是一个单例类

它有以下代码:


public class EnvironmentManager {
private static EnvironmentManager instance = null;
private WebDriver driver = null;
private String url = "www.google.com";
private EnvironmentManager(){}

// Public Methods
public void initWebdriver() {
if(driver == null){ driver = new ChromeDriver(); }
}
public void startWebApplication(){ driver.get(url); }
// Singleton method
public static EnvironmentManager getInstance() {
if (instance == null) instance = new EnvironmentManager();
return instance;
}
public void shutdownDriver(){
driver.quit();
driver = null;
}

public WebDriver getDriver(){ return driver; }
}

问题存在于运行第二个测试"PreSetup"之后,在控制台中我得到了错误:

Session ID is null. Using WebDriver after calling quit()?

我注意到,在第一次测试中,驱动程序会话是:

ChromeDriver: chrome on MAC (0ff799fbfd14fc275b3b45c414765b15)

第二个测试是另一个:

ChromeDriver: chrome on MAC (09c6c47344756fe2979ee8a84094b1e3)

欢迎任何帮助:(

对于所有感兴趣的人来说,解决方案是重命名以下testNG注释:

@预测试@测试后

@BeforeSuite@AfterSuite

相关内容

最新更新