Skip to content

Commit 4ebfa84

Browse files
kamal-kaur04francisf
authored andcommitted
improved parallel script for java and c#
1 parent b384058 commit 4ebfa84

File tree

9 files changed

+305
-217
lines changed

9 files changed

+305
-217
lines changed

playwright-dotnet/PlaywrightLocalTest.cs

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ public static async Task main(string[] args)
1212

1313
Dictionary<string, string> browserstackOptions = new Dictionary<string, string>();
1414
browserstackOptions.Add("name", "Playwright local sample test");
15-
browserstackOptions.Add("build", "playwright-build-3");
15+
browserstackOptions.Add("build", "playwright-dotnet-3");
1616
browserstackOptions.Add("os", "osx");
1717
browserstackOptions.Add("os_version", "catalina");
1818
browserstackOptions.Add("browser", "chrome"); // allowed browsers are `chrome`, `edge`, `playwright-chromium`, `playwright-firefox` and `playwright-webkit`
@@ -34,12 +34,18 @@ public static async Task main(string[] args)
3434
if (title == "BrowserStack - Google Search")
3535
{
3636
// 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\"}}");
37+
await MarkTestStatus("passed", "Title matched", page);
38+
}
39+
else {
40+
await MarkTestStatus("failed", "Title did not match", page);
3841
}
3942
}
40-
catch {
41-
await page.EvaluateAsync("_ => {}", "browserstack_executor: {\"action\": \"setSessionStatus\", \"arguments\": {\"status\":\"failed\", \"reason\": \" Title did not match\"}}");
43+
catch (Exception err){
44+
await MarkTestStatus("failed", err.Message, page);
4245
}
4346
await browser.CloseAsync();
4447
}
48+
public static async Task MarkTestStatus(string status, string reason, IPage page) {
49+
await page.EvaluateAsync("_ => {}", "browserstack_executor: {\"action\": \"setSessionStatus\", \"arguments\": {\"status\":\"" + status + "\", \"reason\": \"" + reason + "\"}}");
50+
}
4551
}

playwright-dotnet/PlaywrightParallelTest.cs

Lines changed: 69 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,50 +1,89 @@
11
using Microsoft.Playwright;
22
using System;
33
using System.Threading;
4-
using System.Threading.Tasks;
5-
using System.Collections.Generic;
64
using Newtonsoft.Json;
5+
using System.Collections;
76

