在远程会话期间调用driver.Manage()。Logs.GetLog()时出现异常

时间:2017-02-08 15:24:56

标签: c# selenium-webdriver webdriver remotewebdriver

从我的代码中调用var entries = driver.Manage().Logs.GetLog(LogType.Browser);时,我遇到了System.NotImplementedException。

我按如下方式设置远程驱动程序会话:

(...)
ChromeOptions chromeOptions = new ChromeOptions();
chromeOptions.SetLoggingPreference(LogType.Browser, LogLevel.All);
webDriver = new RemoteWebDriver(new Uri(remoteServerUrl),chromeOptions.ToCapabilities());
(...)

从深入研究这个问题,我发现有相互矛盾的报道表明webdriver中的GetLogs()方法的C#绑定尚未实现 - 请参阅here。这可以解释我得到的例外情况。

但是也有帖子表明这应该在这个网站和其他地方有效。例如here.

这是在本地运行但在远程webdriver会话中不起作用的情况吗?

任何人都可以在C#中一劳永逸地确认这个API的当前状态吗? :)

对于我尝试使用Webdriver 3.01和2.53的记录。

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,似乎只为FirefoxDriver实现了完整的日志集(尽管我不确定这是否仍适用于Geckodriver版本)。

因此,为了有一个可用于所有浏览器的包装器,我创建了以下实用程序方法:

//can also be used in the class constructor 
_logs = driver.Manage().Logs;

public void PrintLogs(string logType)
{
    try
    {
        var browserLogs = _logs.GetLog(logType);
        if (browserLogs.Count > 0)
        {                           
            foreach (var log in browserLogs)
            {
                //log the message in a file
            }
        }
    }
    catch
    {
        //There are no log types present
    }
}

public void PrintAllLogs()
{
    PrintLogs(LogType.Server);
    PrintLogs(LogType.Browser);
    PrintLogs(LogType.Client);
    PrintLogs(LogType.Driver);
    PrintLogs(LogType.Profiler);
}