Получить журнал консоли Chrome
Я хочу построить автоматизированное тестирование, поэтому мне нужно знать ошибки, которые появляются в консоли chrome.
есть возможность получить строки ошибок, которые появляются в консоли?
Чтобы увидеть консоль: щелкните правой кнопкой мыши где-нибудь на странице, нажмите "проверить элемент" и перейдите в "консоль".
6 ответов
Я не знаю C#, но вот код Java, который делает эту работу, я надеюсь, что вы можете перевести его на C#
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();
}
}
Обратите внимание на метод setUp в приведенном выше коде. Мы используем объект LoggingPreferences, чтобы включить ведение журнала. Существует несколько типов журналов, но если вы хотите отслеживать ошибки консоли, вам следует использовать LogType.BROWSER. Затем мы передаем этот объект в DesiredCapabilities, а затем в конструктор ChromeDriver и вуаля - у нас есть экземпляр ChromeDriver с включенным ведением журнала.
После выполнения некоторых действий на странице мы вызываем метод analyLog(). Здесь мы просто извлекаем журнал и перебираем его записи. Здесь вы можете поставить утверждения или делать любые другие отчеты, которые вы хотите.
Мое вдохновение было в этом коде Михаила Клепикова, который объясняет, как извлечь журналы производительности из ChromeDriver.
Вы можете получить журналы таким образом:
Driver().Manage().Logs.GetLog();
Указав интересующий вас журнал, вы можете получить журнал браузера, то есть:
Driver().Manage().Logs.GetLog(LogType.Browser);
Также не забудьте настроить драйвер соответственно:
ChromeOptions options = new ChromeOptions();
options.SetLoggingPreference(LogType.Browser, LogLevel.All);
driver = new ChromeDriver("path to driver", options);
Это код C# для входа в браузер журнала из Chrome.
private void CheckLogs()
{
List<LogEntry> logs = Driver.Manage().Logs.GetLog(LogType.Browser).ToList();
foreach (LogEntry log in logs)
{
Log(log.Message);
}
}
вот мой код для реального журнала:
public void Log(string value, params object[] values)
{
// allow indenting
if (!String.IsNullOrEmpty(value) && value.Length > 0 && value.Substring(0, 1) != "*")
{
value = " " + value;
}
// write the log
Console.WriteLine(String.Format(value, values));
}
В соответствии с вопросом 6832 ведение журнала еще не реализовано для привязок C#. Так что не может быть простого способа заставить это работать сейчас.
Вот решение для получения журналов Chrome с помощью C#, Specflow и Selenium 4.0.0-alpha05. Обратите внимание, что тот же код не работает с Selenium 3.141.0.
[AfterScenario]
public void AfterScenario(ScenarioContext context)
{
if (context.TestError != null)
{
GetChromeLogs(context); //Chrome logs are taken only if test fails
}
Driver.Quit();
}
private void GetChromeLogs()
{
var chromeLogs = Driver.Manage().Logs.GetLog(LogType.Browser).ToList();
}
Привязки C# к журналам консоли Chrome наконец-то доступны в Selenium 4.0.0-alpha05. Selenium 3.141.0 и более ранние версии не поддерживают.
Прежде чем создавать экземпляр нового объекта ChromeDriver, установите предпочтение ведения журнала в объекте ChromeOptions и передайте его в ChromeDriver:
ChromeOptions options = new ChromeOptions();
options.SetLoggingPreference(LogType.Browser, LogLevel.All);
ChromeDriver driver = new ChromeDriver(options);
Затем, чтобы записать журналы консоли Chrome в плоский файл:
public void WriteConsoleErrors()
{
string strPath = "C:\\ConsoleErrors.txt";
if (!File.Exists(strPath))
{
File.Create(strPath).Dispose();
}
using (StreamWriter sw = File.AppendText(strPath))
{
var entries = driver.Manage().Logs.GetLog(LogType.Browser);
foreach (var entry in entries)
{
sw.WriteLine(entry.ToString());
}
}
}
public void Test_DetectMissingFilesToLoadWebpage()
{
try
{
List<LogEntry> logs = driver.Manage().Logs.GetLog(LogType.Browser).ToList();
foreach (LogEntry log in logs)
{
while(logs.Count > 0)
{
String logInfo = log.ToString();
if (log.Message.Contains("Failed to load resource: the server responded with a status of 404 (Not Found)"))
{
Assert.Fail();
}
else
{
Assert.Pass();
}
}
}
}
catch (NoSuchElementException e)
{
test.Fail(e.StackTrace);
}
}
Вы можете сделать что-то подобное в C#. Это полный тестовый пример. Затем распечатайте вывод консоли в виде String, т.е. logInfo в вашем отчете. По какой-то причине, Log(log.Message) из решения выше этого дал мне ошибки сборки. Итак, я заменил его.
driver.manage().logs().get("browser")
Получает все журналы, напечатанные на консоли. Я смог получить все журналы, кроме нарушений. Посмотрите, пожалуйста, здесь логи Chrome Console без распечатки нарушений