硒是个新手,我一直在寻找这个问题的答案,但到目前为止,我尝试的所有次数都未能达到预期的结果。
我按照其他答案访问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;")