Перейти к содержимому

Фотография

Аномалия с скриншотами

java webdriver screenshot

  • Авторизуйтесь для ответа в теме
Сообщений в теме: 8

#1 elvis

elvis

    Постоянный участник

  • Members
  • PipPipPip
  • 189 сообщений
  • Город:Tallinn


Отправлено 10 апреля 2014 - 10:22

С сегодняшнего дня не могу с падающих тестов снимать скриншоты используя FireFoxDriver и ChromeDriver. Запускаю так:

mvn clean test

При этом PhantomJSDriver делает скриншоты без проблем. Может я чего-то случайно где-то поменял, но не пойму в чём может быть причина.. Ошибка 

org.apache.maven.surefire.util.SurefireReflectionException: java.lang.reflect.InvocationTargetException; nested exception is java.lang.reflect.InvocationTargetException: null
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:164)
at org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:110)
at org.apache.maven.surefire.booter.SurefireStarter.invokeProvider(SurefireStarter.java:175)
at org.apache.maven.surefire.booter.SurefireStarter.runSuitesInProcessWhenForked(SurefireStarter.java:107)
at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:68)
Caused by: java.lang.ClassCastException: org.openqa.selenium.firefox.FirefoxDriver cannot be cast to org.openqa.selenium.TakesScreenshot
at pageobjects.TestListener.onTestFailure(TestListener.java:29)
at org.testng.internal.Invoker.runTestListeners(Invoker.java:1895)
at org.testng.internal.Invoker.runTestListeners(Invoker.java:1879)
at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1292)
at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
at org.testng.TestRunner.privateRun(TestRunner.java:767)
at org.testng.TestRunner.run(TestRunner.java:617)
at org.testng.SuiteRunner.runTest(SuiteRunner.java:348)
at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:343)
at org.testng.SuiteRunner.privateRun(SuiteRunner.java:305)
at org.testng.SuiteRunner.run(SuiteRunner.java:254)
at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
at org.testng.TestNG.runSuitesSequentially(TestNG.java:1224)
at org.testng.TestNG.runSuitesLocally(TestNG.java:1149)
at org.testng.TestNG.run(TestNG.java:1057)
at org.apache.maven.surefire.testng.TestNGExecutor.run(TestNGExecutor.java:70)
at org.apache.maven.surefire.testng.TestNGDirectoryTestSuite.execute(TestNGDirectoryTestSuite.java:109)
at org.apache.maven.surefire.testng.TestNGProvider.invoke(TestNGProvider.java:111)
... 9 more
 

аналогично с FirefoxDriver

 

Вот метод в моём TestListener.java

@Override
public void onTestFailure(ITestResult tr) {
log(tr.getName()+ "--Test case FAILED\n");
Object currentClass = tr.getInstance();
WebDriver driver = ((WebDriverManager) currentClass).getDriverInstance();
scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
DateFormat dateFormat = new SimpleDateFormat("dd_MMM_yyyy__hh_mm_ssaa");
destDir = "target/surefire-reports/screenshots";
new File(destDir).mkdirs();
destFile = dateFormat.format(new Date()) + "_" + tr.getName() +".png";

  try {
FileUtils.copyFile(scrFile, new File(destDir + "/" + destFile));
} catch (IOException e) {
e.printStackTrace();
}
Reporter.setEscapeHtml(false);
Reporter.log("Saved <a href=../screenshots/" + destFile + ">Screenshot</a>");
}

Вроде бы раньше всё работало вне зависимости от драйвера.


  • 0

#2 barancev

barancev

    Администратор

  • Admin
  • PipPipPipPipPipPip
  • 6 871 сообщений
  • ФИО:Алексей Баранцев
  • Город:Россия, Москва


Отправлено 10 апреля 2014 - 10:29

Выполните команду

mvn dependency:tree

и выложите сюда результат.


  • 0
Алексей Баранцев
Тренинги для тестировщиков (тестирование производительности, защищенности, тест-дизайн, автоматизация):
Линейка тренингов по Selenium

