Skip to content

Commit daa7754

Browse files
kamal-kaur04francisf
authored andcommitted
added csharp sample scripts
1 parent 0c23402 commit daa7754

File tree

8 files changed

+295
-7
lines changed

8 files changed

+295
-7
lines changed
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
<Project Sdk="Microsoft.NET.Sdk">
2+
3+
<PropertyGroup>
4+
<OutputType>Exe</OutputType>
5+
<TargetFramework>net6.0</TargetFramework>
6+
<ImplicitUsings>enable</ImplicitUsings>
7+
<Nullable>enable</Nullable>
8+
</PropertyGroup>
9+
10+
<ItemGroup>
11+
<PackageReference Include="Microsoft.Playwright" Version="1.19.1" />
12+
<PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
13+
</ItemGroup>
14+
15+
</Project>
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
using Microsoft.Playwright;
2+
using System.Threading.Tasks;
3+
using System;
4+
using System.Collections.Generic;
5+
using Newtonsoft.Json;
6+
7+
class PlaywrightLocalTest
8+
{
9+
public static async Task main(string[] args)
10+
{
11+
using var playwright = await Playwright.CreateAsync();
12+
13+
Dictionary<string, string> browserstackOptions = new Dictionary<string, string>();
14+
browserstackOptions.Add("name", "Playwright local sample test");
15+
browserstackOptions.Add("build", "playwright-build-3");
16+
browserstackOptions.Add("os", "osx");
17+
browserstackOptions.Add("os_version", "catalina");
18+
browserstackOptions.Add("browser", "chrome"); // allowed browsers are `chrome`, `edge`, `playwright-chromium`, `playwright-firefox` and `playwright-webkit`
19+
browserstackOptions.Add("browserstack.username", "BROWSERSTACK_USERNAME");
20+
browserstackOptions.Add("browserstack.accessKey", "BROWSERSTACK_ACCESS_KEY");
21+
browserstackOptions.Add("browserstack.local", "true");
22+
string capsJson = JsonConvert.SerializeObject(browserstackOptions);
23+
string cdpUrl = "wss://cdp.browserstack.com/playwright?caps=" + Uri.EscapeDataString(capsJson);
24+
25+
await using var browser = await playwright.Chromium.ConnectAsync(cdpUrl);
26+
var page = await browser.NewPageAsync();
27+
try {
28+
await page.GotoAsync("https://www.google.co.in/");
29+
await page.Locator("[aria-label='Search']").ClickAsync();
30+
await page.FillAsync("[aria-label='Search']", "BrowserStack");
31+
await page.Locator("[aria-label='Google Search'] >> nth=0").ClickAsync();
32+
var title = await page.TitleAsync();
33+
34+
if (title == "BrowserStack - Google Search")
35+
{
36+
// following line of code is responsible for marking the status of the test on BrowserStack as 'passed'. You can use this code in your after hook after each test
37+
await page.EvaluateAsync("_ => {}", "browserstack_executor: {\"action\":\"setSessionStatus\",\"arguments\":{\"status\":\"passed\",\"reason\":\"Title matched\"}}");
38+
}
39+
}
40+
catch {
41+
await page.EvaluateAsync("_ => {}", "browserstack_executor: {\"action\": \"setSessionStatus\", \"arguments\": {\"status\":\"failed\", \"reason\": \" Title did not match\"}}");
42+
}
43+
await browser.CloseAsync();
44+
}
45+
}
Lines changed: 122 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,122 @@
1+
using Microsoft.Playwright;
2+
using System;
3+
using System.Threading;
4+
using System.Threading.Tasks;
5+
using System.Collections.Generic;
6+
using Newtonsoft.Json;
7+
8+
class PlaywrightParallelTest
9+
{
10+
public static async Task main(string[] args)
11+
{
12+
// The following capability variables contains the set of os/browser environments where you want to run your tests. You can choose to alter this list according to your needs. Read more on https://browserstack.com/docs/automate/playwright/browsers-and-os
13+
try {
14+
// allowed browsers are `chrome`, `edge`, `playwright-chromium`, `playwright-firefox` and `playwright-webkit`
15+
// browser_version capability is valid only for branded `chrome` and `edge` browsers and you can specify any browser version like `latest`, `latest-beta`, `latest-1` and so on.
16+
var device1 = SampleTestCase("playwright-chromium", "latest", "osx", "Catalina", "macOS Catalina - Chrome latest", "Parallel-build-2");
17+
var device2 = SampleTestCase("chrome", "latest", "osx", "catalina", "Branded Google Chrome on Catalina", "Parallel-build-2");
18+
var device3 = SampleTestCase("edge", "latest", "osx", "catalina", "Branded Microsoft Edge on Catalina", "Parallel-build-2");
19+
var device4 = SampleTestCase("playwright-firefox", "latest", "osx", "catalina", "Playwright firefox on Catalina", "Parallel-build-2");
20+
var device5 = SampleTestCase("playwright-webkit", "latest", "osx", "catalina", "Playwright webkit on Catalina", "Parallel-build-2");
21+
22+
//Executing the methods
23+
await Task.WhenAll(device1, device2, device3, device4, device5);
24+
} catch (Exception e) {
25+
Console.WriteLine(e);
26+
}
27+
}
28+
static async Task SampleTestCase(String browser_name, String browser_version, String os, String os_version, String test_name, String build_name)
29+
{
30+
Dictionary<string, string> browserstackOptions = new Dictionary<string, string>();
31+
string capsJson;
32+
33+
try {
34+
35+
switch (browser_name)
36+
{
37+
case "playwright-chromium":
38+
browserstackOptions.Add("build", build_name);
39+
browserstackOptions.Add("name", test_name);
40+
browserstackOptions.Add("os", os);
41+
browserstackOptions.Add("os_version", os_version);
42+
browserstackOptions.Add("browser", browser_name);
43+
browserstackOptions.Add("browser_version", browser_version);
44+
browserstackOptions.Add("browserstack.username", "BROWSERSTACK_USERNAME");
45+
browserstackOptions.Add("browserstack.accessKey", "BROWSERSTACK_ACCESS_KEY");
46+
capsJson = JsonConvert.SerializeObject(browserstackOptions);
47+
var task = Executetestwithcaps(capsJson);
48+
await task;
49+
break;
50+
case "chrome":
51+
browserstackOptions.Add("build", build_name);
52+
browserstackOptions.Add("name", test_name);
53+
browserstackOptions.Add("os", os);
54+
browserstackOptions.Add("os_version", os_version);
55+
browserstackOptions.Add("browser", browser_name);
56+
browserstackOptions.Add("browser_version", browser_version);
57+
browserstackOptions.Add("browserstack.username", "BROWSERSTACK_USERNAME");
58+
browserstackOptions.Add("browserstack.accessKey", "BROWSERSTACK_ACCESS_KEY");
59+
capsJson = JsonConvert.SerializeObject(browserstackOptions);
60+
task = Executetestwithcaps(capsJson);
61+
await task;
62+
break;
63+
case "playwright-firefox":
64+
browserstackOptions.Add("build", build_name);
65+
browserstackOptions.Add("name", test_name);
66+
browserstackOptions.Add("os", os);
67+
browserstackOptions.Add("os_version", os_version);
68+
browserstackOptions.Add("browser", browser_name);
69+
browserstackOptions.Add("browser_version", browser_version);
70+
browserstackOptions.Add("browserstack.username", "BROWSERSTACK_USERNAME");
71+
browserstackOptions.Add("browserstack.accessKey", "BROWSERSTACK_ACCESS_KEY");
72+
capsJson = JsonConvert.SerializeObject(browserstackOptions);
73+
task = Executetestwithcaps(capsJson);
74+
await task;
75+
break;
76+
default:
77+
browserstackOptions.Add("build", build_name);
78+
browserstackOptions.Add("name", test_name);
79+
browserstackOptions.Add("os", os);
80+
browserstackOptions.Add("os_version", os_version);
81+
browserstackOptions.Add("browser", browser_name);
82+
browserstackOptions.Add("browser_version", browser_version);
83+
browserstackOptions.Add("browserstack.username", "BROWSERSTACK_USERNAME");
84+
browserstackOptions.Add("browserstack.accessKey", "BROWSERSTACK_ACCESS_KEY");
85+
capsJson = JsonConvert.SerializeObject(browserstackOptions);
86+
task = Executetestwithcaps(capsJson);
87+
await task;
88+
break;
89+
}
90+
} catch (Exception e) {
91+
Console.WriteLine(e);
92+
}
93+
}
94+
95+
//Executetestwithcaps function takes capabilities from 'SampleTestCase' function and executes the test
96+
public static async Task Executetestwithcaps(string capabilities)
97+
{
98+
using var playwright = await Playwright.CreateAsync();
99+
string cdpUrl = "wss://cdp.browserstack.com/playwright?caps=" + Uri.EscapeDataString(capabilities);
100+
101+
await using var browser = await playwright.Chromium.ConnectAsync(cdpUrl);
102+
var page = await browser.NewPageAsync();
103+
try {
104+
await page.GotoAsync("https://www.google.co.in/");
105+
await page.Locator("[aria-label='Search']").ClickAsync();
106+
await page.FillAsync("[aria-label='Search']", "BrowserStack");
107+
await page.Locator("[aria-label='Google Search'] >> nth=0").ClickAsync();
108+
var title = await page.TitleAsync();
109+
110+
if (title == "BrowserStack - Google Search")
111+
{
112+
// following line of code is responsible for marking the status of the test on BrowserStack as 'passed'. You can use this code in your after hook after each test
113+
await page.EvaluateAsync("_ => {}", "browserstack_executor: {\"action\":\"setSessionStatus\",\"arguments\":{\"status\":\"passed\",\"reason\":\"Title matched\"}}");
114+
}
115+
}
116+
catch (Exception e) {
117+
Console.WriteLine(e);
118+
await page.EvaluateAsync("_ => {}", "browserstack_executor: {\"action\": \"setSessionStatus\", \"arguments\": {\"status\":\"failed\", \"reason\": \" Title did not match\"}}");
119+
}
120+
await browser.CloseAsync();
121+
}
122+
}
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
using Microsoft.Playwright;
2+
using System.Threading.Tasks;
3+
using System;
4+
using System.Collections.Generic;
5+
using Newtonsoft.Json;
6+
7+
class PlaywrightSingleTest
8+
{
9+
public static async Task main(string[] args)
10+
{
11+
using var playwright = await Playwright.CreateAsync();
12+
13+
Dictionary<string, string> browserstackOptions = new Dictionary<string, string>();
14+
browserstackOptions.Add("name", "Playwright first sample test");
15+
browserstackOptions.Add("build", "playwright-build-1");
16+
browserstackOptions.Add("os", "osx");
17+
browserstackOptions.Add("os_version", "catalina");
18+
browserstackOptions.Add("browser", "chrome"); // allowed browsers are `chrome`, `edge`, `playwright-chromium`, `playwright-firefox` and `playwright-webkit`
19+
browserstackOptions.Add("browserstack.username", "BROWSERSTACK_USERNAME");
20+
browserstackOptions.Add("browserstack.accessKey", "BROWSERSTACK_ACCESS_KEY");
21+
string capsJson = JsonConvert.SerializeObject(browserstackOptions);
22+
string cdpUrl = "wss://cdp.browserstack.com/playwright?caps=" + Uri.EscapeDataString(capsJson);
23+
24+
await using var browser = await playwright.Chromium.ConnectAsync(cdpUrl);
25+
var page = await browser.NewPageAsync();
26+
try {
27+
await page.GotoAsync("https://www.google.co.in/");
28+
await page.Locator("[aria-label='Search']").ClickAsync();
29+
await page.FillAsync("[aria-label='Search']", "BrowserStack");
30+
await page.Locator("[aria-label='Google Search'] >> nth=0").ClickAsync();
31+
var title = await page.TitleAsync();
32+
33+
if (title == "BrowserStack - Google Search")
34+
{
35+
// following line of code is responsible for marking the status of the test on BrowserStack as 'passed'. You can use this code in your after hook after each test
36+
await page.EvaluateAsync("_ => {}", "browserstack_executor: {\"action\":\"setSessionStatus\",\"arguments\":{\"status\":\"passed\",\"reason\":\"Title matched\"}}");
37+
}
38+
}
39+
catch {
40+
await page.EvaluateAsync("_ => {}", "browserstack_executor: {\"action\": \"setSessionStatus\", \"arguments\": {\"status\":\"failed\", \"reason\": \" Title did not match\"}}");
41+
}
42+
await browser.CloseAsync();
43+
}
44+
}

