#windows #selenium #google-chrome #jenkins #selenium-chromedriver
#Windows #selenium #google-chrome #дженкинс #selenium-chromedriver
Вопрос:
ОС: Windows 10 Браузер: Версия браузера Chrome: 73.0.3683.86 (официальная сборка) (32-разрядная версия)
Я запускаю проект selenium cucumber BDD, где я проверяю заголовок одной страницы. Я использую версию extent-report4. Проект успешно запущен в локальном режиме. Но когда я запускаю его через Jenkins, он выходит из строя при захвате скриншота и отображении ошибки ниже.
Если я удалю плагин surfire из pom.xml тогда тест не выполняется через Jenkins.
В опции выполнения пакетной команды Windows для Jenkins я дал команду ниже
C:Program Files (x86)JenkinsworkspaceCucumberBDDFramework
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 FilesJavajdk1.8.0_191binjavac.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:windowsTEMPscoped_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:windowsTEMPscoped_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:windowsTEMPscoped_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)JenkinsworkspaceCucumberBDDFrameworktargetsurefire-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
Ответ №1:
Кажется, вы используете chromedriver = 73.0.3683.68 и chrome = 73.0.3683.86 в ОС Windows
Джон Чен (владелец chromedriver) недавно подтвердил, что:
У нас подтверждены проблемы с take screenshot при запуске Chrome 73.0.3686.75 службой (такой как Jenkins или планировщик задач) в Windows. Пожалуйста, смотрите https://crbug.com/942023 для получения дополнительной информации. Приносим извинения за любые неудобства, вызванные этим.
Однако нам пока не удалось обнаружить аналогичную проблему в Linux, поэтому мы ценим любую помощь, которую вы можете предоставить, чтобы позволить нам воспроизвести проблему в Linux. У нас нет доступа к TeamCity, но мы протестировали take screenshot с использованием изображения Docker, созданного Selenium (selenium / standalone-chrome: 3.141.59-lithium), и не обнаружили никаких проблем.
Обновить
Мы смогли устранить основную проблему. Основная проблема связана не с ChromeDriver v73.x как таковой, а с Chrome v73.x, и Джон официально подтверждает это как:
Основная причина действительно в Chrome 73.x, а не в ChromeDriver. Мы работаем с разработчиками Chrome, чтобы найти решение.
Решение
Решением было бы:
- Понизьте рейтинг браузера Chrome до Chrome v72.x
- Используйте соответствующий ChromeDriver среди:
Примечание: Если вы используете Chrome версии 72, пожалуйста, загрузите ChromeDriver 2.46 или ChromeDriver 72.0.3626.69
Завершение
- Обсуждение: Страница.CaptureScreenshot больше не работает в Chrome 73 в Selenium как сервис в Windows
- Ошибка, вызывающая проблему: Установите функцию VizDisplayCompositor включенной на настольных платформах
- Слияние: задержка: удаление снимков из LatencyInfo
- Загрузите автономный установщик Google Chrome 72 для всех операционных систем
Обновление (03 апреля 2019)
Добавление аргумента --disable-features=VizDisplayCompositor
через экземпляр ChromeOptions()
, похоже, решает проблему:
ChromeOptions options = new ChromeOptions();
options.addArguments("--disable-features=VizDisplayCompositor");
WebDriver driver = new ChromeDriver(options);
driver.get("https://google.com");
Комментарии:
1. Спасибо DevanjanB. Похоже, мне нужно понизить версию Chrome, и это должно работать нормально. Надеюсь, Chrome исправит эту проблему как можно скорее.
2. Предлагает ли Google какое-либо место для доступа к старым сборкам Chrome? Все, что я могу найти в Интернете, — это загрузки со сторонних сайтов, и я бы предпочел этого избежать.
3. Нет, нет мест для доступа к старым сборкам Chrome @TylerNielsen.
4. Если вы добавляли
disable-features=VizDisplayCompositor
ранее, вам нужно удалить это в Chrome 79, иначе эта ошибка вернется.5. Это все еще актуально для Chrome 94 (Mac). Но решение, предоставленное здесь в качестве обновления (апрель 2019), похоже, работает нормально.
Ответ №2:
У меня была такая же проблема при запуске той же версии Chrome / Chromedriver при запуске headless из сборки Team City. Это началось после установки последнего обновления на сервере сборки 25 марта 2019 года.
Причина, по которой скриншоты были сделаны в первую очередь, заключалась в том, что тесты также начали давать сбои из-за, как я подозреваю, связанного дефекта, касающегося виртуального рендеринга в безголовом режиме, который снова ограничен, когда экземпляр Chrome запускается через службу (TeamCity).
Все тесты выполняются нормально, когда я запускаю скрипт сборки из командной строки на виртуальной машине сервера сборки.
Я решил проблему, понизив версию chrome. Легче сказать, чем сделать:
-
Я не смог найти официальный способ получить доступ к старым версиям Chrome, но я нашел эту ссылку, по которой размещались некоторые из них. Используйте на свой страх и риск:
https://www.slimjet.com/chrome/google-chrome-old-version.php
-
Я загрузил версию для скачивания
version 71.0.3578.80
-
Удалите Chrome с сервера сборки, запустите этот установщик.
-
Как только в процессе установки будет создан каталог обновлений:
C:Program Files (x86)GoogleUpdate
переименуйте файлGoogleUpdate.exe
, чтобы предотвратить его обновление самостоятельно -
Отключите задачи обновления Google Chrome в планировщике задач
ОБНОВЛЕНИЕ: Ответ здесь предполагает, что проблема может быть устранена с помощью некоторых дополнительных аргументов, переданных chromedriver, я не тестировал это решение:
Ответ №3:
У меня была такая же проблема, и я справился с ней, удалив
chromeOptions.addArguments("--window-size=1920,1080");
или с помощью
chromeOptions.addArguments("--window-size=1920,1080");
chromeOptions.addArguments("--force-device-scale-factor=1");
Ответ №4:
У меня также возникла такая же проблема с chromedriver 81, но я обновился до 83, так что теперь все работает нормально.
пожалуйста, попробуйте это……
Комментарии:
1. мы периодически сталкиваемся с этим в нашем Jenkins с Chrome 83