Enabling "Preserve Log" in Chrome Developer Tools Console via Selenium
Hello Chrome Community, I hope this message finds you well. I am currently working on a Selenium automation project where I am using ChromeDriver to interact with the Chrome browser. One specific requirement I have is to enable the "Preserve Log" option in the Chrome Developer Tools Console via Selenium.
So basically, I want that when I launch the driver, it automatically have Preserve Logs - console settings enabled.
I want to ensure that the entire test execution's console logs are captured and saved when the Chrome driver is launched. This means that even if I navigate to different pages during the test, the logs should not be cleared. At the end of the test, I should be able to access and review the complete set of logs for the entire test run.
I have tried various approaches, including using the AddUserProfilePreference method in ChromeOptions and executing JavaScript through IJavaScriptExecutor. Despite my attempts, I have not been successful in programmatically enabling "Preserve Log" in the Console tab. Here is a snippet of the code I am currently using:
private static IWebDriver GetChromeDriver(string userAgent)
{
var options = new ChromeOptions();
//options.AddArgument("incognito");
options.AddArguments("disable-infobars");
// options.AddArguments("--headless");
//Session 0 limit - 1024 x 768
options.AddArguments("--window-size=1024,768");
options.AddArguments("--window-position=0,0");
options.AddArgument($"--user-agent= {userAgent}");
options.SetLoggingPreference(LogType.Browser, LogLevel.All);
//To disable PDF viewer plugins
options.AddUserProfilePreference("plugins.always_open_pdf_externally", true);
options.AddExtension(@"C:\Users\PalakS\Downloads\ezyZip - Copy.crx");
// Disable download bubble and download bubble v2 using command-line switch - For Auto Download
options.AddArgument("--disable-features=DownloadBubble");
options.AddArgument("--disable-features=DownloadBubbleV2");
options.AddArgument("--disable-backgrounding-occluded-windows");
var driver = new ChromeDriver(Directory.GetCurrentDirectory(), options, TimeSpan.FromMinutes(3));
var devToolsSession = driver.GetDevToolsSession();
IDevTools devTools = driver as IDevTools;
DevToolsSession session = devTools.GetDevToolsSession();
// Enable the Page domain
var enablePageCommandSettings1 = new OpenQA.Selenium.DevTools.V119.Page.EnableCommandSettings();
session.SendCommand(enablePageCommandSettings1);
// Enable the Console domain
var enableConsoleCommand = new OpenQA.Selenium.DevTools.V119.Console.EnableCommandSettings();
session.SendCommand(enableConsoleCommand);
// Create the script to preserve console logs
string script = "console.preserveLog();";
// Inject the script into every new document
session.SendCommand(new OpenQA.Selenium.DevTools.V119.Page.AddScriptToEvaluateOnNewDocumentCommandSettings()
{
Source = script
});
// Inject the script into every new document
session.SendCommand(new OpenQA.Selenium.DevTools.V119.Page.AddScriptToEvaluateOnLoadCommandSettings()
{
ScriptSource = script
});
return driver;
}
Unfortunately, the above approaches haven't yielded the desired results, and the "Preserve Log" option in the Console tab remains unchecked. I would greatly appreciate any guidance, insights, or alternative approaches that the community might have in achieving this. If there's a specific preference, command-line argument, or technique that I might be overlooking, please let me know. Thank you in advance for your time and assistance! Environment Details:
Chrome Version: latest 119
Selenium Version: Selenium 4
#same question
Same here
https://peter.sh/experiments/chromium-command-line-switches/#net-log Find this stuff, maybe it will be helpful
Note this repository is for the DevTools protocol types only. Please consult the README.md. Given that the question is out of scope of this repo, I will close the issue.
A possible solution to the issue could be to pass the same User directory each time via command line args --user-data-dir.
Selenium Docs