【问题标题】:Selenium: Getting chrome didn't shut down correctlySelenium:获取 chrome 没有正确关闭
【发布时间】:2018-03-28 17:48:20
【问题描述】:

当我在我的 selenium 框架中重新打开 chrome 浏览器时,我收到 chrome 没有正确关闭错误消息。

在框架中,我使用以下代码在每个测试用例的开头打开浏览器实例

if (browserType.equalsIgnoreCase("Chrome")) {
            try {                               
                System.setProperty("webdriver.chrome.driver", curProj+"\\drivers\\chromedriver.exe");
                ChromeOptions options = new ChromeOptions();
                options.setExperimentalOption("useAutomationExtension", false);
                options.addArguments("disable-infobars");
                //options.addArguments("user-data-dir=C:/Users/xw20/AppData/Local/Google/Chrome/User Data");
                options.addArguments(chromeProfile);
                webdriver = new ChromeDriver(options);
                logger.info("getWebDriver - Setting webdriver.chrome.driver system property as: " + System.getProperty("webdriver.chrome.driver"));
            }
            catch(IllegalStateException e) {
                logger.error("The path to the driver executable must be set by the webdriver.chrome.driver system property. ",e.fillInStackTrace());
                throw new IllegalStateException("The path to the driver executable must be set by the webdriver.chrome.driver system property.");
            }

并使用下面的代码在最后关闭

driver.close();
driver.quit();

但是当我为第二个测试用例打开浏览器时,我收到“chrome 没有正确关闭”弹出消息。

我尝试在 chrome 配置文件的 Preferences 文件中更新以下内容,但没有成功

exit_type:Crashed
exited_cleanly:true

配置:

Chrome 版本: 版本 64.0.3282.186(官方构建)(32 位)

硒版本: 3.11.0

【问题讨论】:

    标签: java google-chrome selenium selenium-webdriver selenium-chromedriver


    【解决方案1】:

    您是否设置了 exit_type:Normal,我目前正在测试开始之前或测试结束之后执行此操作并且它有效。 在 C# 上

     public static void FixChromeSingleProfile(string dataDir)
        {
            FileStream fs = new FileStream(dataDir, FileMode.OpenOrCreate);
            StreamReader sr = new StreamReader(fs);
            string json = sr.ReadToEnd();
            sr.Close();
            fs.Close();
            dynamic jsonDe = JsonConvert.DeserializeObject(json);
            if (jsonDe.profile.exit_type != "Normal")
            {
                jsonDe.profile.exit_type = "Normal";
                string r = JsonConvert.SerializeObject(jsonDe);
    
                StreamWriter sw = new StreamWriter(dataDir, false);
                sw.Write(r);
                sw.Close();
            }
        }
    

    【讨论】:

      【解决方案2】:

      根据您的代码,在不了解您的框架结构的情况下,很难分析错误 chrome 未正确关闭 背后的原因。关于如何调用 代码块(即 main()TestNG)的更多细节可能会对我们有所帮助。

      话虽如此,似乎还有更多因素需要考虑如下:

      • 如果您通过 user-data-dir 使用现有的 Chrome 配置文件,最好避免使用开关 setExperimentalOptionaddArguments 用于自定义,因为这些应在相应的 Chrome 配置文件中设置。
      • 当您根据文档ChromeDriver - WebDriver for Chrome 使用现有的 Chrome 配置文件 通过 user-data-dir 时,路径 应该指向个人资料目录如下:

        options.add_argument("user-data-dir=C:/Users/xw20/AppData/Local/Google/Chrome/User Data/Profile 2")
        
      • 您可以在此处找到详细讨论,地址为How to open a Chrome Profile through Python

      • 避免使用driver.close(); 并始终在tearDown(){} 方法中调用driver.quit() 以优雅地关闭和销毁WebDriverWeb Client 实例。
      • 您可以在这里找到详细的讨论PhantomJS web driver stays in memory
      • JDK 升级到最新级别 JDK 8u162
      • Selenium升级到当前级别Version 3.11.0
      • ChromeDriver 升级到当前的ChromeDriver v2.37 级别。
      • Chrome 版本升级到当前的 Chrome v65.x 级别。
      • 清理你的项目工作区通过你的IDE重建你的项目只需要依赖。
      • 使用CCleaner 工具在执行测试套件之前和之后清除所有操作系统杂务。
      • 如果您的基础 Web Client 版本太旧,请通过 Revo Uninstaller 卸载它并安装最新的 GA 和发布版本的 Web Client
      • 执行您的@Test

      【讨论】:

        【解决方案3】:

        这个解决方案是用 Python 编写的,并且可以 100% 运行,但您也应该能够在 Java 中实现它。每次使用完 Selenium 时,我都会调用 close_windows 函数。

        def close_windows():
        
            windows = driver.window_handles
        
            for w in windows:
                driver.switch_to.window(w)
                driver.close()
        
            driver.quit()
        
        close_windows()
        

        【讨论】:

          猜你喜欢
          • 2014-03-03
          • 1970-01-01
          • 1970-01-01
          • 2017-02-13
          • 2019-06-04
          • 1970-01-01
          • 2012-10-30
          • 2020-05-21
          • 2019-05-09
          相关资源
          最近更新 更多