87
class PlaywrightParallelTest
98
{
109
public static async Task main(string[] args)
1110
{
1211
// 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
1312
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 combination1 = SampleTestCase("playwright-chromium", "latest", "osx", "Catalina", "macOS Catalina - Chrome latest", "Parallel-build-2");
17-
var combination2 = SampleTestCase("chrome", "latest", "osx", "catalina", "Branded Google Chrome on Catalina", "Parallel-build-2");
18-
var combination3 = SampleTestCase("edge", "latest", "osx", "catalina", "Branded Microsoft Edge on Catalina", "Parallel-build-2");
19-
var combination4 = SampleTestCase("playwright-firefox", "latest", "osx", "catalina", "Playwright firefox on Catalina", "Parallel-build-2");
20-
var combination5 = SampleTestCase("playwright-webkit", "latest", "osx", "catalina", "Playwright webkit on Catalina", "Parallel-build-2");
21-
22-
//Executing the methods
23-
await Task.WhenAll(combination1, combination2, combination3, combination4, combination5);
13+
ArrayList capabilitiesList = getCapabilitiesList();
14+
Task[] taskList = new Task[capabilitiesList.Count];
15+
16+
for (int i = 0; i < capabilitiesList.Count; i++)
17+
{
18+
string capsJson;
19+
capsJson = JsonConvert.SerializeObject(capabilitiesList[i]);
20+
var task = Executetestwithcaps(capsJson);
21+
taskList[i] = task;
22+
}
23+
24+
await Task.WhenAll(taskList);
25+
2426
} catch (Exception e) {
2527
Console.WriteLine(e);
2628
}
2729
}
28-
static async Task SampleTestCase(String browser_name, String browser_version, String os, String os_version, String test_name, String build_name)
30+
static ArrayList getCapabilitiesList()
2931
{
30-
Dictionary<string, string> browserstackOptions = new Dictionary<string, string>();
31-
string capsJson;
32+
ArrayList capabilitiesList = new ArrayList();
3233

33-
try {
34-
browserstackOptions.Add("build", build_name);
35-
browserstackOptions.Add("name", test_name);
36-
browserstackOptions.Add("os", os);
37-
browserstackOptions.Add("os_version", os_version);
38-
browserstackOptions.Add("browser", browser_name);
39-
browserstackOptions.Add("browser_version", browser_version);
40-
browserstackOptions.Add("browserstack.username", "BROWSERSTACK_USERNAME");
41-
browserstackOptions.Add("browserstack.accessKey", "BROWSERSTACK_ACCESS_KEY");
42-
capsJson = JsonConvert.SerializeObject(browserstackOptions);
43-
var task = Executetestwithcaps(capsJson);
44-
await task;
45-
} catch (Exception e) {
46-
Console.WriteLine(e);
47-
}
34+
Dictionary<string, string> catalinaChromeCap = new Dictionary<string, string>();
35+
catalinaChromeCap.Add("browser", "chrome"); // allowed browsers are `chrome`, `edge`, `playwright-chromium`, `playwright-firefox` and `playwright-webkit`
36+
catalinaChromeCap.Add("browser_version", "latest");
37+
catalinaChromeCap.Add("os", "osx");
38+
catalinaChromeCap.Add("os_version", "catalina");
39+
catalinaChromeCap.Add("name", "Branded Google Chrome on Catalina");
40+
catalinaChromeCap.Add("build", "playwright-dotnet-2");
41+
catalinaChromeCap.Add("browserstack.username", "BROWSERSTACK_USERNAME");
42+
catalinaChromeCap.Add("browserstack.accessKey", "BROWSERSTACK_ACCESS_KEY");
43+
capabilitiesList.Add(catalinaChromeCap);
44+
45+
Dictionary<string, string> catalinaEdgeCap = new Dictionary<string, string>();
46+
catalinaEdgeCap.Add("browser", "edge"); // allowed browsers are `chrome`, `edge`, `playwright-chromium`, `playwright-firefox` and `playwright-webkit`
47+
catalinaEdgeCap.Add("browser_version", "latest");
48+
catalinaEdgeCap.Add("os", "osx");
49+
catalinaEdgeCap.Add("os_version", "catalina");
50+
catalinaEdgeCap.Add("name", "Branded Microsoft Edge on Catalina");
51+
catalinaEdgeCap.Add("build", "playwright-dotnet-2");
52+
catalinaEdgeCap.Add("browserstack.username", "BROWSERSTACK_USERNAME");
53+
catalinaEdgeCap.Add("browserstack.accessKey", "BROWSERSTACK_ACCESS_KEY");
54+
capabilitiesList.Add(catalinaEdgeCap);
55+
56+
Dictionary<string, string> catalinaFirefoxCap = new Dictionary<string, string>();
57+
catalinaFirefoxCap.Add("browser", "playwright-firefox"); // allowed browsers are `chrome`, `edge`, `playwright-chromium`, `playwright-firefox` and `playwright-webkit`
58+
catalinaFirefoxCap.Add("os", "osx");
59+
catalinaFirefoxCap.Add("os_version", "catalina");
60+
catalinaFirefoxCap.Add("name", "Playwright firefox on Catalina");
61+
catalinaFirefoxCap.Add("build", "playwright-dotnet-2");
62+
catalinaFirefoxCap.Add("browserstack.username", "BROWSERSTACK_USERNAME");
63+
catalinaFirefoxCap.Add("browserstack.accessKey", "BROWSERSTACK_ACCESS_KEY");
64+
capabilitiesList.Add(catalinaFirefoxCap);
65+
66+
Dictionary<string, string> catalinaWebkitCap = new Dictionary<string, string>();
67+
catalinaWebkitCap.Add("browser", "playwright-webkit"); // allowed browsers are `chrome`, `edge`, `playwright-chromium`, `playwright-firefox` and `playwright-webkit`
68+
catalinaWebkitCap.Add("os", "osx");
69+
catalinaWebkitCap.Add("os_version", "catalina");
70+
catalinaWebkitCap.Add("name", "Playwright webkit on Catalina");
71+
catalinaWebkitCap.Add("build", "playwright-dotnet-2");
72+
catalinaWebkitCap.Add("browserstack.username", "BROWSERSTACK_USERNAME");
73+
catalinaWebkitCap.Add("browserstack.accessKey", "BROWSERSTACK_ACCESS_KEY");
74+
capabilitiesList.Add(catalinaWebkitCap);
75+
76+
Dictionary<string, string> catalinaChromiumCap = new Dictionary<string, string>();
77+
catalinaChromiumCap.Add("browser", "playwright-chromium"); // allowed browsers are `chrome`, `edge`, `playwright-chromium`, `playwright-firefox` and `playwright-webkit`
78+
catalinaChromiumCap.Add("os", "osx");
79+
catalinaChromiumCap.Add("os_version", "catalina");
80+
catalinaChromiumCap.Add("name", "Playwright webkit on Catalina");
81+
catalinaChromiumCap.Add("build", "playwright-dotnet-2");
82+
catalinaChromiumCap.Add("browserstack.username", "BROWSERSTACK_USERNAME");
83+
catalinaChromiumCap.Add("browserstack.accessKey", "BROWSERSTACK_ACCESS_KEY");
84+
capabilitiesList.Add(catalinaChromiumCap);
85+
86+
return capabilitiesList;
4887
}
4988

