Best Playwright-dotnet code snippet using Microsoft.Playwright.Transport.ApiZone
Connection.cs
Source:Connection.cs  
...60        /// <inheritdoc cref="IDisposable.Dispose"/>61        ~Connection() => Dispose(false);62        internal event EventHandler<string> Close;63        public ConcurrentDictionary<string, IChannelOwner> Objects { get; } = new();64        internal AsyncLocal<List<ApiZone>> ApiZone { get; } = new();65        public bool IsClosed { get; private set; }66        internal bool IsRemote { get; set; }67        internal Func<object, Task> OnMessage { get; set; }68        internal JsonSerializerOptions DefaultJsonSerializerOptions { get; }69        public void Dispose()70        {71            Dispose(true);72            GC.SuppressFinalize(this);73        }74        internal Task<JsonElement?> SendMessageToServerAsync(75            string guid,76            string method,77            object args = null)78            => SendMessageToServerAsync<JsonElement?>(guid, method, args);79        internal Task<T> SendMessageToServerAsync<T>(80            string guid,81            string method,82            object args = null) => WrapApiCallAsync(() => InnerSendMessageToServerAsync<T>(guid, method, args));83        private async Task<T> InnerSendMessageToServerAsync<T>(84            string guid,85            string method,86            object args = null)87        {88            if (IsClosed)89            {90                throw new PlaywrightException($"Connection closed ({_reason})");91            }92            int id = Interlocked.Increment(ref _lastId);93            var tcs = new TaskCompletionSource<JsonElement?>(TaskCreationOptions.RunContinuationsAsynchronously);94            var callback = new ConnectionCallback95            {96                TaskCompletionSource = tcs,97            };98            _callbacks.TryAdd(id, callback);99            var sanitizedArgs = new Dictionary<string, object>();100            if (args != null)101            {102                if (args is IDictionary<string, object> dictionary && dictionary.Keys.Any(f => f != null))103                {104                    foreach (var kv in dictionary)105                    {106                        if (kv.Value != null)107                        {108                            sanitizedArgs.Add(kv.Key, kv.Value);109                        }110                    }111                }112                else113                {114                    foreach (PropertyDescriptor propertyDescriptor in TypeDescriptor.GetProperties(args))115                    {116                        object obj = propertyDescriptor.GetValue(args);117                        if (obj != null)118                        {119#pragma warning disable CA1845 // Use span-based 'string.Concat' and 'AsSpan' instead of 'Substring120                            string name = propertyDescriptor.Name.Substring(0, 1).ToLower() + propertyDescriptor.Name.Substring(1);121#pragma warning restore CA2000 // Use span-based 'string.Concat' and 'AsSpan' instead of 'Substring122                            sanitizedArgs.Add(name, obj);123                        }124                    }125                }126            }127            await _queue.EnqueueAsync(() =>128            {129                var message = new MessageRequest130                {131                    Id = id,132                    Guid = guid,133                    Method = method,134                    Params = sanitizedArgs,135                    Metadata = ApiZone.Value[0],136                };137                TraceMessage("pw:channel:command", message);138                return OnMessage(message);139            }).ConfigureAwait(false);140            var result = await tcs.Task.ConfigureAwait(false);141            if (typeof(T) == typeof(JsonElement?))142            {143                return (T)(object)result?.Clone();144            }145            else if (result == null)146            {147                return default;148            }149            else if (typeof(ChannelBase).IsAssignableFrom(typeof(T)) || typeof(ChannelBase[]).IsAssignableFrom(typeof(T)))150            {151                var enumerate = result.Value.EnumerateObject();152                return enumerate.Any()153                    ? enumerate.FirstOrDefault().Value.ToObject<T>(DefaultJsonSerializerOptions)154                    : default;155            }156            else157            {158                return result.Value.ToObject<T>(DefaultJsonSerializerOptions);159            }160        }161        internal IChannelOwner GetObject(string guid)162        {163            Objects.TryGetValue(guid, out var result);164            return result;165        }166        internal void MarkAsRemote() => IsRemote = true;167        internal Task<PlaywrightImpl> InitializePlaywrightAsync()168        {169            return _rootObject.InitializeAsync();170        }171        internal void OnObjectCreated(string guid, IChannelOwner result)172        {173            Objects.TryAdd(guid, result);174        }175        internal void Dispatch(PlaywrightServerMessage message)176        {177            if (message.Id.HasValue)178            {179                TraceMessage("pw:channel:response", message);180                if (_callbacks.TryRemove(message.Id.Value, out var callback))181                {182                    if (message.Error != null)183                    {184                        callback.TaskCompletionSource.TrySetException(CreateException(message.Error.Error));185                    }186                    else187                    {188                        callback.TaskCompletionSource.TrySetResult(message.Result);189                    }190                }191                return;192            }193            TraceMessage("pw:channel:event", message);194            try195            {196                if (message.Method == "__create__")197                {198                    var createObjectInfo = message.Params.Value.ToObject<CreateObjectInfo>(DefaultJsonSerializerOptions);199                    CreateRemoteObject(message.Guid, createObjectInfo.Type, createObjectInfo.Guid, createObjectInfo.Initializer);200                    return;201                }202                if (message.Method == "__dispose__")203                {204                    Objects.TryGetValue(message.Guid, out var disableObject);205                    disableObject?.DisposeOwner();206                    return;207                }208                Objects.TryGetValue(message.Guid, out var obj);209                obj?.Channel?.OnMessage(message.Method, message.Params);210            }211            catch (Exception ex)212            {213                DoClose(ex);214            }215        }216        private void CreateRemoteObject(string parentGuid, ChannelOwnerType type, string guid, JsonElement? initializer)217        {218            IChannelOwner result = null;219            var parent = string.IsNullOrEmpty(parentGuid) ? _rootObject : Objects[parentGuid];220#pragma warning disable CA2000 // Dispose objects before losing scope221            switch (type)222            {223                case ChannelOwnerType.Artifact:224                    result = new Artifact(parent, guid, initializer?.ToObject<ArtifactInitializer>(DefaultJsonSerializerOptions));225                    break;226                case ChannelOwnerType.BindingCall:227                    result = new BindingCall(parent, guid, initializer?.ToObject<BindingCallInitializer>(DefaultJsonSerializerOptions));228                    break;229                case ChannelOwnerType.Playwright:230                    result = new PlaywrightImpl(parent, guid, initializer?.ToObject<PlaywrightInitializer>(DefaultJsonSerializerOptions));231                    break;232                case ChannelOwnerType.Browser:233                    var browserInitializer = initializer?.ToObject<BrowserInitializer>(DefaultJsonSerializerOptions);234                    result = new Browser(parent, guid, browserInitializer);235                    break;236                case ChannelOwnerType.BrowserType:237                    var browserTypeInitializer = initializer?.ToObject<BrowserTypeInitializer>(DefaultJsonSerializerOptions);238                    result = new Core.BrowserType(parent, guid, browserTypeInitializer);239                    break;240                case ChannelOwnerType.BrowserContext:241                    var browserContextInitializer = initializer?.ToObject<BrowserContextInitializer>(DefaultJsonSerializerOptions);242                    result = new BrowserContext(parent, guid, browserContextInitializer);243                    break;244                case ChannelOwnerType.ConsoleMessage:245                    result = new ConsoleMessage(parent, guid, initializer?.ToObject<ConsoleMessageInitializer>(DefaultJsonSerializerOptions));246                    break;247                case ChannelOwnerType.Dialog:248                    result = new Dialog(parent, guid, initializer?.ToObject<DialogInitializer>(DefaultJsonSerializerOptions));249                    break;250                case ChannelOwnerType.ElementHandle:251                    result = new ElementHandle(parent, guid, initializer?.ToObject<ElementHandleInitializer>(DefaultJsonSerializerOptions));252                    break;253                case ChannelOwnerType.Frame:254                    result = new Frame(parent, guid, initializer?.ToObject<FrameInitializer>(DefaultJsonSerializerOptions));255                    break;256                case ChannelOwnerType.JSHandle:257                    result = new JSHandle(parent, guid, initializer?.ToObject<JSHandleInitializer>(DefaultJsonSerializerOptions));258                    break;259                case ChannelOwnerType.JsonPipe:260                    result = new JsonPipe(parent, guid, initializer?.ToObject<JsonPipeInitializer>(DefaultJsonSerializerOptions));261                    break;262                case ChannelOwnerType.LocalUtils:263                    result = new LocalUtils(parent, guid, initializer);264                    break;265                case ChannelOwnerType.Page:266                    result = new Page(parent, guid, initializer?.ToObject<PageInitializer>(DefaultJsonSerializerOptions));267                    break;268                case ChannelOwnerType.Request:269                    result = new Request(parent, guid, initializer?.ToObject<RequestInitializer>(DefaultJsonSerializerOptions));270                    break;271                case ChannelOwnerType.Response:272                    result = new Response(parent, guid, initializer?.ToObject<ResponseInitializer>(DefaultJsonSerializerOptions));273                    break;274                case ChannelOwnerType.Route:275                    result = new Route(parent, guid, initializer?.ToObject<RouteInitializer>(DefaultJsonSerializerOptions));276                    break;277                case ChannelOwnerType.Worker:278                    result = new Worker(parent, guid, initializer?.ToObject<WorkerInitializer>(DefaultJsonSerializerOptions));279                    break;280                case ChannelOwnerType.WebSocket:281                    result = new WebSocket(parent, guid, initializer?.ToObject<WebSocketInitializer>(DefaultJsonSerializerOptions));282                    break;283                case ChannelOwnerType.Selectors:284                    result = new Selectors(parent, guid);285                    break;286                case ChannelOwnerType.SocksSupport:287                    result = new SocksSupport(parent, guid);288                    break;289                case ChannelOwnerType.Stream:290                    result = new Stream(parent, guid);291                    break;292                case ChannelOwnerType.WritableStream:293                    result = new WritableStream(parent, guid);294                    break;295                case ChannelOwnerType.Tracing:296                    result = new Tracing(parent, guid);297                    break;298                default:299                    TraceMessage("pw:dotnet", "Missing type " + type);300                    break;301            }302#pragma warning restore CA2000303            Objects.TryAdd(guid, result);304            OnObjectCreated(guid, result);305        }306        private void DoClose(Exception ex)307        {308            TraceMessage("pw:dotnet", $"Connection Close: {ex.Message}\n{ex.StackTrace}");309            DoClose(ex.Message);310        }311        internal void DoClose(string reason)312        {313            _reason = string.IsNullOrEmpty(_reason) ? reason : _reason;314            if (!IsClosed)315            {316                foreach (var callback in _callbacks)317                {318                    callback.Value.TaskCompletionSource.TrySetException(new PlaywrightException(reason));319                }320                Dispose();321                IsClosed = true;322            }323        }324        private Exception CreateException(PlaywrightServerError error)325        {326            if (string.IsNullOrEmpty(error.Message))327            {328                return new PlaywrightException(error.Value);329            }330            if (error.Name == "TimeoutError")331            {332                return new TimeoutException(error.Message);333            }334            return new PlaywrightException(error.Message);335        }336        private void Dispose(bool disposing)337        {338            if (!disposing)339            {340                return;341            }342            _queue.Dispose();343            Close.Invoke(this, "Connection disposed");344        }345        [Conditional("DEBUG")]346        internal void TraceMessage(string logLevel, object message)347        {348            string actualLogLevel = Environment.GetEnvironmentVariable("DEBUG");349            if (!string.IsNullOrEmpty(actualLogLevel))350            {351                if (!actualLogLevel.Contains(logLevel))352                {353                    return;354                }355                if (!(message is string))356                {357                    message = JsonSerializer.Serialize(message, DefaultJsonSerializerOptions);358                }359                string line = $"{logLevel}: {message}";360                Trace.WriteLine(line);361                Console.Error.WriteLine(line);362            }363        }364        internal async Task<T> WrapApiCallAsync<T>(Func<Task<T>> action, bool isInternal = false)365        {366            EnsureApiZoneExists();367            if (ApiZone.Value[0] != null)368            {369                return await action().ConfigureAwait(false);370            }371            var st = new StackTrace(true);372            var stack = new List<object>();373            var lastInternalApiName = string.Empty;374            var apiName = string.Empty;375            for (int i = 0; i < st.FrameCount; ++i)376            {377                var sf = st.GetFrame(i);378                string fileName = sf.GetFileName();379                string cSharpNamespace = sf.GetMethod().ReflectedType?.Namespace;380                bool playwrightInternal = cSharpNamespace != null &&381                                          (cSharpNamespace == "Microsoft.Playwright" ||382                                          cSharpNamespace.StartsWith("Microsoft.Playwright.Core", StringComparison.InvariantCultureIgnoreCase) ||383                                          cSharpNamespace.StartsWith("Microsoft.Playwright.Transport", StringComparison.InvariantCultureIgnoreCase) ||384                                          cSharpNamespace.StartsWith("Microsoft.Playwright.Helpers", StringComparison.InvariantCultureIgnoreCase));385                if (string.IsNullOrEmpty(fileName) && !playwrightInternal)386                {387                    continue;388                }389                if (!playwrightInternal)390                {391                    stack.Add(new { file = fileName, line = sf.GetFileLineNumber(), column = sf.GetFileColumnNumber() });392                }393                string methodName = $"{sf?.GetMethod()?.DeclaringType?.Name}.{sf?.GetMethod()?.Name}";394                if (methodName.Contains("WrapApiBoundaryAsync"))395                {396                    break;397                }398                if (methodName.StartsWith("<", StringComparison.InvariantCultureIgnoreCase))399                {400                    continue;401                }402                if (playwrightInternal)403                {404                    lastInternalApiName = methodName;405                }406                else if (!string.IsNullOrEmpty(lastInternalApiName))407                {408                    apiName = lastInternalApiName;409                    lastInternalApiName = string.Empty;410                }411            }412            if (string.IsNullOrEmpty(apiName))413            {414                apiName = lastInternalApiName;415            }416            try417            {418                if (!string.IsNullOrEmpty(apiName))419                {420                    ApiZone.Value[0] = new() { ApiName = apiName, Stack = stack, IsInternal = isInternal };421                }422                return await action().ConfigureAwait(false);423            }424            finally425            {426                ApiZone.Value[0] = null;427            }428        }429        internal async Task WrapApiBoundaryAsync(Func<Task> action)430        {431            EnsureApiZoneExists();432            try433            {434                ApiZone.Value.Insert(0, null);435                await action().ConfigureAwait(false);436            }437            finally438            {439                ApiZone.Value.RemoveAt(0);440            }441        }442        private void EnsureApiZoneExists()443        {444            if (ApiZone.Value == null)445            {446                ApiZone.Value = new() { null };447            }448        }449    }450}...ApiZone.cs
Source:ApiZone.cs  
...23 */24using System.Collections.Generic;25namespace Microsoft.Playwright.Transport26{27    internal class ApiZone28    {29        public string ApiName { get; set; }30        public bool IsInternal { get; set; }31        public List<object> Stack { get; set; }32    }33}...ApiZone
Using AI Code Generation
1using Microsoft.Playwright.Transport;2using System;3using System.Threading.Tasks;4{5    {6        static async Task Main(string[] args)7        {8            var apiZone = new ApiZone();9            var playwright = await apiZone.Run(async () => await Playwright.CreateAsync());10            var browser = await playwright.Chromium.LaunchAsync();11            var context = await browser.NewContextAsync();12            var page = await context.NewPageAsync();13            await page.ScreenshotAsync("google.png");14            await browser.CloseAsync();15        }16    }17}18using Microsoft.Playwright;19using System;20using System.Threading.Tasks;21{22    {23        static async Task Main(string[] args)24        {25            var apiZone = new ApiZone();26            var playwright = await apiZone.Run(async () => await Playwright.CreateAsync());27            var browser = await playwright.Chromium.LaunchAsync();28            var context = await browser.NewContextAsync();29            var page = await context.NewPageAsync();30            await page.ScreenshotAsync("google.png");31            await browser.CloseAsync();32        }33    }34}35using Microsoft.Playwright;36using System;37using System.Threading.Tasks;38{39    {40        static async Task Main(string[] args)41        {42            var apiZone = new ApiZone();43            var playwright = await apiZone.Run(async () => await Playwright.CreateAsync());44            var browser = await playwright.Chromium.LaunchAsync();45            var context = await browser.NewContextAsync();46            var page = await context.NewPageAsync();47            await page.ScreenshotAsync("google.png");48            await browser.CloseAsync();49        }50    }51}52using Microsoft.Playwright;53using System;54using System.Threading.Tasks;55{56    {57        static async Task Main(string[] args)58        {59            var apiZone = new ApiZone();ApiZone
Using AI Code Generation
1using Microsoft.Playwright.Transport;2var apiZone = new ApiZone();3apiZone.Run(async () =>4{5    await Playwright.InstallAsync();6    using var playwright = await Playwright.CreateAsync();7    var browser = await playwright.Chromium.LaunchAsync();8    var page = await browser.NewPageAsync();9    await page.ScreenshotAsync("screenshot.png");10    await browser.CloseAsync();11});12using Microsoft.Playwright.Transport;13var apiZone = new ApiZone();14apiZone.Run(async () =>15{16    await Playwright.InstallAsync();17    using var playwright = await Playwright.CreateAsync();18    var browser = await playwright.Chromium.LaunchAsync();19    var page = await browser.NewPageAsync();20    await page.ScreenshotAsync("screenshot.png");21    await browser.CloseAsync();22});ApiZone
Using AI Code Generation
1    using Microsoft.Playwright.Transport;2    using System;3    using System.Threading.Tasks;4    {5        {6            static async Task Main(string[] args)7            {8                var apiZone = new ApiZone();9                var playwright = await apiZone.Playwright.CreateAsync();10                var browser = await playwright.Chromium.LaunchAsync();11                var page = await browser.NewPageAsync();12                await page.ScreenshotAsync("example.png");13                await browser.CloseAsync();14            }15        }16    }17The code above will open a browser, navigate to Playwright website and take a screenshot of the page. The screenshot will be stored as a file in the same directory as the .cs file. You can find more examples in the [Playwright repository](ApiZone
Using AI Code Generation
1using Microsoft.Playwright.Transport;2using System;3using System.Threading.Tasks;4{5    {6        static async Task Main(string[] args)7        {8            var apiZone = new ApiZone();9            using var playwright = await apiZone.CreatePlaywrightAsync();10            await using var browser = await playwright.Chromium.LaunchAsync();11            var page = await browser.NewPageAsync();12            var content = await page.GetContentAsync();13            Console.WriteLine(content);14        }15    }16}17using Microsoft.Playwright;18using System;19using System.Threading.Tasks;20{21    {22        static async Task Main(string[] args)23        {24            var apiZone = new ApiZone();25            using var playwright = await apiZone.CreatePlaywrightAsync();26            await using var browser = await playwright.Chromium.LaunchAsync();27            var page = await browser.NewPageAsync();28            var content = await page.GetContentAsync();29            Console.WriteLine(content);30        }31    }32}33using Microsoft.Playwright;34using System;35using System.Threading.Tasks;36{37    {38        static async Task Main(string[] args)39        {40            var apiZone = new ApiZone();41            using var playwright = await apiZone.CreatePlaywrightAsync();42            await using var browser = await playwright.Chromium.LaunchAsync();43            var page = await browser.NewPageAsync();44            var content = await page.GetContentAsync();45            Console.WriteLine(content);46        }47    }48}49using Microsoft.Playwright;50using System;51using System.Threading.Tasks;52{53    {54        static async Task Main(string[] args)55        {56            var apiZone = new ApiZone();57            using var playwright = await apiZone.CreatePlaywrightAsync();58            await using var browser = await playwright.Chromium.LaunchAsync();59            var page = await browser.NewPageAsync();ApiZone
Using AI Code Generation
1using Microsoft.Playwright.Transport;2using System;3using System.Collections.Generic;4using System.Threading.Tasks;5{6    {7        static async Task Main(string[] args)8        {9            var playwright = await Playwright.CreateAsync();10            var browser = await playwright.Chromium.LaunchAsync();11            var context = await browser.NewContextAsync();12            var page = await context.NewPageAsync();13            var apiZone = new ApiZone();14            var api = apiZone.GetApi(page);15            var result = await api.EvaluateAsync("() => 1 + 2");16            Console.WriteLine(result);17        }18    }19}ApiZone
Using AI Code Generation
1var playwright = await Playwright.CreateAsync();2var browser = await playwright.Chromium.LaunchAsync(new BrowserTypeLaunchOptions3{4});5var context = await browser.NewContextAsync();6var page = await context.NewPageAsync();7await page.ScreenshotAsync(new PageScreenshotOptions8{9});10await browser.CloseAsync();11var playwright = await Playwright.CreateAsync();12var browser = await playwright.Chromium.LaunchAsync(new BrowserTypeLaunchOptions13{14});15var context = await browser.NewContextAsync();16var page = await context.NewPageAsync();17await page.ScreenshotAsync(new PageScreenshotOptions18{19});20await browser.CloseAsync();21var playwright = await Playwright.CreateAsync();22var browser = await playwright.Chromium.LaunchAsync(new BrowserTypeLaunchOptions23{24});25var context = await browser.NewContextAsync();26var page = await context.NewPageAsync();27await page.ScreenshotAsync(new PageScreenshotOptions28{29});30await browser.CloseAsync();31var playwright = await Playwright.CreateAsync();32var browser = await playwright.Chromium.LaunchAsync(new BrowserTypeLaunchOptions33{34});35var context = await browser.NewContextAsync();36var page = await context.NewPageAsync();37await page.ScreenshotAsync(new PageScreenshotOptions38{39});40await browser.CloseAsync();ApiZone
Using AI Code Generation
1using Microsoft.Playwright.Transport;2var apiZone = new ApiZone();3var playwright = await Playwright.CreateAsync();4var browser = await playwright.Chromium.LaunchAsync();5var page = await browser.NewPageAsync();6var textContent = await page.EvalOnSelectorAsync<string>("h1", "e => e.textContent");7await page.CloseAsync();8await browser.CloseAsync();9await playwright.DisposeAsync();10apiZone.Dispose();11using Microsoft.Playwright;12var apiZone = new ApiZone();13var playwright = await Playwright.CreateAsync();14var browser = await playwright.Chromium.LaunchAsync();15var page = await browser.NewPageAsync();16var textContent = await page.EvalOnSelectorAsync<string>("h1", "e => e.textContent");17await page.CloseAsync();18await browser.CloseAsync();19await playwright.DisposeAsync();20apiZone.Dispose();21using Microsoft.Playwright;22var apiZone = new ApiZone();23var playwright = await Playwright.CreateAsync();24var browser = await playwright.Chromium.LaunchAsync();25var page = await browser.NewPageAsync();26var textContent = await page.EvalOnSelectorAsync<string>("h1", "e => e.textContent");27await page.CloseAsync();28await browser.CloseAsync();29await playwright.DisposeAsync();30apiZone.Dispose();31using Microsoft.Playwright;32var apiZone = new ApiZone();33var playwright = await Playwright.CreateAsync();34var browser = await playwright.Chromium.LaunchAsync();35var page = await browser.NewPageAsync();36var textContent = await page.EvalOnSelectorAsync<string>("h1", "e => e.textContent");37await page.CloseAsync();38await browser.CloseAsync();39await playwright.DisposeAsync();40apiZone.Dispose();ApiZone
Using AI Code Generation
1using System;2using System.Collections.Generic;3using System.Text;4using Microsoft.Playwright.Transport;5using System.Threading.Tasks;6{7    {8        static async Task Main(string[] args)9        {10            ApiZone zone = new ApiZone();11            await zone.RunAsync(async () =>12            {13                var obj = new object();14                zone.Add(obj);15                Console.WriteLine(obj);16            });17        }18    }19}20using System;21using System.Collections.Generic;22using System.Text;23using Microsoft.Playwright.Transport;24using System.Threading.Tasks;25{26    {27        static async Task Main(string[] args)28        {29            ApiZone zone = new ApiZone();30            await zone.RunAsync(async () =>31            {32                var obj = new object();33                zone.Add(obj);34                Console.WriteLine(obj);35            });36        }37    }38}39using System;40using System.Collections.Generic;41using System.Text;42using Microsoft.Playwright.Transport;43using System.Threading.Tasks;44{45    {46        static async Task Main(string[] args)47        {48            ApiZone zone = new ApiZone();49            await zone.RunAsync(async () =>50            {51                var obj = new object();52                zone.Add(obj);53                Console.WriteLine(obj);54            });55        }56    }57}58using System;59using System.Collections.Generic;60using System.Text;61using Microsoft.Playwright.Transport;62using System.Threading.Tasks;63{64    {65        static async Task Main(string[] args)66        {67            ApiZone zone = new ApiZone();68            await zone.RunAsync(async () =>69            {70                var obj = new object();71                zone.Add(obj);72                Console.WriteLine(obj);73            });74        }75    }76}ApiZone
Using AI Code Generation
1using Microsoft.Playwright.Transport;2using System;3using System.Collections.Generic;4using System.Linq;5using System.Threading.Tasks;6{7    {8        static async Task Main(string[] args)9        {10            var apiZone = new ApiZone();11            var zones = await apiZone.GetZonesAsync();12            Console.WriteLine("List of zones in the current region:");13            foreach (var zone in zones)14            {15                Console.WriteLine(zone.Name);16            }17        }18    }19}LambdaTest’s Playwright tutorial will give you a broader idea about the Playwright automation framework, its unique features, and use cases with examples to exceed your understanding of Playwright testing. This tutorial will give A to Z guidance, from installing the Playwright framework to some best practices and advanced concepts.
Get 100 minutes of automation test minutes FREE!!