playwright-dotnet/Program.cs

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
using System;
2+
using System.Collections.Generic;
3+
4+
namespace PlaywrightTesting
5+
{
6+
class Program
7+
{
8+
public static async Task Main(string[] args)
9+
{
10+
switch (args[0])
11+
{
12+
case "single":
13+
Console.WriteLine("Running Single Test");
14+
await PlaywrightSingleTest.main(args); // redirects to class main() method
15+
break;
16+
case "parallel":
17+
Console.WriteLine("Running Parallel Test");
18+
await PlaywrightParallelTest.main(args);
19+
break;
20+
case "local":
21+
Console.WriteLine("Running Local Test");
22+
await PlaywrightLocalTest.main(args);
23+
break;
24+
default:
25+
Console.WriteLine("Running Single Test by default");
26+
await PlaywrightSingleTest.main(args);
27+
break;
28+
}
29+
}
30+
}
31+
}

playwright-dotnet/README.md

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
# Testing with playwright-browserstack in C#
2+
3+
[Playwright](https://playwright.dev/dotnet/) Integration with BrowserStack.
4+
5+
![BrowserStack Logo](https://d98b8t1nnulk5.cloudfront.net/production/images/layout/logo-header.png?1469004780)
6+
7+
## Setup
8+
9+
* Clone the repo and run `cd Playwright-dotnet`
10+
* Run `dotnet build`
11+
* Install required browsers - replace netX with actual output folder name, f.ex. net6.0.
12+
`pwsh bin/Debug/netX/playwright.ps1 install`
13+
14+
## Running your tests
15+
16+
- To run a single test, run `dotnet run single`
17+
- To run a parallel test, run command `dotnet run parallel`
18+
19+
### Run sample test on privately hosted websites
20+
21+
1. You have to download the BrowserStack Local binary from the links below (depending on your environment):
22+
* [OS X (10.7 and above)](https://www.browserstack.com/browserstack-local/BrowserStackLocal-darwin-x64.zip)
23+
* [Linux 32-bit](https://www.browserstack.com/browserstack-local/BrowserStackLocal-linux-ia32.zip)
24+
* [Linux 64-bit](https://www.browserstack.com/browserstack-local/BrowserStackLocal-linux-x64.zip)
25+
* [Windows (XP and above)](https://www.browserstack.com/browserstack-local/BrowserStackLocal-win32.zip)
26+
2. Once you have downloaded and unzipped the file, you can initiate the binary by running the command: `./BrowserStackLocal --key YOUR_ACCESS_KEY`
27+
3. Once you see the terminal say "[SUCCESS]" You can now access your local server(s) in our remote browser”, your local testing connection is considered established.
28+
4. You can then run the sample Local test using `dotnet run local`
29+
30+
Understand how many parallel sessions you need by using our [Parallel Test Calculator](https://www.browserstack.com/automate/parallel-calculator?ref=github)
31+
32+
33+
## Notes
34+
* You can view your test results on the [BrowserStack Automate dashboard](https://www.browserstack.com/automate)
35+
36+
## Additional Resources
37+
* [Documentation for writing Automate test scripts with BrowserStack](https://www.browserstack.com/docs/automate/playwright)

playwright-python/local-playwright-test.py

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,3 @@
3333

3434
browser.close()
3535

36-
37-
38-

playwright-python/single-playwright-test.py

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,5 @@
3030
except:
3131
page.evaluate("_ => {}", "browserstack_executor: {\"action\": \"setSessionStatus\", \"arguments\": {\"status\":\"failed\", \"reason\": \" Title did not match\"}}");
3232

33-
browser.close()
33+
browser.close()
3434

35-
36-
37-

0 commit comments

Comments
 (0)