操作系统:Windows 10浏览器:Chrome浏览器版本:73.0.3683.86版(官方内部版本)(32位)
我正在运行硒黄瓜BDD项目,在此我要验证一页的标题。我正在使用扩展报告版本4。项目在本地成功运行。但是当我通过Jenkins运行它时,它在捕获屏幕截图并显示以下错误时失败。
如果我从pom.xml中删除surfire插件,则TEST无法通过Jenkins运行。
在詹金斯的执行Windows批处理命令选项中,我给出了以下命令
C:\Program Files (x86)\Jenkins\workspace\CucumberBDDFramework mvn test
TestRunner
package com.accenture.TestRunner; import org.testng.annotations.AfterClass; import org.testng.annotations.Test; import org.testng.annotations.BeforeClass; import org.testng.annotations.AfterClass; import org.testng.annotations.BeforeClass; import org.testng.annotations.DataProvider; import org.testng.annotations.Test; import cucumber.api.CucumberOptions; import cucumber.api.testng.AbstractTestNGCucumberTests; import cucumber.api.testng.CucumberFeatureWrapper; import cucumber.api.testng.TestNGCucumberRunner; /** * @author ajinkya.pande * */ @CucumberOptions( features="./features/WhatIsBitcoin.feature", glue= {"com.accenture.StepDef"}, tags= {"@ExtentReport"}, dryRun = false ) public class TestRunner { // Write following steps or Try to extend AbstractTestNGCucumberTests private TestNGCucumberRunner testNGCucumberRunner; @BeforeClass(alwaysRun = true) public void setUpClass() throws Exception{ testNGCucumberRunner = new TestNGCucumberRunner(this.getClass()); } @Test(dataProvider = "features") public void feature(CucumberFeatureWrapper cucumberFeature) { testNGCucumberRunner.runCucumber(cucumberFeature.getCucumberFeature()); } @DataProvider public Object [][] features(){ return testNGCucumberRunner.provideFeatures(); } @AfterClass(alwaysRun = true) public void tearDownClass() throws Exception{ testNGCucumberRunner.finish(); } }
步骤定义
package com.accenture.listeners; import java.io.File; import java.io.IOException; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; import org.apache.commons.io.FileUtils; import org.openqa.selenium.OutputType; import org.openqa.selenium.TakesScreenshot; import org.openqa.selenium.WebDriver; import com.accenture.Utility.Constants; import com.aventstack.extentreports.ExtentReports; import com.aventstack.extentreports.ExtentTest; import com.aventstack.extentreports.markuputils.ExtentColor; import com.aventstack.extentreports.markuputils.MarkupHelper; import com.aventstack.extentreports.reporter.ExtentHtmlReporter; import com.aventstack.extentreports.reporter.configuration.Theme; /** * @author ajinkya.pande * */ public class ExtentReportListener extends Constants { public static ExtentHtmlReporter report = null; public static ExtentReports extent = null; public static ExtentTest test = null; public static ExtentReports setUp() { String reportLocation = "./Reports/Extent_Report.html"; report = new ExtentHtmlReporter(reportLocation); report.config().setDocumentTitle("Automation Test Report"); report.config().setReportName("Automation Test Report"); report.config().setTheme(Theme.STANDARD); System.out.println("Extent Report location initialized . . ."); report.start(); extent = new ExtentReports(); extent.attachReporter(report); extent.setSystemInfo("Application", "Youtube"); extent.setSystemInfo("Operating System", System.getProperty("os.name")); extent.setSystemInfo("User Name", System.getProperty("user.name")); System.out.println("System Info. set in Extent Report"); return extent; } public static void testStepHandle(String teststatus, WebDriver driver, ExtentTest extenttest, Throwable throwable) { if (teststatus.equals("FAIL")) { extenttest.fail(MarkupHelper.createLabel("Test Case is Failed : ", ExtentColor.RED)); extenttest.error(throwable.fillInStackTrace()); try { extenttest.addScreenCaptureFromPath(captureScreenShot(driver)); } catch (IOException e) { e.printStackTrace(); } if (driver != null) { driver.quit(); } if (teststatus.equals("PASS")) { extenttest.pass(MarkupHelper.createLabel("Test Case is Passed : ", ExtentColor.GREEN)); try { extenttest.addScreenCaptureFromPath(captureScreenShot(driver)); } catch (IOException e) { e.printStackTrace(); } } } } public static String captureScreenShot(WebDriver driver) throws IOException { TakesScreenshot screen = (TakesScreenshot) driver; File src = screen.getScreenshotAs(OutputType.FILE); String dest = SCRRENSHOT_PATH + getcurrentdateandtime() + ".png"; File target = new File(dest); FileUtils.copyFile(src, target); return dest; } private static String getcurrentdateandtime() { String str = null; try { DateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss:SSS"); Date date = new Date(); str = dateFormat.format(date); str = str.replace(" ", "").replaceAll("/", "").replaceAll(":", ""); } catch (Exception e) { } return str; } }
pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>org.ajinkya.cucumber</groupId> <artifactId>extent-reporting</artifactId> <version>0.0.1-SNAPSHOT</version> <build> <plugins> <!-- <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.7.0</version> <configuration> <source>1.8</source> <target>1.8</target> <encoding>UTF-8</encoding> </configuration> </plugin> --> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>3.1</version> <configuration> <fork>1.7</fork> <executable>C:\Program Files\Java\jdk1.8.0_191\bin\javac.exe</executable> </configuration> </plugin> <!-- <plugin> <groupId>net.masterthought</groupId> <artifactId>maven-cucumber-reporting</artifactId> <version>3.15.0</version> <executions> <execution> <id>execute</id> <phase>verify</phase> <goals> <goal>generate</goal> </goals> <configuration> <outputDirectory>target/cucumber-reports/advanced-reports</outputDirectory> <cucumberOutput>target/cucumber-reports/CucumberTestReport.json</cucumberOutput> </configuration> </execution> </executions> </plugin> --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.19.1</version> <configuration> <suiteXmlFiles>testng.xml</suiteXmlFiles> </configuration> </plugin> </plugins> </build> <dependencies> <!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java --> <dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-java</artifactId> <version>3.11.0</version> </dependency> <dependency> <groupId>info.cukes</groupId> <artifactId>cucumber-java</artifactId> <version>1.2.5</version> </dependency> <!-- https://mvnrepository.com/artifact/info.cukes/cucumber-testng --> <dependency> <groupId>info.cukes</groupId> <artifactId>cucumber-testng</artifactId> <version>1.2.5</version> </dependency> <!-- https://mvnrepository.com/artifact/org.testng/testng --> <dependency> <groupId>org.testng</groupId> <artifactId>testng</artifactId> <version>6.9.8</version> </dependency> <dependency> <groupId>info.cukes</groupId> <artifactId>cucumber-jvm-deps</artifactId> <version>1.0.5</version> <scope>provided</scope> </dependency> <dependency> <groupId>com.aventstack</groupId> <artifactId>extentreports</artifactId> <version>4.0.6</version> </dependency> <dependency> <groupId>org.freemarker</groupId> <artifactId>freemarker</artifactId> <version>2.3.23</version> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-io --> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-io</artifactId> <version>1.3.2</version> </dependency> </dependencies> </project>
詹金斯日志:
T E S T S ------------------------------------------------------- Running TestSuite Starting............... Extent Report location initialized . . . System Info. set in Extent Report Starting ChromeDriver 73.0.3683.68 (47787ec04b6e38e22703e856e101e840b65afe72) on port 8950 Only local connections are allowed. Please protect ports used by ChromeDriver and related test frameworks to prevent access by malicious code. Mar 26, 2019 11:15:27 PM org.openqa.selenium.remote.ProtocolHandshake createSession INFO: Detected dialect: OSS [1553622354.306][SEVERE]: Timed out receiving message from renderer: 10.000 [1553622354.307][WARNING]: screenshot failed, retrying [1553622364.313][SEVERE]: Timed out receiving message from renderer: 9.996 [1553622374.336][SEVERE]: Timed out receiving message from renderer: 9.998 [1553622374.337][WARNING]: screenshot failed, retrying [1553622384.337][SEVERE]: Timed out receiving message from renderer: 9.998 [1553622394.343][SEVERE]: Timed out receiving message from renderer: 10.000 [1553622394.344][WARNING]: screenshot failed, retrying [1553622404.345][SEVERE]: Timed out receiving message from renderer: 9.996 Failed scenarios: ./features/WhatIsBitcoin.feature:3 # Scenario: Testing extent reports 1 Scenarios (1 failed) 4 Steps (1 failed, 3 skipped) 1m25.069s org.openqa.selenium.TimeoutException: timeout: Timed out receiving message from renderer: 9.996 (Session info: chrome=73.0.3683.86) (Driver info: chromedriver=73.0.3683.68 (47787ec04b6e38e22703e856e101e840b65afe72),platform=Windows NT 10.0.17134 x86_64) (WARNING: The server did not provide any stacktrace information) Command duration or timeout: 0 milliseconds Build info: version: '3.11.0', revision: 'e59cfb3', time: '2018-03-11T20:26:55.152Z' System info: host: 'BDC11-L-FYK3VP2', ip: '192.168.56.1', os.name: 'Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: '1.8.0_191' Driver info: org.openqa.selenium.chrome.ChromeDriver Capabilities {acceptInsecureCerts: false, acceptSslCerts: false, applicationCacheEnabled: false, browserConnectionEnabled: false, browserName: chrome, chrome: {chromedriverVersion: 73.0.3683.68 (47787ec04b6e3..., userDataDir: C:\windows\TEMP\scoped_dir1...}, cssSelectorsEnabled: true, databaseEnabled: false, goog:chromeOptions: {debuggerAddress: localhost:51833}, handlesAlerts: true, hasTouchScreen: false, javascriptEnabled: true, locationContextEnabled: true, mobileEmulationEnabled: false, nativeEvents: true, networkConnectionEnabled: false, pageLoadStrategy: normal, platform: XP, platformName: XP, proxy: Proxy(), rotatable: false, setWindowRect: true, strictFileInteractability: false, takesHeapSnapshot: true, takesScreenshot: true, timeouts: {implicit: 0, pageLoad: 300000, script: 30000}, unexpectedAlertBehaviour: ignore, unhandledPromptBehavior: ignore, version: 73.0.3683.86, webStorageEnabled: true} Session ID: 1b4d8402a8e29651ed2c7a773c11ca37 at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:423) at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:214) at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:166) at org.openqa.selenium.remote.http.JsonHttpResponseCodec.reconstructValue(JsonHttpResponseCodec.java:40) at org.openqa.selenium.remote.http.AbstractHttpResponseCodec.decode(AbstractHttpResponseCodec.java:80) at org.openqa.selenium.remote.http.AbstractHttpResponseCodec.decode(AbstractHttpResponseCodec.java:44) at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:158) at org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:83) at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:545) at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:602) at org.openqa.selenium.remote.RemoteWebDriver.getScreenshotAs(RemoteWebDriver.java:291) at com.accenture.listeners.ExtentReportListener.captureScreenShot(ExtentReportListener.java:81) at com.accenture.StepDef.WhatIsBitcoin.go_to_chrome(WhatIsBitcoin.java:47) at ?.When Go to chrome(./features/WhatIsBitcoin.feature:4) Tests run: 1, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 86.657 sec <<< FAILURE! - in TestSuite feature(com.accenture.TestRunner.TestRunner) Time elapsed: 85.109 sec <<< FAILURE! cucumber.runtime.CucumberException: org.openqa.selenium.TimeoutException: timeout: Timed out receiving message from renderer: 9.996 (Session info: chrome=73.0.3683.86) (Driver info: chromedriver=73.0.3683.68 (47787ec04b6e38e22703e856e101e840b65afe72),platform=Windows NT 10.0.17134 x86_64) (WARNING: The server did not provide any stacktrace information) Command duration or timeout: 0 milliseconds Build info: version: '3.11.0', revision: 'e59cfb3', time: '2018-03-11T20:26:55.152Z' System info: host: 'BDC11-L-FYK3VP2', ip: '192.168.56.1', os.name: 'Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: '1.8.0_191' Driver info: org.openqa.selenium.chrome.ChromeDriver Capabilities {acceptInsecureCerts: false, acceptSslCerts: false, applicationCacheEnabled: false, browserConnectionEnabled: false, browserName: chrome, chrome: {chromedriverVersion: 73.0.3683.68 (47787ec04b6e3..., userDataDir: C:\windows\TEMP\scoped_dir1...}, cssSelectorsEnabled: true, databaseEnabled: false, goog:chromeOptions: {debuggerAddress: localhost:51833}, handlesAlerts: true, hasTouchScreen: false, javascriptEnabled: true, locationContextEnabled: true, mobileEmulationEnabled: false, nativeEvents: true, networkConnectionEnabled: false, pageLoadStrategy: normal, platform: XP, platformName: XP, proxy: Proxy(), rotatable: false, setWindowRect: true, strictFileInteractability: false, takesHeapSnapshot: true, takesScreenshot: true, timeouts: {implicit: 0, pageLoad: 300000, script: 30000}, unexpectedAlertBehaviour: ignore, unhandledPromptBehavior: ignore, version: 73.0.3683.86, webStorageEnabled: true} Session ID: 1b4d8402a8e29651ed2c7a773c11ca37 at com.accenture.TestRunner.TestRunner.feature(TestRunner.java:42) Caused by: org.openqa.selenium.TimeoutException: timeout: Timed out receiving message from renderer: 9.996 (Session info: chrome=73.0.3683.86) (Driver info: chromedriver=73.0.3683.68 (47787ec04b6e38e22703e856e101e840b65afe72),platform=Windows NT 10.0.17134 x86_64) (WARNING: The server did not provide any stacktrace information) Command duration or timeout: 0 milliseconds Build info: version: '3.11.0', revision: 'e59cfb3', time: '2018-03-11T20:26:55.152Z' System info: host: 'BDC11-L-FYK3VP2', ip: '192.168.56.1', os.name: 'Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: '1.8.0_191' Driver info: org.openqa.selenium.chrome.ChromeDriver Capabilities {acceptInsecureCerts: false, acceptSslCerts: false, applicationCacheEnabled: false, browserConnectionEnabled: false, browserName: chrome, chrome: {chromedriverVersion: 73.0.3683.68 (47787ec04b6e3..., userDataDir: C:\windows\TEMP\scoped_dir1...}, cssSelectorsEnabled: true, databaseEnabled: false, goog:chromeOptions: {debuggerAddress: localhost:51833}, handlesAlerts: true, hasTouchScreen: false, javascriptEnabled: true, locationContextEnabled: true, mobileEmulationEnabled: false, nativeEvents: true, networkConnectionEnabled: false, pageLoadStrategy: normal, platform: XP, platformName: XP, proxy: Proxy(), rotatable: false, setWindowRect: true, strictFileInteractability: false, takesHeapSnapshot: true, takesScreenshot: true, timeouts: {implicit: 0, pageLoad: 300000, script: 30000}, unexpectedAlertBehaviour: ignore, unhandledPromptBehavior: ignore, version: 73.0.3683.86, webStorageEnabled: true} Session ID: 1b4d8402a8e29651ed2c7a773c11ca37 Results : Failed tests: TestRunner.feature:42 » Cucumber org.openqa.selenium.TimeoutException: timeout... Tests run: 1, Failures: 1, Errors: 0, Skipped: 0 [INFO] ------------------------------------------------------------------------ [INFO] BUILD FAILURE [INFO] ------------------------------------------------------------------------ [INFO] Total time: 01:33 min [INFO] Finished at: 2019-03-26T23:16:45+05:30 [INFO] ------------------------------------------------------------------------ [ERROR] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.19.1:test (default-test) on project extent-reporting: There are test failures. [ERROR] [ERROR] Please refer to C:\Program Files (x86)\Jenkins\workspace\CucumberBDDFramework\target\surefire-reports for the individual test results. [ERROR] -> [Help 1] [ERROR] [ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch. [ERROR] Re-run Maven using the -X switch to enable full debug logging. [ERROR] [ERROR] For more information about the errors and possible solutions, please read the following articles: [ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException Build step 'Execute Windows batch command' marked build as failure Finished: FAILURE
似乎您在 Windows操作系统* 上使用 chromedriver = 73.0.3683.68 和 chrome = 73.0.3683.86 *
John Chen(chromedriver的所有者)最近确认:
当Windows上的服务(例如Jenkins或Task Scheduler)启动Chrome 73.0.3686.75时,我们已确认拍摄屏幕截图存在问题。有关更多详细信息,请参见https://crbug.com/942023。不便之处,敬请原谅。 但是,我们尚未能够在Linux上观察到类似的问题,因此,我们感谢您提供的任何帮助,以使我们能够在Linux上重现该问题。我们没有使用TeamCity的权限,但是我们已经测试了使用Selenium(selenium / standalone-chrome:3.141.59-lithium)制作的Docker图像进行屏幕截图,并且没有发现任何问题。
当Windows上的服务(例如Jenkins或Task Scheduler)启动Chrome 73.0.3686.75时,我们已确认拍摄屏幕截图存在问题。有关更多详细信息,请参见https://crbug.com/942023。不便之处,敬请原谅。
但是,我们尚未能够在Linux上观察到类似的问题,因此,我们感谢您提供的任何帮助,以使我们能够在Linux上重现该问题。我们没有使用TeamCity的权限,但是我们已经测试了使用Selenium(selenium / standalone-chrome:3.141.59-lithium)制作的Docker图像进行屏幕截图,并且没有发现任何问题。
我们能够挖掘出主要问题。主要问题不是 ChromeDriver v73.x 本身,而是 Chrome v73.x ,John正式确认为:
根本原因确实是在Chrome 73.x中,而不是在ChromeDriver中。我们正在与Chrome开发人员一起寻找解决方案。
解决方案是:
注意:如果您使用的是Chrome版本72,请下载ChromeDriver 2.46或ChromeDriver 72.0.3626.69
--disable-features=VizDisplayCompositor通过ChromeOptions()似乎的实例添加参数可以解决此问题:
--disable-features=VizDisplayCompositor
ChromeOptions()
ChromeOptions options = new ChromeOptions(); options.addArguments("--disable-features=VizDisplayCompositor"); WebDriver driver = new ChromeDriver(options); driver.get("https://google.com");