【问题标题】:How to open new session of chromedriver after driver.quit?driver.quit后如何打开chromedriver的新会话?
【发布时间】:2017-07-23 14:13:01
【问题描述】:

我正在尝试运行两个功能文件(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();
}

【问题讨论】:

    标签: java selenium cucumber


    【解决方案1】:

    你可以这样做:

    driver.quit();
    driver = null; 
    driver = new ChromeDriver();
    

    【讨论】:

    • 它不起作用。我有 org.openqa.selenium.remote.SessionNotFoundException:会话 ID 为空。调用 quit() 后使用 WebDriver?
    • 确保使用正确的浏览器驱动程序进行初始化。我只是写了chrome驱动作为参考!
    • 是的,我正在使用 chromedriver。而且这个解决方案不起作用
    • 您可能犯了一个逻辑错误!确保驱动程序未无效,即驱动程序 = null;在调用 driver.quit() 之前另外,如果您使用 WebDriver 的静态变量,请尝试使用非静态变量
    • 另外,从任务管理器中杀死 chromedriver 实例。并使用 driver.close();就在 driver.quit(); 之前声明我看到你在函数中或测试执行期间使用它,在 driver.quit() 之前使用它;
    【解决方案2】:

    如果你想关闭浏览器那么你可以使用

     driver.close() //in java, this will close only active browser, session will not killed.
    

    此链接将帮助您了解更多信息How to close the whole browser window by keeping the webDriver active?

    【讨论】:

    • 如果我使用 driver.close(),我得到以下错误:org.openqa.selenium.remote.SessionNotFoundException:没有这样的会话(驱动程序信息:chromedriver=2.30.477700(0057494ad8732195794a7b32078424f92a5fce41), platform=Windows NT 10.0.14393 x86_64)(警告:服务器未提供任何堆栈跟踪信息)
    • 嘿使用 driver.close 而不是 driver.quit。如果您使用 driver.quit 则会话将结束,因此我们无法使用它。需要重新启动驱动程序。
    • 但是我刚刚说过,当我使用 driver.close 时,我得到了没有这样的会话错误
    • 代码看起来不错。没有 driver.quit 所以我们一般不能得到那个异常。可能是这个 loginPage.clickLogout();方法可能包含 driver.quit。如果不是,你能看一次吗
    • 一般情况下,我们知道在 driver.quit 之后使用驱动时会发生 SessionNotFoundException。所以需要检查脚本,我们是否在退出后仍在使用驱动程序实例?
    猜你喜欢
    • 2021-04-01
    • 2012-05-17
    • 1970-01-01
    • 2018-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-14
    相关资源
    最近更新 更多