diff --git a/dotnet/src/webdriver/BiDi/Emulation/EmulationModule.cs b/dotnet/src/webdriver/BiDi/Emulation/EmulationModule.cs index 82fd31828e8a0..aaf01d929b3df 100644 --- a/dotnet/src/webdriver/BiDi/Emulation/EmulationModule.cs +++ b/dotnet/src/webdriver/BiDi/Emulation/EmulationModule.cs @@ -105,22 +105,20 @@ public async Task SetScrollbarTypeOverrideAsync( return await ExecuteAsync(SetScrollbarTypeOverrideCommand, @params, options, cancellationToken).ConfigureAwait(false); } - public async Task SetGeolocationCoordinatesOverrideAsync(double latitude, double longitude, SetGeolocationCoordinatesOverrideOptions? options = null, CancellationToken cancellationToken = default) + public async Task SetGeolocationOverrideAsync(GeolocationOverride? geolocationOverride, SetGeolocationOverrideOptions? options = null, CancellationToken cancellationToken = default) { - var coordinates = new GeolocationCoordinates(latitude, longitude, options?.Accuracy, options?.Altitude, options?.AltitudeAccuracy, options?.Heading, options?.Speed); - var @params = new SetGeolocationOverrideCoordinatesParameters(coordinates, options?.Contexts, options?.UserContexts); - return await ExecuteAsync(SetGeolocationOverrideCommand, @params, options, cancellationToken).ConfigureAwait(false); - } + SetGeolocationOverrideParameters @params = geolocationOverride switch + { + GeolocationCoordinatesOverride c => new SetGeolocationOverrideCoordinatesParameters( + new GeolocationCoordinates(c.Latitude, c.Longitude, c.Accuracy, c.Altitude, c.AltitudeAccuracy, c.Heading, c.Speed), + options?.Contexts, options?.UserContexts), + GeolocationPositionErrorOverride => new SetGeolocationOverridePositionErrorParameters( + new GeolocationPositionError(), options?.Contexts, options?.UserContexts), + null => new SetGeolocationOverrideCoordinatesParameters( + null, options?.Contexts, options?.UserContexts), + _ => throw new ArgumentException($"Unknown geolocation override type: {geolocationOverride.GetType()}", nameof(geolocationOverride)) + }; - public async Task SetGeolocationCoordinatesOverrideAsync(SetGeolocationOverrideOptions? options = null, CancellationToken cancellationToken = default) - { - var @params = new SetGeolocationOverrideCoordinatesParameters(null, options?.Contexts, options?.UserContexts); - return await ExecuteAsync(SetGeolocationOverrideCommand, @params, options, cancellationToken).ConfigureAwait(false); - } - - public async Task SetGeolocationPositionErrorOverrideAsync(SetGeolocationPositionErrorOverrideOptions? options = null, CancellationToken cancellationToken = default) - { - var @params = new SetGeolocationOverridePositionErrorParameters(new GeolocationPositionError(), options?.Contexts, options?.UserContexts); return await ExecuteAsync(SetGeolocationOverrideCommand, @params, options, cancellationToken).ConfigureAwait(false); } diff --git a/dotnet/src/webdriver/BiDi/Emulation/IEmulationModule.cs b/dotnet/src/webdriver/BiDi/Emulation/IEmulationModule.cs index 20ef789ab1cff..db879ec8792cf 100644 --- a/dotnet/src/webdriver/BiDi/Emulation/IEmulationModule.cs +++ b/dotnet/src/webdriver/BiDi/Emulation/IEmulationModule.cs @@ -22,9 +22,7 @@ namespace OpenQA.Selenium.BiDi.Emulation; public interface IEmulationModule { Task SetForcedColorsModeThemeOverrideAsync(ForcedColorsModeTheme? theme, SetForcedColorsModeThemeOverrideOptions? options = null, CancellationToken cancellationToken = default); - Task SetGeolocationCoordinatesOverrideAsync(double latitude, double longitude, SetGeolocationCoordinatesOverrideOptions? options = null, CancellationToken cancellationToken = default); - Task SetGeolocationCoordinatesOverrideAsync(SetGeolocationOverrideOptions? options = null, CancellationToken cancellationToken = default); - Task SetGeolocationPositionErrorOverrideAsync(SetGeolocationPositionErrorOverrideOptions? options = null, CancellationToken cancellationToken = default); + Task SetGeolocationOverrideAsync(GeolocationOverride? geolocationOverride, SetGeolocationOverrideOptions? options = null, CancellationToken cancellationToken = default); Task SetLocaleOverrideAsync(string? locale, SetLocaleOverrideOptions? options = null, CancellationToken cancellationToken = default); Task SetNetworkConditionsAsync(NetworkConditions? networkConditions, SetNetworkConditionsOptions? options = null, CancellationToken cancellationToken = default); Task SetScreenOrientationOverrideAsync(ScreenOrientation? screenOrientation, SetScreenOrientationOverrideOptions? options = null, CancellationToken cancellationToken = default); diff --git a/dotnet/src/webdriver/BiDi/Emulation/SetGeolocationOverride.cs b/dotnet/src/webdriver/BiDi/Emulation/SetGeolocationOverride.cs index 3aef75e20846d..d8f42daa48f3e 100644 --- a/dotnet/src/webdriver/BiDi/Emulation/SetGeolocationOverride.cs +++ b/dotnet/src/webdriver/BiDi/Emulation/SetGeolocationOverride.cs @@ -21,6 +21,19 @@ namespace OpenQA.Selenium.BiDi.Emulation; +public abstract record GeolocationOverride; + +public sealed record GeolocationCoordinatesOverride(double Latitude, double Longitude) : GeolocationOverride +{ + public double? Accuracy { get; init; } + public double? Altitude { get; init; } + public double? AltitudeAccuracy { get; init; } + public double? Heading { get; init; } + public double? Speed { get; init; } +} + +public sealed record GeolocationPositionErrorOverride : GeolocationOverride; + [JsonDerivedType(typeof(SetGeolocationOverrideCoordinatesParameters))] [JsonDerivedType(typeof(SetGeolocationOverridePositionErrorParameters))] internal abstract record SetGeolocationOverrideParameters(IEnumerable? Contexts, IEnumerable? UserContexts) : Parameters; @@ -37,22 +50,11 @@ internal sealed record GeolocationPositionError internal string Type { get; } = "positionUnavailable"; } -public record SetGeolocationOverrideOptions : CommandOptions +public sealed record SetGeolocationOverrideOptions : CommandOptions { public IEnumerable? Contexts { get; init; } public IEnumerable? UserContexts { get; init; } } -public sealed record SetGeolocationCoordinatesOverrideOptions : SetGeolocationOverrideOptions -{ - public double? Accuracy { get; init; } - public double? Altitude { get; init; } - public double? AltitudeAccuracy { get; init; } - public double? Heading { get; init; } - public double? Speed { get; init; } -} - -public sealed record SetGeolocationPositionErrorOverrideOptions : SetGeolocationOverrideOptions; - public sealed record SetGeolocationOverrideResult : EmptyResult; diff --git a/dotnet/test/webdriver/BiDi/Emulation/EmulationTests.cs b/dotnet/test/webdriver/BiDi/Emulation/EmulationTests.cs index a5aa0225526cc..016a0e224f33b 100644 --- a/dotnet/test/webdriver/BiDi/Emulation/EmulationTests.cs +++ b/dotnet/test/webdriver/BiDi/Emulation/EmulationTests.cs @@ -198,7 +198,7 @@ public void CanSetGeolocationCoordinatesOverride() { Assert.That(async () => { - await bidi.Emulation.SetGeolocationCoordinatesOverrideAsync(0, 0, new() { Contexts = [context] }); + await bidi.Emulation.SetGeolocationOverrideAsync(new GeolocationCoordinatesOverride(0, 0), new() { Contexts = [context] }); }, Throws.Nothing); } @@ -208,7 +208,7 @@ public void CanSetGeolocationCoordinatesOverrideToDefault() { Assert.That(async () => { - await bidi.Emulation.SetGeolocationCoordinatesOverrideAsync(new() { Contexts = [context] }); + await bidi.Emulation.SetGeolocationOverrideAsync(null, new() { Contexts = [context] }); }, Throws.Nothing); } @@ -219,7 +219,7 @@ public void CanSetGeolocationPositionErrorOverride() { Assert.That(async () => { - await bidi.Emulation.SetGeolocationPositionErrorOverrideAsync(new() { Contexts = [context] }); + await bidi.Emulation.SetGeolocationOverrideAsync(new GeolocationPositionErrorOverride(), new() { Contexts = [context] }); }, Throws.Nothing); }