5089
//Executetestwithcaps function takes capabilities from 'SampleTestCase' function and executes the test
@@ -72,7 +111,6 @@ public static async Task Executetestwithcaps(string capabilities)
72111
}
73112
}
74113
catch (Exception err) {
75-
Console.WriteLine(err);
76114
await MarkTestStatus("failed", err.Message, page);
77115
}
78116
await browser.CloseAsync();
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
using Microsoft.Playwright;
2+
using System.Threading.Tasks;
3+
using System;
4+
using System.Collections.Generic;
5+
using Newtonsoft.Json;
6+
7+
class PlaywrightTest
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-dotnet-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 MarkTestStatus("passed", "Title matched", page);
37+
}
38+
else {
39+
await MarkTestStatus("failed", "Title did not match", page);
40+
}
41+
}
42+
catch (Exception err) {
43+
await MarkTestStatus("failed", err.Message, page);
44+
}
45+
await browser.CloseAsync();
46+
}
47+
48+
public static async Task MarkTestStatus(string status, string reason, IPage page) {
49+
await page.EvaluateAsync("_ => {}", "browserstack_executor: {\"action\": \"setSessionStatus\", \"arguments\": {\"status\":\"" + status + "\", \"reason\": \"" + reason + "\"}}");
50+
}
51+
}

playwright-dotnet/Program.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ public static async Task Main(string[] args)
1111
{
1212
case "single":
1313
Console.WriteLine("Running Single Test");
14-
await PlaywrightSingleTest.main(args); // redirects to class main() method
14+
await PlaywrightTest.main(args); // redirects to class main() method
1515
break;
1616
case "parallel":
1717
Console.WriteLine("Running Parallel Test");
@@ -23,7 +23,7 @@ public static async Task Main(string[] args)
2323
break;
2424
default:
2525
Console.WriteLine("Running Single Test by default");
26-
await PlaywrightSingleTest.main(args);
26+
await PlaywrightTest.main(args);
2727
break;
2828
}
2929
}

