org.openqa.selenium.remote.SessionNotFoundException 从 Jenkin



我正在尝试使用 Jenkins 在 VM 上使用 IEDriverServer 32bit 启动 IE10。

当我使用 IEDriverServer 32 位在 VM 本身上运行它时,它工作正常。如果我使用 IEDriverServer 64 位并从 Jenkins 调用它,它也可以正常工作。但是当我使用 IEDriverServer 32 位并从 Jenkins 启动它时,它失败并显示以下错误:

Running tests.generated.LVATC01TG01_IE10_Test
I 2013-11-01 11:03:02:772 server.cc(53) Starting WebDriver server on port: '37042' on host: ''
D 2013-11-01 11:03:02:773 server.cc(104) Mongoose ACL is -0.0.0.0/0,+127.0.0.1
Started InternetExplorerDriver server (32-bit)
2.37.0.0
Listening on port 37042
Log level is set to DEBUG
D 2013-11-01 11:03:03:329 server.cc(239) Command: GET /status {}
D 2013-11-01 11:03:03:330 server.cc(308) Response: {"sessionId":"","status":0,"value":{"build":{"version":"2.37.0.0"},"os":{"arch":"x64","name":"windows","version":"6.1.7601"}}}
D 2013-11-01 11:03:03:513 server.cc(239) Command: POST /session {"desiredCapabilities":{"platform":"WINDOWS","ensureCleanSession":true,"browserName":"internet explorer","logLevel":"DEBUG","version":""}}
D 2013-11-01 11:03:03:514 IESession.cpp(43) Mutex acquired for session initalization
D 2013-11-01 11:03:03:520 IESession.cpp(105) Releasing session initialization mutex
D 2013-11-01 11:03:03:520 command.cc(33) Raw JSON command: { "command" : "newSession", "locator" : { }, "parameters" : {"desiredCapabilities":{"platform":"WINDOWS","ensureCleanSession":true,"browserName":"internet explorer","logLevel":"DEBUG","version":""}} }
W 2013-11-01 11:03:03:523 BrowserFactory.cpp(795) Couldn't find IE version for executable %ProgramFiles(x86)%Internet Explorerielowutil.exe, falling back to -1
D 2013-11-01 11:03:03:529 BrowserFactory.cpp(66) Ignoring Protected Mode Settings: 0
D 2013-11-01 11:03:03:529 BrowserFactory.cpp(69) Checking validity of Protected Mode settings.
D 2013-11-01 11:03:03:529 BrowserFactory.cpp(846) Detected IE version: -1, detected Windows version: 6
D 2013-11-01 11:03:03:531 BrowserFactory.cpp(72) Has Valid Protected Mode Settings: 1
D 2013-11-01 11:03:03:555 BrowserFactory.cpp(168) Starting IE using the IELaunchURL API
W 2013-11-01 11:03:03:578 BrowserFactory.cpp(173) -2147024894 [The system cannot find the file specified.]: Error using IELaunchURL to start IE
W 2013-11-01 11:03:03:578 IECommandExecutor.cpp(627) Unable to launch browser, received NULL process ID
W 2013-11-01 11:03:03:578 response.cc(69) Error response has status code 6 and message 'Unexpected error launching Internet Explorer. IELaunchURL() returned 80070002 for URL 'http://localhost:37042/'' message
W 2013-11-01 11:03:03:578 IECommandExecutor.cpp(516) Unable to get current browser
D 2013-11-01 11:03:03:583 IESession.cpp(146) Executor shutdown successful!
D 2013-11-01 11:03:03:583 IESession.cpp(154) Posting thread shutdown message
D 2013-11-01 11:03:03:583 IESession.cpp(157) Starting wait for thread completion
D 2013-11-01 11:03:03:583 IESession.cpp(160) Waiting for thread to end returned 4294967295
D 2013-11-01 11:03:03:583 server.cc(308) Response: {"sessionId":"47dfd98f-f9be-4b95-810d-4428c3f98af1","status":6,"value":{"message":"Unexpected error launching Internet Explorer. IELaunchURL() returned 80070002 for URL 'http://localhost:37042/'"}}
D 2013-11-01 11:03:03:583 IECommandExecutor.cpp(435) Shutdown message received
D 2013-11-01 11:03:03:583 IECommandExecutor.cpp(131) Entering IECommandExecutor::OnDestroy
D 2013-11-01 11:03:03:583 IECommandExecutor.cpp(133) Clearing managed element cache
D 2013-11-01 11:03:03:583 IECommandExecutor.cpp(135) Closing input manager
D 2013-11-01 11:03:03:583 IECommandExecutor.cpp(137) Closing proxy manager
D 2013-11-01 11:03:03:583 IECommandExecutor.cpp(139) Closing browser factory
D 2013-11-01 11:03:03:583 IECommandExecutor.cpp(141) Posting quit message
D 2013-11-01 11:03:03:583 IECommandExecutor.cpp(143) Leaving IECommandExecutor::OnDestroy
D 2013-11-01 11:03:03:583 IECommandExecutor.cpp(437) Returned from DestroyWindow()
D 2013-11-01 11:03:03:583 IECommandExecutor.cpp(446) Exited IECommandExecutor thread message loop
Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 2.275 sec <<< FAILURE! - in tests.generated.LVATC01TG01_IE10_Test
lVA(tests.generated.LVATC01TG01_IE10_Test)  Time elapsed: 2.089 sec  <<< ERROR!
org.openqa.selenium.remote.SessionNotFoundException: Unexpected error launching Internet Explorer. IELaunchURL() returned 80070002 for URL 'http://localhost:37042/' (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 1.37 seconds
Build info: version: '2.37.1', revision: 'a7c61cbd68657e133ae96672cf995890bad2ee42', time: '2013-10-21 09:08:07'
System info: host: 'win7ietest3', ip: '10.187.160.139', os.name: 'Windows 7', os.arch: 'amd64', os.version: '6.1', java.version: '1.7.0_40'
Driver info: org.openqa.selenium.ie.InternetExplorerDriver
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
    at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:193)
    at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:151)
    at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:554)
    at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:216)
    at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:201)
    at org.openqa.selenium.ie.InternetExplorerDriver.run(InternetExplorerDriver.java:224)
    at org.openqa.selenium.ie.InternetExplorerDriver.<init>(InternetExplorerDriver.java:214)
    at org.openqa.selenium.ie.InternetExplorerDriver.<init>(InternetExplorerDriver.java:184)
    at common.Common.startIE(Common.java:181)
    at common.Common.startDriver(Common.java:95)
    at tests.generated.LVATC01TG01_IE10_Test.setUp(LVATC01TG01_IE10_Test.java:25)