#3 elvis

elvis

    Постоянный участник

  • Members
  • PipPipPip
  • 189 сообщений
  • Город:Tallinn


Отправлено 10 апреля 2014 - 10:34

В дополнение к этому симптомы - в консоли сообщение о упавшем тесте отображается дважды 

addCommissionAgendaItem--Test case FAILED
addCommissionAgendaItem--Test case FAILED 

и окно браузеры после падения теста не закрывается хотя у меня в @AfterSuite прописано

driver.close(); 
driver.quit();

Здесь результат mvn dependency:tree

INFO] test:rkk:jar:1.0
[INFO] +- log4j:log4j:jar:1.2.17:compile
[INFO] +- org.apache.logging.log4j:log4j-api:jar:2.0-rc1:compile
[INFO] +- org.apache.logging.log4j:log4j-core:jar:2.0-rc1:compile
[INFO] +- com.jayway.restassured:rest-assured:jar:1.9.0:test
[INFO] |  +- org.hamcrest:hamcrest-core:jar:1.3:test
[INFO] |  +- org.hamcrest:hamcrest-library:jar:1.3:test
[INFO] |  \- org.ccil.cowan.tagsoup:tagsoup:jar:1.2.1:test
[INFO] +- com.jayway.restassured:json-path:jar:1.9.0:compile
[INFO] |  +- org.codehaus.groovy:groovy-json:jar:2.2.0:compile
[INFO] |  +- com.fasterxml.jackson.core:jackson-databind:jar:2.0.5:compile
[INFO] |  |  +- com.fasterxml.jackson.core:jackson-annotations:jar:2.0.5:compile
[INFO] |  |  \- com.fasterxml.jackson.core:jackson-core:jar:2.0.5:compile
[INFO] |  +- org.codehaus.jackson:jackson-core-asl:jar:1.8.5:compile
[INFO] |  +- org.codehaus.jackson:jackson-mapper-asl:jar:1.8.5:compile
[INFO] |  +- com.google.code.gson:gson:jar:1.7.2:compile
[INFO] |  +- com.googlecode.json-simple:json-simple:jar:1.1:compile
[INFO] |  +- org.codehaus.groovy:groovy:jar:2.2.0:compile
[INFO] |  |  +- org.ow2.asm:asm-tree:jar:4.1:compile
[INFO] |  |  +- antlr:antlr:jar:2.7.7:compile
[INFO] |  |  +- org.ow2.asm:asm-util:jar:4.1:compile
[INFO] |  |  +- org.ow2.asm:asm-commons:jar:4.1:compile
[INFO] |  |  +- org.ow2.asm:asm:jar:4.1:compile
[INFO] |  |  \- org.ow2.asm:asm-analysis:jar:4.1:compile
[INFO] |  \- com.jayway.restassured:rest-assured-common:jar:1.9.0:compile
[INFO] +- com.jayway.restassured:xml-path:jar:1.9.0:compile
[INFO] |  +- org.codehaus.groovy:groovy-xml:jar:2.2.0:compile
[INFO] |  \- org.apache.commons:commons-lang3:jar:3.1:compile
[INFO] +- org.testng:testng:jar:6.8.8:compile
[INFO] |  +- org.beanshell:bsh:jar:2.0b4:compile
[INFO] |  \- com.beust:jcommander:jar:1.27:compile
[INFO] +- org.seleniumhq.selenium:selenium-java:jar:2.41.0:compile
[INFO] |  +- org.seleniumhq.selenium:selenium-chrome-driver:jar:2.41.0:compile
[INFO] |  +- org.seleniumhq.selenium:selenium-htmlunit-driver:jar:2.41.0:compile
[INFO] |  |  +- net.sourceforge.htmlunit:htmlunit:jar:2.13:compile
[INFO] |  |  |  +- xalan:xalan:jar:2.7.1:compile
[INFO] |  |  |  |  \- xalan:serializer:jar:2.7.1:compile
[INFO] |  |  |  +- commons-collections:commons-collections:jar:3.2.1:compile
[INFO] |  |  |  +- org.apache.httpcomponents:httpmime:jar:4.2.6:compile
[INFO] |  |  |  +- net.sourceforge.htmlunit:htmlunit-core-js:jar:2.13:compile
[INFO] |  |  |  +- xerces:xercesImpl:jar:2.11.0:compile
[INFO] |  |  |  |  \- xml-apis:xml-apis:jar:1.4.01:compile
[INFO] |  |  |  +- net.sourceforge.nekohtml:nekohtml:jar:1.9.19:compile
[INFO] |  |  |  +- net.sourceforge.cssparser:cssparser:jar:0.9.11:compile
[INFO] |  |  |  |  \- org.w3c.css:sac:jar:1.3:compile
[INFO] |  |  |  +- commons-logging:commons-logging:jar:1.1.3:compile
[INFO] |  |  |  \- org.eclipse.jetty:jetty-websocket:jar:8.1.12.v20130726:compile
[INFO] |  |  |     +- org.eclipse.jetty:jetty-util:jar:8.1.12.v20130726:compile
[INFO] |  |  |     +- org.eclipse.jetty:jetty-io:jar:8.1.12.v20130726:compile
[INFO] |  |  |     \- org.eclipse.jetty:jetty-http:jar:8.1.12.v20130726:compile
[INFO] |  |  \- org.apache.httpcomponents:httpclient:jar:4.3.1:compile
[INFO] |  |     \- org.apache.httpcomponents:httpcore:jar:4.3:compile
[INFO] |  +- org.seleniumhq.selenium:selenium-firefox-driver:jar:2.41.0:compile
[INFO] |  |  +- commons-io:commons-io:jar:2.2:compile
[INFO] |  |  \- org.apache.commons:commons-exec:jar:1.1:compile
[INFO] |  +- org.seleniumhq.selenium:selenium-ie-driver:jar:2.41.0:compile
[INFO] |  |  +- net.java.dev.jna:jna:jar:3.4.0:compile
[INFO] |  |  \- net.java.dev.jna:platform:jar:3.4.0:compile
[INFO] |  +- org.seleniumhq.selenium:selenium-safari-driver:jar:2.41.0:compile
[INFO] |  +- org.seleniumhq.selenium:selenium-support:jar:2.41.0:compile
[INFO] |  |  \- org.seleniumhq.selenium:selenium-api:jar:2.41.0:compile
[INFO] |  \- org.webbitserver:webbit:jar:0.4.14:compile
[INFO] |     \- io.netty:netty:jar:3.5.2.Final:compile
[INFO] +- org.seleniumhq.selenium:selenium-server:jar:2.41.0:compile
[INFO] |  +- org.bouncycastle:bcprov-jdk15on:jar:1.48:compile
[INFO] |  +- org.bouncycastle:bcpkix-jdk15on:jar:1.48:compile
[INFO] |  +- mx4j:mx4j-tools:jar:3.0.1:compile
[INFO] |  +- org.mortbay.jetty:servlet-api-2.5:jar:6.1.9:compile
[INFO] |  +- org.seleniumhq.selenium:jetty-repacked:jar:7.6.1:compile
[INFO] |  +- net.jcip:jcip-annotations:jar:1.0:compile
[INFO] |  +- org.yaml:snakeyaml:jar:1.8:compile
[INFO] |  \- commons-codec:commons-codec:jar:1.8:compile
[INFO] \- com.github.detro.ghostdriver:phantomjsdriver:jar:1.1.0:compile
[INFO]    \- org.seleniumhq.selenium:selenium-remote-driver:jar:2.39.0:compile
[INFO]       +- cglib:cglib-nodep:jar:2.1_3:compile
[INFO]       +- org.json:json:jar:20080701:compile
[INFO]       \- com.google.guava:guava:jar:15.0:compile

  • 0

