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

Фотография

Почему в stderr пишется информация, не являющаяся ошибками в webdriver


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

#1 fahin

fahin

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

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

Отправлено 23 октября 2019 - 15:49

Здравствуйте

код

try {
            WebElement answerField = driver.findElement(By.cssSelector("#нет такого"));
        } catch (NoSuchElementException e) {
            System.err.println("===============================================");
            e.printStackTrace();
            System.err.println("===============================================");

        }

 выдает такой stacktrace, обрамленный рамкой

===============================================
org.openqa.selenium.NoSuchElementException: no such element: Unable to locate element: {"method":"css selector","selector":"#нет такого"}
  (Session info: chrome=77.0.3865.90)
  (Driver info: OperaDriver=76.0.3809.132 (fd1acc410994a7a68ac25bc77513d443f3130860-refs/branch-heads/3809@{#1035}),platform=) (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 0 milliseconds
For documentation on this error, please visit: https://www.seleniumhq.org/exceptions/no_such_element.html
Build info: version: '3.141.59', revision: 'e82be7d358', time: '2018-11-14T08:25:48'
System info: host: '', ip: '', os.name: '', os.arch: '', os.version: '', java.version: ''
Driver info: org.openqa.selenium.opera.OperaDriver
Capabilities {acceptInsecureCerts: false, acceptSslCerts: false, applicationCacheEnabled: false, browserConnectionEnabled: false, browserName: chrome, chrome: {chromedriverVersion: 76.0.3809.132 (fd1acc410994..., userDataDir: ...}, cssSelectorsEnabled: true, databaseEnabled: false, goog:chromeOptions: {debuggerAddress: localhost:}, handlesAlerts: true, hasTouchScreen: false, javascriptEnabled: true, locationContextEnabled: true, mobileEmulationEnabled: false, nativeEvents: true, networkConnectionEnabled: false, pageLoadStrategy: normal, platform: , platformName: , proxy: Proxy(), rotatable: false, setWindowRect: true, strictFileInteractability: false, takesHeapSnapshot: true, takesScreenshot: true, timeouts: {implicit: 0, pageLoad: 300000, script: 30000}, unexpectedAlertBehaviour: ignore, unhandledPromptBehavior: ignore, version: 77.0.3865.90, webStorageEnabled: true}
Session ID: 6beb05f734bывфвыавфваыв
*** Element info: {Using=css selector, value=#нет такого}
	at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
	at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:500)
	at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:481)
	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:552)
	at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:323)
	at org.openqa.selenium.remote.RemoteWebDriver.findElementByCssSelector(RemoteWebDriver.java:420)
	at org.openqa.selenium.By$ByCssSelector.findElement(By.java:431)
	at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:315)
	at Lol.test(Lol.java:82)
	at Lol.main(Lol.java:24)
===============================================

откуда в stacktrace'e информация, которая stacktrace'ом не является, а именно:

