Best Playwright-dotnet code snippet using Microsoft.Playwright.Tests.A
TestRunner.cs
Source: TestRunner.cs
...6using System.IO.Compression;7using System.Runtime.InteropServices;8using System.Threading;9using System.Threading.Tasks;10#if INSTALLPLAYWRIGHT11using PlaywrightSharp;12#endif13namespace RunTests14{15 public class TestRunner16 {17 public TestRunner(RunTestsOptions options)18 {19 Options = options;20 EnvironmentVariables = new Dictionary<string, string>();21 }22 public RunTestsOptions Options { get; set; }23 public Dictionary<string, string> EnvironmentVariables { get; set; }24 public bool SetupEnvironment()25 {26 try27 {28 EnvironmentVariables.Add("DOTNET_CLI_HOME", Options.HELIX_WORKITEM_ROOT);29 EnvironmentVariables.Add("PATH", Options.Path);30 EnvironmentVariables.Add("helix", Options.HelixQueue);31 Console.WriteLine($"Current Directory: {Options.HELIX_WORKITEM_ROOT}");32 var helixDir = Options.HELIX_WORKITEM_ROOT;33 Console.WriteLine($"Setting HELIX_DIR: {helixDir}");34 EnvironmentVariables.Add("HELIX_DIR", helixDir);35 EnvironmentVariables.Add("NUGET_FALLBACK_PACKAGES", helixDir);36 var nugetRestore = Path.Combine(helixDir, "nugetRestore");37 EnvironmentVariables.Add("NUGET_RESTORE", nugetRestore);38 var dotnetEFFullPath = Path.Combine(nugetRestore, helixDir, "dotnet-ef.exe");39 Console.WriteLine($"Set DotNetEfFullPath: {dotnetEFFullPath}");40 EnvironmentVariables.Add("DotNetEfFullPath", dotnetEFFullPath);41 var appRuntimePath = $"{Options.DotnetRoot}/shared/Microsoft.AspNetCore.App/{Options.RuntimeVersion}";42 Console.WriteLine($"Set ASPNET_RUNTIME_PATH: {appRuntimePath}");43 EnvironmentVariables.Add("ASPNET_RUNTIME_PATH", appRuntimePath);44 var dumpPath = Environment.GetEnvironmentVariable("HELIX_DUMP_FOLDER");45 Console.WriteLine($"Set VSTEST_DUMP_PATH: {dumpPath}");46 EnvironmentVariables.Add("VSTEST_DUMP_PATH", dumpPath);47#if INSTALLPLAYWRIGHT48 // Playwright will download and look for browsers to this directory49 var playwrightBrowsers = Environment.GetEnvironmentVariable("PLAYWRIGHT_BROWSERS_PATH");50 Console.WriteLine($"Setting PLAYWRIGHT_BROWSERS_PATH: {playwrightBrowsers}");51 EnvironmentVariables.Add("PLAYWRIGHT_BROWSERS_PATH", playwrightBrowsers);52 var playrightDriver = Environment.GetEnvironmentVariable("PLAYWRIGHT_DRIVER_PATH");53 Console.WriteLine($"Setting PLAYWRIGHT_DRIVER_PATH: {playrightDriver}");54 EnvironmentVariables.Add("PLAYWRIGHT_DRIVER_PATH", playrightDriver);55#else56 Console.WriteLine($"Skipping setting PLAYWRIGHT_BROWSERS_PATH");57#endif58 Console.WriteLine($"Creating nuget restore directory: {nugetRestore}");59 Directory.CreateDirectory(nugetRestore);60 // Rename default.runner.json to xunit.runner.json if there is not a custom one from the project61 if (!File.Exists("xunit.runner.json"))62 {63 File.Copy("default.runner.json", "xunit.runner.json");64 }65 DisplayContents(Path.Combine(Options.DotnetRoot, "host", "fxr"));66 DisplayContents(Path.Combine(Options.DotnetRoot, "shared", "Microsoft.NETCore.App"));67 DisplayContents(Path.Combine(Options.DotnetRoot, "shared", "Microsoft.AspNetCore.App"));68 DisplayContents(Path.Combine(Options.DotnetRoot, "packs", "Microsoft.AspNetCore.App.Ref"));69 return true;70 }71 catch (Exception e)72 {73 Console.WriteLine($"Exception in SetupEnvironment: {e.ToString()}");74 return false;75 }76 }77 public void DisplayContents(string path = "./")78 {79 try80 {81 Console.WriteLine();82 Console.WriteLine($"Displaying directory contents for {path}:");83 foreach (var file in Directory.EnumerateFiles(path))84 {85 Console.WriteLine(Path.GetFileName(file));86 }87 foreach (var file in Directory.EnumerateDirectories(path))88 {89 Console.WriteLine(Path.GetFileName(file));90 }91 Console.WriteLine();92 }93 catch (Exception e)94 {95 Console.WriteLine($"Exception in DisplayContents: {e.ToString()}");96 }97 }98#if INSTALLPLAYWRIGHT99 public async Task<bool> InstallPlaywrightAsync()100 {101 try102 {103 Console.WriteLine($"Installing Playwright to Browsers: {Environment.GetEnvironmentVariable("PLAYWRIGHT_BROWSERS_PATH")} Driver: {Environment.GetEnvironmentVariable("PLAYWRIGHT_DRIVER_PATH")}");104 await Playwright.InstallAsync(Environment.GetEnvironmentVariable("PLAYWRIGHT_BROWSERS_PATH"), Environment.GetEnvironmentVariable("PLAYWRIGHT_DRIVER_PATH"));105 DisplayContents(Environment.GetEnvironmentVariable("PLAYWRIGHT_BROWSERS_PATH"));106 return true;107 }108 catch (Exception e)109 {110 Console.WriteLine($"Exception installing playwright: {e.ToString()}");111 return false;112 }113 }114#endif115 public async Task<bool> InstallDotnetToolsAsync()116 {117 try118 {119 // Install dotnet-dump first so we can catch any failures from running dotnet after this (installing tools, running tests, etc.)120 await ProcessUtil.RunAsync($"{Options.DotnetRoot}/dotnet",121 $"tool install dotnet-dump --tool-path {Options.HELIX_WORKITEM_ROOT} --version 5.0.0-*",122 environmentVariables: EnvironmentVariables,123 outputDataReceived: Console.WriteLine,124 errorDataReceived: Console.Error.WriteLine,125 throwOnError: false,126 cancellationToken: new CancellationTokenSource(TimeSpan.FromMinutes(2)).Token);127 Console.WriteLine($"Adding current directory to nuget sources: {Options.HELIX_WORKITEM_ROOT}");128 await ProcessUtil.RunAsync($"{Options.DotnetRoot}/dotnet",129 $"nuget add source {Options.HELIX_WORKITEM_ROOT} --configfile NuGet.config",130 environmentVariables: EnvironmentVariables,131 outputDataReceived: Console.WriteLine,132 errorDataReceived: Console.Error.WriteLine,133 throwOnError: false,134 cancellationToken: new CancellationTokenSource(TimeSpan.FromMinutes(2)).Token);135 // Write nuget sources to console, useful for debugging purposes136 await ProcessUtil.RunAsync($"{Options.DotnetRoot}/dotnet",137 "nuget list source",138 environmentVariables: EnvironmentVariables,139 outputDataReceived: Console.WriteLine,140 errorDataReceived: Console.Error.WriteLine,141 throwOnError: false,142 cancellationToken: new CancellationTokenSource(TimeSpan.FromMinutes(2)).Token);143 await ProcessUtil.RunAsync($"{Options.DotnetRoot}/dotnet",144 $"tool install dotnet-ef --version {Options.EfVersion} --tool-path {Options.HELIX_WORKITEM_ROOT}",145 environmentVariables: EnvironmentVariables,146 outputDataReceived: Console.WriteLine,147 errorDataReceived: Console.Error.WriteLine,148 throwOnError: false,149 cancellationToken: new CancellationTokenSource(TimeSpan.FromMinutes(2)).Token);150 await ProcessUtil.RunAsync($"{Options.DotnetRoot}/dotnet",151 $"tool install dotnet-serve --tool-path {Options.HELIX_WORKITEM_ROOT}",152 environmentVariables: EnvironmentVariables,153 outputDataReceived: Console.WriteLine,154 errorDataReceived: Console.Error.WriteLine,155 throwOnError: false,156 cancellationToken: new CancellationTokenSource(TimeSpan.FromMinutes(2)).Token);157 return true;158 }159 catch (Exception e)160 {161 Console.WriteLine($"Exception in InstallDotnetTools: {e}");162 return false;163 }164 }165 public async Task<bool> CheckTestDiscoveryAsync()166 {167 try168 {169 // Run test discovery so we know if there are tests to run170 var discoveryResult = await ProcessUtil.RunAsync($"{Options.DotnetRoot}/dotnet",171 $"vstest {Options.Target} -lt",172 environmentVariables: EnvironmentVariables,173 cancellationToken: new CancellationTokenSource(TimeSpan.FromMinutes(2)).Token);174 if (discoveryResult.StandardOutput.Contains("Exception thrown"))175 {176 Console.WriteLine("Exception thrown during test discovery.");177 Console.WriteLine(discoveryResult.StandardOutput);178 return false;179 }180 return true;181 }182 catch (Exception e)183 {184 Console.WriteLine($"Exception in CheckTestDiscovery: {e.ToString()}");185 return false;186 }187 }188 public async Task<int> RunTestsAsync()189 {190 var exitCode = 0;191 try192 {193 // Timeout test run 5 minutes before the Helix job would timeout194 var cts = new CancellationTokenSource(Options.Timeout.Subtract(TimeSpan.FromMinutes(5)));195 var diagLog = Path.Combine(Environment.GetEnvironmentVariable("HELIX_WORKITEM_UPLOAD_ROOT"), "vstest.log");196 var commonTestArgs = $"test {Options.Target} --diag:{diagLog} --logger:xunit --logger:\"console;verbosity=normal\" --blame \"CollectHangDump;TestTimeout=15m\"";197 if (Options.Quarantined)198 {199 Console.WriteLine("Running quarantined tests.");200 // Filter syntax: https://github.com/Microsoft/vstest-docs/blob/master/docs/filter.md201 var result = await ProcessUtil.RunAsync($"{Options.DotnetRoot}/dotnet",202 commonTestArgs + " --TestCaseFilter:\"Quarantined=true\"",203 environmentVariables: EnvironmentVariables,204 outputDataReceived: Console.WriteLine,205 errorDataReceived: Console.Error.WriteLine,206 throwOnError: false,207 cancellationToken: cts.Token);208 if (result.ExitCode != 0)209 {210 Console.WriteLine($"Failure in quarantined tests. Exit code: {result.ExitCode}.");211 }212 }213 else214 {215 Console.WriteLine("Running non-quarantined tests.");216 // Filter syntax: https://github.com/Microsoft/vstest-docs/blob/master/docs/filter.md217 var result = await ProcessUtil.RunAsync($"{Options.DotnetRoot}/dotnet",218 commonTestArgs + " --TestCaseFilter:\"Quarantined!=true|Quarantined=false\"",219 environmentVariables: EnvironmentVariables,220 outputDataReceived: Console.WriteLine,221 errorDataReceived: Console.Error.WriteLine,222 throwOnError: false,223 cancellationToken: cts.Token);224 if (result.ExitCode != 0)225 {226 Console.WriteLine($"Failure in non-quarantined tests. Exit code: {result.ExitCode}.");227 exitCode = result.ExitCode;228 }229 }230 }231 catch (Exception e)232 {233 Console.WriteLine($"Exception in RunTests: {e.ToString()}");234 exitCode = 1;235 }236 return exitCode;237 }238 public void UploadResults()239 {240 // 'testResults.xml' is the file Helix looks for when processing test results241 Console.WriteLine("Trying to upload results...");242 if (File.Exists("TestResults/TestResults.xml"))243 {244 Console.WriteLine("Copying TestResults/TestResults.xml to ./testResults.xml");245 File.Copy("TestResults/TestResults.xml", "testResults.xml");246 }247 else248 {249 Console.WriteLine("No test results found.");250 }251 var HELIX_WORKITEM_UPLOAD_ROOT = Environment.GetEnvironmentVariable("HELIX_WORKITEM_UPLOAD_ROOT");252 if (string.IsNullOrEmpty(HELIX_WORKITEM_UPLOAD_ROOT))253 {254 Console.WriteLine("No HELIX_WORKITEM_UPLOAD_ROOT specified, skipping log copy");255 return;256 }257 Console.WriteLine($"Copying artifacts/log/ to {HELIX_WORKITEM_UPLOAD_ROOT}/");258 if (Directory.Exists("artifacts/log"))259 {260 foreach (var file in Directory.EnumerateFiles("artifacts/log", "*.log", SearchOption.AllDirectories))261 {262 // Combine the directory name + log name for the copied log file name to avoid overwriting duplicate test names in different test projects263 var logName = $"{Path.GetFileName(Path.GetDirectoryName(file))}_{Path.GetFileName(file)}";264 Console.WriteLine($"Copying: {file} to {Path.Combine(HELIX_WORKITEM_UPLOAD_ROOT, logName)}");265 File.Copy(file, Path.Combine(HELIX_WORKITEM_UPLOAD_ROOT, logName));266 }267 }268 else269 {270 Console.WriteLine("No logs found in artifacts/log");271 }272 Console.WriteLine($"Copying TestResults/**/Sequence*.xml to {HELIX_WORKITEM_UPLOAD_ROOT}/");273 if (Directory.Exists("TestResults"))274 {275 foreach (var file in Directory.EnumerateFiles("TestResults", "Sequence*.xml", SearchOption.AllDirectories))276 {277 var fileName = Path.GetFileName(file);278 Console.WriteLine($"Copying: {file} to {Path.Combine(HELIX_WORKITEM_UPLOAD_ROOT, fileName)}");279 File.Copy(file, Path.Combine(HELIX_WORKITEM_UPLOAD_ROOT, fileName));280 }281 }282 else283 {284 Console.WriteLine("No TestResults directory found.");285 }286 }287 }288}...
SimicSnowStompyTestSuite.cs
Source: SimicSnowStompyTestSuite.cs
...10using Serilog;11namespace Carpentry.PlaywrightTests12{13 [TestClass]14 public class SimicSnowAngularTests : SimicSnowTestBase15 {16 public SimicSnowAngularTests() : base(AppType.Angular) { }17 }18 [TestClass]19 public class SimicSnowReactTests : SimicSnowTestBase20 {21 public SimicSnowReactTests() : base(AppType.React) { }22 }23 public class SimicSnowTestBase24 {25 private static int APP_INIT_DELAY = 5000;26 private Mock<ILogger> _mockLogger;27 private IPage _page;28 private readonly AppSettings _appSettings;29 private readonly SeedData _seedData;30 public SimicSnowTestBase(AppType appType)31 {32 _seedData = new SeedData();33 _appSettings = new AppSettings()34 {35 AppEnvironment = appType,36 AngularUrl = "https://localhost:44335/",37 ReactUrl = "http://localhost:23374/",38 };39 _appSettings.AppUrl = _appSettings.AppEnvironment == AppType.Angular40 ? _appSettings.AngularUrl41 : _appSettings.ReactUrl;42 }43 44 //BeforeAll: Attempt to reset the DB45 46 //Assert the app is running in a test mode (somehow, maybe from the core api?)47 48 //BeforeEach: Wait for the page to be loaded49 [TestInitialize]50 public async Task BeforeEach()51 {52 // using var playwright = await Playwright.CreateAsync();53 // await using var browser = await playwright.Chromium.LaunchAsync(new BrowserTypeLaunchOptions()54 // {55 // Headless = false,56 // //SlowMo = 50,57 // });58 //59 // _page = await browser.NewPageAsync();60 _mockLogger = new Mock<ILogger>();61 // await WaitForApp(_page);62 }63 64 private async Task WaitForApp(IPage page)65 {66 bool pageIsLoaded = false;67 while (!pageIsLoaded)68 {69 try70 {71 await page.GotoAsync(_appSettings.AppUrl, new PageGotoOptions() { Timeout = 0 }); //TODO add a natural timeout instead of handling an exception72 pageIsLoaded = true;73 }74 catch75 {76 await Task.Delay(APP_INIT_DELAY);77 }78 }79 bool appIsLoaded = false;80 while (!appIsLoaded)81 {82 try83 {84 var appText = await page.TextContentAsync("#root");85 if (appText != "Loading...")86 {87 appIsLoaded = true;88 continue;89 };90 }91 catch92 {93 // _logger.Information("Error loading app");94 }95 // _logger.Information("App not loaded, delaying before retrying...");96 await Task.Delay(APP_INIT_DELAY);97 }98 // _logger.Information($"{nameof(WaitForApp)} completed");99 }100 101 [TestMethod]102 public async Task Test_00_HomePage_Loads()103 {104 using var playwright = await Playwright.CreateAsync();105 await using var browser = await playwright.Chromium.LaunchAsync(new BrowserTypeLaunchOptions()106 {107 Headless = false,108 });109 _page = await browser.NewPageAsync();110 await WaitForApp(_page);111 112 var test = new Test00HomePageLoads(_page, _appSettings.AppEnvironment, _appSettings.AppUrl, _mockLogger.Object);113 await test.Run();114 }115 [TestMethod]116 public async Task Test_01_Settings_TrackSnowSets()117 {118 using var playwright = await Playwright.CreateAsync();119 await using var browser = await playwright.Chromium.LaunchAsync(new BrowserTypeLaunchOptions()120 {121 Headless = false,122 });123 _page = await browser.NewPageAsync();124 await WaitForApp(_page);125 var test = new Test01SettingsTrackSnowSets(_page, _appSettings.AppEnvironment, _appSettings.AppUrl, _mockLogger.Object);126 await test.Run();127 }128 [TestMethod]129 public async Task Test_02_Inventory_AddSnowCards()130 {131 using var playwright = await Playwright.CreateAsync();132 await using var browser = await playwright.Chromium.LaunchAsync(new BrowserTypeLaunchOptions()133 {134 Headless = false,135 });136 _page = await browser.NewPageAsync();137 await WaitForApp(_page);138 139 var test = new Test02InventoryAddSnowCards(_page, _appSettings.AppUrl, _seedData, _mockLogger.Object, _appSettings.AppEnvironment);140 await test.Run();141 }142 143 [TestMethod]144 public async Task Test_03_Inventory_ConfirmCards()145 {146 using var playwright = await Playwright.CreateAsync();147 await using var browser = await playwright.Chromium.LaunchAsync(new BrowserTypeLaunchOptions()148 {149 Headless = false,150 });151 _page = await browser.NewPageAsync();152 await WaitForApp(_page);153 154 var test = new Test03ConfirmInventoryCards(_page, _appSettings.AppUrl, _seedData, _appSettings.AppEnvironment);155 await test.Run();156 }157 158 [TestMethod]159 public async Task Test_04_Decks_CreateSnowDeck()160 {161 using var playwright = await Playwright.CreateAsync();162 await using var browser = await playwright.Chromium.LaunchAsync(new BrowserTypeLaunchOptions()163 {164 Headless = false,165 });166 _page = await browser.NewPageAsync();167 await WaitForApp(_page);168 169 var test = new Test04CreateSnowDeck(_page, _appSettings.AppUrl, _seedData, _appSettings.AppEnvironment);170 await test.Run();171 }172 }173}...
WebServerTests.cs
Source: WebServerTests.cs
1using AdvancedActions;2using Microsoft.AspNetCore.Hosting;3using Microsoft.Extensions.Hosting;4using Microsoft.Playwright;5using System;6using System.Net;7using System.Net.Sockets;8using System.Threading.Tasks;9using Xunit;10namespace Tests11{12 public class WebServerDriver : IAsyncLifetime, IDisposable13 {14 private readonly IHost host;15 private IPlaywright playwright { get; set; }16 public IBrowser browser { get; private set; }17 public string baseUrl { get; } = $"https://localhost:{GetRandomUnusedPort()}";18 public WebServerDriver()19 {20 host = AdvancedActions.Program21 .CreateHostBuilder(null)22 .ConfigureWebHostDefaults(webBuilder =>23 {24 webBuilder.UseStartup<Startup>();25 webBuilder.UseUrls(baseUrl);26 })27 .ConfigureServices(configure =>28 { })29 .Build();30 }31 public async Task InitializeAsync()32 {33 playwright = await Playwright.CreateAsync();34 browser = await playwright.Chromium.LaunchAsync();35 // Browser = await Playwright.Chromium.LaunchAsync(new LaunchOptions36 // {37 // Headless = false38 // });39 await host.StartAsync();40 }41 public async Task DisposeAsync()42 {43 await host.StopAsync();44 host?.Dispose();45 playwright?.Dispose();46 }47 public void Dispose()48 {49 host?.Dispose();50 playwright?.Dispose();51 }52 private static int GetRandomUnusedPort()53 {54 var listener = new TcpListener(IPAddress.Any, 0);55 listener.Start();56 var port = ((IPEndPoint)listener.LocalEndpoint).Port;57 listener.Stop();58 return port;59 }60 }61 public class WebServerTests : IClassFixture<WebServerDriver>62 {63 private readonly WebServerDriver driver;64 public WebServerTests(WebServerDriver driver)65 {66 this.driver = driver;67 }68 [Fact]69 public async Task PageTitleIsIndex()70 {71 await using var context = await driver.browser.NewContextAsync(new() { IgnoreHTTPSErrors = true });72 var page = await context.NewPageAsync();73 await page.GotoAsync(driver.baseUrl);74 var title = await page.TitleAsync();75 Assert.Equal("Dogs", title);76 }77 }78}
JSFacadeTests.cs
Source: JSFacadeTests.cs
2// Licensed under the MIT license. See LICENSE file in the project root for full license information.3using System.Threading.Tasks;4using Xunit;5using System;6using Teronis.AspNetCore.Components.NUnit;7using System.Xml.Linq;8using System.Linq;9using Xunit.Abstractions;10using Teronis.Microsoft.JSInterop.Infrastructure;11namespace Teronis.Microsoft.JSInterop12{13 public class JSFacadeTests : IClassFixture<TestWebHostFixture<WebHostStartup>>, IClassFixture<PlaywrightFixture>14 {15 private readonly TestWebHostFixture<WebHostStartup> server;16 private readonly PlaywrightFixture playwright;17 private readonly ITestOutputHelper output;18 public JSFacadeTests(TestWebHostFixture<WebHostStartup> server, PlaywrightFixture playwright, ITestOutputHelper output)19 {20 this.server = server ?? throw new ArgumentNullException(nameof(server));21 this.playwright = playwright ?? throw new ArgumentNullException(nameof(playwright));22 this.output = output ?? throw new ArgumentNullException(nameof(output));23 }24 [Fact]25 public async Task Should_have_passed_nunit_report()26 {27 var applicationUrl = server.ApplicationUrl;28 await using var browser = await playwright.Instance.Chromium.LaunchAsync();29 var page = await browser.NewPageAsync();30 var applicationUri = new Uri(applicationUrl);31 var pageUri = new Uri(applicationUri, "/");32 await page.GoToAsync(pageUri.AbsoluteUri);33 await page.WaitForSelectorAsync(NUnitTestsReportDefaults.NUnitXmlReportRenderedAttributeSelector);34 var nunitXmlReport = await page.GetTextContentAsync(NUnitTestsReportDefaults.NUnitXmlReportIdSelector);35 output.WriteLine(nunitXmlReport);36 Assert.True(37 XDocument.Parse(nunitXmlReport)38 .Descendants("test-suite")39 .All(x => {40 var attribute = x.Attribute("result");41 if (attribute is null) {42 throw new ArgumentNullException(nameof(attribute));43 }44 return attribute.Value.ToLower() == "passed";45 }));46 }47 }48}
PlaywrightDriverManagerTests.cs
Source: PlaywrightDriverManagerTests.cs
1//-----------------------------------------------------2// <copyright file="PlaywrightDriverManagerTests.cs" company="Cognizant">3// Copyright 2022 Cognizant, All rights Reserved4// </copyright>5// <summary>Test Playwright driver manager</summary>6//-----------------------------------------------------7using CognizantSoftvision.Maqs.BasePlaywrightTest;8using CognizantSoftvision.Maqs.Utilities.Helper;9using Microsoft.Playwright;10using Microsoft.VisualStudio.TestTools.UnitTesting;11using System.Diagnostics.CodeAnalysis;12namespace PlaywrightTests13{14 /// <summary>15 /// Test driver manager16 /// </summary>17 [TestClass]18 [ExcludeFromCodeCoverage]19 [TestCategory(TestCategories.Playwright)]20 public class PlaywrightDriverManagerTests : BasePlaywrightTest21 {22 /// <summary>23 /// Make we can update the store with a new manager using an IPage24 /// </summary>25 [TestMethod]26 public void RespectsNewIPageViaManager()27 {28 var newPage = GetNewPage();29 this.ManagerStore.AddOrOverride(new PlaywrightDriverManager(() => newPage, this.TestObject));30 Assert.AreEqual(newPage, this.PageDriver.AsyncPage);31 }32 /// <summary>33 /// Make we can update the drive with a IPage object34 /// </summary>35 [TestMethod]36 public void RespectsNewIPageViaOverride()37 {38 var newPage = GetNewPage();39 this.TestObject.OverridePageDriver(newPage);40 Assert.AreEqual(newPage, this.PageDriver.AsyncPage);41 }42 /// <summary>43 /// Make we can update the drive with a IPage function44 /// </summary>45 [TestMethod]46 public void RespectsNewIPageViaOverrideFunc()47 {48 var newPage = GetNewPage();49 this.TestObject.OverridePageDriver(() => newPage);50 Assert.AreEqual(newPage, this.PageDriver.AsyncPage);51 }52 /// <summary>53 /// Get a new IPage54 /// </summary>55 /// <returns>A new IPAge</returns>56 private static IPage GetNewPage()57 {58 return PageDriverFactory.GetPageDriverForBrowserWithDefaults(PlaywrightBrowser.Webkit).AsyncPage;59 }60 }61}...
PlaywrightTests.cs
Source: PlaywrightTests.cs
...9 {10 [TestMethod]11 public async Task RecorderGeneratedMSTest()12 {13 using var playwright = await Playwright.CreateAsync();14 await using var browser = await playwright.Chromium.LaunchAsync(new BrowserTypeLaunchOptions {15 Headless = false,16 Channel = "msedge",17 });18 var context = await browser.NewContextAsync();19 // Open new page20 var page = await context.NewPageAsync();21 // Go to https://playwright.dev/22 await page.GotoAsync("https://playwright.dev/");23 // Click text=Docs24 await page.ClickAsync("text=Docs");25 Assert.AreEqual("https://playwright.dev/docs/intro", page.Url);26 // Click text=Supported languages27 await page.ClickAsync("text=Supported languages");28 Assert.AreEqual("https://playwright.dev/docs/languages", page.Url);29 // Click article >> text=.NET30 await page.ClickAsync("article >> text=.NET");31 Assert.AreEqual("https://playwright.dev/docs/languages#net", page.Url);32 }33 [TestMethod]34 public Task NewRecordedWebUITest()35 {36 return Task.CompletedTask;37 }38 }39}...
PlayWrightUiTestsBase.cs
Source: PlayWrightUiTestsBase.cs
...9 [Collection("Stop parallell run")]10#endif11 12 // Todo: Change or remove this class? It's not so useful13 public abstract class PlayWrightUiTestsBase : IAsyncDisposable14 {15 protected readonly string BaseUrl = "https://localhost:5001";16 protected readonly IPlaywright Playwright;17 protected readonly IBrowser Browser;18 protected readonly IPage Page;19 protected readonly IBrowserContext Context;20 protected PlayWrightUiTestsBase()21 {22 BaseUrl = Environment.GetEnvironmentVariable("BaseUrl") ?? BaseUrl;23 Playwright = Microsoft.Playwright.Playwright.CreateAsync().GetAwaiter().GetResult();24 Browser = Playwright.Chromium.LaunchAsync(new BrowserTypeLaunchOptions25 {26 Devtools = false,27 }).GetAwaiter().GetResult();28 Context = Browser.NewContextAsync(new BrowserNewContextOptions()29 {30 // RecordVideoDir = "./recordings",31 }).GetAwaiter().GetResult();32 Page = Context.NewPageAsync().GetAwaiter().GetResult();33 }34 35 public async ValueTask DisposeAsync()36 {37 await Context.CloseAsync();38 await Browser.CloseAsync();39 Playwright?.Dispose();40 }41 }42}...
HooksInitializer.cs
Source: HooksInitializer.cs
...17 {18 PlaywrightDriver playwrightDriver = new PlaywrightDriver();19 _context.Page = await playwrightDriver.CreatePlaywright(BrowserType.Chromium, new BrowserTypeLaunchOptions { Headless = false });20 }21 [AfterScenario]22 public async Task AfterScenario()23 {24 await _context.Page.CloseAsync();25 }26 }27}...
A
Using AI Code Generation
1using Microsoft.Playwright.Tests;2using Microsoft.Playwright.Tests;3using Microsoft.Playwright.Tests;4using Microsoft.Playwright.Tests;5using Microsoft.Playwright.Tests;6using Microsoft.Playwright.Tests;7using Microsoft.Playwright.Tests;8using Microsoft.Playwright.Tests;9using Microsoft.Playwright.Tests;10using Microsoft.Playwright.Tests;11using Microsoft.Playwright.Tests;12using Microsoft.Playwright.Tests;13using Microsoft.Playwright.Tests;14using Microsoft.Playwright.Tests;15using Microsoft.Playwright.Tests;16using Microsoft.Playwright.Tests;17using Microsoft.Playwright.Tests;18using Microsoft.Playwright.Tests;19using Microsoft.Playwright.Tests;20using Microsoft.Playwright.Tests;21using Microsoft.Playwright.Tests;22using Microsoft.Playwright.Tests;23using Microsoft.Playwright.Tests;24using Microsoft.Playwright.Tests;25using Microsoft.Playwright.Tests;26using Microsoft.Playwright.Tests;
A
Using AI Code Generation
1using Microsoft.Playwright.Tests;2using Microsoft.Playwright.Tests;3using Microsoft.Playwright.Tests;4using Microsoft.Playwright.Tests;5using Microsoft.Playwright.Tests;6using Microsoft.Playwright.Tests;7using Microsoft.Playwright.Tests;8using Microsoft.Playwright.Tests;9using Microsoft.Playwright.Tests;10using Microsoft.Playwright.Tests;11using Microsoft.Playwright.Tests;12using Microsoft.Playwright.Tests;13using Microsoft.Playwright.Tests;14using Microsoft.Playwright.Tests;15using Microsoft.Playwright.Tests;16using Microsoft.Playwright.Tests;17using Microsoft.Playwright.Tests;18using Microsoft.Playwright.Tests;19using Microsoft.Playwright.Tests;20using Microsoft.Playwright.Tests;21using Microsoft.Playwright.Tests;22using Microsoft.Playwright.Tests;
A
Using AI Code Generation
1using Microsoft.Playwright.Tests;2using System;3using System.Collections.Generic;4using System.Linq;5using System.Text;6using System.Threading.Tasks;7{8 {9 static void Main(string[] args)10 {11 A a = new A();12 a.Test();13 }14 }15}16I can't use the following code to use A class of Microsoft.Playwright.Tests package, it shows error: The type or namespace name 'Microsoft' could not be found (are you missing a using directive or an assembly reference?)
A
Using AI Code Generation
1using Microsoft.Playwright.Tests;2var a = new A();3a.Do();4using Microsoft.Playwright.Tests;5var b = new B();6b.Do();7using Microsoft.Playwright.Tests;8var c = new C();9c.Do();10using Microsoft.Playwright.Tests;11var d = new D();12d.Do();13using Microsoft.Playwright.Tests;14var e = new E();15e.Do();16using Microsoft.Playwright.Tests;17var f = new F();18f.Do();19using Microsoft.Playwright.Tests;20var g = new G();21g.Do();22using Microsoft.Playwright.Tests;23var h = new H();24h.Do();25using Microsoft.Playwright.Tests;26var i = new I();27i.Do();28using Microsoft.Playwright.Tests;29var j = new J();30j.Do();31using Microsoft.Playwright.Tests;32var k = new K();33k.Do();34using Microsoft.Playwright.Tests;35var l = new L();36l.Do();37using Microsoft.Playwright.Tests;38var m = new M();39m.Do();40using Microsoft.Playwright.Tests;41var n = new N();42n.Do();43using Microsoft.Playwright.Tests;
A
Using AI Code Generation
1var a = new A();2a.DoSomething();3var b = new B();4b.DoSomething();5var c = new C();6c.DoSomething();7var d = new D();8d.DoSomething();9var e = new E();10e.DoSomething();11var f = new F();12f.DoSomething();13var g = new G();14g.DoSomething();15var h = new H();16h.DoSomething();17var i = new I();18i.DoSomething();19var j = new J();20j.DoSomething();21var k = new K();22k.DoSomething();23var l = new L();24l.DoSomething();25var m = new M();26m.DoSomething();27var n = new N();28n.DoSomething();29var o = new O();30o.DoSomething();31var p = new P();32p.DoSomething();33var q = new Q();34q.DoSomething();
A
Using AI Code Generation
1using Microsoft.Playwright.Tests;2using System;3{4 {5 static void Main(string[] args)6 {7 A a = new A();8 Console.WriteLine(a.Name);9 Console.WriteLine(a.Age);10 }11 }12}
A
Using AI Code Generation
1using Microsoft.Playwright;2using Microsoft.Playwright.Tests;3using Microsoft.Playwright.Tests.A;4error CS0246: The type or namespace name 'A' could not be found (are you missing a using directive or an assembly reference?)5using Microsoft.Playwright.A;6error CS0246: The type or namespace name 'A' could not be found (are you missing a using directive or an assembly reference?)7using Microsoft.Playwright.Tests.Microsoft.Playwright.A;8error CS0246: The type or namespace name 'Microsoft' could not be found (are you missing a using directive or an assembly reference?)9using Microsoft.Playwright.Tests.Microsoft.Playwright;10error CS0246: The type or namespace name 'Microsoft' could not be found (are you missing a using directive or an assembly reference?)11using Microsoft.Playwright.Tests.Microsoft.Playwright.Tests;12error CS0246: The type or namespace name 'Microsoft' could not be found (are you missing a using directive or an assembly reference?)
Playwright Multiple Elements - Is there an equivalent to Selenium FindElements?
How to handle multiple file downloads in Playwright?
Run Playwright.NET tests in Docker container
How to handle multiple file downloads in Playwright?
Running playwright in headed mode C#
Playwright (.NET) tries to use different browser versions than installed
Playwright "Element is not attached to the DOM"
Playwright Multiple Elements - Is there an equivalent to Selenium FindElements?
Microsoft.Playwright.PlaywrightException : unable to verify the first certificate Using Playwright C# While connecting Moon
How do you create a global configuration for Playwright .NET?
Using a selector that finds a list of locators in Playwright is exactly the same as calling .FindElements() in selenium, except that Playwright does not have a specifically named method like .FindLocators().
Playwright - a selector that matches multiple elements returns a list of locators, which you then iterate over:
var rows = page.GetByRole(AriaRole.Listitem);
var count = await rows.CountAsync();
for (int i = 0; i < count; ++i)
Console.WriteLine(await rows.Nth(i).TextContentAsync());
Selenium - FindElements returns a list of elements that you have to iterate over.
IList < IWebElement > elements = driver.FindElements(By.TagName("p"));
foreach(IWebElement e in elements) {
System.Console.WriteLine(e.Text);
}
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!!