Подтвердить что ты не робот

Захват журналов браузера с помощью Selenium WebDriver с использованием Java

Есть ли способ захвата журналов браузера при выполнении автоматических тестовых случаев с Selenium? Я нашел статью о том, как фиксировать ошибки JavaScript в Selenium. Но это только для Firefox и только для ошибок. Я хотел бы получить все журналы консоли.

4b9b3361

Ответ 1

Я предполагаю, что это что-то в строках:

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.logging.LogEntries;
import org.openqa.selenium.logging.LogEntry;
import org.openqa.selenium.logging.LogType;
import org.openqa.selenium.logging.LoggingPreferences;
import org.openqa.selenium.remote.CapabilityType;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;

public class ChromeConsoleLogging {
    private WebDriver driver;


    @BeforeMethod
    public void setUp() {
        System.setProperty("webdriver.chrome.driver", "c:\\path\\to\\chromedriver.exe");        
        DesiredCapabilities caps = DesiredCapabilities.chrome();
        LoggingPreferences logPrefs = new LoggingPreferences();
        logPrefs.enable(LogType.BROWSER, Level.ALL);
        caps.setCapability(CapabilityType.LOGGING_PREFS, logPrefs);
        driver = new ChromeDriver(caps);
    }

    @AfterMethod
    public void tearDown() {
        driver.quit();
    }

    public void analyzeLog() {
        LogEntries logEntries = driver.manage().logs().get(LogType.BROWSER);
        for (LogEntry entry : logEntries) {
            System.out.println(new Date(entry.getTimestamp()) + " " + entry.getLevel() + " " + entry.getMessage());
            //do something useful with the data
        }
    }

    @Test
    public void testMethod() {
        driver.get("http://mypage.com");
        //do something on page
        analyzeLog();
    }
}

Источник: Получить журнал консоли Chrome

Ответ 2

Более кратко вы можете сделать:

LogEntries logs = driver.manage().logs().get("browser");

Для меня это чудесно сработало для отлова ошибок JS в консоли. Затем вы можете добавить некоторые проверки его размера. Например, если оно> 0, добавьте вывод ошибок.

Ответ 3

Как пользователь, не являющийся Java-селеном, вот эквивалент Python для ответа Margus:

from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities    

class ChromeConsoleLogging(object):

    def __init__(self, ):
        self.driver = None

    def setUp(self, ):
        desired = DesiredCapabilities.CHROME
        desired ['loggingPrefs'] = { 'browser':'ALL' }
        self.driver = webdriver.Chrome(desired_capabilities=desired)

    def analyzeLog(self, )
        data = self.driver.get_log('browser')
        print(data)

    def testMethod(self, ):
        self.setUp()
        self.driver.get("http://mypage.com")
        self.analyzeLog()

Ссылка

Изменение: Сохранение ответа Python в этой теме, потому что он очень похож на ответ Java, и этот пост возвращается в поиске Google для аналогичного вопроса Python

Ответ 4

Менее элегантное решение берет журнал "вручную" из каталога данных пользователя:

  • Установите каталог данных пользователя в фиксированное место:

    options = new ChromeOptions();
    capabilities = DesiredCapabilities.chrome();
    options.addArguments("user-data-dir=/your_path/");
    capabilities.setCapability(ChromeOptions.CAPABILITY, options);
    
  • Получить текст из файла журнала chrome_debug.log, расположенного в указанном выше пути.

Я использую этот метод, так как RemoteWebDriver имел проблемы с удаленным журналом консоли. Если вы запускаете свой тест локально, что легко получить.

Ответ 5

Начиная с Firefox 65, теперь существует флаг about:config поэтому вызовы API консоли, такие как console.log() в выходной поток и, следовательно, в файл журнала (см. (Https://github.com/mozilla/geckodriver/issues/284#). IssueComment-458305621).

profile = new FirefoxProfile();
profile.setPreference("devtools.console.stdout.content", true);