如何访问chrome上的控制台日志并断言是否存在行



硒是个新手,我一直在寻找这个问题的答案,但到目前为止,我尝试的所有次数都未能达到预期的结果。

我按照其他答案访问chrome控制台日志,但我得到了一个例外:

ChromeOptions options = new ChromeOptions();
options.SetLoggingPreference(LogType.Browser, LogLevel.All);

var driver = new ChromeDriver(options);
driver.Manage().Window.Maximize();
driver.Url = "https://test.test";
var homePage = new HomePage(driver); //POM

homePage.SignIn().Click();                
homePage.Email("email");
homePage.Password("pw");
homePage.LogIn();
var logs = driver.Manage().Logs.GetLog(LogType.Browser);
foreach (var log in logs)
{
Console.WriteLine(log.ToString());
}

在上引发异常:var logs = driver.Manage().Logs.GetLog(LogType.Browser);System.NullReferenceException:'Object reference not set to an instance of an object.'

我一直不明白为什么要扔它。

之后,我想断言控制台日志,看看是否存在特定的条目。有可能吗?

因此,这是一个肮脏的解决方法。如果你得到任何好的答案,请不要使用我的。

修改默认的console.log方法,将数据存储在新引入的全局变量中

IJavaScriptExecutor js = (IJavaScriptExecutor)driver;
//Multiline string used for readability. Write it in single line
js.ExecuteScript("
window.oldConsoleLog = window.console.log;
window.logCalls = [];
window.console.log = function(){
oldConsoleLog.apply(window.console, arguments);
window.logCalls.push(arguments);
}
");

现在,您可以使用下一个代码获得所有呼叫:

var calls = js.ExecuteScript("return window.logCalls");

如果你需要清理:

js.ExecuteScript("delete window.logCalls;window.console.log = window.oldConsoleLog;")

最新更新