(Session info: chrome=77.0.3865.90)
  (Driver info: OperaDriver=76.0.3809.132 (fd1acc410994a7a68ac25bc77513d443f3130860-refs/branch-heads/3809@{#1035}),platform=) (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 0 milliseconds
For documentation on this error, please visit: https://www.seleniumhq.org/exceptions/no_such_element.html
Build info: version: '3.141.59', revision: 'e82be7d358', time: '2018-11-14T08:25:48'
System info: host: '', ip: '', os.name: '', os.arch: '', os.version: '', java.version: ''
Driver info: org.openqa.selenium.opera.OperaDriver
Capabilities {acceptInsecureCerts: false, acceptSslCerts: false, applicationCacheEnabled: false, browserConnectionEnabled: false, browserName: chrome, chrome: {chromedriverVersion: 76.0.3809.132 (fd1acc410994..., userDataDir: ...}, cssSelectorsEnabled: true, databaseEnabled: false, goog:chromeOptions: {debuggerAddress: localhost:}, handlesAlerts: true, hasTouchScreen: false, javascriptEnabled: true, locationContextEnabled: true, mobileEmulationEnabled: false, nativeEvents: true, networkConnectionEnabled: false, pageLoadStrategy: normal, platform: , platformName: , proxy: Proxy(), rotatable: false, setWindowRect: true, strictFileInteractability: false, takesHeapSnapshot: true, takesScreenshot: true, timeouts: {implicit: 0, pageLoad: 300000, script: 30000}, unexpectedAlertBehaviour: ignore, unhandledPromptBehavior: ignore, version: 77.0.3865.90, webStorageEnabled: true}
Session ID: 6beb05f734bывфвыавфваыв
*** Element info: {Using=css selector, value=#нет такого}

?

 

также, перед stacktrace'ом в консоли IDE выводится информация красным цветом(что предполагает какие то ошибки)

Starting OperaDriver 76.0.3809.132 (fd1acc410994a7a68ac25bc77513d443f3130860-refs/branch-heads/3809@{#1035}) on port 43894
Only local connections are allowed.
Please protect ports used by ChromeDriver and related test frameworks to prevent access by malicious code.
[1571845821.275][WARNING]: This version of OperaDriver has not been tested with Chrome version 77.
Oct 23, 2019 6:50:23 PM org.openqa.selenium.remote.ProtocolHandshake createSession
INFO: Detected dialect: OSS

но это тоже не ошибки

 

почему ее нельзя выводить в stdout?

 

 

p.s. не важную информацию из "stacktrace'a" убрал на всякий случай


  • 0

#2 BabyRoot

BabyRoot

    Специалист

  • Members
  • PipPipPipPipPip
  • 833 сообщений


Отправлено 23 октября 2019 - 17:19

Так работает метод printStackTrace() у объекта NoSuchElementException.

Если вам нужен только стектрейс, то берите его - e.getStackTrace() и делайте с ним что хотите.


  • 0

#3 Little_CJIOH

Little_CJIOH

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 515 сообщений
  • ФИО:Власкин Павел
  • Город:Санкт-Петербург


Отправлено 23 октября 2019 - 17:32

Отладка программы - это процесс осознания программистом того, что компьютер делает именно то, что его попросили.

Если вы уйдете в код метода printStackTrace то обнаружите там строчку кода "s.println(this);" где this - ваш webdriver
  • 0

#4 fahin

fahin

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

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

Отправлено 23 октября 2019 - 20:12

Так работает метод printStackTrace() у объекта NoSuchElementException.

Если вам нужен только стектрейс, то берите его - e.getStackTrace() и делайте с ним что хотите.

в приведенном примере, я сам вызываю метод printStackTrace()

но что делать с исключениями, которые появляются в коде естественно, без моего намеренного их создания?

 

может есть какое нибудь property или capability, чтобы можно быть снизить количество выводимых псевдо ошибок?


  • 0

#5 fahin

fahin

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

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

Отправлено 23 октября 2019 - 20:13

Отладка программы - это процесс осознания программистом того, что компьютер делает именно то, что его попросили.

Если вы уйдете в код метода printStackTrace то обнаружите там строчку кода "s.println(this);" где this - ваш webdriver

можно переформулировать вопрос: почему webdriver печатается именно с этими строками, не имеющими отношения к стектрейсу?


  • 0

#6 Little_CJIOH

Little_CJIOH

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 515 сообщений
  • ФИО:Власкин Павел
  • Город:Санкт-Петербург


Отправлено 24 октября 2019 - 06:41

Отладка программы - это процесс осознания программистом того, что компьютер делает именно то, что его попросили.

Если вы уйдете в код метода printStackTrace то обнаружите там строчку кода "s.println(this);" где this - ваш webdriver

можно переформулировать вопрос: почему webdriver печатается именно с этими строками, не имеющими отношения к стектрейсу?

Потому, что именно эти строки выдает метод toString() вебдрайвера, который вызывается функцией println(Object)

Хотя, скорее прав BabyRoot и this будет не вебдрайвер, а NoSuchElementException. Но сути моего ответа это не меняет.
  • 0

#7 Little_CJIOH

Little_CJIOH

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 515 сообщений
  • ФИО:Власкин Павел
  • Город:Санкт-Петербург


Отправлено 24 октября 2019 - 06:53

Так работает метод printStackTrace() у объекта NoSuchElementException.
Если вам нужен только стектрейс, то берите его - e.getStackTrace() и делайте с ним что хотите.

в приведенном примере, я сам вызываю метод printStackTrace()

но что делать с исключениями, которые появляются в коде естественно, без моего намеренного их создания?
 
может есть какое нибудь property или capability, чтобы можно быть снизить количество выводимых псевдо ошибок?

Я вас расстрою Эксцепшен в вашем коде случается не оттого что вы вызвали printStackTrace. А оттого, что не найден объект.
А зачем вы хотите что-то делать с исключениями?
  • 0

#8 BadMF

BadMF

    Специалист

  • Members
  • PipPipPipPipPip
  • 809 сообщений
  • ФИО:Dmitry Petrov

Отправлено 24 октября 2019 - 11:50

 

Так работает метод printStackTrace() у объекта NoSuchElementException.

Если вам нужен только стектрейс, то берите его - e.getStackTrace() и делайте с ним что хотите.

в приведенном примере, я сам вызываю метод printStackTrace()

но что делать с исключениями, которые появляются в коде естественно, без моего намеренного их создания?

 

может есть какое нибудь property или capability, чтобы можно быть снизить количество выводимых псевдо ошибок?

 

 

вот оно, отсутствие базы по ЯП и core функциональности ЯП =)

 

то что вы оборачиваете в try catch и пытаетесь обработать исключение совершенно не значит, что если вы этого не сделаете программа как будто ничего не было проигнорирует исключение. она свалится с точно таким же исключением.

 

трайкетч, позволяет обходить/делать какие-то действия/"выключать ядерный реактор в случае отсутствия охладителя в системе" и подобные вещи.

 

все исключения выводятся в стектрейс потому что так работает ЯП, наличие исключений в стектрэйсе, говорит об ошибке либо о неучтённой вами ситуации (архитектурной проблеме)

для того чтобы читать только то что вам хочется не нужно работать со стектрэйсом, а нужно освоить библиотеку логирования вашего ЯП

 

 

Обновление:

вообще я тут не совсемправ в том что написал, но дляпонимания так проще.

полный стектрэйс любого ЯП очень избыточен, туда пишется вообще всё


  • 0

#9 user12

user12

    Специалист

  • Members
  • PipPipPipPipPip
  • 894 сообщений
  • ФИО:Виктор
  • Город:Минск


Отправлено 24 октября 2019 - 14:21

Чем больше инфы в стектрейсе, тем лучше. Нужно понимать, что и как кого вызывало.
Надеюсь вы сами поняли, что вам надо изучать что такое try,catch, finally , throw , throws. Классы Errors, RuntimeException, IOException. Разница между checked/unchecked и т.п.
NoSuchElementException - это checked или unchecked  ? 

  • 0


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

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