#4 elvis

elvis

    Постоянный участник

  • Members
  • PipPipPip
  • 189 сообщений
  • Город:Tallinn


Отправлено 10 апреля 2014 - 11:37

Как оказалось - это проблема селениума 2.40-2.41. Опустил версию до 2.39 и всё заработало как надо.


  • 0

#5 barancev

barancev

    Администратор

  • Admin
  • PipPipPipPipPipPip
  • 6 871 сообщений
  • ФИО:Алексей Баранцев
  • Город:Россия, Москва


Отправлено 15 апреля 2014 - 09:45

Нет, проблема не в том, что "новая версия плохая", а в том, что phantomjsdriver тащит за собой старую версию (2.39), в результате чего возникает конфликт версий.

Надо просто исключить эти "паразитные" зависимости:
 

    <dependency>
      <groupId>com.github.detro.ghostdriver</groupId>
      <artifactId>phantomjsdriver</artifactId>
      <version>1.1.0</version>
      <exclusions>
        <exclusion>
          <groupId>org.seleniumhq.selenium</groupId>
          <artifactId>selenium-remote-driver</artifactId>
        </exclusion>
        <exclusion>
          <groupId>org.seleniumhq.selenium</groupId>
          <artifactId>selenium-server</artifactId>
        </exclusion>
      </exclusions>
    </dependency>

  • 0
