├── .gitignore
├── .settings
└── org.eclipse.jdt.apt.core.prefs
├── README.md
├── pom.xml
├── snaps
├── full.png
├── hide.png
├── img.png
├── initial.png
└── locator.png
└── src
├── main
└── java
│ ├── day10
│ └── LearnTraceViewer.java
│ └── day13
│ └── LearnDebug.java
└── test
└── java
├── day1
└── installation.txt
├── day11
└── GetByLocatorsDemo.java
├── day12
└── LearnLocators.java
├── day14
└── LearnFrames.java
├── day15
└── LearnDownload.java
├── day16
└── LearnUploads.java
├── day17
└── ScreenshotAndMask.java
├── day18
└── LearnWindowHandling.java
├── day19
└── LearnElements.java
├── day2
└── LaunchBrowsers.java
├── day20
└── LearnAssertion.java
├── day21
└── SkipLogin.java
├── day3
└── LearnInputs.java
├── day4
└── LearnDropdown.java
├── day5
└── RecordedScript.java
├── day6
└── LearnAlerts.java
├── day7
└── HTTPAuthentication.java
├── day8
└── WhatIsBrowserContext.java
└── day9
└── RecordVideo.java
/.gitignore:
--------------------------------------------------------------------------------
1 | /target/
2 | !.mvn/wrapper/maven-wrapper.jar
3 |
4 | ### STS ###
5 | .apt_generated
6 | .classpath
7 | .factorypath
8 | .project
9 | .settings
10 | .springBeans
11 | .sts4-cache
12 |
13 |
14 | # Created by https://www.gitignore.io/api/git,java,maven,eclipse,windows
15 |
16 | ### Eclipse ###
17 |
18 | .metadata
19 | bin/
20 | tmp/
21 | *.tmp
22 | *.bak
23 | *.swp
24 | *~.nib
25 | local.properties
26 | .settings/
27 | .loadpath
28 | .recommenders
29 |
30 | # External tool builders
31 | .externalToolBuilders/
32 |
33 | # Locally stored "Eclipse launch configurations"
34 | *.launch
35 |
36 | # PyDev specific (Python IDE for Eclipse)
37 | *.pydevproject
38 |
39 | # CDT-specific (C/C++ Development Tooling)
40 | .cproject
41 |
42 | # CDT- autotools
43 | .autotools
44 |
45 | # Java annotation processor (APT)
46 | .factorypath
47 |
48 | # PDT-specific (PHP Development Tools)
49 | .buildpath
50 |
51 | # sbteclipse plugin
52 | .target
53 |
54 | # Tern plugin
55 | .tern-project
56 |
57 | # TeXlipse plugin
58 | .texlipse
59 |
60 | # STS (Spring Tool Suite)
61 | .springBeans
62 |
63 | # Code Recommenders
64 | .recommenders/
65 |
66 | # Annotation Processing
67 | .apt_generated/
68 |
69 | # Scala IDE specific (Scala & Java development for Eclipse)
70 | .cache-main
71 | .scala_dependencies
72 | .worksheet
73 |
74 | ### Eclipse Patch ###
75 | # Eclipse Core
76 | .project
77 |
78 | # JDT-specific (Eclipse Java Development Tools)
79 | .classpath
80 |
81 | # Annotation Processing
82 | .apt_generated
83 |
84 | .sts4-cache/
85 |
86 | ### Git ###
87 | # Created by git for backups. To disable backups in Git:
88 | # $ git config --global mergetool.keepBackup false
89 | *.orig
90 |
91 | # Created by git when using merge tools for conflicts
92 | *.BACKUP.*
93 | *.BASE.*
94 | *.LOCAL.*
95 | *.REMOTE.*
96 | *_BACKUP_*.txt
97 | *_BASE_*.txt
98 | *_LOCAL_*.txt
99 | *_REMOTE_*.txt
100 |
101 | ### Java ###
102 | # Compiled class file
103 | *.class
104 |
105 | # Log file
106 | *.log
107 |
108 | # BlueJ files
109 | *.ctxt
110 |
111 | # Mobile Tools for Java (J2ME)
112 | .mtj.tmp/
113 |
114 | # Package Files #
115 | *.jar
116 | *.war
117 | *.nar
118 | *.ear
119 | *.zip
120 | *.tar.gz
121 | *.rar
122 |
123 | # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
124 | hs_err_pid*
125 |
126 | ### Maven ###
127 | target/
128 | pom.xml.tag
129 | pom.xml.releaseBackup
130 | pom.xml.versionsBackup
131 | pom.xml.next
132 | release.properties
133 | dependency-reduced-pom.xml
134 | buildNumber.properties
135 | .mvn/timing.properties
136 | .mvn/wrapper/maven-wrapper.jar
137 |
138 | ### Windows ###
139 | # Windows thumbnail cache files
140 | Thumbs.db
141 | ehthumbs.db
142 | ehthumbs_vista.db
143 |
144 | # Dump file
145 | *.stackdump
146 |
147 | # Folder config file
148 | [Dd]esktop.ini
149 |
150 | # Recycle Bin used on file shares
151 | $RECYCLE.BIN/
152 |
153 | # Windows Installer files
154 | *.cab
155 | *.msi
156 | *.msix
157 | *.msm
158 | *.msp
159 |
160 | # Windows shortcuts
161 | *.lnk
162 |
163 | ### IntelliJ IDEA ###
164 | .idea
165 | *.iws
166 | *.iml
167 | *.ipr
168 |
169 | ### NetBeans ###
170 | /nbproject/private/
171 | /nbbuild/
172 | /dist/
173 | /nbdist/
174 | /.nb-gradle/
175 | build/
176 | !**/src/main/**/build/
177 | !**/src/test/**/build/
178 |
179 | ### VS Code ###
180 | .vscode/
181 |
182 | ### Some additional ignores (sort later)
183 | *.DS_Store
184 | *.sw?
185 | .#*
186 | *#
187 | *~
188 | .classpath
189 | .project
190 | .settings
191 | bin
192 | build
193 | target
194 | dependency-reduced-pom.xml
195 | *.sublime-*
196 | /scratch
197 | .gradle
198 | README.html
199 | *.iml
200 | .idea
201 | .exercism
--------------------------------------------------------------------------------
/.settings/org.eclipse.jdt.apt.core.prefs:
--------------------------------------------------------------------------------
1 | eclipse.preferences.version=1
2 | org.eclipse.jdt.apt.aptEnabled=false
3 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Playwright Java Tutorial
2 |
3 | ###
4 | ## Youtube videos
5 |
6 | |Video|Tamil|English|
7 | |-|-|-|
8 | |1. Introduction & Installation|https://youtu.be/rpksTCWeMZY|https://youtu.be/ty9u5wqhB2Q|
9 | |2. How to launch browsers?|https://youtu.be/hqxo3t_Pf-8|https://youtu.be/wtGVjcYXClw|
10 | |3. How to interact with inputs|https://youtu.be/YzyZrhH6quU|https://youtu.be/WG-enY8LDUM|
11 | |4. How to interact with dropdown|https://youtu.be/Ow-_FzX1uhQ|https://youtu.be/3rhcfusK0Sk|
12 | |5. Codegen & Generate PDF|https://youtu.be/Rd_wm2gNzbo|https://youtu.be/31mJHAJOAGU|
13 | |6. Alerts in detail|https://youtu.be/sVNXdBWWO2s|https://youtu.be/2WCs5dMYjdM|
14 | |7. HTTP Authentication|https://youtu.be/Jmnpx0MXiXE|https://youtu.be/JCEC4L6LS9A|
15 | |8. Browser Context|https://youtu.be/Gc5n7KyLYAk|https://youtu.be/ynmN1SrzY9A|
16 | |9. Record Video|https://youtu.be/1_ldxm9MPvk|https://youtu.be/RbS-1b3aQ3k|
17 | |10. Trace Viewer|https://youtu.be/revn0oip25o|https://youtu.be/5qBZaPWiCWQ|
18 | |11. Write test script without finding elements|https://youtu.be/BGlS7GsaYXY|https://youtu.be/j8I_EvrUqRE|
19 | |12. Playwright Locators|https://youtu.be/vctr7v2YPrU|https://youtu.be/LxoAVUmeaBE|
20 | |13. Playwright Debug & Inspector|https://youtu.be/XobRgYnXBWw|https://youtu.be/VRF-9-zaw3w|
21 | |14. Frames|https://youtu.be/IuFm71ayc94|https://youtu.be/FDTFu_rZSqg|
22 | |15. Download files|https://youtu.be/zVQIZ9fHoPw|https://youtu.be/DCgUN5VKx5s|
23 | |16. Upload multiple files|https://youtu.be/-EuW8xxb-34|https://youtu.be/ja3PcZkd5oo|
24 | |17. Screenshots|https://youtu.be/lmpbQ_qw70I|https://youtu.be/e2xdGuD1LPc|
25 | |18. Window Handling |https://youtu.be/DQiYwZU84WQ|https://youtu.be/93E-YBFJBdQ|
26 | |19. How to interact with multiple elements|https://youtu.be/CpQ8Q7bnf9s|https://youtu.be/MWR6ekyIHGE|
27 | |20. Advantage and disadvantage of Playwright Assertion|https://youtu.be/oSUX-dqZQEA|https://youtu.be/TuJLLRasYS4|
28 | |21. Skip Login - Storage State |https://youtu.be/KK62bJQhW5Y|https://youtu.be/z4MODkk5q34|
--------------------------------------------------------------------------------
/pom.xml:
--------------------------------------------------------------------------------
1 |
2 | 4.0.0
3 | letcode
4 | PlaywrightLetCode
5 | 0.0.1-SNAPSHOT
6 |
7 |
8 | UTF-8
9 | 11
10 | 11
11 |
12 |
13 |
14 |
15 | com.microsoft.playwright
16 | playwright
17 | 1.28.1
18 |
19 |
20 |
21 |
22 |
23 |
24 | org.apache.maven.plugins
25 | maven-compiler-plugin
26 | 3.10.1
27 |
28 |
29 |
30 |
31 |
32 | trace
33 |
34 |
35 |
36 |
37 | org.codehaus.mojo
38 | exec-maven-plugin
39 | 3.0.0
40 |
41 |
42 | test
43 |
44 | java
45 |
46 |
47 | day10.LearnTraceViewer
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 | debug
57 |
58 |
59 |
60 |
61 | org.codehaus.mojo
62 | exec-maven-plugin
63 | 3.0.0
64 |
65 |
66 | test
67 |
68 | java
69 |
70 |
71 | day13.LearnDebug
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
--------------------------------------------------------------------------------
/snaps/full.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ortoniKC/playwright-java-2023/e12f855ab60b42a82b2505daeeb4007fbe5c84f1/snaps/full.png
--------------------------------------------------------------------------------
/snaps/hide.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ortoniKC/playwright-java-2023/e12f855ab60b42a82b2505daeeb4007fbe5c84f1/snaps/hide.png
--------------------------------------------------------------------------------
/snaps/img.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ortoniKC/playwright-java-2023/e12f855ab60b42a82b2505daeeb4007fbe5c84f1/snaps/img.png
--------------------------------------------------------------------------------
/snaps/initial.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ortoniKC/playwright-java-2023/e12f855ab60b42a82b2505daeeb4007fbe5c84f1/snaps/initial.png
--------------------------------------------------------------------------------
/snaps/locator.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ortoniKC/playwright-java-2023/e12f855ab60b42a82b2505daeeb4007fbe5c84f1/snaps/locator.png
--------------------------------------------------------------------------------
/src/main/java/day10/LearnTraceViewer.java:
--------------------------------------------------------------------------------
1 | package day10;
2 |
3 | import java.nio.file.Paths;
4 |
5 | import com.microsoft.playwright.Browser;
6 | import com.microsoft.playwright.BrowserContext;
7 | import com.microsoft.playwright.BrowserType;
8 | import com.microsoft.playwright.BrowserType.LaunchOptions;
9 | import com.microsoft.playwright.Locator;
10 | import com.microsoft.playwright.Page;
11 | import com.microsoft.playwright.Playwright;
12 | import com.microsoft.playwright.Tracing;
13 |
14 | public class LearnTraceViewer {
15 |
16 | public static void main(String[] args) {
17 | Playwright playwright = Playwright.create();
18 | BrowserType browserType = playwright.chromium();
19 |
20 | LaunchOptions headless = new BrowserType.LaunchOptions().setHeadless(false);
21 | Browser browser = browserType.launch(headless);
22 |
23 | BrowserContext context = browser.newContext();
24 |
25 | context.tracing().start(
26 | new Tracing.StartOptions()
27 | .setScreenshots(true)
28 | .setSnapshots(true)
29 | .setSources(true)
30 | );
31 |
32 | Page page = context.newPage();
33 |
34 | // basic input field interaction
35 | page.navigate("https://letcode.in/edit");
36 | page.locator("#fullName").type("Koushik C");
37 | Locator locator = page.locator("#join");
38 | locator.press("End");
39 | locator.type(" man");
40 | locator.press("Tab");
41 | page.type("#fullName", "Koushik C");
42 | String value = page.locator("id=getMe").getAttribute("value");
43 | System.out.println(value);
44 | page.locator("(//label[text()='Clear the text']/following::input)[1]").clear();
45 |
46 | // login
47 | page.navigate("https://bookcart.azurewebsites.net/");
48 | page.click("//span[text()='Login']/..");
49 | page.locator("input[formcontrolname='username']").type("ortoni");
50 | page.locator("input[formcontrolname='password']").type("Pass1234$");
51 | page.locator("button[color='primary']").click();
52 | String userName = page.locator("//button[contains(@class,'mat-focus-indicator mat-menu-trigger')]//span[1]")
53 | .textContent();
54 | System.out.println(userName.split(" ")[1].split(" ")[0]);
55 |
56 | context.tracing().stop(
57 | new Tracing.StopOptions()
58 | .setPath(Paths.get("trace.zip"))
59 | );
60 |
61 | context.close();
62 | playwright.close();
63 | }
64 |
65 | }
66 |
--------------------------------------------------------------------------------
/src/main/java/day13/LearnDebug.java:
--------------------------------------------------------------------------------
1 | package day13;
2 |
3 | import com.microsoft.playwright.BrowserType;
4 | import com.microsoft.playwright.Page;
5 | import com.microsoft.playwright.Playwright;
6 | import com.microsoft.playwright.BrowserType.LaunchOptions;
7 | import com.microsoft.playwright.options.AriaRole;
8 |
9 | public class LearnDebug {
10 |
11 | public static void main(String[] args) {
12 | Playwright playwright = Playwright.create();
13 | LaunchOptions setHeadless = new BrowserType.LaunchOptions().setHeadless(false);
14 | Page page = playwright.chromium().launch(setHeadless).newPage();
15 | page.navigate("https://bookcart.azurewebsites.net/");
16 |
17 | page.pause();
18 |
19 | page.getByText("Login").click();
20 | page.getByLabel("Username").fill("ortoni");
21 | page.getByLabel("Password").fill("Pass1234$");
22 | page.getByRole(AriaRole.BUTTON, new Page.GetByRoleOptions()
23 | .setName("Login")).last().click();
24 | page.getByPlaceholder("Search books", new Page.GetByPlaceholderOptions()
25 | .setExact(false)).type("The Hookup");
26 | page.getByRole(AriaRole.OPTION).first().click();
27 | page.getByAltText("Book cover image").click();
28 | System.out.println(page.url());
29 |
30 | playwright.close();
31 |
32 |
33 | }
34 |
35 | }
36 |
--------------------------------------------------------------------------------
/src/test/java/day1/installation.txt:
--------------------------------------------------------------------------------
1 | Required Software
2 | 1. JDK
3 | 2. Eclipse
4 | 3. Maven
5 |
6 | Pls watch the video to understand the installation process.
7 |
8 | pom.xml
9 |
10 | UTF-8
11 |
12 |
13 |
14 | com.microsoft.playwright
15 | playwright
16 | 1.28.0
17 |
18 |
19 |
20 |
21 |
22 | org.apache.maven.plugins
23 | maven-compiler-plugin
24 | 3.10.1
25 |
26 |
27 |
--------------------------------------------------------------------------------
/src/test/java/day11/GetByLocatorsDemo.java:
--------------------------------------------------------------------------------
1 | package day11;
2 |
3 | import com.microsoft.playwright.BrowserType;
4 | import com.microsoft.playwright.BrowserType.LaunchOptions;
5 | import com.microsoft.playwright.options.AriaRole;
6 | import com.microsoft.playwright.Page;
7 | import com.microsoft.playwright.Playwright;
8 |
9 | public class GetByLocatorsDemo {
10 |
11 | public static void main(String[] args) {
12 | Playwright playwright = Playwright.create();
13 | LaunchOptions setHeadless = new BrowserType.LaunchOptions().setHeadless(false);
14 | Page page = playwright.chromium().launch(setHeadless).newPage();
15 | page.navigate("https://bookcart.azurewebsites.net/");
16 |
17 | page.getByText("Login").click();
18 | page.getByLabel("Username").fill("ortoni");
19 | page.getByLabel("Password").fill("Pass1234$");
20 | page.getByRole(AriaRole.BUTTON, new Page.GetByRoleOptions()
21 | .setName("Login")).last().click();
22 | page.getByPlaceholder("Search books", new Page.GetByPlaceholderOptions()
23 | .setExact(true)).type("The Hookup");
24 | page.getByRole(AriaRole.OPTION).first().click();
25 | page.getByAltText("Book cover image").click();
26 | System.out.println(page.url());
27 |
28 |
29 |
30 | playwright.close();
31 |
32 |
33 |
34 |
35 |
36 | }
37 |
38 | }
39 |
--------------------------------------------------------------------------------
/src/test/java/day12/LearnLocators.java:
--------------------------------------------------------------------------------
1 | package day12;
2 |
3 | import com.microsoft.playwright.BrowserType;
4 | import com.microsoft.playwright.BrowserType.LaunchOptions;
5 | import com.microsoft.playwright.Page;
6 | import com.microsoft.playwright.Playwright;
7 |
8 | public class LearnLocators {
9 |
10 | public static void main(String[] args) throws InterruptedException {
11 | Playwright playwright = Playwright.create();
12 | LaunchOptions setHeadless = new BrowserType.LaunchOptions().setHeadless(false);
13 | Page page = playwright.chromium().launch(setHeadless).newPage();
14 | page.navigate("https://letcode.in/test");
15 | page.click("'Click'");
16 | page.click("text=Click");
17 | page.locator("button:has-text('Goto Home')").click();
18 | page.locator("nav :text('Product')").click();
19 | page.navigate("http://127.0.0.1:5500/allText/index.html");
20 | page.locator("//button[@class='btn btn-primary'] visible=true").click();
21 | page.locator("button").locator("nth=1").click();
22 | System.out.println(page.locator("#attach").textContent());
23 | page.locator("button").locator("nth=-1").click();
24 | Thread.sleep(1000);
25 | System.out.println(page.locator("#attach").textContent());
26 |
27 | page.locator("#innerText, #innerText2").click();
28 | page.locator("//button[text()='Inner Text'] | //button[text()='Inner Text 1']").click();
29 | playwright.close();
30 |
31 |
32 |
33 | }
34 |
35 | }
36 |
--------------------------------------------------------------------------------
/src/test/java/day14/LearnFrames.java:
--------------------------------------------------------------------------------
1 | package day14;
2 |
3 | import java.util.List;
4 | import java.util.regex.Pattern;
5 |
6 | import com.microsoft.playwright.BrowserType;
7 | import com.microsoft.playwright.BrowserType.LaunchOptions;
8 | import com.microsoft.playwright.Frame;
9 | import com.microsoft.playwright.FrameLocator;
10 | import com.microsoft.playwright.Page;
11 | import com.microsoft.playwright.Playwright;
12 |
13 | public class LearnFrames {
14 |
15 | public static void main(String[] args) throws InterruptedException {
16 | Playwright playwright = Playwright.create();
17 | LaunchOptions setHeadless = new BrowserType.LaunchOptions().setHeadless(false);
18 | Page page = playwright.chromium().launch(setHeadless).newPage();
19 | page.navigate("https://letcode.in/frame");
20 |
21 | FrameLocator frameLocator = page.frameLocator("#firstFr");
22 | frameLocator.getByPlaceholder("Enter name").type("Koushik");
23 | frameLocator.getByPlaceholder("Enter email").type("jasondans");
24 | FrameLocator childFrame = frameLocator.frameLocator("iframe.has-background-white");
25 | childFrame.getByPlaceholder("Enter email").type("koushik244");
26 |
27 | // List frames = page.frames();
28 | // System.out.println(frames.size());
29 | //
30 | // Frame frame = page.frame("firstFr");
31 | // frame.getByPlaceholder("Enter name").type("Koushik");
32 | // frame.getByPlaceholder("Enter email").type("Chatterjee");
33 | //
34 | // List childFrames = frame.childFrames();
35 | // System.out.println(childFrames.size());
36 | // childFrames.forEach(f->{
37 | // System.out.println(f.url());
38 | // });
39 | //
40 | //// Frame innerFrame = page.frameByUrl("https://letcode.in/innerFrame");
41 | // Frame innerFrame = page.frameByUrl(Pattern.compile("innerFrame"));
42 | // innerFrame.getByPlaceholder("Enter email").type("koushik@mail.com");
43 | // frame.getByPlaceholder("Enter email").fill("letcode");
44 | //
45 | Thread.sleep(5000);
46 | playwright.close();
47 |
48 | }
49 |
50 | }
51 |
--------------------------------------------------------------------------------
/src/test/java/day15/LearnDownload.java:
--------------------------------------------------------------------------------
1 | package day15;
2 |
3 | import java.nio.file.Paths;
4 |
5 | import com.microsoft.playwright.BrowserType;
6 | import com.microsoft.playwright.BrowserType.LaunchOptions;
7 | import com.microsoft.playwright.Download;
8 | import com.microsoft.playwright.Page;
9 | import com.microsoft.playwright.Playwright;
10 |
11 | public class LearnDownload {
12 |
13 | public static void main(String[] args) {
14 |
15 | Playwright playwright = Playwright.create();
16 | LaunchOptions setHeadless = new BrowserType.LaunchOptions().setHeadless(false);
17 | Page page = playwright.chromium().launch(setHeadless).newPage();
18 | page.navigate("https://letcode.in/file");
19 |
20 |
21 | Download download = page.waitForDownload(()->{
22 | page.locator("'Download Excel'").click();
23 | });
24 | System.out.println(download.path());
25 | System.out.println(download.url());
26 | System.out.println(download.failure());
27 | System.out.println(download.suggestedFilename());
28 | download.saveAs(Paths.get(download.suggestedFilename()));
29 |
30 |
31 |
32 | playwright.close();
33 |
34 |
35 | }
36 |
37 | }
38 |
--------------------------------------------------------------------------------
/src/test/java/day16/LearnUploads.java:
--------------------------------------------------------------------------------
1 | package day16;
2 |
3 | import java.nio.file.Path;
4 | import java.nio.file.Paths;
5 |
6 | import com.microsoft.playwright.BrowserType;
7 | import com.microsoft.playwright.Page;
8 | import com.microsoft.playwright.Playwright;
9 | import com.microsoft.playwright.BrowserType.LaunchOptions;
10 | import com.microsoft.playwright.Download;
11 | import com.microsoft.playwright.FileChooser;
12 |
13 | public class LearnUploads {
14 |
15 | public static void main(String[] args) {
16 |
17 | Playwright playwright = Playwright.create();
18 | LaunchOptions setHeadless = new BrowserType.LaunchOptions().setHeadless(false);
19 | Page page = playwright.chromium().launch(setHeadless).newPage();
20 | // page.navigate("https://www.sendgb.com/");
21 | //
22 | // page.locator("button:has-text('Close') >> visible=true").click();
23 | // page.locator("span:has-text('OK') >> visible=true").click();
24 |
25 |
26 | // page.locator("input[type='file']").setInputFiles(new Path[] {
27 | // Paths.get("sample.xlsx"),
28 | // Paths.get("sec.xlsx")
29 | // });
30 |
31 | page.navigate("https://the-internet.herokuapp.com/upload");
32 | FileChooser fileChooser = page.waitForFileChooser(()->{
33 | page.locator("id=drag-drop-upload").click();
34 | });
35 | System.out.println(fileChooser.isMultiple());
36 | if(fileChooser.isMultiple()) {
37 | fileChooser.setFiles(new Path[] {
38 | Paths.get("sample.xlsx"),
39 | Paths.get("sec.xlsx")
40 | });
41 |
42 | }
43 | else System.out.println("only one");
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 | }
52 |
53 | }
54 |
--------------------------------------------------------------------------------
/src/test/java/day17/ScreenshotAndMask.java:
--------------------------------------------------------------------------------
1 | package day17;
2 |
3 | import java.nio.file.Paths;
4 | import java.util.Arrays;
5 |
6 | import com.microsoft.playwright.BrowserType;
7 | import com.microsoft.playwright.BrowserType.LaunchOptions;
8 | import com.microsoft.playwright.Locator;
9 | import com.microsoft.playwright.Page;
10 | import com.microsoft.playwright.Page.ScreenshotOptions;
11 | import com.microsoft.playwright.Playwright;
12 | import com.microsoft.playwright.options.ScreenshotCaret;
13 |
14 | public class ScreenshotAndMask {
15 |
16 | public static void main(String[] args) {
17 | Playwright playwright = Playwright.create();
18 | LaunchOptions setHeadless = new BrowserType.LaunchOptions().setHeadless(false);
19 | Page page = playwright.chromium().launch(setHeadless).newPage();
20 | page.navigate("https://github.com/ortoniKC/playwright-java-2023");
21 | // byte[] screenshot = page.screenshot();
22 | page.screenshot(new ScreenshotOptions().setPath(Paths.get("./snaps/img.png")));
23 | page.screenshot(new ScreenshotOptions().setPath(Paths.get("./snaps/full.png"))
24 | .setFullPage(true));
25 | Locator searchLocator = page.getByPlaceholder("Search");
26 | searchLocator.click();
27 | searchLocator.screenshot(new Locator.ScreenshotOptions()
28 | .setPath(Paths.get("./snaps/initial.png"))
29 | .setCaret(ScreenshotCaret.INITIAL));
30 | searchLocator.screenshot(new Locator.ScreenshotOptions()
31 | .setPath(Paths.get("./snaps/hide.png"))
32 | .setCaret(ScreenshotCaret.HIDE));
33 | // searchLocator.screenshot(new Locator.ScreenshotOptions()
34 | // .setPath(Paths.get("./snaps/hide.png"))
35 | // .setCaret(ScreenshotCaret.HIDE)
36 | // .setMask(Arrays.asList(searchLocator)));
37 | page.screenshot(new ScreenshotOptions()
38 | .setPath(Paths.get("./snaps/initial.png"))
39 | .setCaret(ScreenshotCaret.INITIAL)
40 | .setMask(Arrays.asList(searchLocator)));
41 |
42 |
43 | playwright.close();
44 |
45 | }
46 |
47 | }
48 |
--------------------------------------------------------------------------------
/src/test/java/day18/LearnWindowHandling.java:
--------------------------------------------------------------------------------
1 | package day18;
2 |
3 | import java.util.List;
4 |
5 | import com.microsoft.playwright.BrowserType;
6 | import com.microsoft.playwright.BrowserType.LaunchOptions;
7 | import com.microsoft.playwright.Page;
8 | import com.microsoft.playwright.Playwright;
9 |
10 | public class LearnWindowHandling {
11 |
12 | public static void main(String[] args) {
13 |
14 | Playwright playwright = Playwright.create();
15 | LaunchOptions setHeadless = new BrowserType.LaunchOptions().setHeadless(false);
16 | Page page = playwright.chromium().launch(setHeadless).newPage();
17 | page.navigate("https://letcode.in/windows");
18 |
19 |
20 | // Page popup = page.waitForPopup(()->{
21 | // page.locator("id=home").click();
22 | // });
23 | // popup.waitForLoadState();
24 | // System.out.println("new tab: "+popup.title());
25 | // System.out.println("new tab: "+popup.url());
26 | //
27 | // popup.close();
28 | // page.close();
29 | //
30 | // playwright.close();
31 |
32 | page.waitForPopup(new Page.WaitForPopupOptions().setPredicate(
33 | p-> p.context().pages().size() == 3
34 | ), ()->{
35 | page.locator("id=multi").click();
36 | });
37 |
38 |
39 | List pages = page.context().pages();
40 | for (Page tabs : pages) {
41 | tabs.waitForLoadState();
42 | System.out.println(tabs.url());
43 | }
44 | Page alertPage = pages.get(1);
45 | Page dropdownPage = pages.get(2);
46 |
47 | System.out.println("Alert page: "+alertPage.textContent("h1"));
48 | System.out.println("Dropdown page: "+dropdownPage.textContent("h1"));
49 |
50 |
51 | playwright.close();
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 | }
66 |
67 | }
68 |
--------------------------------------------------------------------------------
/src/test/java/day19/LearnElements.java:
--------------------------------------------------------------------------------
1 | package day19;
2 |
3 | import com.microsoft.playwright.BrowserType;
4 | import com.microsoft.playwright.BrowserType.LaunchOptions;
5 | import com.microsoft.playwright.Locator;
6 | import com.microsoft.playwright.Page;
7 | import com.microsoft.playwright.Playwright;
8 | import com.microsoft.playwright.options.WaitForSelectorState;
9 |
10 | public class LearnElements {
11 |
12 | public static void main(String[] args) {
13 | Playwright playwright = Playwright.create();
14 | LaunchOptions setHeadless = new BrowserType.LaunchOptions().setHeadless(false);
15 | Page page = playwright.chromium().launch(setHeadless).newPage();
16 | page.navigate("https://letcode.in/elements");
17 | page.getByPlaceholder("Enter your").type("ortonikc");
18 | page.locator("id=search").click();
19 | Locator links = page.locator("ol li a");
20 | links.last().waitFor(new Locator.WaitForOptions()
21 | .setState(WaitForSelectorState.ATTACHED)
22 | .setTimeout(20000));
23 | int count = links.count();
24 | System.out.println("Count: "+count);
25 | for (int i = 0; i < count; i++) {
26 | String textContent = links.nth(i).textContent();
27 | System.out.println(textContent);
28 | }
29 |
30 |
31 | playwright.close();
32 |
33 | }
34 |
35 | }
36 |
--------------------------------------------------------------------------------
/src/test/java/day2/LaunchBrowsers.java:
--------------------------------------------------------------------------------
1 | package day2;
2 |
3 | import com.microsoft.playwright.Browser;
4 | import com.microsoft.playwright.BrowserType;
5 | import com.microsoft.playwright.Page;
6 | import com.microsoft.playwright.Playwright;
7 |
8 | public class LaunchBrowsers {
9 |
10 | public static void main(String[] args) {
11 |
12 | Playwright playwright = Playwright.create();
13 | Browser browser = playwright.chromium().launch(
14 | new BrowserType.LaunchOptions()
15 | .setHeadless(false)
16 | .setChannel("msedge")
17 | );
18 | Page page = browser.newPage();
19 | page.navigate("https://letcode.in/");
20 | System.out.println(page.title());
21 | page.close();
22 | browser.close();
23 | playwright.close();
24 | }
25 |
26 | }
27 |
--------------------------------------------------------------------------------
/src/test/java/day20/LearnAssertion.java:
--------------------------------------------------------------------------------
1 | package day20;
2 |
3 | import com.microsoft.playwright.BrowserType;
4 | import com.microsoft.playwright.BrowserType.LaunchOptions;
5 | import com.microsoft.playwright.Locator;
6 | import com.microsoft.playwright.Page;
7 | import com.microsoft.playwright.Playwright;
8 |
9 | import static com.microsoft.playwright.assertions.PlaywrightAssertions.assertThat;
10 | import static com.microsoft.playwright.assertions.PlaywrightAssertions.setDefaultAssertionTimeout;
11 |
12 |
13 | public class LearnAssertion {
14 |
15 | public static void main(String[] args) {
16 | Playwright playwright = Playwright.create();
17 | LaunchOptions setHeadless = new BrowserType.LaunchOptions().setHeadless(false);
18 | Page page = playwright.chromium().launch(setHeadless).newPage();
19 | page.navigate("https://letcode.in/edit");
20 | Locator header = page.locator("h1");
21 |
22 | setDefaultAssertionTimeout(10000);
23 | assertThat(page).hasTitle("Interact with Input fields");
24 | assertThat(page).hasURL("https://letcode.in/edit");
25 | assertThat(header).hasText("Input");
26 | assertThat(page.locator("#join")).hasAttribute("value", "I am good");
27 |
28 | assertThat(page.locator("#join")).hasValue("I am good");
29 |
30 | page.navigate("https://letcode.in/radio");
31 | assertThat(page.locator("#notfoo")).isChecked();
32 |
33 | playwright.close();
34 |
35 | }
36 |
37 | }
38 |
--------------------------------------------------------------------------------
/src/test/java/day21/SkipLogin.java:
--------------------------------------------------------------------------------
1 | package day21;
2 |
3 | import java.nio.file.Paths;
4 |
5 | import com.microsoft.playwright.Browser;
6 | import com.microsoft.playwright.BrowserContext;
7 | import com.microsoft.playwright.BrowserType;
8 | import com.microsoft.playwright.BrowserType.LaunchOptions;
9 | import com.microsoft.playwright.Page;
10 | import com.microsoft.playwright.Playwright;
11 | import com.microsoft.playwright.BrowserContext.StorageStateOptions;
12 |
13 | public class SkipLogin {
14 |
15 | public static void main(String[] args) {
16 | Playwright playwright = Playwright.create();
17 | LaunchOptions setHeadless = new BrowserType.LaunchOptions().setHeadless(false);
18 | BrowserContext context = playwright.chromium().launch(setHeadless).newContext(
19 | new Browser.NewContextOptions().setStorageStatePath(Paths.get("auth.json"))
20 | );
21 | Page page = context.newPage();
22 | page.navigate("https://bookcart.azurewebsites.net/");
23 | // page.click("//span[text()='Login']/..");
24 | // page.locator("input[formcontrolname='username']").type("ortoni");
25 | // page.locator("input[formcontrolname='password']").type("Pass1234$");
26 | // page.locator("button[color='primary']").click();
27 | String userName = page.locator("//button[contains(@class,'mat-focus-indicator mat-menu-trigger')]//span[1]")
28 | .textContent();
29 | String user = userName.split(" ")[1].split(" ")[0];
30 | System.out.println("User: "+user);
31 | // generate the auth
32 | // context.storageState(new StorageStateOptions().setPath(Paths.get("auth.json")));
33 |
34 | playwright.close();
35 |
36 |
37 |
38 |
39 | }
40 |
41 | }
42 |
--------------------------------------------------------------------------------
/src/test/java/day3/LearnInputs.java:
--------------------------------------------------------------------------------
1 | package day3;
2 |
3 | import com.microsoft.playwright.Browser;
4 | import com.microsoft.playwright.BrowserType;
5 | import com.microsoft.playwright.Locator;
6 | import com.microsoft.playwright.Page;
7 | import com.microsoft.playwright.Playwright;
8 |
9 | public class LearnInputs {
10 |
11 | public static void main(String[] args) {
12 | Playwright playwright = Playwright.create();
13 | Browser browser = playwright.chromium().launch(
14 | new BrowserType.LaunchOptions()
15 | .setHeadless(false)
16 | );
17 | Page page = browser.newPage();
18 | page.navigate("https://letcode.in/edit");
19 | page.locator("#fullName").type("Koushik C");
20 | Locator locator = page.locator("#join");
21 | locator.press("End");
22 | locator.type(" man");
23 | locator.press("Tab");
24 | page.type("#fullName", "Koushik C");
25 | String value = page.locator("id=getMe").getAttribute("value");
26 | System.out.println(value);
27 | page.locator("(//label[text()='Clear the text']/following::input)[1")
28 | .clear();
29 | }
30 |
31 | }
32 |
--------------------------------------------------------------------------------
/src/test/java/day4/LearnDropdown.java:
--------------------------------------------------------------------------------
1 | package day4;
2 |
3 | import java.util.List;
4 |
5 | import com.microsoft.playwright.BrowserType;
6 | import com.microsoft.playwright.BrowserType.LaunchOptions;
7 | import com.microsoft.playwright.Locator;
8 | import com.microsoft.playwright.Locator.SelectOptionOptions;
9 | import com.microsoft.playwright.Page;
10 | import com.microsoft.playwright.Playwright;
11 | import com.microsoft.playwright.options.SelectOption;
12 |
13 | public class LearnDropdown {
14 |
15 | public static void main(String[] args) {
16 |
17 | Playwright playwright = Playwright.create();
18 | LaunchOptions headless = new BrowserType.LaunchOptions().setHeadless(false);
19 | Page page = playwright.chromium().launch(headless).newPage();
20 | page.navigate("https://letcode.in/dropdowns");
21 | // page.selectOption("#fruits", "3");
22 | Locator fruitsDD = page.locator("#fruits");
23 | // fruitsDD.selectOption("1");
24 | // fruitsDD.selectOption(new SelectOption().setLabel("Apple"));
25 | fruitsDD.selectOption(new SelectOption().setIndex(4),
26 | new SelectOptionOptions().setForce(false));
27 | String textContent = page.locator("p.subtitle").textContent();
28 | System.out.println(textContent);
29 |
30 | Locator heros = page.locator("id=superheros");
31 | heros.selectOption(new String[] {"ta", "bp", "am"});
32 |
33 |
34 | Locator langDD = page.locator("#lang");
35 | Locator options = langDD.locator("option");
36 | List allInnerTexts = options.allInnerTexts();
37 | allInnerTexts.forEach(i-> System.out.println(i));
38 | int count = options.count();
39 | System.out.println("len: "+count);
40 | langDD.selectOption(new SelectOption().setIndex(count-1));
41 |
42 | try {
43 | Thread.sleep(3000);
44 | } catch (InterruptedException e) {
45 | // TODO Auto-generated catch block
46 | e.printStackTrace();
47 | }
48 |
49 | playwright.close();
50 |
51 |
52 | }
53 |
54 | }
55 |
--------------------------------------------------------------------------------
/src/test/java/day5/RecordedScript.java:
--------------------------------------------------------------------------------
1 | package day5;
2 |
3 | import com.microsoft.playwright.*;
4 | import com.microsoft.playwright.options.*;
5 | import static com.microsoft.playwright.assertions.PlaywrightAssertions.assertThat;
6 | import java.util.*;
7 | public class RecordedScript {
8 |
9 |
10 | public static void main(String[] args) {
11 | try (Playwright playwright = Playwright.create()) {
12 | Browser browser = playwright.chromium().launch(new BrowserType.LaunchOptions()
13 | .setHeadless(false));
14 | BrowserContext context = browser.newContext();
15 | Page page = context.newPage();
16 | page.navigate("https://letcode.in/");
17 | page.getByRole(AriaRole.LINK, new Page.GetByRoleOptions().setName("Log in")).click();
18 | page.getByRole(AriaRole.TEXTBOX, new Page.GetByRoleOptions().setName("Enter registered email"))
19 | .click();
20 | page.getByRole(AriaRole.TEXTBOX, new Page.GetByRoleOptions().setName("Enter registered email"))
21 | .fill("koushik350@gmail.com");
22 | page.getByRole(AriaRole.TEXTBOX, new Page.GetByRoleOptions().setName("Enter registered email"))
23 | .press("Tab");
24 | page.getByPlaceholder("Enter password").fill("Pass123$");
25 | page.getByRole(AriaRole.BUTTON, new Page.GetByRoleOptions().setName("LOGIN")).click();
26 | page.getByRole(AriaRole.LINK, new Page.GetByRoleOptions().setName("Sign out")).click();
27 | page.getByRole(AriaRole.LINK, new Page.GetByRoleOptions().setName("Work-Space")).click();
28 | page.getByRole(AriaRole.LINK, new Page.GetByRoleOptions().setName("Drop-Down")).click();
29 | page.locator("#fruits").selectOption("3");
30 | }
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/src/test/java/day6/LearnAlerts.java:
--------------------------------------------------------------------------------
1 | package day6;
2 |
3 | import java.util.function.Consumer;
4 |
5 | import com.microsoft.playwright.BrowserType;
6 | import com.microsoft.playwright.Dialog;
7 | import com.microsoft.playwright.Page;
8 | import com.microsoft.playwright.Playwright;
9 |
10 | //
11 | //class MyDialog implements Consumer