错误 [严重]:从渲染器接收消息超时:20.000 在 Jenkins 上通过 Selenium 执行测试套件时

Posted

技术标签:

【中文标题】错误 [严重]:从渲染器接收消息超时:20.000 在 Jenkins 上通过 Selenium 执行测试套件时【英文标题】:Error [SEVERE]: Timed out receiving message from renderer: 20.000 while executing the testsuite through Selenium on Jenkins 【发布时间】:2018-10-07 15:11:45 【问题描述】:

我使用 ChromeDriver 和 Selenium 来运行我的自动化测试。测试套件在 Eclipse 和命令行中都成功运行。但是,当我尝试在 Jenkins 中构建它时它不会运行。

这是我在 Jenkins 中的工作配置(所有信息的名称都经过了保密处理): 我可以确认它的 Ant 正在运行 JDK8。

这是构建的控制台输出:

[junit] Running main.TESTNAME
    [junit] Starting ChromeDriver 2.33.506120 (e3e53437346286c0bc2d2dc9aa4915ba81d9023f) on port 27352
    [junit] Only local connections are allowed.
    [junit] Apr 26, 2018 3:52:34 PM org.openqa.selenium.remote.ProtocolHandshake createSession
    [junit] INFO: Detected dialect: OSS
    [junit] Running through test suite as:
    [junit] User: USERNAME
    [junit] URL: CONFIDENTIAL
    [junit] [30.168][SEVERE]: Timed out receiving message from renderer: 20.000
    [junit] [30.170][SEVERE]: Timed out receiving message from renderer: -0.003
    [junit] Total number of tests ran for TESTNAME: 5, Number of tests failures: 4, Number of tests ignored: 0
    [junit] testViewProfileDetailsButtonAndBrowseBack(test.TESTNAME): timeout
    [junit]   (Session info: chrome=64.0.3282.119)
    [junit]   (Driver info: chromedriver=2.33.506120 (e3e53437346286c0bc2d2dc9aa4915ba81d9023f),platform=Windows NT 10.0.14393 x86_64) (WARNING: The server did not provide any stacktrace information)
    [junit] Command duration or timeout: 0 milliseconds
    [junit] Build info: version: '3.8.1', revision: '6e95a6684b', time: '2017-12-01T19:05:14.666Z'
    [junit] System info: host: 'PC', ip: 'IP', os.name: 'Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: '1.8.0_151'
    [junit] Driver info: org.openqa.selenium.chrome.ChromeDriver
    [junit] Capabilities acceptSslCerts: true, applicationCacheEnabled: false, browserConnectionEnabled: false, browserName: chrome, chrome: chromedriverVersion: 2.33.506120 (e3e53437346286..., userDataDir: C:\WINDOWS\TEMP\scoped_dir1..., cssSelectorsEnabled: true, databaseEnabled: false, handlesAlerts: true, hasTouchScreen: false, javascriptEnabled: true, locationContextEnabled: true, mobileEmulationEnabled: false, nativeEvents: true, networkConnectionEnabled: false, pageLoadStrategy: normal, platform: XP, platformName: XP, rotatable: false, setWindowRect: true, takesHeapSnapshot: true, takesScreenshot: true, unexpectedAlertBehaviour: , unhandledPromptBehavior: , version: 64.0.3282.119, webStorageEnabled: true

我下面的build.xml 大部分是自动生成的,除了我添加了 JUnit 集成的末尾:

<?xml version="1.0" encoding="UTF-8"?>
<project basedir="." default="build" name="PROJECTSeleniumTest">
<property environment="env"/>
<property name="debuglevel" value="source,lines,vars"/>
<property name="target" value="1.8"/>
<property name="source" value="1.8"/>
<path id="PROJECTSeleniumTest.classpath">
    <pathelement location="bin"/>
    <pathelement location="lib/byte-buddy-1.7.5.jar"/>
    <pathelement location="lib/client-combined-3.8.1-sources.jar"/>
    <pathelement location="lib/client-combined-3.8.1.jar"/>
    <pathelement location="lib/commons-codec-1.10.jar"/>
    <pathelement location="lib/commons-exec-1.3.jar"/>
    <pathelement location="lib/commons-logging-1.2.jar"/>
    <pathelement location="lib/gson-2.8.2.jar"/>
    <pathelement location="lib/guava-23.0.jar"/>
    <pathelement location="lib/hamcrest-core-1.3.jar"/>
    <pathelement location="lib/httpclient-4.5.3.jar"/>
    <pathelement location="lib/httpcore-4.4.6.jar"/>
    <pathelement location="lib/junit-4.12.jar"/>
</path>
<target name="init">
    <mkdir dir="bin"/>
    <copy includeemptydirs="false" todir="bin">
        <fileset dir="src">
            <exclude name="**/*.launch"/>
            <exclude name="**/*.java"/>
        </fileset>
    </copy>
</target>
<target name="clean">
    <delete dir="bin"/>
</target>
<target depends="clean" name="cleanall"/>
<target depends="build-subprojects,build-project,junit" name="build"/>
<target name="build-subprojects"/>
<target depends="init" name="build-project">
    <echo message="$ant.project.name: $ant.file"/>
    <javac debug="true" debuglevel="$debuglevel" destdir="bin" includeantruntime="false" source="$source" target="$target">
        <src path="src"/>
        <classpath refid="PROJECTSeleniumTest.classpath"/>
    </javac>
</target>

<target name="create_directory">
    <echo message="Create the directory JenkinsTestReports\" />
    <mkdir dir="JenkinsTestReports" />
</target>   

<target name="junit" depends="create_directory">
    <echo message="$java.version"/>
    <junit printsummary="yes" fork="yes" haltonfailure="yes">
        <classpath>
            <path refid="PROJECTSeleniumTest.classpath" />
            <pathelement location="$basedir\bin"/>
        </classpath>
        <batchtest todir="JenkinsTestReports" fork="true">
          <fileset dir="$basedir\bin">
            <include name="main\TESTNAME.class"/>
          </fileset>
        </batchtest>
        <formatter type="xml"/>
        <formatter type="plain"/>
    </junit>
</target>

有谁知道可能是什么原因?谢谢。

【问题讨论】:

【参考方案1】:

此错误消息...

[30.168][SEVERE]: Timed out receiving message from renderer: 20.000

...暗示 ChromeDriver 无法启动新的 Chrome 浏览器进程。

您的主要问题是您使用的二进制文件之间的版本兼容性,如下所示:

您正在使用 chromedriver=2.33 chromedriver=2.33 的发行说明明确提及以下内容:

支持 Chrome v60-62

您正在使用 chrome=64.0 ChromeDriver v2.35 的发行说明明确提及以下内容:

支持 Chrome v62-64包括您正在使用的浏览器版本

您的 Selenium 客户端 版本是 3.8.1。 您的 JDK 版本1.8.0_151,相当旧。

所以 JDK v8u151Selenium Client v3.8.1ChromeDriver v2.33Chrome 之间存在明显的不匹配浏览器 v64.0

解决方案

JDK升级到最新级别JDK 8u162。 将Selenium升级到当前级别Version 3.11.0。 将 ChromeDriver 升级到当前的ChromeDriver v2.38 级别。 将 Chrome 版本保持在 Chrome v66.x 级别。 (as per ChromeDriver v2.38 release notes) 清理你的项目工作区通过你的IDE重建你的项目只需要依赖。 使用CCleaner 工具在执行测试套件之前和之后清除所有操作系统杂务。 如果您的基础 Web Client 版本太旧,请通过 Revo Uninstaller 卸载它并安装最新的 GA 和发布版本的 Web Client。 进行系统重启。 执行您的@Test

【讨论】:

由于我的工作场所限制了我的 Chrome 版本控制,我目前无法将其升级到 v64 以上。我也无法安装未经批准的软件。但是,我确实更新了:ChromeDriver 到 2.37(支持 Chrome v64),Selenium 到 3.11,作业 JDK 到 1.8.0_171。 它仍然无法成功运行。正如我所说,在更新这些之前,我的 ant 构建在命令行和 Eclipse 中都有效。只有与詹金斯不兼容。如果我有证据证明它在其他地方执行,你认为它仍然与版本不兼容吗?它们在不同的次要版本中运行,但它们仍然是 1.8【参考方案2】:

删除超时为我解决了这个问题:

driver.manage().timeouts().implicitlyWait
driver.manage().timeouts().pageLoadTimeout
driver.manage().timeouts().setScriptTimeout

喜欢

//driver.manage().timeouts().implicitlyWait(2000, TimeUnit.MILLISECONDS);
//driver.manage().timeouts().pageLoadTimeout(40, TimeUnit.SECONDS);
//driver.manage().timeouts().setScriptTimeout(60, TimeUnit.SECONDS);

【讨论】:

以上是关于错误 [严重]:从渲染器接收消息超时:20.000 在 Jenkins 上通过 Selenium 执行测试套件时的主要内容,如果未能解决你的问题,请参考以下文章

从渲染器接收消息超时:0.100 条日志消息使用 ChromeDriver 和 Chrome v80 通过 Selenium Java

接收来自渲染器的消息超时:600.000 with Chrome v73.0, ChromeDriver 2.46 on Bamboo Server

Selenium-Chrome-Headless:无法从渲染器接收消息

Electron - 限制从主进程到渲染进程的消息流

preload.ts 中的 contextBridge.exposeInMainWorld:ipcRenderer 接收到来自 main.ts 的消息但渲染器没有得到它

从 phantomjs 收到错误:错误:渲染时,已达到超时