playwright-java/src/test/java/com/browserstack/PlaywrightLocalTest.java

Lines changed: 28 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -6,41 +6,43 @@
66

77
public class PlaywrightLocalTest {
88
public static void main(String[] args) {
9-
Page page = null;
109
try (Playwright playwright = Playwright.create()) {
11-
JsonObject jsonObject = new JsonObject();
12-
jsonObject.addProperty("browser", "chrome"); // allowed browsers are `chrome`, `edge`, `playwright-chromium`, `playwright-firefox` and `playwright-webkit`
13-
jsonObject.addProperty("browser_version", "latest");
14-
jsonObject.addProperty("os", "osx");
15-
jsonObject.addProperty("os_version", "catalina");
16-
jsonObject.addProperty("name", "Playwright first local test");
17-
jsonObject.addProperty("build", "playwright-build-3");
18-
jsonObject.addProperty("browserstack.username", "BROWSERSTACK_USERNAME");
19-
jsonObject.addProperty("browserstack.accessKey", "BROWSERSTACK_ACCESS_KEY");
20-
jsonObject.addProperty("browserstack.local", "true");
10+
JsonObject capabilitiesObject = new JsonObject();
11+
capabilitiesObject.addProperty("browser", "chrome"); // allowed browsers are `chrome`, `edge`, `playwright-chromium`, `playwright-firefox` and `playwright-webkit`
12+
capabilitiesObject.addProperty("browser_version", "latest");
13+
capabilitiesObject.addProperty("os", "osx");
14+
capabilitiesObject.addProperty("os_version", "catalina");
15+
capabilitiesObject.addProperty("name", "Playwright first local test");
16+
capabilitiesObject.addProperty("build", "playwright-java-3");
17+
capabilitiesObject.addProperty("browserstack.username", "BROWSERSTACK_USERNAME");
18+
capabilitiesObject.addProperty("browserstack.accessKey", "BROWSERSTACK_ACCESS_KEY");
19+
capabilitiesObject.addProperty("browserstack.local", "true");
2120

2221
BrowserType chromium = playwright.chromium();
23-
String caps = URLEncoder.encode(jsonObject.toString(), "utf-8");
22+
String caps = URLEncoder.encode(capabilitiesObject.toString(), "utf-8");
2423
String ws_endpoint = "wss://cdp.browserstack.com/playwright?caps=" + caps;
2524
Browser browser = chromium.connect(ws_endpoint);
26-
page = browser.newPage();
27-
page.navigate("https://www.google.co.in/");
28-
Locator locator = page.locator("[aria-label='Search']");
29-
locator.click();
30-
page.fill("[aria-label='Search']", "BrowserStack");
31-
page.locator("[aria-label='Google Search'] >> nth=0").click();
32-
String title = page.title();
25+
Page page = browser.newPage();
26+
try {
27+
page.navigate("https://www.google.co.in/");
28+
Locator locator = page.locator("[aria-label='Search']");
29+
locator.click();
30+
page.fill("[aria-label='Search']", "BrowserStack");
31+
page.locator("[aria-label='Google Search'] >> nth=0").click();
32+
String title = page.title();
3333

34-
if (title.equals("BrowserStack - Google Search")) {
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-
markTestStatus("passed", "Title matched", page);
37-
} else {
38-
markTestStatus("failed", "Title did not match", page);
34+
if (title.equals("BrowserStack - Google Search")) {
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+
markTestStatus("passed", "Title matched", page);
37+
} else {
38+
markTestStatus("failed", "Title did not match", page);
39+
}
40+
} catch (Exception err) {
41+
markTestStatus("failed", err.getMessage(), page);
3942
}
4043
browser.close();
4144
} catch (Exception err) {
42-
assert page != null;
43-
markTestStatus("failed", err.getMessage(), page);
45+
System.out.println(err);
4446
}
4547
}
4648

0 commit comments

Comments
 (0)