设置驱动程序的方法:

/**
 * Setting up IE driver
 */
private static void startIE()
{
    File file = new File(DRIVER_DIR + "IEDriverServer_Win32_2.37.0.exe");
    System.setProperty("webdriver.ie.driver", file.getAbsolutePath());
    DesiredCapabilities capabilities = DesiredCapabilities.internetExplorer();
    capabilities.setCapability("logLevel", "DEBUG");
    driver = new InternetExplorerDriver(capabilities);
}

我已经四处寻找解决方案,但大多数解决方案都与在IE中正确设置保护模式有关(我有,因为64位驱动程序版本有效)。

由于已知问题(即发送密钥速度慢),我无法使用 64 位驱动程序版本。任何帮助将不胜感激。

乔斯

我们的测试执行是通过 ssh 从我们的构建系统触发的

例如

ssh Administrator@some.host.com "export JAVA_HOME=\"C:/Program 文件/Java/jre1.8.0_45\";光盘 C:/测试;mvn -PrunSystemTests -Dsys.testsuite=SanitySuite.xml -DconfigFile=/ie.properties -DsuiteName=SANITY test"

所有测试都失败,并显示

。org.openqa.selenium.remote.SessionNotFoundException: 启动 Internet Explorer 时出现意外错误。IELaunchURL() 为 URL "http://localhost:22087/"返回 HRESULT 80070002("系统找不到指定的文件")(警告:服务器未提供任何堆栈跟踪信息)...