Алексей Баранцев
Тренинги для тестировщиков (тестирование производительности, защищенности, тест-дизайн, автоматизация):
Линейка тренингов по Selenium

#6 elvis

elvis

    Постоянный участник

  • Members
  • PipPipPip
  • 189 сообщений
  • Город:Tallinn


Отправлено 15 апреля 2014 - 09:48

 

Нет, проблема не в том, что "новая версия плохая", а в том, что phantomjsdriver тащит за собой старую версию (2.39), в результате чего возникает конфликт версий.

Надо просто исключить эти "паразитные" зависимости:
 

    <dependency>
      <groupId>com.github.detro.ghostdriver</groupId>
      <artifactId>phantomjsdriver</artifactId>
      <version>1.1.0</version>
      <exclusions>
        <exclusion>
          <groupId>org.seleniumhq.selenium</groupId>
          <artifactId>selenium-remote-driver</artifactId>
        </exclusion>
        <exclusion>
          <groupId>org.seleniumhq.selenium</groupId>
          <artifactId>selenium-server</artifactId>
        </exclusion>
      </exclusions>
    </dependency>

 

Как раз наоборот 2.39 работает, а новые нет


  • 0

#7 elvis

elvis

    Постоянный участник

  • Members
  • PipPipPip
  • 189 сообщений
  • Город:Tallinn


Отправлено 15 апреля 2014 - 19:37

Интересно... работает.


  • 0

#8 PunkLiner

PunkLiner

    Новый участник

  • Members
  • Pip
  • 73 сообщений


Отправлено 23 сентября 2014 - 12:58

Код скриншотера в точности как у ТС. Но у меня вместо скрина просто белый лист, и окно браузера повторно открывается, после падения теста, и автоматически не закрывается, хотя в @AfterSuite - driver.close(); driver.quit(); Исключения в pom.xml добавлены. Selenium 2.40.0, FirefoxDriver. Mozila - 31.1.0

P.S. У меня подозрение что он снимает скриншот повторно запущенного окна браузера, с кипельно белой страницей, а не с ошибкой в приложении

P.P.S. И обязательны ли в этом случае, при инициализации драйвера, следующие строчки:

DesiredCapabilities capabilities = DesiredCapabilities.firefox();
capabilities.setCapability(CapabilityType.TAKES_SCREENSHOT, true);

  • 0

#9 PunkLiner

PunkLiner

    Новый участник

  • Members
  • Pip
  • 73 сообщений


Отправлено 23 сентября 2014 - 19:08

Вопрос решен


  • 0



Темы с аналогичным тегами java, webdriver, screenshot

Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных