【问题标题】:Memory leaks when working with IEDriverServer and Selenium on C# with IE11使用 IE11 在 C# 上使用 IEDriverServer 和 Selenium 时内存泄漏
【发布时间】:2019-01-03 09:29:55
【问题描述】:

我在 Windows 7/10 的 IE11 上运行 C#-Selenium。 运行脚本时,IE11 内存一直在增加,直到达到 1.5GB 内存。 注意我不能关闭或退出任何东西,因为我需要我的测试继续运行。问题是IE11随着测试的进行不断变大

相比之下,当使用 QTP 运行相同的脚本时,不会发生任何事情。 32 位 WebDriver 版本:3.8 & 3.141

Web 应用程序本身是一个适当的应用程序 你知道我从哪里开始寻找解决问题的方法?

谢谢

尝试减少我的代码,嗅探内存泄漏

【问题讨论】:

  • 运行 'taskkill /f /im iexplore.exe' 应该清理无响应的窗口。见原文answer
  • 我没有问题关闭或杀死 IE。运行脚本时出现问题

标签: c# selenium memory internet-explorer-11 selenium-iedriver


【解决方案1】:

问题可能是您的测试脚本实际上并没有关闭浏览器。

我在 selenium IE 中遇到了一个错误,它不会使用 .close 或 .quite commants 关闭浏览器。这意味着它将打开很多窗口,这可能会导致内存泄漏..

【讨论】:

  • 脚本运行时发生。
  • 忘了说:我使用的是 32 位版本的 WebDriver
  • 你看到测试在 IE 中工作了吗? (IE 窗口内的安全弹出窗口没有问题?)这个问题是否也发生在部分测试中?
  • 每次测试后是否关闭 IE 窗口?或者你让他们保持开放?因为在脚本运行时也可能出现问题......由于许多未关闭的窗口而导致虚拟机内存不足。
【解决方案2】:

WebDriverWeb Browser 初始化/关闭过程的一些示例代码 sn-p 会给我们一些提示,为什么要使用 IEDriverServer 和 IE11 内存不断增加,直到达到 1.5GB

也许按照最佳实践,总是在 tearDown(){} 方法中调用 driver.quit() 来优雅地关闭和销毁 WebDriverWeb Client 实例,如下所示:

driver.quit() // Python
// or
driver.quit(); // Java
// or
driver.Quit(); // DotNet

您可以在PhantomJS web driver stays in memory找到详细讨论

如果 IEDriverServer 进程仍未销毁和删除,您可能需要从任务列表中终止进程。

  • Python 解决方案(跨平台):

    import os
    import psutil
    
    PROCNAME = "IEDriverServer" # or chromedriver or geckodriver
    for proc in psutil.process_iter():
        # check whether the process name matches
        if proc.name() == PROCNAME:
            proc.kill()
    

您可以在Selenium : How to stop geckodriver process impacting PC memory, without calling driver.quit()?找到详细讨论

另外,

【讨论】:

  • 问题是我无法关闭或退出任何东西,因为我需要我的测试继续运行。问题是 IE11 随着测试的进行不断变大
  • 这没有回答问题
  • @Shmulikb Selenium 广泛用于 Test Automation,其中每个 testcase 都基于 usecases我>。 IMO,...需要我的测试才能继续运行... 不是有效的用例。也许你可能需要一个 Application Server 的帮助,例如Tomcat.
  • @DebanjanB 如前所述,QTP 做得很好,而 Selenium 不知何故会导致 IE11 内存在运行 5-10 分钟内爆炸。
  • @Shmulikb 无法评论 QTP,但 Selenium 在设计上与 QTP 有点不同。此外,IE 是另一个需要掌握的大挑战。
【解决方案3】:

经过大量搜索,我通过在工具 --> 选项 --> 高级下禁用 IE11 中的“脚本调试(Internet Explorer)”在一定程度上解决了这个问题。

在我的 Selenium 代码中有一个监听这个 ScriptExecuted 事件(这是我的代码中必须的):

    firingDriver.ScriptExecuted += firingDriver_ScriptExecuted;

可以关联吗?

所以现在,我不知道为什么禁用脚本调试会大大减少内存泄漏。当运行相同的 QTP 场景时,不会出现内存泄漏。

如果有人有想法,我很想听听

谢谢!

【讨论】:

    猜你喜欢
    • 2016-01-16
    • 1970-01-01
    • 1970-01-01
    • 2016-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-06
    相关资源
    最近更新 更多