Selenium IEDriverServer.exe 在虚拟机上崩溃

Posted

技术标签:

【中文标题】Selenium IEDriverServer.exe 在虚拟机上崩溃【英文标题】:Selenium IEDriverServer.exe crashing on a virtual machine 【发布时间】:2015-08-28 17:51:03 【问题描述】:

最近我在虚拟机上使用 Selenium WebDriver 运行 Internet Explorer 自动化时遇到间歇性错误。测试正在通过 Microsoft 测试管理器在虚拟机上运行。我很难弄清楚发生了什么。

发生此问题时,正在尝试运行的测试记录以下内容: 异常:OpenQA.Selenium.WebDriverException:对 URL http://localhost:56645/session/2762cafb-d3c9-4d9a-a0a5-05463e69b7b7/moveto 的远程 WebDriver 服务器的 HTTP 请求在 60 秒后超时。 ---> System.Net.WebException: 操作超时

当测试失败时,我将异常消息和堆栈跟踪写入文件。但在这种情况下,确实没有堆栈。期待更深层次的东西。

System.Net.WebException: The operation has timed out
   at System.Net.HttpWebRequest.GetResponse()
   at OpenQA.Selenium.Remote.HttpCommandExecutor.CreateResponse(WebRequest request)

这是发生故障时来自 eventviewer 的详细信息:

Log Name:      Application
Source:        Application Error
Date:          8/28/2015 9:02:09 AM
Event ID:      1000
Task Category: Application Crashing Events
Level:         Error
Keywords:      Classic
User:          N/A
Computer:      xxxxxxxxxxxxxxxxxx  
Description:
Faulting application name: IEDriverServer.exe, version: 2.44.0.0, time stamp: 0x5449666f
Faulting module name: IED4C2A.tmp, version: 0.0.0.0, time stamp: 0x5449666b
Exception code: 0xc0000005
Fault offset: 0x000a41e6
Faulting process id: 0xf2c
Faulting application start time: 0x01d0e191ad6d3d19
Faulting application path: C:\AutomationDrivers\IEDriverServer.exe
Faulting module path: C:\Users\SACCTO~Z\AppData\Local\Temp\IED4C2A.tmp
Report Id: fd4f5070-4d84-11e5-891b-00155d6e673e
Event Xml:
<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
  <System>
    <Provider Name="Application Error" />
    <EventID Qualifiers="0">1000</EventID>
    <Level>2</Level>
    <Task>100</Task>
    <Keywords>0x80000000000000</Keywords>
    <TimeCreated SystemTime="2015-08-28T13:02:09.000000000Z" />
    <EventRecordID>14302</EventRecordID>
    <Channel>Application</Channel>
    <Computer>xxxxxxxxxxxxxxxxxx</Computer>
    <Security />
  </System>
  <EventData>
    <Data>IEDriverServer.exe</Data>
    <Data>2.44.0.0</Data>
    <Data>5449666f</Data>
    <Data>IED4C2A.tmp</Data>
    <Data>0.0.0.0</Data>
    <Data>5449666b</Data>
    <Data>c0000005</Data>
    <Data>000a41e6</Data>
    <Data>f2c</Data>
    <Data>01d0e191ad6d3d19</Data>
    <Data>C:\AutomationDrivers\IEDriverServer.exe</Data>
    <Data>C:\Users\TASKBO~1\AppData\Local\Temp\IED4C2A.tmp</Data>
    <Data>fd4f5070-4d84-11e5-891b-00155d6e673e</Data>
  </EventData>
</Event>

我可以使用 Visual Studio 内置的测试运行器在本地运行相同的测试,没有任何问题。 VM 有大约 1.5 Gig 的内存,并且在测试运行时从不使用超过一半的内存。 CPU 保持在相当低的水平。

我对要看的东西没有想法。任何想法/想法表示赞赏。谢谢。

【问题讨论】:

添加了注册表项,但能够发生错误(仍然不知道为什么),但没有将任何内容写入 LocalDump 文件 没有重新启动 VM,这可能是没有 DumpFolder 输出的原因。经历消除过程以尝试隔离导致这种情况的被冒犯的测试代码,但到目前为止,这被证明是非常艰巨的。首先是获取转储文件的路径。也许应该尝试附加调试器。 启用 IEDriverServer.exe 日志记录并发现违规代码是使用 Selenium 双击操作的地方。想出了一个笨重的解决方法,它执行双击,然后显式等待以查看是否需要导航到下一个 UI 网页屏幕。如果没有,那么它会再次执行双击操作并等待。不是很了解问题的根源。可能是 Selenium 双击错误,自动化代码中出现了一些奇怪的东西,或者 UI 中出现了奇怪的东西。 【参考方案1】:

我已经写了两篇关于如何在显示 Windows 错误报告对话框时创建良好的故障转储的文章。

第一篇描述how to attach a debugger,基本上:

    等待显示 WER 对话框 附加调试器(如windbg) 按下“调试”按钮 确认已附加调试器的警告 当要求使用选定的调试器时单击“否” 现在在调试器中做任何你喜欢的事情,例如使用.dump /ma seleniumcrash.dmp 创建转储

如果您对使用调试器不是很熟悉,请尝试第二篇文章activates LocalDumps just in time,即:

    等待显示 WER 对话框 为崩溃的应用程序创建WER LocalDumps 注册表项。确保将 DumpType 设置为 2 并且该文件夹是可写的(检查 NTFS 权限)。 关闭 WER 对话框

一旦您拥有良好的故障转储,您就可以从中获取更多信息,例如调用堆栈和 .NET 调用堆栈。

事件查看器异常代码是0xc0000005,也就是访问冲突。 .NET 中的NullReferenceException

【讨论】:

以上是关于Selenium IEDriverServer.exe 在虚拟机上崩溃的主要内容,如果未能解决你的问题,请参考以下文章

Selenium-IDE,Selenium-RC ,Selenium grid以及 Selenium-Core

selenium是啥?

Python爬虫 Selenium -- Selenium元素定位Selenium访问元素信息Selenium交互

Selenium学习Selenium 总结

Selenium - 简介

java selenium selenium 介绍