Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Selenium Webdriver 3.141.0 driver.Manage().Logs.AvailableLogTypes引发System.NullReference异常_C#_Selenium_Google Chrome_Selenium Webdriver - Fatal编程技术网

C# Selenium Webdriver 3.141.0 driver.Manage().Logs.AvailableLogTypes引发System.NullReference异常

C# Selenium Webdriver 3.141.0 driver.Manage().Logs.AvailableLogTypes引发System.NullReference异常,c#,selenium,google-chrome,selenium-webdriver,C#,Selenium,Google Chrome,Selenium Webdriver,在我的最新Chrome更新到76版本后,我使用driver.Manage().logs.GetLog(LogType.Browser)获取任何控制台日志的Selenium代码段抛出错误。请注意日志。AvailableLogTypes正在引发NullReference异常。我们需要启用任何设置吗?是否有其他方法获取控制台错误 我尝试使用LoggingPreferences,但返回的参数错误无效,无法打开chrome驱动程序这目前已损坏,仅在Selenium 4 alpha中修复: 从阅读该问题来看

在我的最新Chrome更新到76版本后,我使用
driver.Manage().logs.GetLog(LogType.Browser)
获取任何控制台日志的Selenium代码段抛出错误。请注意
日志。AvailableLogTypes
正在引发
NullReference异常。我们需要启用任何设置吗?是否有其他方法获取控制台错误


我尝试使用
LoggingPreferences
,但返回的参数错误无效,无法打开chrome驱动程序

这目前已损坏,仅在Selenium 4 alpha中修复:


从阅读该问题来看,对chromedriver的更改似乎需要对.Net Selenium实现进行更改以纠正该问题。

这是我的快速而肮脏的解决方案(直到Selenium 4出现,解决了该问题)-它正在工作,您可以对其进行优化并添加更多检查和验证

我将其公开为一个扩展方法GetBrowserLogs

使用Newtonsoft.Json;
使用Newtonsoft.Json.Linq;
使用OpenQA.Selenium;
使用OpenQA.Selenium.Chrome;
使用OpenQA.Selenium.Chromium;
使用OpenQA.Selenium.Remote;
使用制度;
使用System.Collections.Generic;
使用System.Linq;
使用System.Net.Http;
使用System.Net.Http.Header;
运用系统反思;
使用系统文本;
名称空间SeleniumConsumer
{
内部静态类程序
{
私有静态void Main()
{
//设置选项
var options=新的ChromeOptions();
options.SetLoggingPreference(LogType.Browser、LogLevel.All);
//做任何事
var驱动程序=新的色度驱动程序(选项)
{
Url=”https://www.yahoo.com/"
};
//提取日志
foreach(var登录驱动程序.GetBrowserLogs())
{
WriteLine($“{log[“timestamp”]}:{log[“message”]}”);
}
//清理
driver.Dispose();
Console.WriteLine();
Console.WriteLine(“按任意键退出…”);
Console.ReadLine();
}
}
公共静态类webdrivex
{
公共静态IEnumerable GetBrowserLogs(此IWebDriver驱动程序)
{
//设置
var endpoint=GetEndpoint(驱动程序);
var session=GetSession(驱动程序);
var resource=$“{endpoint}session/{session}/se/log”;
常量字符串jsonBody=@“{”类型“:”浏览器“}”;
//执行
使用(var httpClient=new httpClient())
{
var content=newstringcontent(jsonBody,Encoding.UTF8,“application/json”);
var response=httpClient.PostAsync(资源、内容).GetAwaiter().GetResult();
var responseBody=response.Content.ReadAsStringAsync().GetAwaiter().GetResult();
返回日志条目(responseBody);
}
}
私有静态字符串GetEndpoint(IWebDriver驱动程序)
{
//设置
const BindingFlags Flags=BindingFlags.Instance | BindingFlags.NonPublic;
//获取RemoteWebDriver类型
var remoteWebDriver=GetRemoteWebDriver(driver.GetType());
//获取此实例执行器>获取此实例内部执行器
var executor=remoteWebDriver.GetField(“executor”,Flags).GetValue(driver)作为DriverServiceCommandExecutor;
var internalExecutor=executor.GetType().GetField(“internalExecutor”,Flags).GetValue(executor)作为HttpCommandExecutor;
//获取URL
var uri=internalExecutor.GetType().GetField(“remoteServerUri”,标志).GetValue(internalExecutor)作为uri;
//结果
返回uri.AbsoluteUri;
}
私有静态类型GetRemoteWebDriver(类型)
{
如果(!typeof(RemoteWebDriver).IsAssignableFrom(type))
{
返回类型;
}
while(type!=typeof(RemoteWebDriver))
{
type=type.BaseType;
}
返回类型;
}
专用静态会话ID GetSession(IWebDriver驱动程序)
{
if(驾驶员是IHasSessionId)
{
返回id.SessionId;
}
返回新的SessionId($“gravity-{Guid.NewGuid()}”);
}
私有静态IEnumerable AsLogEntries(字符串响应库)
{
//设置
var value=$“{JToken.Parse(responseBody)[“value”]}”;
返回JsonConvert.DeserializeObject(值);
}
}
}

您使用的是哪个版本的ChromDriver?如果Chrome更新了,你也需要更新你的ChromeDriver。我也有同样的问题。我更新了最新的chrome驱动程序,但没有解决问题。