From 088bebd4a278d2ccb14309a37f61dd00300dde6d Mon Sep 17 00:00:00 2001 From: "mohammadfaisalkhatri@gmail.com" Date: Sat, 11 Apr 2026 11:43:35 +0530 Subject: [PATCH 01/11] added new class for creating click operations --- .../tests/ClickOperationTests.java | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 src/test/java/io/github/mfaisalkhatri/tests/ClickOperationTests.java diff --git a/src/test/java/io/github/mfaisalkhatri/tests/ClickOperationTests.java b/src/test/java/io/github/mfaisalkhatri/tests/ClickOperationTests.java new file mode 100644 index 0000000..e62bc3d --- /dev/null +++ b/src/test/java/io/github/mfaisalkhatri/tests/ClickOperationTests.java @@ -0,0 +1,31 @@ +package io.github.mfaisalkhatri.tests; + +import com.microsoft.playwright.Browser; +import com.microsoft.playwright.BrowserType; +import com.microsoft.playwright.Page; +import com.microsoft.playwright.Playwright; +import org.testng.annotations.AfterClass; +import org.testng.annotations.BeforeClass; + +public class ClickOperationTests { + + private Playwright playwright; + private Page page; + + @BeforeClass + public void setup() { + this.playwright = Playwright.create (); + Browser browser = playwright.chromium().launch(new BrowserType.LaunchOptions().setHeadless(false) + .setChannel("chrome")); + this.page = browser.newPage (); + } + + + + + @AfterClass + public void tearDown() { + this.page.close (); + this.playwright.close (); + } +} From a56fb6d236f3d4ef73f0b63b5ad9ef7c9d233604 Mon Sep 17 00:00:00 2001 From: "mohammadfaisalkhatri@gmail.com" Date: Sat, 11 Apr 2026 12:14:51 +0530 Subject: [PATCH 02/11] added example code for left mouse click --- .../tests/ClickOperationTests.java | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/src/test/java/io/github/mfaisalkhatri/tests/ClickOperationTests.java b/src/test/java/io/github/mfaisalkhatri/tests/ClickOperationTests.java index e62bc3d..04fe60f 100644 --- a/src/test/java/io/github/mfaisalkhatri/tests/ClickOperationTests.java +++ b/src/test/java/io/github/mfaisalkhatri/tests/ClickOperationTests.java @@ -1,11 +1,16 @@ package io.github.mfaisalkhatri.tests; +import static com.microsoft.playwright.assertions.PlaywrightAssertions.assertThat; + import com.microsoft.playwright.Browser; import com.microsoft.playwright.BrowserType; +import com.microsoft.playwright.Locator; import com.microsoft.playwright.Page; import com.microsoft.playwright.Playwright; +import com.microsoft.playwright.options.AriaRole; import org.testng.annotations.AfterClass; import org.testng.annotations.BeforeClass; +import org.testng.annotations.Test; public class ClickOperationTests { @@ -20,7 +25,18 @@ public void setup() { this.page = browser.newPage (); } - + @Test + public void testLeftClick () { + page.navigate ("https://the-internet.herokuapp.com/"); + Locator challenginDomLink = page.getByRole (AriaRole.LINK, + new Page.GetByRoleOptions ().setName ("Challenging DOM")); + challenginDomLink.click (); + + assertThat ( + page.getByRole (AriaRole.HEADING, new Page.GetByRoleOptions ().setName ("Challenging DOM"))).isVisible (); + } + + @AfterClass From 45a3c69db68c335e45c921f4fb1ee1e91a055ac3 Mon Sep 17 00:00:00 2001 From: "mohammadfaisalkhatri@gmail.com" Date: Sat, 11 Apr 2026 12:16:05 +0530 Subject: [PATCH 03/11] added second approach to left click --- .../mfaisalkhatri/tests/ClickOperationTests.java | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/test/java/io/github/mfaisalkhatri/tests/ClickOperationTests.java b/src/test/java/io/github/mfaisalkhatri/tests/ClickOperationTests.java index 04fe60f..1e05648 100644 --- a/src/test/java/io/github/mfaisalkhatri/tests/ClickOperationTests.java +++ b/src/test/java/io/github/mfaisalkhatri/tests/ClickOperationTests.java @@ -4,7 +4,6 @@ import com.microsoft.playwright.Browser; import com.microsoft.playwright.BrowserType; -import com.microsoft.playwright.Locator; import com.microsoft.playwright.Page; import com.microsoft.playwright.Playwright; import com.microsoft.playwright.options.AriaRole; @@ -27,13 +26,15 @@ public void setup() { @Test public void testLeftClick () { - page.navigate ("https://the-internet.herokuapp.com/"); - Locator challenginDomLink = page.getByRole (AriaRole.LINK, - new Page.GetByRoleOptions ().setName ("Challenging DOM")); - challenginDomLink.click (); + this.page.navigate ("https://the-internet.herokuapp.com/"); + this.page.getByRole (AriaRole.LINK, new Page.GetByRoleOptions ().setName ("Challenging DOM")) + .click (); + //Locator challenginDomLink = page.getByRole (AriaRole.LINK, + // new Page.GetByRoleOptions ().setName ("Challenging DOM")); + //challenginDomLink.click (); assertThat ( - page.getByRole (AriaRole.HEADING, new Page.GetByRoleOptions ().setName ("Challenging DOM"))).isVisible (); + this.page.getByRole (AriaRole.HEADING, new Page.GetByRoleOptions ().setName ("Challenging DOM"))).isVisible (); } From d50c5aa55fba12fc156fe9f9668b1bd83c4eb9df Mon Sep 17 00:00:00 2001 From: "mohammadfaisalkhatri@gmail.com" Date: Sat, 11 Apr 2026 15:27:34 +0530 Subject: [PATCH 04/11] fixed the dropdown test by refactoring the select by value test with th-internet website --- .../tests/ClickOperationTests.java | 2 -- .../mfaisalkhatri/tests/DropdownTests.java | 26 +++++++++++-------- 2 files changed, 15 insertions(+), 13 deletions(-) diff --git a/src/test/java/io/github/mfaisalkhatri/tests/ClickOperationTests.java b/src/test/java/io/github/mfaisalkhatri/tests/ClickOperationTests.java index 1e05648..c692f7a 100644 --- a/src/test/java/io/github/mfaisalkhatri/tests/ClickOperationTests.java +++ b/src/test/java/io/github/mfaisalkhatri/tests/ClickOperationTests.java @@ -38,8 +38,6 @@ public void testLeftClick () { } - - @AfterClass public void tearDown() { this.page.close (); diff --git a/src/test/java/io/github/mfaisalkhatri/tests/DropdownTests.java b/src/test/java/io/github/mfaisalkhatri/tests/DropdownTests.java index dc5bce6..d89d748 100644 --- a/src/test/java/io/github/mfaisalkhatri/tests/DropdownTests.java +++ b/src/test/java/io/github/mfaisalkhatri/tests/DropdownTests.java @@ -1,16 +1,21 @@ package io.github.mfaisalkhatri.tests; -import com.microsoft.playwright.*; +import static com.microsoft.playwright.assertions.PlaywrightAssertions.assertThat; +import static org.testng.Assert.assertEquals; + +import java.util.regex.Pattern; + +import com.microsoft.playwright.Browser; +import com.microsoft.playwright.BrowserType; +import com.microsoft.playwright.Locator; +import com.microsoft.playwright.Page; +import com.microsoft.playwright.Playwright; +import com.microsoft.playwright.options.AriaRole; import com.microsoft.playwright.options.SelectOption; import org.testng.annotations.AfterClass; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; -import java.util.regex.Pattern; - -import static com.microsoft.playwright.assertions.PlaywrightAssertions.assertThat; -import static org.testng.Assert.assertEquals; - public class DropdownTests { private Playwright playwright; @@ -65,13 +70,12 @@ public void testSelectByIndex() { @Test public void testSelectByValue() { - this.page.navigate("https://www.lambdatest.com/selenium-playground/select-dropdown-demo"); - final Locator dropdownField = this.page.locator("#select-demo"); + this.page.navigate ("https://the-internet.herokuapp.com/dropdown"); - dropdownField.selectOption(new SelectOption().setValue("Wednesday")); + this.page.getByRole (AriaRole.COMBOBOX) + .selectOption ("Option 2"); - final Locator daySelected = this.page.locator(".pt-10 p"); - assertThat(daySelected).hasText("Day selected :- Wednesday"); + assertThat (page.getByRole (AriaRole.COMBOBOX)).containsText ("Option 2"); } @Test From d89455f1cf1f53c0524041adc79d6733e8344af6 Mon Sep 17 00:00:00 2001 From: "mohammadfaisalkhatri@gmail.com" Date: Tue, 14 Apr 2026 09:30:37 +0530 Subject: [PATCH 05/11] replaced the demo website for multi dropdown tests, fixed multi dropdown tests --- .../mfaisalkhatri/tests/DropdownTests.java | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/src/test/java/io/github/mfaisalkhatri/tests/DropdownTests.java b/src/test/java/io/github/mfaisalkhatri/tests/DropdownTests.java index d89d748..f89930e 100644 --- a/src/test/java/io/github/mfaisalkhatri/tests/DropdownTests.java +++ b/src/test/java/io/github/mfaisalkhatri/tests/DropdownTests.java @@ -80,12 +80,21 @@ public void testSelectByValue() { @Test public void testMultiSelectOptions() { - this.page.navigate("https://www.lambdatest.com/selenium-playground/select-dropdown-demo"); + this.page.navigate("https://testautomationpractice.blogspot.com/"); - final Locator dropdownField = this.page.locator("#multi-select"); - dropdownField.selectOption(new SelectOption[]{new SelectOption().setLabel("New York"), new SelectOption().setLabel("Texas"), new SelectOption().setValue("California"), new SelectOption().setIndex(7)}); + final Locator dropdownField = this.page.getByRole (AriaRole.LISTBOX, new Page.GetByRoleOptions ().setName ( + "Sorted List:")); + dropdownField.selectOption (new SelectOption [] {new SelectOption ().setLabel ("Cat"), + new SelectOption ().setLabel ("Cheetah"), new SelectOption ().setIndex (2)}); - assertThat(dropdownField).hasValues(new Pattern[]{Pattern.compile("California"), Pattern.compile("New York"), Pattern.compile("Texas"), Pattern.compile("Washington")}); + assertThat(dropdownField).hasValues (new Pattern[]{Pattern.compile ("cat"), + Pattern.compile ("cheetah"), Pattern.compile ("deer")}); + //dropdownField.selectOption(new SelectOption[]{new SelectOption().setLabel("New York"), + //new SelectOption().setLabel("Texas"), new SelectOption().setValue("California"), + //new SelectOption().setIndex(7)}); + + //assertThat(dropdownField).hasValues(new Pattern[]{Pattern.compile("California"), Pattern.compile("New York") + // , Pattern.compile("Texas"), Pattern.compile("Washington")}); } @AfterClass From b9bdbf5880766d3d65bf8a2ec19cabf564b44a94 Mon Sep 17 00:00:00 2001 From: "mohammadfaisalkhatri@gmail.com" Date: Tue, 14 Apr 2026 09:34:02 +0530 Subject: [PATCH 06/11] removed commented code --- .../java/io/github/mfaisalkhatri/tests/DropdownTests.java | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/test/java/io/github/mfaisalkhatri/tests/DropdownTests.java b/src/test/java/io/github/mfaisalkhatri/tests/DropdownTests.java index f89930e..66ba43d 100644 --- a/src/test/java/io/github/mfaisalkhatri/tests/DropdownTests.java +++ b/src/test/java/io/github/mfaisalkhatri/tests/DropdownTests.java @@ -89,12 +89,6 @@ public void testMultiSelectOptions() { assertThat(dropdownField).hasValues (new Pattern[]{Pattern.compile ("cat"), Pattern.compile ("cheetah"), Pattern.compile ("deer")}); - //dropdownField.selectOption(new SelectOption[]{new SelectOption().setLabel("New York"), - //new SelectOption().setLabel("Texas"), new SelectOption().setValue("California"), - //new SelectOption().setIndex(7)}); - - //assertThat(dropdownField).hasValues(new Pattern[]{Pattern.compile("California"), Pattern.compile("New York") - // , Pattern.compile("Texas"), Pattern.compile("Washington")}); } @AfterClass From d63b54c49bd170bede1b03178200629782a3841f Mon Sep 17 00:00:00 2001 From: "mohammadfaisalkhatri@gmail.com" Date: Tue, 14 Apr 2026 16:49:10 +0530 Subject: [PATCH 07/11] added example code for right mouse click --- .../mfaisalkhatri/tests/ClickOperationTests.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/test/java/io/github/mfaisalkhatri/tests/ClickOperationTests.java b/src/test/java/io/github/mfaisalkhatri/tests/ClickOperationTests.java index c692f7a..9aa6671 100644 --- a/src/test/java/io/github/mfaisalkhatri/tests/ClickOperationTests.java +++ b/src/test/java/io/github/mfaisalkhatri/tests/ClickOperationTests.java @@ -4,9 +4,11 @@ import com.microsoft.playwright.Browser; import com.microsoft.playwright.BrowserType; +import com.microsoft.playwright.Locator; import com.microsoft.playwright.Page; import com.microsoft.playwright.Playwright; import com.microsoft.playwright.options.AriaRole; +import com.microsoft.playwright.options.MouseButton; import org.testng.annotations.AfterClass; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; @@ -37,6 +39,18 @@ public void testLeftClick () { this.page.getByRole (AriaRole.HEADING, new Page.GetByRoleOptions ().setName ("Challenging DOM"))).isVisible (); } + @Test + public void testRightClick () { + this.page.navigate ("https://the-internet.herokuapp.com/context_menu"); + this.page.locator ("#hot-spot") + .click (new Locator.ClickOptions ().setButton (MouseButton.RIGHT)); + this.page.onDialog (dialog -> { + String alertText = dialog.message (); + + assert alertText.equals ("You selected a context menu"); + dialog.accept (); + }); + } @AfterClass public void tearDown() { From 0b3d6bfca2bf32c8f5d690dad0840f2225d4f1c3 Mon Sep 17 00:00:00 2001 From: mfaisalkhatri Date: Wed, 22 Apr 2026 13:32:03 +0530 Subject: [PATCH 08/11] added force click and positio nbased click tests --- .../tests/ClickOperationTests.java | 112 ++++++++++++------ test-suites/testng-clickoperations.xml | 18 +++ 2 files changed, 97 insertions(+), 33 deletions(-) create mode 100644 test-suites/testng-clickoperations.xml diff --git a/src/test/java/io/github/mfaisalkhatri/tests/ClickOperationTests.java b/src/test/java/io/github/mfaisalkhatri/tests/ClickOperationTests.java index 9aa6671..c5adbf6 100644 --- a/src/test/java/io/github/mfaisalkhatri/tests/ClickOperationTests.java +++ b/src/test/java/io/github/mfaisalkhatri/tests/ClickOperationTests.java @@ -1,60 +1,106 @@ package io.github.mfaisalkhatri.tests; -import static com.microsoft.playwright.assertions.PlaywrightAssertions.assertThat; - -import com.microsoft.playwright.Browser; -import com.microsoft.playwright.BrowserType; -import com.microsoft.playwright.Locator; -import com.microsoft.playwright.Page; -import com.microsoft.playwright.Playwright; +import com.microsoft.playwright.*; import com.microsoft.playwright.options.AriaRole; +import com.microsoft.playwright.options.BoundingBox; import com.microsoft.playwright.options.MouseButton; -import org.testng.annotations.AfterClass; -import org.testng.annotations.BeforeClass; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; +import static com.microsoft.playwright.assertions.PlaywrightAssertions.assertThat; +import static org.testng.Assert.assertEquals; + public class ClickOperationTests { private Playwright playwright; - private Page page; + private Page page; - @BeforeClass + @BeforeMethod public void setup() { - this.playwright = Playwright.create (); + this.playwright = Playwright.create(); Browser browser = playwright.chromium().launch(new BrowserType.LaunchOptions().setHeadless(false) - .setChannel("chrome")); - this.page = browser.newPage (); + .setChannel("chrome")); + this.page = browser.newPage(); } @Test - public void testLeftClick () { - this.page.navigate ("https://the-internet.herokuapp.com/"); - this.page.getByRole (AriaRole.LINK, new Page.GetByRoleOptions ().setName ("Challenging DOM")) - .click (); + public void testLeftClick() { + this.page.navigate("https://the-internet.herokuapp.com/"); + this.page.getByRole(AriaRole.LINK, new Page.GetByRoleOptions().setName("Challenging DOM")) + .click(); //Locator challenginDomLink = page.getByRole (AriaRole.LINK, // new Page.GetByRoleOptions ().setName ("Challenging DOM")); //challenginDomLink.click (); - assertThat ( - this.page.getByRole (AriaRole.HEADING, new Page.GetByRoleOptions ().setName ("Challenging DOM"))).isVisible (); + assertThat( + this.page.getByRole(AriaRole.HEADING, new Page.GetByRoleOptions().setName("Challenging DOM"))).isVisible(); } @Test - public void testRightClick () { - this.page.navigate ("https://the-internet.herokuapp.com/context_menu"); - this.page.locator ("#hot-spot") - .click (new Locator.ClickOptions ().setButton (MouseButton.RIGHT)); - this.page.onDialog (dialog -> { - String alertText = dialog.message (); - - assert alertText.equals ("You selected a context menu"); - dialog.accept (); + public void testRightClick() { + this.page.navigate("https://the-internet.herokuapp.com/context_menu"); + this.page.locator("#hot-spot") + .click(new Locator.ClickOptions().setButton(MouseButton.RIGHT)); + this.page.onDialog(dialog -> { + String alertText = dialog.message(); + assert alertText.equals("You selected a context menu"); + dialog.accept(); }); } - @AfterClass + @Test + public void testDoubleClick() { + this.page.navigate("https://demo.guru99.com/test/simple_context_menu.html"); + + Locator alertBtn = this.page.locator("#authentication > button"); + this.page.onDialog(dialog -> { + String text = "You double clicked me.. Thank You.."; + assertEquals(dialog.message(), text); + dialog.accept(); + }); + alertBtn.dblclick(); + } + + @Test + public void testMouseHover() { + this.page.navigate("https://automationteststore.com/"); + this.page.getByRole(AriaRole.LINK, new Page.GetByRoleOptions() + .setName(" Apparel & accessories")).hover(); + this.page.getByRole(AriaRole.LINK, new Page.GetByRoleOptions() + .setName("Shoes").setExact(true)).click(); + assertThat(this.page.getByRole(AriaRole.HEADING, + new Page.GetByRoleOptions().setName("Shoes"))).isVisible(); + } + + @Test + public void testForceMouseClick() { + this.page.navigate("https://automationteststore.com/"); + this.page.getByRole(AriaRole.LINK, new Page.GetByRoleOptions() + .setName("Specials")).click(new Locator.ClickOptions().setForce(true)); + assertThat(this.page.getByRole(AriaRole.HEADING, new Page.GetByRoleOptions() + .setName("Special Offers"))).isVisible(); + } + + @Test + public void testPositionBasedClick() { + this.page.navigate("https://the-internet.herokuapp.com/horizontal_slider"); + Locator slider = this.page.getByRole(AriaRole.SLIDER); + BoundingBox box = slider.boundingBox(); + double width = box.width; + double height = box.height; + + double x = width * 0.5; + double y = height * 0.5; + + slider.click(new Locator.ClickOptions().setPosition(x, y)); + this.page.waitForTimeout(3000); + + } + + @AfterMethod public void tearDown() { - this.page.close (); - this.playwright.close (); + this.page.close(); + this.playwright.close(); } -} +} \ No newline at end of file diff --git a/test-suites/testng-clickoperations.xml b/test-suites/testng-clickoperations.xml new file mode 100644 index 0000000..2409d2a --- /dev/null +++ b/test-suites/testng-clickoperations.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file From 7e3860250e1c648616608ff7f955f370bb6bf48c Mon Sep 17 00:00:00 2001 From: mfaisalkhatri Date: Wed, 22 Apr 2026 20:20:44 +0530 Subject: [PATCH 09/11] click with modifier example wip --- .../tests/ClickOperationTests.java | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/test/java/io/github/mfaisalkhatri/tests/ClickOperationTests.java b/src/test/java/io/github/mfaisalkhatri/tests/ClickOperationTests.java index c5adbf6..3b760e6 100644 --- a/src/test/java/io/github/mfaisalkhatri/tests/ClickOperationTests.java +++ b/src/test/java/io/github/mfaisalkhatri/tests/ClickOperationTests.java @@ -3,11 +3,14 @@ import com.microsoft.playwright.*; import com.microsoft.playwright.options.AriaRole; import com.microsoft.playwright.options.BoundingBox; +import com.microsoft.playwright.options.KeyboardModifier; import com.microsoft.playwright.options.MouseButton; import org.testng.annotations.AfterMethod; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; +import java.util.List; + import static com.microsoft.playwright.assertions.PlaywrightAssertions.assertThat; import static org.testng.Assert.assertEquals; @@ -98,6 +101,23 @@ public void testPositionBasedClick() { } + @Test + public void testClickWithModifiers() { + page.navigate("https://jqueryui.com/selectable/"); + FrameLocator frame = page.frameLocator(".demo-frame"); + + Locator items = frame.locator("#selectable li"); + + items.nth(0).click(new Locator.ClickOptions() + .setModifiers(List.of(KeyboardModifier.CONTROL))); + + items.nth(3).click(new Locator.ClickOptions() + .setModifiers(List.of(KeyboardModifier.CONTROL))); + + page.waitForTimeout(4000); + + } + @AfterMethod public void tearDown() { this.page.close(); From f4f0100ad1db72903605ec7715aaa3db477a7d62 Mon Sep 17 00:00:00 2001 From: mfaisalkhatri Date: Mon, 4 May 2026 08:00:32 +0530 Subject: [PATCH 10/11] updated playwright dependency version, added test for delay click, drag and drop and click with modifiers --- pom.xml | 2 +- .../tests/ClickOperationTests.java | 147 +++++++++++------- 2 files changed, 89 insertions(+), 60 deletions(-) diff --git a/pom.xml b/pom.xml index 7e56cb8..ac93114 100644 --- a/pom.xml +++ b/pom.xml @@ -12,7 +12,7 @@ UTF-8 - 1.58.0 + 1.59.0 7.12.0 3.15.0 3.5.5 diff --git a/src/test/java/io/github/mfaisalkhatri/tests/ClickOperationTests.java b/src/test/java/io/github/mfaisalkhatri/tests/ClickOperationTests.java index 3b760e6..f71e7f8 100644 --- a/src/test/java/io/github/mfaisalkhatri/tests/ClickOperationTests.java +++ b/src/test/java/io/github/mfaisalkhatri/tests/ClickOperationTests.java @@ -9,6 +9,7 @@ import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; +import java.util.Arrays; import java.util.List; import static com.microsoft.playwright.assertions.PlaywrightAssertions.assertThat; @@ -17,110 +18,138 @@ public class ClickOperationTests { private Playwright playwright; - private Page page; + private Page page; @BeforeMethod - public void setup() { - this.playwright = Playwright.create(); - Browser browser = playwright.chromium().launch(new BrowserType.LaunchOptions().setHeadless(false) - .setChannel("chrome")); - this.page = browser.newPage(); + public void setup () { + this.playwright = Playwright.create (); + Browser browser = this.playwright.chromium () + .launch (new BrowserType.LaunchOptions ().setHeadless (false) + .setChannel ("chrome")); + this.page = browser.newPage (); } @Test - public void testLeftClick() { - this.page.navigate("https://the-internet.herokuapp.com/"); - this.page.getByRole(AriaRole.LINK, new Page.GetByRoleOptions().setName("Challenging DOM")) - .click(); + public void testLeftClick () { + this.page.navigate ("https://the-internet.herokuapp.com/"); + this.page.getByRole (AriaRole.LINK, new Page.GetByRoleOptions ().setName ("Challenging DOM")) + .click (); //Locator challenginDomLink = page.getByRole (AriaRole.LINK, // new Page.GetByRoleOptions ().setName ("Challenging DOM")); //challenginDomLink.click (); - assertThat( - this.page.getByRole(AriaRole.HEADING, new Page.GetByRoleOptions().setName("Challenging DOM"))).isVisible(); + assertThat (this.page.getByRole (AriaRole.HEADING, + new Page.GetByRoleOptions ().setName ("Challenging DOM"))).isVisible (); } @Test - public void testRightClick() { - this.page.navigate("https://the-internet.herokuapp.com/context_menu"); - this.page.locator("#hot-spot") - .click(new Locator.ClickOptions().setButton(MouseButton.RIGHT)); - this.page.onDialog(dialog -> { - String alertText = dialog.message(); - assert alertText.equals("You selected a context menu"); - dialog.accept(); + public void testRightClick () { + this.page.navigate ("https://the-internet.herokuapp.com/context_menu"); + this.page.locator ("#hot-spot") + .click (new Locator.ClickOptions ().setButton (MouseButton.RIGHT)); + this.page.onDialog (dialog -> { + String alertText = dialog.message (); + assert alertText.equals ("You selected a context menu"); + dialog.accept (); }); } @Test - public void testDoubleClick() { - this.page.navigate("https://demo.guru99.com/test/simple_context_menu.html"); + public void testDoubleClick () { + this.page.navigate ("https://demo.guru99.com/test/simple_context_menu.html"); - Locator alertBtn = this.page.locator("#authentication > button"); - this.page.onDialog(dialog -> { + Locator alertBtn = this.page.locator ("#authentication > button"); + this.page.onDialog (dialog -> { String text = "You double clicked me.. Thank You.."; - assertEquals(dialog.message(), text); - dialog.accept(); + assertEquals (dialog.message (), text); + dialog.accept (); }); - alertBtn.dblclick(); + alertBtn.dblclick (); } @Test - public void testMouseHover() { - this.page.navigate("https://automationteststore.com/"); - this.page.getByRole(AriaRole.LINK, new Page.GetByRoleOptions() - .setName(" Apparel & accessories")).hover(); - this.page.getByRole(AriaRole.LINK, new Page.GetByRoleOptions() - .setName("Shoes").setExact(true)).click(); - assertThat(this.page.getByRole(AriaRole.HEADING, - new Page.GetByRoleOptions().setName("Shoes"))).isVisible(); + public void testMouseHover () { + this.page.navigate ("https://automationteststore.com/"); + this.page.getByRole (AriaRole.LINK, new Page.GetByRoleOptions ().setName (" Apparel & accessories")) + .hover (); + this.page.getByRole (AriaRole.LINK, new Page.GetByRoleOptions ().setName ("Shoes") + .setExact (true)) + .click (); + assertThat ( + this.page.getByRole (AriaRole.HEADING, new Page.GetByRoleOptions ().setName ("Shoes"))).isVisible (); } @Test - public void testForceMouseClick() { - this.page.navigate("https://automationteststore.com/"); - this.page.getByRole(AriaRole.LINK, new Page.GetByRoleOptions() - .setName("Specials")).click(new Locator.ClickOptions().setForce(true)); - assertThat(this.page.getByRole(AriaRole.HEADING, new Page.GetByRoleOptions() - .setName("Special Offers"))).isVisible(); + public void testForceMouseClick () { + this.page.navigate ("https://automationteststore.com/"); + this.page.getByRole (AriaRole.LINK, new Page.GetByRoleOptions ().setName ("Specials")) + .click (new Locator.ClickOptions ().setForce (true)); + assertThat (this.page.getByRole (AriaRole.HEADING, + new Page.GetByRoleOptions ().setName ("Special Offers"))).isVisible (); } @Test - public void testPositionBasedClick() { - this.page.navigate("https://the-internet.herokuapp.com/horizontal_slider"); - Locator slider = this.page.getByRole(AriaRole.SLIDER); - BoundingBox box = slider.boundingBox(); + public void testPositionBasedClick () { + this.page.navigate ("https://the-internet.herokuapp.com/horizontal_slider"); + Locator slider = this.page.getByRole (AriaRole.SLIDER); + BoundingBox box = slider.boundingBox (); double width = box.width; double height = box.height; double x = width * 0.5; double y = height * 0.5; - slider.click(new Locator.ClickOptions().setPosition(x, y)); - this.page.waitForTimeout(3000); + slider.click (new Locator.ClickOptions ().setPosition (x, y)); + this.page.waitForTimeout (3000); } @Test - public void testClickWithModifiers() { - page.navigate("https://jqueryui.com/selectable/"); - FrameLocator frame = page.frameLocator(".demo-frame"); + public void testClickWithModifiers () { + this.page.navigate ("https://jqueryui.com/selectable/"); + FrameLocator frame = this.page.frameLocator (".demo-frame"); - Locator items = frame.locator("#selectable li"); + Locator items = frame.locator ("#selectable li"); - items.nth(0).click(new Locator.ClickOptions() - .setModifiers(List.of(KeyboardModifier.CONTROL))); + items.nth (0) + .click (new Locator.ClickOptions ().setModifiers (List.of (KeyboardModifier.CONTROL))); - items.nth(3).click(new Locator.ClickOptions() - .setModifiers(List.of(KeyboardModifier.CONTROL))); + items.nth (3) + .click (new Locator.ClickOptions ().setModifiers (List.of (KeyboardModifier.CONTROL))); - page.waitForTimeout(4000); + this.page.waitForTimeout (2000); + + this.page.navigate ("https://the-internet.herokuapp.com/"); + this.page.getByRole (AriaRole.LINK, new Page.GetByRoleOptions ().setName ("File Download") + .setExact (true)) + .click (new Locator.ClickOptions ().setModifiers (List.of (KeyboardModifier.SHIFT))); + + this.page.waitForTimeout (2000); + + } + + @Test + public void testDelayClick () { + this.page.navigate ("https://the-internet.herokuapp.com/"); + this.page.getByRole (AriaRole.LINK, new Page.GetByRoleOptions ().setName ("Challenging DOM")) + .click (new Locator.ClickOptions ().setDelay (2000)); + assertThat (this.page.getByRole (AriaRole.HEADING, + new Page.GetByRoleOptions ().setName ("Challenging DOM"))).isVisible (); + } + + @Test + public void testDragAndDropActions () { + this.page.navigate ("https://the-internet.herokuapp.com/"); + this.page.getByRole (AriaRole.LINK, new Page.GetByRoleOptions ().setName ("Drag and Drop")) + .click (); + this.page.locator ("#column-a").dragTo (this.page.locator ("#column-b")); + assertThat(this.page.locator ("#column-a")).containsText ("B"); } @AfterMethod - public void tearDown() { - this.page.close(); - this.playwright.close(); + public void tearDown () { + this.page.close (); + this.playwright.close (); } } \ No newline at end of file From 14615c916c3ea2cdf1728e781a8f583aacd028be Mon Sep 17 00:00:00 2001 From: mfaisalkhatri Date: Mon, 4 May 2026 08:06:48 +0530 Subject: [PATCH 11/11] added test examples for programmatic click and drag and drop actions --- .../tests/ClickOperationTests.java | 31 +++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/src/test/java/io/github/mfaisalkhatri/tests/ClickOperationTests.java b/src/test/java/io/github/mfaisalkhatri/tests/ClickOperationTests.java index f71e7f8..1b6442f 100644 --- a/src/test/java/io/github/mfaisalkhatri/tests/ClickOperationTests.java +++ b/src/test/java/io/github/mfaisalkhatri/tests/ClickOperationTests.java @@ -142,8 +142,35 @@ public void testDragAndDropActions () { this.page.navigate ("https://the-internet.herokuapp.com/"); this.page.getByRole (AriaRole.LINK, new Page.GetByRoleOptions ().setName ("Drag and Drop")) .click (); - this.page.locator ("#column-a").dragTo (this.page.locator ("#column-b")); - assertThat(this.page.locator ("#column-a")).containsText ("B"); + this.page.locator ("#column-a") + .dragTo (this.page.locator ("#column-b")); + assertThat (this.page.locator ("#column-a")).containsText ("B"); + + } + + @Test + public void testDragAndDropManually () { + this.page.navigate ("https://the-internet.herokuapp.com/"); + this.page.getByRole (AriaRole.LINK, new Page.GetByRoleOptions ().setName ("Drag and Drop")) + .click (); + this.page.locator ("#column-a") + .hover (); + this.page.mouse () + .down (); + this.page.locator ("#column-b") + .hover (); + this.page.mouse () + .up (); + assertThat (this.page.locator ("#column-a")).containsText ("B"); + } + + @Test + public void testProgrammaticClick () { + this.page.navigate ("https://the-internet.herokuapp.com/"); + this.page.getByRole (AriaRole.LINK, new Page.GetByRoleOptions ().setName ("Checkboxes")) + .dispatchEvent ("click"); + + assertThat (this.page.getByRole (AriaRole.HEADING)).containsText ("Checkboxes"); }