我使用Selenium WebDriver 2.25在不同版本的Windows Explorer上测试我们的应用程序,这意味着在不同的机器上运行测试。
虽然使用IE8测试应用程序运行得很好,但在尝试使用IE7在工作站上运行测试时,我得到了一个奇怪的错误。它运行的是装有Java6的Windows XP Service Pack2。当我尝试运行IEDriverServer_Win32可执行文件时,我得到以下错误:
Failed to load the library from temp directory: C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp我遗漏了什么?
发布于 2013-07-20 04:40:10
IEDriverServer.exe被设计为一个小的、简单的可执行文件,其中包含一个.dll,其中包含IE驱动程序的实际代码,并作为资源嵌入到.exe中。要使用此.dll,可执行文件必须将.dll提取到某个位置,以便它可以调用Windows LoadLibrary API来加载并随后执行.dll的代码。默认情况下,提取是在temp目录中完成的。如果不生成日志文件来查看问题,我们可以推测.dll没有正确提取,或者一旦提取,对LoadLibrary的调用就失败了。
幸运的是,IE驱动程序提供了解决此问题的方法。如果您将--extract-path="path\to\extract\dll\to"作为命令行参数传递给IEDriverServer.exe,您将能够显式地指定用于提取的目录。请参阅您的语言绑定的文档,了解如何以编程方式传递此命令行参数。
例如,要使此代码适用于Java,代码将如下所示:
// WARNING: Entirely untested code below! Was written from memory without
// the benefit of an IDE. May not work correctly or even compile without
// modification.
// Assume "location" is a properly instantiated java.io.File containing
// the location of IEDriverServer.exe.
InternetExplorerDriverService service = new InternetExplorerDriverService.Builder()
.withExtractPath(location)
.build();
WebDriver driver = new InternetExplorerDriver(service);另一种选择可能是手动启动IEDriverServer.exe,并使用语言绑定的RemoteWebDriver类连接到它。这意味着您要对可执行进程的生命周期负责,但这可能是您获得所需行为的一种方式。
发布于 2013-07-29 23:05:55
我实际上遇到了一个类似的问题,它无法解压到临时目录,我所做的就是进入IEDriver解压DLL的文件夹,并删除了该文件夹中与Selenium相关的所有内容。
所以对我来说,它是C:\Users\usnm\AppData\Local\Temp,有很多像webdriver_blahblah120398405.tmp这样的文件,还有很多命名类似的文件夹。当我把它们全部移除后,我的程序又开始工作了。因此,对于您来说,它应该是C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp
当然,我们的错误略有不同(我使用的是Selenium 2.33)。我的错误是“提取失败”,而不是“加载失败”。
发布于 2015-02-26 22:06:02
在某些系统中,防病毒软件或其他保护软件会阻止运行exe文件,在这种情况下,会阻止从临时文件夹加载dll库。
在启动selenium节点时,添加一个额外的参数并指定当前目录的提取路径(确保当前目录可由用户写入,并且不需要提升的权限)。例如,如果您的节点位于C:\ IEDriverServer.exe,则
java -jar selenium-server-standalone.jar -role node ..... -Dwebdriver.ie.driver.extractpath=C:\node这应该可以解决这个问题。
https://stackoverflow.com/questions/17734331
复制相似问题