Chrome无头模式下地理位置设置问题及解决办法
Chrome无头模式UI自动化:地理位置设置问题与解决
我需要在Chrome无头模式下运行UI自动化测试,但以下常规地理位置配置在无头模式下无效:
options.AddUserProfilePreference("profile.default_content_setting_values.geolocation", 1); options.AddUserProfilePreference("profile.managed_default_content_settings.geolocation", 1);
我尝试通过DevTools API模拟设置地理位置,编写了如下C#代码:
var devTools = Driver as IDevTools; var session = devTools!.GetDevToolsSession(); var typeList = new[] { PermissionType.Geolocation }; var commandPermission = new GrantPermissionsCommandSettings(); commandPermission.Permissions = typeList; commandPermission.Origin = "https://www.gps-coordinates.net/my-location"; session.SendCommand(commandPermission); var command = new SetGeolocationOverrideCommandSettings(); command.Latitude = 35.689487; command.Longitude = 139.691706; command.Accuracy = 100; session.SendCommand(command);
一开始我以为这段代码没生效,后续排查发现代码本身是有效的,但测试过程中无法点击按钮是因为页面弹出了地理位置权限请求的锁屏界面。最终通过注入JavaScript脚本的方式,直接重写地理位置获取方法,绕过权限请求并设置了目标位置:
IJavaScriptExecutor js = (IJavaScriptExecutor)Driver; js.ExecuteScript("navigator.geolocation.getCurrentPosition = (cb) => {cb({ coords: { latitude: 35, longitude: 139 } })}");
内容的提问来源于stack exchange,提问作者Vasilii Melnikov
相关产品推荐
相关产品推荐