通过在运行测试之前设置环境变量ProgramW6432解决了该问题

例如

ssh Administrator@some.host.com "export JAVA_HOME=\"C:/Program 文件/Java/jre1.8.0_45\";导出程序W6432=\"C:\程序文件";光盘 c:/测试;mvn -PrunSystemTests -Dsys.testsuite=SanitySuite.xml -DconfigFile=/ie.properties -DsuiteName=SANITY test"

如果 Appium 在 60 秒内未收到下一个命令,它将关闭。

[BaseDriver] Shutting down because we waited 60 seconds for a command
[debug] [AndroidDriver] Shutting down Android driver

就我而言,我的自动化循环了 60 多秒,让应用程序完成其任务,该任务具有网络依赖性。

您可以通过在功能中添加"newCommandTimeout"来避免这种情况,以增加超时持续时间,如下所示: capabilities.setCapability("newCommandTimeout", 90); //or seconds

或者,您可以添加尝试/捕获并记录更有意义的消息。

我有同样的问题。

我发现根本错误是,IEDriver找不到Internet Explorer.exe。

我试过了:

    使用运行 Jenkins 的用户
  • 登录 Jenkins 机器,并从 Jenkins 工作区中的命令行手动执行测试。(在我的Windows机器上,转到C:\Program Files (x86)\Jenkins\workspace\MYPROJECT\,执行mvn集成测试):执行有效!

  • 将策略从 PerScenarioWebDriverSteps 更改为 PerStoriesWebDriverSteps 并在 jenkins 上运行:得到相同的错误。

  • 还检查了IE保护模式设置。一切都还好。

  • 通过 Jenkins 使用 Firefox 运行测试:工作正常。

  • 添加的功能:capabilities.setCapability("ie.forceCreateProcessApi", true);并在 jenkins 机器上添加了注册值:

Location: HKEY_CURRENT_USERSoftwareMicrosoftInternet ExplorerMain
Name: TabProcGrowth
Type: REG_DWORD
Value: 0     
Value Type: Decimal

浏览器进程 ID 这次启动,但随后整个执行在此处挂起:

BrowserFactory.cpp(207) Starting IE using the CreateProcess API
BrowserFactory.cpp(221) IE starting command line is: 'C:Program Files (x86)Internet Explorerielowutil.exe http://localhost:9164/'.
BrowserFactory.cpp(122) IE launched successfully with process ID 5452
BrowserFactory.cpp(128) Process with ID 5452 is executing ielowutil.exe
BrowserFactory.cpp(282) Entering BrowserFactory::AttachToBrowser

你找到解决方案了吗?

这个问题有时也发生在我身上。当它发生时,在我的工作目录中创建了一个名为 %SystemDrive% 的神秘目录(实际上具有此名称,没有任何环境变量扩展)。供将来参考,此目录包含以下文件夹和文件:

* %SystemDrive%/
  * ProgramData/
    * Microsoft/
      * Windows/
        * Caches/
          * {6AF0698E-D558-4F6E-9B3C-3716689AF493}.2.ver0x0000000000000001.db
          * {DDF571F2-BE98-426D-8288-1A9A39C3FDA2}.2.ver0x0000000000000001.db
          * cversions.2.db

删除此%SystemDrive%文件夹似乎为我解决了问题。

package appium;
import java.net.MalformedURLException;
import java.net.URL;
import org.openqa.selenium.*;
import org.testng.*;
import io.appium.java_client.android.AndroidDriver;
import io.appium.java_client.remote.MobileBrowserType;
import io.appium.java_client.remote.MobileCapabilityType;
public class My {
    public static void main(String[] args) throws MalformedURLException {
        AndroidDriver driver;
        DesiredCapabilities capabilities = new DesiredCapabilities();
        capabilities.setCapability("deviceName", "Nexus 5");
        capabilities.setCapability("platformName", "android");
        capabilities.setCapability("platformVersion", "5.0.1");

        capabilities.setCapability("appPackage","com.android.calculator2");
        capabilities.setCapability("appActivity","com.android.calculator2.Calculator");
        driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"),capabilities);
        driver.quit();
    }
}

最新更新