├── .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 | ###
Presentation link
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{ 12 | // 13 | // @Override 14 | // public void accept(Dialog dialog) { 15 | // System.out.println(dialog.message()); 16 | // String defaultValue = dialog.defaultValue(); 17 | // System.out.println(defaultValue); 18 | // dialog.accept("Koushik"); 19 | // } 20 | // 21 | //} 22 | 23 | public class LearnAlerts { 24 | 25 | public static void main(String[] args) { 26 | 27 | Playwright playwright = Playwright.create(); 28 | Page page = playwright.chromium().launch(new BrowserType.LaunchOptions() 29 | .setHeadless(false)).newPage(); 30 | page.navigate("https://letcode.in/alert"); 31 | 32 | Consumer alert = new Consumer() { 33 | public void accept(Dialog dialog) { 34 | System.out.println(dialog.message()); 35 | String defaultValue = dialog.defaultValue(); 36 | System.out.println(defaultValue); 37 | dialog.dismiss(); 38 | page.offDialog(this); 39 | } 40 | }; 41 | page.onDialog(alert); 42 | 43 | 44 | // Consumer alert = dialog-> { 45 | // System.out.println(dialog.message()); 46 | // String defaultValue = dialog.defaultValue(); 47 | // System.out.println(defaultValue); 48 | // dialog.accept("Koushik"); 49 | // }; 50 | 51 | // page.onDialog(dialog-> { 52 | // System.out.println(dialog.message()); 53 | // dialog.dismiss(); 54 | // // page.offDialog(this); 55 | // }); 56 | 57 | page.locator("#accept").click(); 58 | 59 | page.onDialog(a->{ 60 | String defaultValue = a.message(); 61 | System.out.println(defaultValue); 62 | a.accept("Koushik"); 63 | }); 64 | page.locator("id=prompt").click(); 65 | System.out.println(page.locator("#myName").textContent()); 66 | 67 | } 68 | 69 | } 70 | -------------------------------------------------------------------------------- /src/test/java/day7/HTTPAuthentication.java: -------------------------------------------------------------------------------- 1 | package day7; 2 | 3 | import com.microsoft.playwright.Browser; 4 | import com.microsoft.playwright.BrowserContext; 5 | import com.microsoft.playwright.Page; 6 | import com.microsoft.playwright.Playwright; 7 | 8 | public class HTTPAuthentication { 9 | 10 | public static void main(String[] args) { 11 | 12 | Playwright playwright = Playwright.create(); 13 | Browser browser = playwright.chromium().launch(); 14 | BrowserContext context = browser.newContext( 15 | new Browser.NewContextOptions() 16 | .setHttpCredentials("admin", "admin") 17 | ); 18 | Page page = context.newPage(); 19 | page.navigate("https://the-internet.herokuapp.com/basic_auth"); 20 | System.out.println(page.locator("h3").textContent()); 21 | playwright.close(); 22 | 23 | 24 | 25 | 26 | 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /src/test/java/day8/WhatIsBrowserContext.java: -------------------------------------------------------------------------------- 1 | package day8; 2 | 3 | import com.microsoft.playwright.Browser; 4 | import com.microsoft.playwright.BrowserContext; 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 WhatIsBrowserContext { 11 | 12 | public static void main(String[] args) { 13 | 14 | Playwright playwright = Playwright.create(); 15 | BrowserType browserType = playwright.firefox(); 16 | LaunchOptions headless = new BrowserType.LaunchOptions().setHeadless(false); 17 | Browser browser = browserType.launch(headless); 18 | BrowserContext context = browser.newContext(); 19 | Page page = context.newPage(); 20 | page.navigate("https://bookcart.azurewebsites.net/"); 21 | page.click("//span[text()='Login']/.."); 22 | page.locator("input[formcontrolname='username']").type("ortoni"); 23 | page.locator("input[formcontrolname='password']").type("Pass1234$"); 24 | page.locator("button[color='primary']").click(); 25 | String userName = page.locator("//button[contains(@class,'mat-focus-indicator mat-menu-trigger')]//span[1]").textContent(); 26 | System.out.println(userName.split(" ")[1].split(" ")[0]); 27 | 28 | BrowserContext context2 = browser.newContext(); 29 | Page newPage = context2.newPage(); 30 | newPage.navigate("https://bookcart.azurewebsites.net/"); 31 | // userName = newPage.locator("//button[contains(@class,'mat-focus-indicator mat-menu-trigger')]//span[1]").textContent(); 32 | // System.out.println(userName.split(" ")[1].split(" ")[0]); 33 | // newPage.close(); 34 | // context2.close(); 35 | // 36 | page.bringToFront(); 37 | page.locator("input[type='search']").type("HP3"); 38 | 39 | // playwright.close(); 40 | 41 | 42 | 43 | 44 | 45 | } 46 | 47 | } 48 | -------------------------------------------------------------------------------- /src/test/java/day9/RecordVideo.java: -------------------------------------------------------------------------------- 1 | package day9; 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 | 12 | public class RecordVideo { 13 | 14 | public static void main(String[] args) { 15 | Playwright playwright = Playwright.create(); 16 | BrowserType browserType = playwright.chromium(); 17 | LaunchOptions headless = new BrowserType.LaunchOptions().setHeadless(false); 18 | Browser browser = browserType.launch(headless); 19 | BrowserContext context = browser.newContext(new Browser.NewContextOptions() 20 | .setRecordVideoDir(Paths.get("videos/")) 21 | .setRecordVideoSize(1280, 720)); 22 | Page page = context.newPage(); 23 | page.navigate("https://bookcart.azurewebsites.net/"); 24 | page.click("//span[text()='Login']/.."); 25 | page.locator("input[formcontrolname='username']").type("ortoni"); 26 | page.locator("input[formcontrolname='password']").type("Pass1234$"); 27 | page.locator("button[color='primary']").click(); 28 | String userName = page.locator("//button[contains(@class,'mat-focus-indicator mat-menu-trigger')]//span[1]").textContent(); 29 | System.out.println(userName.split(" ")[1].split(" ")[0]); 30 | context.close(); 31 | playwright.close(); 32 | 33 | } 34 | 35 | } 36 | --------------------------------------------------------------------------------