Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在driver.quit后打开新的chromedriver会话?_Java_Selenium_Cucumber - Fatal编程技术网

Java 如何在driver.quit后打开新的chromedriver会话?

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

我正在尝试运行两个功能文件(Cucumber+JUnit),需要关闭功能之间的浏览器。但在结束后,第二个功能无法启动新会话,我将

org.openqa.selenium.remote.SessionNotFoundException:会话ID为 空

调用
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()之前使用它;