Java 如何在driver.quit后打开新的chromedriver会话?
我正在尝试运行两个功能文件(Cucumber+JUnit),需要关闭功能之间的浏览器。但在结束后,第二个功能无法启动新会话,我将 org.openqa.selenium.remote.SessionNotFoundException:会话ID为 空 调用Java 如何在driver.quit后打开新的chromedriver会话?,java,selenium,cucumber,Java,Selenium,Cucumber,我正在尝试运行两个功能文件(Cucumber+JUnit),需要关闭功能之间的浏览器。但在结束后,第二个功能无法启动新会话,我将 org.openqa.selenium.remote.SessionNotFoundException:会话ID为 空 调用quit()后使用WebDriver。如何避免这个错误 我有以下相同的代码: @Before public void initPage(){ loginPage = PageObjectFactory.getPageObject(Log
quit()
后使用WebDriver。如何避免这个错误
我有以下相同的代码:
@Before
public void initPage(){
loginPage = PageObjectFactory.getPageObject(LoginPage.class);
loginPage.loadPage();
}
@Given("^user login to stg \"([^\"]*)\" with \"([^\"]*)\" and \"([^\"]*)\"$")
public void userLoginToStgWithAnd(String arg0, String arg1, String arg2) throws Throwable {
Properties prop = new Properties();
InputStream input = null;
input = new FileInputStream("src/main/resources/application.properties");
prop.load(input);
arg0 = System.getProperty("url");
arg1 = prop.getProperty("user.username");
arg2 = System.getProperty("user.password");
Map<IElement, String> map = new LinkedHashMap<>();
map.put(loginPage.stgPassword, arg2);
map.put(loginPage.stgUsername, arg1);
driver = WebDriverConfig.setChromeProfile();
driver.get(arg0);
Thread.sleep(3000);
loginPage.waitForJStoLoad();
loginPage.fillForm(map);
loginPage.clickStgLogin();
Thread.sleep(3000);
}
@And("^user logout$")
public void userLogout() throws Throwable {
loginPage.waitForJStoLoad();
loginPage.waitForAngular();
loginPage.openUserProfile();
loginPage.clickLogout();
loginPage.waitForJStoLoad();
driver.close();
}
@之前
公共页面(){
loginPage=PageObjectFactory.getPageObject(loginPage.class);
loginPage.loadPage();
}
@给定(“^user login to stg\”([^\“]*)\”和“([^\“]*)\”$”的“^user login to stg\”([^\“]*)”)
public void userLoginToStgWithAnd(字符串arg0、字符串arg1、字符串arg2)抛出Throwable{
Properties prop=新属性();
InputStream输入=null;
input=newfileinputStream(“src/main/resources/application.properties”);
道具载荷(输入);
arg0=System.getProperty(“url”);
arg1=prop.getProperty(“user.username”);
arg2=System.getProperty(“user.password”);
Map Map=newlinkedhashmap();
map.put(loginPage.stgPassword,arg2);
map.put(loginPage.stgUsername,arg1);
driver=WebDriverConfig.setChromeProfile();
driver.get(arg0);
睡眠(3000);
loginPage.waitForJStoLoad();
loginPage.fillForm(地图);
登录页面。单击stglogin();
睡眠(3000);
}
@和(“^user logout$”)
public void userLogout()抛出可丢弃的{
loginPage.waitForJStoLoad();
loginPage.waitForAngular();
loginPage.openUserProfile();
登录页面。单击注销();
loginPage.waitForJStoLoad();
driver.close();
}
如果要关闭浏览器,则可以使用
driver.close() //in java, this will close only active browser, session will not killed.
此链接将帮助您了解更多信息您可以这样做:
driver.quit();
driver = null;
driver = new ChromeDriver();
如果使用的是driver.close(),则会出现以下错误:org.openqa.selenium.remote.SessionNotFoundException:没有这样的会话(驱动程序信息:chromedriver=2.30.477700(0057494AD8732195794A7B3207842F92A5FCE41),platform=Windows NT 10.0.14393 x8664)(警告:服务器未提供任何堆栈跟踪信息)嘿,请使用driver.close而不是driver.quit。如果您使用driver.quit,则会话将结束,因此我们无法使用它。需要重新启动驱动程序。但我刚才说过,当我使用driver.close时,我没有收到这样的会话错误代码。没有driver.quit,因此我们通常无法获得该异常。可能是此登录页。单击注销();方法可能包含driver.quit。如果不是的话,你能看一下吗?一般来说,我们知道在driver.quit之后使用driver时会发生SessionNotFoundException。所以需要检查脚本,即使在退出之后我们是否仍在使用驱动程序实例?它不起作用。我得到了org.openqa.selenium.remote.SessionNotFoundException:会话ID为空。在cal之后使用WebDriverling quit()?请确保您正在使用正确的浏览器驱动程序进行初始化。我刚刚编写了chrome驱动程序作为参考!是的,我使用的是chromedriver。而且此解决方案不起作用。您可能会出现逻辑错误!在调用driver.quit()之前,请确保驱动程序未被置空,即driver=null另外,如果您使用WebDriver的静态变量,请尝试使用非静态变量。此外,请从任务管理器中删除chromedriver实例。并在driver.quit()语句之前使用driver.close();如果我看到您在函数中或测试执行期间使用该语句,请在driver.quit()之前使用它;