t.me/atinfo_chat Telegram группа по автоматизации тестирования

Selenide. не могу вывести лог из консоли браузера с ошибками

exceptions
logging
java
chrome
selenide
Теги: #<Tag:0x00007f9e38df12a8> #<Tag:0x00007f9e38df1078> #<Tag:0x00007f9e38df0ec0> #<Tag:0x00007f9e38df0d58> #<Tag:0x00007f9e38df0c18>

(миша Тетенов) #1

На сайте селенида не смог найти информации о логгировании и сохранении в файл ошибок из консоли хрома. На AT беглый поиск тоже не дал результатов. Помогите, ткните в туториал или подскажите куда какие строки нужно добавить. спасибо заранее.


(Vasiliy Rakshin) #2


В хроме, вроде как работает, но не полностью.


(миша Тетенов) #3

LogEntries logEntries = driver.manage().logs().get(LogType.BROWSER);
добавлять в @Before?
куда будут выводиться логи?в консоль ide?


(Vasiliy Rakshin) #4

Логи будут выводиться в logEntries.


(миша Тетенов) #5

Спасибо огромное! Только появилась новая проблема - на каждый метод открывается по новому окну браузера селениумом. И логи выводятся только от окон, открытых селениумом, а не селенидом


(Vasiliy Rakshin) #6

Доступ к драйверу в селениде - WebDriverRunner.getWebDriver().manage() - вот замените на это driver.manage()


(миша Тетенов) #7

я правильно понимаю, что LogEntries logEntries = WebDriverRunner.getWebDriver().manage().logs().get(LogType.BROWSER); начинает писать логи и складывать их в logEntries. В конце отчета, например методом @After я выведу их System.out.println(logEntries);? Непонято где должен находиться `LogEntries logEntries = WebDriverRunner.getWebDriver().manage().logs().get(LogType.BROWSER);. в @Before или в первом методе или в начале класса?


(Vasiliy Rakshin) #8

Понимаете правильно.
Поставить это дело после открытия браузера.


(миша Тетенов) #9

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


(миша Тетенов) #10

на данный момент тест выглядит так

import com.codeborne.selenide.Condition;
import com.codeborne.selenide.Configuration;
import com.codeborne.selenide.WebDriverRunner;
import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.logging.LogEntries;
import org.openqa.selenium.logging.LogType;

import static com.codeborne.selenide.Selenide.*;

public class Test1 {

    @Test
    public void additional(){

        open("какой-то сайт"); 
        LogEntries logEntries = WebDriverRunner.getWebDriver().manage().logs().get(LogType.BROWSER);
        Configuration.holdBrowserOpen = true;
        Configuration.timeout=10000;
        $(By.name("Password")).val("Qwerty1");
        $(By.name("button")).click();
        $(By.cssSelector(".sidebar__controls__item > .tab-link")).click(); 
        $(By.cssSelector("#navigator > div > div.navigator__main > div.navigator__main__content > div > div > button:nth-child(1)")).doubleClick(); 
        $(By.xpath("//span[contains(.,'katalon t1')]")).doubleClick(); 
        $(By.className("ui-add__trigger")).click(); 
        $(By.linkText("Справочник")).click(); 
        $(By.className("center-block__button")).shouldBe(Condition.enabled).click(); 
        $(By.cssSelector(".btn-primary")).click(); 
        //sleep(1000);
        $(By.cssSelector(".ui-iconbutton:nth-child(13)")).shouldBe(Condition.enabled).click();
        $(By.xpath("//td[2]/div")).doubleClick(); 
        $(By.cssSelector("#editorForm > .ng-untouched")).shouldBe(Condition.visible).val("перекресток");
        $(By.cssSelector(".-save")).click(); 
        sleep(500);
        $(By.cssSelector(".-save")).click();
        System.out.println(logEntries);
    }
}

(Vasiliy Rakshin) #11

Замените это на это:

        for (LogEntry log:logEntries) {
            System.out.println(log.getTimestamp() + " " + log.getLevel() + " " + log.getMessage());
        }

(миша Тетенов) #12

а в случае, если js ошибок не было что то должно возвращаться?


(Vasiliy Rakshin) #13

Не знаю, у меня SEVERE и INFO выводились, на счет ERROR не знаю, надо смотреть.


(миша Тетенов) #14

Все равно не выводится, но да ладно. Попробую еще сам поразбираться. Но спасибо огромное за подсказки


(миша Тетенов) #16

разобрался. помогло следующее: в начале метода, после открытия страницы

Logs logs = WebDriverRunner.getWebDriver().manage().logs();
        LogEntries logEntries = WebDriverRunner.getWebDriver().manage().logs().get(LogType.BROWSER);

в конце метода

for (LogEntry logEntry : logEntries) {
            System.out.println(logEntry.getMessage());
        }

так же была какая то проблема с slf4j. в консоь падала ошибка
“SLF4J: Failed to load class “org.slf4j.impl.StaticLoggerBinder”.
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.”
добавил в pom.xml

<dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.8.0-beta2</version>
    </dependency>

        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-simple</artifactId>
            <version>1.8.0-beta2</version>
            <scope>test</scope>
        </dependency>