Есть ли способ захвата журналов браузера при выполнении автоматических тестовых случаев с Selenium? Я нашел статью о том, как фиксировать ошибки JavaScript в Selenium. Но это только для Firefox и только для ошибок. Я хотел бы получить все журналы консоли.
Захват журналов браузера с помощью Selenium WebDriver с использованием Java
Ответ 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);