From d484b0d87d61ab2958298e577a192d5f4b71a921 Mon Sep 17 00:00:00 2001 From: Ha Do Date: Thu, 22 Apr 2021 16:25:24 +0700 Subject: [PATCH 01/13] add files for day1 --- README.md | 13 +++- src/test/java/ebay/data/ClientInfo.java | 77 +++++++++++++++++++ src/test/java/ebay/pages/BasePage.java | 4 + src/test/java/ebay/pages/PurchaseFacade.java | 4 + .../ebay/pages/checkoutPage/CheckoutPage.java | 6 ++ .../pages/checkoutPage/CheckoutPageMap.java | 4 + .../checkoutPage/CheckoutPageValidator.java | 4 + .../java/ebay/pages/itemPage/ItemPage.java | 4 + .../java/ebay/pages/itemPage/ItemPageMap.java | 4 + .../pages/itemPage/ItemPageValidator.java | 4 + .../ShippingAddressMap.java | 4 + .../ShippingAddressPage.java | 4 + .../ShippingAddressValidator.java | 4 + .../java/ebay/pages/signinPage/SignInMap.java | 4 + .../ebay/pages/signinPage/SignInPage.java | 4 + .../pages/signinPage/SignInValidator.java | 4 + .../java/openBrowser/ChromeHeadlessTest.java | 17 ++++ .../openBrowser/ChromeMobileViewPortTest.java | 19 +++++ src/test/java/openBrowser/ChromeTest.java | 26 +++++++ .../java/openBrowser/FirefoxHeadlessMode.java | 20 +++++ src/test/java/openBrowser/FirefoxTest.java | 13 ++++ src/test/java/openBrowser/IETest.java | 12 +++ .../testcases/FormAuthenticationTest.java | 62 +++++++++++++++ 23 files changed, 316 insertions(+), 1 deletion(-) create mode 100644 src/test/java/ebay/data/ClientInfo.java create mode 100644 src/test/java/ebay/pages/BasePage.java create mode 100644 src/test/java/ebay/pages/PurchaseFacade.java create mode 100644 src/test/java/ebay/pages/checkoutPage/CheckoutPage.java create mode 100644 src/test/java/ebay/pages/checkoutPage/CheckoutPageMap.java create mode 100644 src/test/java/ebay/pages/checkoutPage/CheckoutPageValidator.java create mode 100644 src/test/java/ebay/pages/itemPage/ItemPage.java create mode 100644 src/test/java/ebay/pages/itemPage/ItemPageMap.java create mode 100644 src/test/java/ebay/pages/itemPage/ItemPageValidator.java create mode 100644 src/test/java/ebay/pages/shippingAddressPage/ShippingAddressMap.java create mode 100644 src/test/java/ebay/pages/shippingAddressPage/ShippingAddressPage.java create mode 100644 src/test/java/ebay/pages/shippingAddressPage/ShippingAddressValidator.java create mode 100644 src/test/java/ebay/pages/signinPage/SignInMap.java create mode 100644 src/test/java/ebay/pages/signinPage/SignInPage.java create mode 100644 src/test/java/ebay/pages/signinPage/SignInValidator.java create mode 100644 src/test/java/openBrowser/ChromeHeadlessTest.java create mode 100644 src/test/java/openBrowser/ChromeMobileViewPortTest.java create mode 100644 src/test/java/openBrowser/ChromeTest.java create mode 100644 src/test/java/openBrowser/FirefoxHeadlessMode.java create mode 100644 src/test/java/openBrowser/FirefoxTest.java create mode 100644 src/test/java/openBrowser/IETest.java create mode 100644 src/test/java/testcases/FormAuthenticationTest.java diff --git a/README.md b/README.md index dce492b..281f622 100644 --- a/README.md +++ b/README.md @@ -141,4 +141,15 @@ Repo này chứa những bài tập và phần cấu hình sẵn cơ bản để * Navigate to https://todomvc.com/examples/vanillajs/ * Enter a new todo name * Verify a todo added ---- \ No newline at end of file +--- +12. Ecommerce sample test +* Open Browser +* Navigator to [Ebay item's page](https://www.ebay.com/p/5034224981?iid=153638834105&var=453955077516) +* Validate the price +* Click **Buy It Now** button +* On the SigIn page, click **Continue as a guest** +* Fill Shipping info +* Validate **Subtotal** price +* Click **Continue** button +* Validate **Total** price +---- \ No newline at end of file diff --git a/src/test/java/ebay/data/ClientInfo.java b/src/test/java/ebay/data/ClientInfo.java new file mode 100644 index 0000000..480510d --- /dev/null +++ b/src/test/java/ebay/data/ClientInfo.java @@ -0,0 +1,77 @@ +package ebay.data; + +public class ClientInfo { + public String fName; + public String lName; + public String country; + public String address1; + public String city; + public String phone; + public String zip; + + public String getfName() { + return fName; + } + + public void setfName(String fName) { + this.fName = fName; + } + + public String getlName() { + return lName; + } + + public void setlName(String lName) { + this.lName = lName; + } + + public String getCountry() { + return country; + } + + public void setCountry(String country) { + this.country = country; + } + + public String getAddress1() { + return address1; + } + + public void setAddress1(String address1) { + this.address1 = address1; + } + + public String getCity() { + return city; + } + + public void setCity(String city) { + this.city = city; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + + public String getZip() { + return zip; + } + + public void setZip(String zip) { + this.zip = zip; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public String email; +} diff --git a/src/test/java/ebay/pages/BasePage.java b/src/test/java/ebay/pages/BasePage.java new file mode 100644 index 0000000..eee52c2 --- /dev/null +++ b/src/test/java/ebay/pages/BasePage.java @@ -0,0 +1,4 @@ +package ebay.pages; + +public class BasePage { +} diff --git a/src/test/java/ebay/pages/PurchaseFacade.java b/src/test/java/ebay/pages/PurchaseFacade.java new file mode 100644 index 0000000..73a8eb1 --- /dev/null +++ b/src/test/java/ebay/pages/PurchaseFacade.java @@ -0,0 +1,4 @@ +package ebay.pages; + +public class PurchaseFacade { +} diff --git a/src/test/java/ebay/pages/checkoutPage/CheckoutPage.java b/src/test/java/ebay/pages/checkoutPage/CheckoutPage.java new file mode 100644 index 0000000..541645a --- /dev/null +++ b/src/test/java/ebay/pages/checkoutPage/CheckoutPage.java @@ -0,0 +1,6 @@ +package ebay.pages.checkoutPage; + +import ebay.pages.BasePage; + +public class CheckoutPage extends BasePage { +} diff --git a/src/test/java/ebay/pages/checkoutPage/CheckoutPageMap.java b/src/test/java/ebay/pages/checkoutPage/CheckoutPageMap.java new file mode 100644 index 0000000..3e68bb3 --- /dev/null +++ b/src/test/java/ebay/pages/checkoutPage/CheckoutPageMap.java @@ -0,0 +1,4 @@ +package ebay.pages.checkoutPage; + +public class CheckoutPageMap { +} diff --git a/src/test/java/ebay/pages/checkoutPage/CheckoutPageValidator.java b/src/test/java/ebay/pages/checkoutPage/CheckoutPageValidator.java new file mode 100644 index 0000000..8a02544 --- /dev/null +++ b/src/test/java/ebay/pages/checkoutPage/CheckoutPageValidator.java @@ -0,0 +1,4 @@ +package ebay.pages.checkoutPage; + +public class CheckoutPageValidator { +} diff --git a/src/test/java/ebay/pages/itemPage/ItemPage.java b/src/test/java/ebay/pages/itemPage/ItemPage.java new file mode 100644 index 0000000..a7465fd --- /dev/null +++ b/src/test/java/ebay/pages/itemPage/ItemPage.java @@ -0,0 +1,4 @@ +package ebay.pages.itemPage; + +public class ItemPage { +} diff --git a/src/test/java/ebay/pages/itemPage/ItemPageMap.java b/src/test/java/ebay/pages/itemPage/ItemPageMap.java new file mode 100644 index 0000000..e2b95b4 --- /dev/null +++ b/src/test/java/ebay/pages/itemPage/ItemPageMap.java @@ -0,0 +1,4 @@ +package ebay.pages.itemPage; + +public class ItemPageMap { +} diff --git a/src/test/java/ebay/pages/itemPage/ItemPageValidator.java b/src/test/java/ebay/pages/itemPage/ItemPageValidator.java new file mode 100644 index 0000000..d8b147e --- /dev/null +++ b/src/test/java/ebay/pages/itemPage/ItemPageValidator.java @@ -0,0 +1,4 @@ +package ebay.pages.itemPage; + +public class ItemPageValidator { +} diff --git a/src/test/java/ebay/pages/shippingAddressPage/ShippingAddressMap.java b/src/test/java/ebay/pages/shippingAddressPage/ShippingAddressMap.java new file mode 100644 index 0000000..aa46241 --- /dev/null +++ b/src/test/java/ebay/pages/shippingAddressPage/ShippingAddressMap.java @@ -0,0 +1,4 @@ +package ebay.pages.shippingAddressPage; + +public class ShippingAddressMap { +} diff --git a/src/test/java/ebay/pages/shippingAddressPage/ShippingAddressPage.java b/src/test/java/ebay/pages/shippingAddressPage/ShippingAddressPage.java new file mode 100644 index 0000000..0d978e1 --- /dev/null +++ b/src/test/java/ebay/pages/shippingAddressPage/ShippingAddressPage.java @@ -0,0 +1,4 @@ +package ebay.pages.shippingAddressPage; + +public class ShippingAddressPage { +} diff --git a/src/test/java/ebay/pages/shippingAddressPage/ShippingAddressValidator.java b/src/test/java/ebay/pages/shippingAddressPage/ShippingAddressValidator.java new file mode 100644 index 0000000..e9f56e8 --- /dev/null +++ b/src/test/java/ebay/pages/shippingAddressPage/ShippingAddressValidator.java @@ -0,0 +1,4 @@ +package ebay.pages.shippingAddressPage; + +public class ShippingAddressValidator { +} diff --git a/src/test/java/ebay/pages/signinPage/SignInMap.java b/src/test/java/ebay/pages/signinPage/SignInMap.java new file mode 100644 index 0000000..748860c --- /dev/null +++ b/src/test/java/ebay/pages/signinPage/SignInMap.java @@ -0,0 +1,4 @@ +package ebay.pages.signinPage; + +public class SignInMap { +} diff --git a/src/test/java/ebay/pages/signinPage/SignInPage.java b/src/test/java/ebay/pages/signinPage/SignInPage.java new file mode 100644 index 0000000..db24ba4 --- /dev/null +++ b/src/test/java/ebay/pages/signinPage/SignInPage.java @@ -0,0 +1,4 @@ +package ebay.pages.signinPage; + +public class SignInPage { +} diff --git a/src/test/java/ebay/pages/signinPage/SignInValidator.java b/src/test/java/ebay/pages/signinPage/SignInValidator.java new file mode 100644 index 0000000..66e19dc --- /dev/null +++ b/src/test/java/ebay/pages/signinPage/SignInValidator.java @@ -0,0 +1,4 @@ +package ebay.pages.signinPage; + +public class SignInValidator { +} diff --git a/src/test/java/openBrowser/ChromeHeadlessTest.java b/src/test/java/openBrowser/ChromeHeadlessTest.java new file mode 100644 index 0000000..419ae76 --- /dev/null +++ b/src/test/java/openBrowser/ChromeHeadlessTest.java @@ -0,0 +1,17 @@ +package openBrowser; + +import io.github.bonigarcia.wdm.WebDriverManager; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.chrome.ChromeDriver; +import org.openqa.selenium.chrome.ChromeOptions; + +public class ChromeHeadlessTest { + public static void main(String[] args) { + WebDriverManager.chromedriver().setup(); + + ChromeOptions chromeOptions = new ChromeOptions(); + chromeOptions.setHeadless(true); + + WebDriver driver = new ChromeDriver(chromeOptions); + } +} diff --git a/src/test/java/openBrowser/ChromeMobileViewPortTest.java b/src/test/java/openBrowser/ChromeMobileViewPortTest.java new file mode 100644 index 0000000..adf0a5e --- /dev/null +++ b/src/test/java/openBrowser/ChromeMobileViewPortTest.java @@ -0,0 +1,19 @@ +package openBrowser; + +import io.github.bonigarcia.wdm.WebDriverManager; +import org.openqa.selenium.chrome.ChromeDriver; +import org.openqa.selenium.chrome.ChromeOptions; + +import java.util.HashMap; +import java.util.Map; + +public class ChromeMobileViewPortTest { + public static void main(String[] args) { + WebDriverManager.chromedriver().setup(); + Map mobileEmulation = new HashMap<>(); + mobileEmulation.put("deviceName", "iPhone X"); + ChromeOptions opts = new ChromeOptions(); + opts.setExperimentalOption("mobileEmulation", mobileEmulation); + new ChromeDriver(opts); + } +} diff --git a/src/test/java/openBrowser/ChromeTest.java b/src/test/java/openBrowser/ChromeTest.java new file mode 100644 index 0000000..ecf3332 --- /dev/null +++ b/src/test/java/openBrowser/ChromeTest.java @@ -0,0 +1,26 @@ +package openBrowser; + +import io.github.bonigarcia.wdm.WebDriverManager; +import org.openqa.selenium.Dimension; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.chrome.ChromeDriver; + +public class ChromeTest { + + public static void main(String[] args) { + WebDriverManager.chromedriver().setup(); + WebDriver driver = new ChromeDriver();// open browser + driver.manage().window().maximize(); // maximize browser window +// driver.navigate().to("https://google.com.vn"); // navigate to a url + driver.get("https://google.com.vn"); + driver.get("https://www.selenium.dev"); + driver.navigate().back(); + driver.navigate().refresh(); + driver.navigate().forward(); + + driver.close();// close session +// driver.quit(); + + } + +} diff --git a/src/test/java/openBrowser/FirefoxHeadlessMode.java b/src/test/java/openBrowser/FirefoxHeadlessMode.java new file mode 100644 index 0000000..9af90c4 --- /dev/null +++ b/src/test/java/openBrowser/FirefoxHeadlessMode.java @@ -0,0 +1,20 @@ +package openBrowser; + +import io.github.bonigarcia.wdm.WebDriverManager; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.firefox.FirefoxBinary; +import org.openqa.selenium.firefox.FirefoxDriver; +import org.openqa.selenium.firefox.FirefoxOptions; + +public class FirefoxHeadlessMode { + public static void main(String[] args) { + WebDriverManager.firefoxdriver().setup(); + + FirefoxBinary firefoxBinary = new FirefoxBinary(); + firefoxBinary.addCommandLineOptions("--headless"); + FirefoxOptions firefoxOptions = new FirefoxOptions(); + firefoxOptions.setBinary(firefoxBinary); + + new FirefoxDriver(firefoxOptions); + } +} diff --git a/src/test/java/openBrowser/FirefoxTest.java b/src/test/java/openBrowser/FirefoxTest.java new file mode 100644 index 0000000..553be6e --- /dev/null +++ b/src/test/java/openBrowser/FirefoxTest.java @@ -0,0 +1,13 @@ +package openBrowser; + +import io.github.bonigarcia.wdm.WebDriverManager; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.firefox.FirefoxDriver; + +public class FirefoxTest { + public static void main(String[] args) { +// System.setProperty("webdriver.gecko.driver","drivers/geckodriver"); + WebDriverManager.firefoxdriver().setup(); + WebDriver driver = new FirefoxDriver(); + } +} diff --git a/src/test/java/openBrowser/IETest.java b/src/test/java/openBrowser/IETest.java new file mode 100644 index 0000000..ab80d72 --- /dev/null +++ b/src/test/java/openBrowser/IETest.java @@ -0,0 +1,12 @@ +package openBrowser; + +import io.github.bonigarcia.wdm.WebDriverManager; +import org.openqa.selenium.ie.InternetExplorerDriver; + +public class IETest { + public static void main(String[] args) { +// System.setProperty("webdriver.ie.driver",""); + WebDriverManager.iedriver().setup(); + new InternetExplorerDriver(); + } +} diff --git a/src/test/java/testcases/FormAuthenticationTest.java b/src/test/java/testcases/FormAuthenticationTest.java new file mode 100644 index 0000000..13c16a7 --- /dev/null +++ b/src/test/java/testcases/FormAuthenticationTest.java @@ -0,0 +1,62 @@ +package testcases; + +import io.github.bonigarcia.wdm.WebDriverManager; +import org.openqa.selenium.By; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.chrome.ChromeDriver; +import org.testng.Assert; +import org.testng.annotations.AfterClass; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.Test; + +public class FormAuthenticationTest { + WebDriver driver; + + @BeforeClass + void setup() { + WebDriverManager.chromedriver().setup(); + driver = new ChromeDriver(); + } + + + @BeforeMethod + void load() { + driver.get("https://the-internet.herokuapp.com/login"); + } + + @Test + void validCredential() { + + driver.findElement(By.id("username")).sendKeys("tomsmith"); + driver.findElement(By.id("password")).sendKeys("SuperSecretPassword!"); + + driver.findElement(By.xpath("//*[@type='submit']")).click(); + + Assert.assertEquals(driver.getCurrentUrl(), "https://the-internet.herokuapp.com/secure"); + + Assert.assertTrue(driver.findElement(By.id("flash-messages")).isDisplayed()); //You logged into a secure area! + + } + + @Test + void invalidCredential() { + + driver.findElement(By.id("username")).sendKeys("tomsmith"); + driver.findElement(By.id("password")).sendKeys("SuperSecretPassword"); + + driver.findElement(By.xpath("//*[@type='submit']")).click(); + + + Assert.assertEquals(driver.getCurrentUrl(), "https://the-internet.herokuapp.com/login"); + Assert.assertTrue(driver.findElement(By.className("error")).isDisplayed()); + + } + + @AfterClass + void tearDown() { + driver.quit(); + + } + +} From 61339cdacde6acd35de72c15759c6d87c1378677 Mon Sep 17 00:00:00 2001 From: Ha Do Date: Sat, 24 Apr 2021 08:48:19 +0700 Subject: [PATCH 02/13] remoe a module --- src/test/java/ebay/data/ClientInfo.java | 77 ------------------- src/test/java/ebay/pages/BasePage.java | 4 - src/test/java/ebay/pages/PurchaseFacade.java | 4 - .../ebay/pages/checkoutPage/CheckoutPage.java | 6 -- .../pages/checkoutPage/CheckoutPageMap.java | 4 - .../checkoutPage/CheckoutPageValidator.java | 4 - .../java/ebay/pages/itemPage/ItemPage.java | 4 - .../java/ebay/pages/itemPage/ItemPageMap.java | 4 - .../pages/itemPage/ItemPageValidator.java | 4 - .../ShippingAddressMap.java | 4 - .../ShippingAddressPage.java | 4 - .../ShippingAddressValidator.java | 4 - .../java/ebay/pages/signinPage/SignInMap.java | 4 - .../ebay/pages/signinPage/SignInPage.java | 4 - .../pages/signinPage/SignInValidator.java | 4 - 15 files changed, 135 deletions(-) delete mode 100644 src/test/java/ebay/data/ClientInfo.java delete mode 100644 src/test/java/ebay/pages/BasePage.java delete mode 100644 src/test/java/ebay/pages/PurchaseFacade.java delete mode 100644 src/test/java/ebay/pages/checkoutPage/CheckoutPage.java delete mode 100644 src/test/java/ebay/pages/checkoutPage/CheckoutPageMap.java delete mode 100644 src/test/java/ebay/pages/checkoutPage/CheckoutPageValidator.java delete mode 100644 src/test/java/ebay/pages/itemPage/ItemPage.java delete mode 100644 src/test/java/ebay/pages/itemPage/ItemPageMap.java delete mode 100644 src/test/java/ebay/pages/itemPage/ItemPageValidator.java delete mode 100644 src/test/java/ebay/pages/shippingAddressPage/ShippingAddressMap.java delete mode 100644 src/test/java/ebay/pages/shippingAddressPage/ShippingAddressPage.java delete mode 100644 src/test/java/ebay/pages/shippingAddressPage/ShippingAddressValidator.java delete mode 100644 src/test/java/ebay/pages/signinPage/SignInMap.java delete mode 100644 src/test/java/ebay/pages/signinPage/SignInPage.java delete mode 100644 src/test/java/ebay/pages/signinPage/SignInValidator.java diff --git a/src/test/java/ebay/data/ClientInfo.java b/src/test/java/ebay/data/ClientInfo.java deleted file mode 100644 index 480510d..0000000 --- a/src/test/java/ebay/data/ClientInfo.java +++ /dev/null @@ -1,77 +0,0 @@ -package ebay.data; - -public class ClientInfo { - public String fName; - public String lName; - public String country; - public String address1; - public String city; - public String phone; - public String zip; - - public String getfName() { - return fName; - } - - public void setfName(String fName) { - this.fName = fName; - } - - public String getlName() { - return lName; - } - - public void setlName(String lName) { - this.lName = lName; - } - - public String getCountry() { - return country; - } - - public void setCountry(String country) { - this.country = country; - } - - public String getAddress1() { - return address1; - } - - public void setAddress1(String address1) { - this.address1 = address1; - } - - public String getCity() { - return city; - } - - public void setCity(String city) { - this.city = city; - } - - public String getPhone() { - return phone; - } - - public void setPhone(String phone) { - this.phone = phone; - } - - public String getZip() { - return zip; - } - - public void setZip(String zip) { - this.zip = zip; - } - - public String getEmail() { - return email; - } - - public void setEmail(String email) { - this.email = email; - } - - public String email; -} diff --git a/src/test/java/ebay/pages/BasePage.java b/src/test/java/ebay/pages/BasePage.java deleted file mode 100644 index eee52c2..0000000 --- a/src/test/java/ebay/pages/BasePage.java +++ /dev/null @@ -1,4 +0,0 @@ -package ebay.pages; - -public class BasePage { -} diff --git a/src/test/java/ebay/pages/PurchaseFacade.java b/src/test/java/ebay/pages/PurchaseFacade.java deleted file mode 100644 index 73a8eb1..0000000 --- a/src/test/java/ebay/pages/PurchaseFacade.java +++ /dev/null @@ -1,4 +0,0 @@ -package ebay.pages; - -public class PurchaseFacade { -} diff --git a/src/test/java/ebay/pages/checkoutPage/CheckoutPage.java b/src/test/java/ebay/pages/checkoutPage/CheckoutPage.java deleted file mode 100644 index 541645a..0000000 --- a/src/test/java/ebay/pages/checkoutPage/CheckoutPage.java +++ /dev/null @@ -1,6 +0,0 @@ -package ebay.pages.checkoutPage; - -import ebay.pages.BasePage; - -public class CheckoutPage extends BasePage { -} diff --git a/src/test/java/ebay/pages/checkoutPage/CheckoutPageMap.java b/src/test/java/ebay/pages/checkoutPage/CheckoutPageMap.java deleted file mode 100644 index 3e68bb3..0000000 --- a/src/test/java/ebay/pages/checkoutPage/CheckoutPageMap.java +++ /dev/null @@ -1,4 +0,0 @@ -package ebay.pages.checkoutPage; - -public class CheckoutPageMap { -} diff --git a/src/test/java/ebay/pages/checkoutPage/CheckoutPageValidator.java b/src/test/java/ebay/pages/checkoutPage/CheckoutPageValidator.java deleted file mode 100644 index 8a02544..0000000 --- a/src/test/java/ebay/pages/checkoutPage/CheckoutPageValidator.java +++ /dev/null @@ -1,4 +0,0 @@ -package ebay.pages.checkoutPage; - -public class CheckoutPageValidator { -} diff --git a/src/test/java/ebay/pages/itemPage/ItemPage.java b/src/test/java/ebay/pages/itemPage/ItemPage.java deleted file mode 100644 index a7465fd..0000000 --- a/src/test/java/ebay/pages/itemPage/ItemPage.java +++ /dev/null @@ -1,4 +0,0 @@ -package ebay.pages.itemPage; - -public class ItemPage { -} diff --git a/src/test/java/ebay/pages/itemPage/ItemPageMap.java b/src/test/java/ebay/pages/itemPage/ItemPageMap.java deleted file mode 100644 index e2b95b4..0000000 --- a/src/test/java/ebay/pages/itemPage/ItemPageMap.java +++ /dev/null @@ -1,4 +0,0 @@ -package ebay.pages.itemPage; - -public class ItemPageMap { -} diff --git a/src/test/java/ebay/pages/itemPage/ItemPageValidator.java b/src/test/java/ebay/pages/itemPage/ItemPageValidator.java deleted file mode 100644 index d8b147e..0000000 --- a/src/test/java/ebay/pages/itemPage/ItemPageValidator.java +++ /dev/null @@ -1,4 +0,0 @@ -package ebay.pages.itemPage; - -public class ItemPageValidator { -} diff --git a/src/test/java/ebay/pages/shippingAddressPage/ShippingAddressMap.java b/src/test/java/ebay/pages/shippingAddressPage/ShippingAddressMap.java deleted file mode 100644 index aa46241..0000000 --- a/src/test/java/ebay/pages/shippingAddressPage/ShippingAddressMap.java +++ /dev/null @@ -1,4 +0,0 @@ -package ebay.pages.shippingAddressPage; - -public class ShippingAddressMap { -} diff --git a/src/test/java/ebay/pages/shippingAddressPage/ShippingAddressPage.java b/src/test/java/ebay/pages/shippingAddressPage/ShippingAddressPage.java deleted file mode 100644 index 0d978e1..0000000 --- a/src/test/java/ebay/pages/shippingAddressPage/ShippingAddressPage.java +++ /dev/null @@ -1,4 +0,0 @@ -package ebay.pages.shippingAddressPage; - -public class ShippingAddressPage { -} diff --git a/src/test/java/ebay/pages/shippingAddressPage/ShippingAddressValidator.java b/src/test/java/ebay/pages/shippingAddressPage/ShippingAddressValidator.java deleted file mode 100644 index e9f56e8..0000000 --- a/src/test/java/ebay/pages/shippingAddressPage/ShippingAddressValidator.java +++ /dev/null @@ -1,4 +0,0 @@ -package ebay.pages.shippingAddressPage; - -public class ShippingAddressValidator { -} diff --git a/src/test/java/ebay/pages/signinPage/SignInMap.java b/src/test/java/ebay/pages/signinPage/SignInMap.java deleted file mode 100644 index 748860c..0000000 --- a/src/test/java/ebay/pages/signinPage/SignInMap.java +++ /dev/null @@ -1,4 +0,0 @@ -package ebay.pages.signinPage; - -public class SignInMap { -} diff --git a/src/test/java/ebay/pages/signinPage/SignInPage.java b/src/test/java/ebay/pages/signinPage/SignInPage.java deleted file mode 100644 index db24ba4..0000000 --- a/src/test/java/ebay/pages/signinPage/SignInPage.java +++ /dev/null @@ -1,4 +0,0 @@ -package ebay.pages.signinPage; - -public class SignInPage { -} diff --git a/src/test/java/ebay/pages/signinPage/SignInValidator.java b/src/test/java/ebay/pages/signinPage/SignInValidator.java deleted file mode 100644 index 66e19dc..0000000 --- a/src/test/java/ebay/pages/signinPage/SignInValidator.java +++ /dev/null @@ -1,4 +0,0 @@ -package ebay.pages.signinPage; - -public class SignInValidator { -} From 523d979587a86d3a5d4b2ca5255a381196cb5e69 Mon Sep 17 00:00:00 2001 From: Ha Do Date: Sat, 24 Apr 2021 10:18:52 +0700 Subject: [PATCH 03/13] add checkboxes test --- src/test/java/testcases/CheckboxesTest.java | 66 +++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 src/test/java/testcases/CheckboxesTest.java diff --git a/src/test/java/testcases/CheckboxesTest.java b/src/test/java/testcases/CheckboxesTest.java new file mode 100644 index 0000000..8f9c57a --- /dev/null +++ b/src/test/java/testcases/CheckboxesTest.java @@ -0,0 +1,66 @@ +package testcases; + +import io.github.bonigarcia.wdm.WebDriverManager; +import org.openqa.selenium.By; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; +import org.openqa.selenium.chrome.ChromeDriver; +import org.testng.Assert; +import org.testng.annotations.AfterClass; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.Test; + +public class CheckboxesTest { + WebDriver driver; + + @BeforeClass + void setUp() { + WebDriverManager.chromedriver().setup(); + driver = new ChromeDriver(); + } + + @BeforeMethod + void reloadPage() { + driver.get("https://the-internet.herokuapp.com/checkboxes"); + } + + @Test + void theCheckboxesShouldSelected() { + WebElement checkbox1 = driver.findElement(By.xpath("//form[@id='checkboxes']/input[1]")); + check(checkbox1); + Assert.assertTrue(driver.findElement(By.xpath("//form[@id='checkboxes']/input[1]")).isSelected()); + + WebElement checkbox2 = driver.findElement(By.xpath("//form[@id='checkboxes']/input[2]")); + check(checkbox2); + Assert.assertTrue(driver.findElement(By.xpath("//form[@id='checkboxes']/input[2]")).isSelected()); + } + + @Test + void theCheckboxesShouldDeSelected() { + WebElement checkbox1 = driver.findElement(By.xpath("//form[@id='checkboxes']/input[1]")); + uncheck(checkbox1); + Assert.assertFalse(driver.findElement(By.xpath("//form[@id='checkboxes']/input[1]")).isSelected()); + + WebElement checkbox2 = driver.findElement(By.xpath("//form[@id='checkboxes']/input[2]")); + uncheck(checkbox2); + Assert.assertFalse(driver.findElement(By.xpath("//form[@id='checkboxes']/input[2]")).isSelected()); + } + + @AfterClass + void tearDown() { + driver.quit(); + } + + void check(WebElement checkbox) { + if (!checkbox.isSelected()) { + checkbox.click(); + } + } + + void uncheck(WebElement checkbox) { + if (checkbox.isSelected()) { + checkbox.click(); + } + } +} From ba8c6207d13687fa3fda3d8d946c61c922b7f5f5 Mon Sep 17 00:00:00 2001 From: Ha Do Date: Sat, 24 Apr 2021 11:08:04 +0700 Subject: [PATCH 04/13] add dropdown test --- README.md | 24 ++++++++------ src/test/java/testcases/DropDownTest.java | 39 +++++++++++++++++++++++ 2 files changed, 53 insertions(+), 10 deletions(-) create mode 100644 src/test/java/testcases/DropDownTest.java diff --git a/README.md b/README.md index 281f622..cad71b7 100644 --- a/README.md +++ b/README.md @@ -67,10 +67,10 @@ Repo này chứa những bài tập và phần cấu hình sẵn cơ bản để 2. [Check to a box](https://cuhavp.github.io/checkboxes/) * Open browser * Navigate to https://the-internet.herokuapp.com/checkboxes -* Check on "checkbox1" -* Verify "checkbox1" is checked -* Check on "checkbox2" -* Verify "checkbox2" is checked +* Check on **checkbox1** +* Verify **checkbox1** is `checked` +* Check on **checkbox2** +* Verify **checkbox2** is `checked` --- 3. [Select option](https://cuhavp.github.io/drop-down/) * Open browser @@ -104,12 +104,16 @@ Repo này chứa những bài tập và phần cấu hình sẵn cơ bản để * Open browser * Navigate to https://the-internet.herokuapp.com/nested_frames * Verify Text present: - ``` - LEFT - RIGHT - MIDDLE - BOTTOM - ``` + +``` + LEFT + + RIGHT + + MIDDLE + + BOTTOM +``` --- 7. JavaScript Alerts * Open browser diff --git a/src/test/java/testcases/DropDownTest.java b/src/test/java/testcases/DropDownTest.java new file mode 100644 index 0000000..c8f97d9 --- /dev/null +++ b/src/test/java/testcases/DropDownTest.java @@ -0,0 +1,39 @@ +package testcases; + +import io.github.bonigarcia.wdm.WebDriverManager; +import org.openqa.selenium.By; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; +import org.openqa.selenium.chrome.ChromeDriver; +import org.openqa.selenium.support.ui.Select; +import org.testng.Assert; +import org.testng.annotations.AfterClass; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.Test; + +public class DropDownTest { + WebDriver driver; + @BeforeClass + void setUp(){ + WebDriverManager.chromedriver().setup(); + driver = new ChromeDriver(); + driver.get("https://the-internet.herokuapp.com/dropdown"); + + } + + @Test + void option1ShouldSelected(){ + WebElement select = driver.findElement(By.id("dropdown")); + Select dropdown = new Select(select); + + dropdown.selectByVisibleText("Option 1"); // text() + + Assert.assertTrue(driver.findElement(By.xpath("//select[@id='dropdown']/option[.='Option 1']")).isSelected());// text() + Assert.assertTrue(driver.findElement(By.xpath("//select[@id='dropdown']/option[text()='Option 1']")).isSelected());// text() + } + + @AfterClass + void tearDown(){ + driver.quit(); + } +} From cabacb5df890ad41b36f3f11c9d792d266876185 Mon Sep 17 00:00:00 2001 From: Ha Do Date: Sat, 24 Apr 2021 11:26:23 +0700 Subject: [PATCH 05/13] add hyperlink test --- src/test/java/testcases/HyperLinkTest.java | 41 ++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 src/test/java/testcases/HyperLinkTest.java diff --git a/src/test/java/testcases/HyperLinkTest.java b/src/test/java/testcases/HyperLinkTest.java new file mode 100644 index 0000000..61df5ac --- /dev/null +++ b/src/test/java/testcases/HyperLinkTest.java @@ -0,0 +1,41 @@ +package testcases; + +import io.github.bonigarcia.wdm.WebDriverManager; +import org.openqa.selenium.By; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.chrome.ChromeDriver; +import org.testng.Assert; +import org.testng.annotations.Test; + +public class HyperLinkTest { + + @Test + void redirector(){ + WebDriverManager.chromedriver().setup(); + WebDriver driver = new ChromeDriver(); + driver.get("https://the-internet.herokuapp.com/redirector"); + + driver.findElement(By.linkText("here")).click();// <---- + Assert.assertEquals(driver.getCurrentUrl(),"https://the-internet.herokuapp.com/status_codes"); + + driver.findElement(By.linkText("200")).click(); + Assert.assertEquals(driver.getCurrentUrl(),"https://the-internet.herokuapp.com/status_codes/200"); + String content = driver.findElement(By.id("content")).getText(); + Assert.assertTrue(content.contains("This page returned a 200 status code.")); + driver.findElement(By.linkText("here")).click(); + + driver.findElement(By.linkText("301")).click(); + Assert.assertEquals(driver.getCurrentUrl(),"https://the-internet.herokuapp.com/status_codes/301"); + driver.findElement(By.linkText("here")).click(); + + driver.findElement(By.linkText("404")).click(); + Assert.assertEquals(driver.getCurrentUrl(),"https://the-internet.herokuapp.com/status_codes/404"); + driver.findElement(By.linkText("here")).click(); + + driver.findElement(By.linkText("500")).click(); + Assert.assertEquals(driver.getCurrentUrl(),"https://the-internet.herokuapp.com/status_codes/500"); + driver.findElement(By.linkText("here")).click(); + + driver.quit(); + } +} From 5c53bbfac17130b523b816e2adfe5d2123ba0849 Mon Sep 17 00:00:00 2001 From: Ha Do Date: Sat, 24 Apr 2021 14:50:57 +0700 Subject: [PATCH 06/13] add body mass index test + dataprovider --- src/test/java/testcases/BmiTest.java | 68 +++++++++++++++++++ src/test/java/testcases/CheckboxesTest.java | 5 +- .../testcases/FormAuthenticationTest.java | 1 - 3 files changed, 69 insertions(+), 5 deletions(-) create mode 100644 src/test/java/testcases/BmiTest.java diff --git a/src/test/java/testcases/BmiTest.java b/src/test/java/testcases/BmiTest.java new file mode 100644 index 0000000..9e79bab --- /dev/null +++ b/src/test/java/testcases/BmiTest.java @@ -0,0 +1,68 @@ +package testcases; + +import io.github.bonigarcia.wdm.WebDriverManager; +import org.openqa.selenium.By; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.chrome.ChromeDriver; +import org.testng.Assert; +import org.testng.annotations.*; + +public class BmiTest { + WebDriver driver; + + @BeforeClass + void setUp() { + WebDriverManager.chromedriver().setup(); + driver = new ChromeDriver(); + driver.get("https://www.calculator.net/bmi-calculator.html"); + } + + @BeforeMethod + void cleanUpForm() { + driver.findElement(By.xpath("//a[.='Metric Units']")).click(); + driver.findElement(By.className("clearbtn")).click(); + } + + @DataProvider + Object[][] testdata(){ + return new Object[][]{ + new Object[]{"25" ,"male", "180" ,"65", "BMI = 20.1 kg/m2 (Normal)"}, + new Object[]{"25" ,"male", "180" ,"30", "BMI = 9.3 kg/m2 (Severe thinness)"}, + new Object[]{"25" ,"male", "180" ,"55", "BMI = 17 kg/m2 (Moderate thinness)"}, + new Object[]{"25" ,"male", "180" ,"60", "BMI = 18.5 kg/m2 (Mild thinness)"}, + new Object[]{"25" ,"male", "180" ,"85", "BMI = 26.2 kg/m2 (Overweight)"}, + new Object[]{"25" ,"male", "180" ,"100", "BMI = 30.9 kg/m2 (Obese Class I)"}, + new Object[]{"25" ,"male", "180" ,"120", "BMI = 37 kg/m2 (Obese Class II)"}, + new Object[]{"25" ,"male", "180" ,"140", "BMI = 43.2 kg/m2 (Obese Class III)"}, + new Object[]{"25" ,"female", "180" ,"65", "BMI = 20.1 kg/m2 (Normal)"}, + new Object[]{"25" ,"female", "180" ,"30", "BMI = 9.3 kg/m2 (Severe thinness)"}, + new Object[]{"25" ,"female", "180" ,"55", "BMI = 17 kg/m2 (Moderate thinness)"}, + new Object[]{"25" ,"female", "180" ,"60", "BMI = 18.5 kg/m2 (Mild thinness)"}, + new Object[]{"25" ,"female", "180" ,"85", "BMI = 26.2 kg/m2 (Overweight)"}, + new Object[]{"25" ,"female", "180" ,"100", "BMI = 30.9 kg/m2 (Obese Class I)"}, + new Object[]{"25" ,"female", "180" ,"120", "BMI = 37 kg/m2 (Obese Class II)"}, + new Object[]{"25" ,"female", "180" ,"140", "BMI = 43.2 kg/m2 (Obese Class III)"} + }; + } + + @Test(dataProvider ="testdata" ) + void tc01(String age,String gender,String height,String weight,String expected) { + driver.findElement(By.id("cage")).sendKeys(age); + + if (gender.equalsIgnoreCase("male")){ + driver.findElement(By.id("csex1")).click(); + }else driver.findElement(By.id("csex2")).click(); + + driver.findElement(By.id("cheightmeter")).sendKeys(height); + driver.findElement(By.id("ckg")).sendKeys(weight); + driver.findElement(By.xpath("//input[@value='Calculate']")).click(); + + String actualResult = driver.findElement(By.className("rightresult")).getText(); + Assert.assertTrue(actualResult.contains(expected)); + } + + @AfterClass + void tearDown(){ + driver.quit(); + } +} diff --git a/src/test/java/testcases/CheckboxesTest.java b/src/test/java/testcases/CheckboxesTest.java index 8f9c57a..e99faf4 100644 --- a/src/test/java/testcases/CheckboxesTest.java +++ b/src/test/java/testcases/CheckboxesTest.java @@ -6,10 +6,7 @@ import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriver; import org.testng.Assert; -import org.testng.annotations.AfterClass; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.Test; +import org.testng.annotations.*; public class CheckboxesTest { WebDriver driver; diff --git a/src/test/java/testcases/FormAuthenticationTest.java b/src/test/java/testcases/FormAuthenticationTest.java index 13c16a7..74a5c18 100644 --- a/src/test/java/testcases/FormAuthenticationTest.java +++ b/src/test/java/testcases/FormAuthenticationTest.java @@ -36,7 +36,6 @@ void validCredential() { Assert.assertEquals(driver.getCurrentUrl(), "https://the-internet.herokuapp.com/secure"); Assert.assertTrue(driver.findElement(By.id("flash-messages")).isDisplayed()); //You logged into a secure area! - } @Test From f225eea3e2f3b9af08c440c11b1feff810d0a267 Mon Sep 17 00:00:00 2001 From: Ha Do Date: Sat, 24 Apr 2021 15:52:04 +0700 Subject: [PATCH 07/13] Find larges due person in a table --- src/test/java/testcases/TableTest.java | 61 ++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 src/test/java/testcases/TableTest.java diff --git a/src/test/java/testcases/TableTest.java b/src/test/java/testcases/TableTest.java new file mode 100644 index 0000000..995bf79 --- /dev/null +++ b/src/test/java/testcases/TableTest.java @@ -0,0 +1,61 @@ +package testcases; + +import io.github.bonigarcia.wdm.WebDriverManager; +import org.openqa.selenium.By; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; +import org.openqa.selenium.chrome.ChromeDriver; +import org.testng.Assert; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.Test; + +import java.util.List; + +public class TableTest { + WebDriver driver; + @BeforeClass + void setup(){ + WebDriverManager.chromedriver().setup(); + driver = new ChromeDriver(); + driver.get("https://the-internet.herokuapp.com/tables"); + } +// Open browser +// Navigate to https://the-internet.herokuapp.com/tables + + +// Focus on table 1 +// The person who has largest due is "Doe Jacson" + + @Test + void largestDuePerson(){ + + String maximumDuePerson = ""; + + List dues = driver.findElements(By.xpath("//table[@id='table1']/tbody/tr/td[4]")); + float maxDueValue = Float.parseFloat(dues.get(0).getText().replace("$", "")); + + for(int i=1;imaxDueValue){ + maxDueValue = dueValue; + } + } + System.out.printf("Maximum due is %f",maxDueValue); + + + List rows =driver.findElements(By.xpath("//table[@id='table1']/tbody/tr")); + for (WebElement row : rows){ + List cells = row.findElements(By.tagName("td")); + String firstName = cells.get(1).getText(); + String lastName = cells.get(0).getText(); + String fullName = String.format("%s %s",firstName,lastName); + float due = Float.parseFloat(cells.get(3).getText().replace("$","")); + if (due == maxDueValue){ + maximumDuePerson = fullName; + System.out.printf("Larges Due person is %s",fullName); + } + } + + Assert.assertEquals(maximumDuePerson,"Jason Doe"); + } +} From 3dd52f639f525b928dbdada5f2e92858f544d6e5 Mon Sep 17 00:00:00 2001 From: Ha Do Date: Sat, 8 May 2021 11:26:29 +0700 Subject: [PATCH 08/13] add more test case on day 3 - morning --- README.md | 15 +++- pom.xml | 5 ++ src/test/java/testcases/ContextMenuTest.java | 45 +++++++++++ src/test/java/testcases/HoverTest.java | 52 +++++++++++++ .../java/testcases/JavaScriptAlertTest.java | 64 ++++++++++++++++ src/test/java/testcases/NestFramesTest.java | 51 +++++++++++++ src/test/java/testcases/Person.java | 16 ++++ src/test/java/testcases/TableTest.java | 76 +++++++++++-------- 8 files changed, 290 insertions(+), 34 deletions(-) create mode 100644 src/test/java/testcases/ContextMenuTest.java create mode 100644 src/test/java/testcases/HoverTest.java create mode 100644 src/test/java/testcases/JavaScriptAlertTest.java create mode 100644 src/test/java/testcases/NestFramesTest.java create mode 100644 src/test/java/testcases/Person.java diff --git a/README.md b/README.md index cad71b7..4a31eae 100644 --- a/README.md +++ b/README.md @@ -156,4 +156,17 @@ Repo này chứa những bài tập và phần cấu hình sẵn cơ bản để * Validate **Subtotal** price * Click **Continue** button * Validate **Total** price ----- \ No newline at end of file +---- +13. Basic authentication +---- +14. Broken images +---- +16. Drag & drop +---- +18. Horizontal slider +---- +19. Dynamic content +---- +20. Dynamic loading +---- +21. Input (from keyboard) \ No newline at end of file diff --git a/pom.xml b/pom.xml index 8cadf6b..36e8521 100644 --- a/pom.xml +++ b/pom.xml @@ -25,6 +25,11 @@ 7.0.0 test + + org.projectlombok + lombok + 1.18.20 + diff --git a/src/test/java/testcases/ContextMenuTest.java b/src/test/java/testcases/ContextMenuTest.java new file mode 100644 index 0000000..e1942b5 --- /dev/null +++ b/src/test/java/testcases/ContextMenuTest.java @@ -0,0 +1,45 @@ +package testcases; + +import io.github.bonigarcia.wdm.WebDriverManager; +import org.openqa.selenium.Alert; +import org.openqa.selenium.By; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; +import org.openqa.selenium.chrome.ChromeDriver; +import org.openqa.selenium.interactions.Actions; +import org.openqa.selenium.support.ui.ExpectedConditions; +import org.openqa.selenium.support.ui.WebDriverWait; +import org.testng.Assert; +import org.testng.annotations.AfterClass; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.Test; + +public class ContextMenuTest { + WebDriver driver; + Actions mouse; + WebDriverWait wait; + + @BeforeClass + void setUp() { + WebDriverManager.chromedriver().setup(); + driver = new ChromeDriver(); + driver.get("https://the-internet.herokuapp.com/context_menu"); + mouse = new Actions(driver); + wait = new WebDriverWait(driver, 10); + } + + @Test + void shouldJSAlertPopupAppear(){ + WebElement rectangle = driver.findElement(By.id("hot-spot")); + mouse.contextClick(rectangle).perform(); + + Alert alert = wait.until(ExpectedConditions.alertIsPresent()); + Assert.assertEquals(alert.getText(),"You selected a context menu"); + alert.accept(); + } + + @AfterClass + void tearDown(){ + driver.quit(); + } +} diff --git a/src/test/java/testcases/HoverTest.java b/src/test/java/testcases/HoverTest.java new file mode 100644 index 0000000..4d41c9a --- /dev/null +++ b/src/test/java/testcases/HoverTest.java @@ -0,0 +1,52 @@ +package testcases; + +import io.github.bonigarcia.wdm.WebDriverManager; +import org.openqa.selenium.By; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; +import org.openqa.selenium.chrome.ChromeDriver; +import org.openqa.selenium.interactions.Actions; +import org.testng.Assert; +import org.testng.annotations.AfterClass; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.DataProvider; +import org.testng.annotations.Test; + +public class HoverTest { + WebDriver driver; + Actions mouse; + + @BeforeClass + void setUp() { + WebDriverManager.chromedriver().setup(); + driver = new ChromeDriver(); + driver.get("https://the-internet.herokuapp.com/hovers"); + mouse = new Actions(driver); + } + + @DataProvider + Object[][] avatar() { + return new Object[][]{ + new Object[]{0, "name: user1"}, + new Object[]{1, "name: user2"}, + new Object[]{2, "name: user3"}, + }; + } + + @Test(dataProvider = "avatar") + void avatarCaption(int personIndex, String caption) { + WebElement person1 = driver.findElements(By.className("figure")).get(personIndex); + mouse.moveToElement(person1).perform(); // --> hover + + WebElement person1Caption = person1 + .findElement(By.className("figcaption")) + .findElement(By.tagName("h5")); + + Assert.assertEquals(person1Caption.getText(), caption); + } + + @AfterClass + void tearDown() { + driver.quit(); + } +} diff --git a/src/test/java/testcases/JavaScriptAlertTest.java b/src/test/java/testcases/JavaScriptAlertTest.java new file mode 100644 index 0000000..66ad6e4 --- /dev/null +++ b/src/test/java/testcases/JavaScriptAlertTest.java @@ -0,0 +1,64 @@ +package testcases; + +import io.github.bonigarcia.wdm.WebDriverManager; +import org.openqa.selenium.By; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.chrome.ChromeDriver; +import org.testng.Assert; +import org.testng.annotations.AfterClass; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.Test; + +public class JavaScriptAlertTest { + WebDriver driver; + + @BeforeClass + void setUp() { + WebDriverManager.chromedriver().setup(); + driver = new ChromeDriver(); + driver.get("https://the-internet.herokuapp.com/javascript_alerts"); + } + + @Test + void clickForJSAlert(){ + driver.findElement(By.xpath("//button[.='Click for JS Alert']")).click(); + driver.switchTo().alert().accept(); // ~ click on OK button on alert popup + + String result = driver.findElement(By.id("result")).getText(); + Assert.assertEquals(result,"You successfully clicked an alert"); + } + + @Test + void dismissForJsConfirm(){ + driver.findElement(By.xpath("//button[.='Click for JS Confirm']")).click(); + driver.switchTo().alert().dismiss(); // ~ click on Cancel button on alert popup + + String result = driver.findElement(By.id("result")).getText(); + Assert.assertEquals(result,"You clicked: Cancel"); + } + + @Test + void acceptForJsConfirm(){ + driver.findElement(By.xpath("//button[.='Click for JS Confirm']")).click(); + driver.switchTo().alert().accept(); // ~ click on Cancel button on alert popup + + String result = driver.findElement(By.id("result")).getText(); + Assert.assertEquals(result,"You clicked: Ok"); + } + + @Test + void clickForJsPrompt(){ + driver.findElement(By.xpath("//button[.='Click for JS Prompt']")).click(); + + driver.switchTo().alert().sendKeys("hello"); + driver.switchTo().alert().accept(); + + String result = driver.findElement(By.id("result")).getText(); + Assert.assertEquals(result,"You entered: hello"); + } + + @AfterClass + void tearDown(){ + driver.quit(); + } +} diff --git a/src/test/java/testcases/NestFramesTest.java b/src/test/java/testcases/NestFramesTest.java new file mode 100644 index 0000000..5598912 --- /dev/null +++ b/src/test/java/testcases/NestFramesTest.java @@ -0,0 +1,51 @@ +package testcases; + +import io.github.bonigarcia.wdm.WebDriverManager; +import org.openqa.selenium.By; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.chrome.ChromeDriver; +import org.testng.Assert; +import org.testng.annotations.AfterClass; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.Test; + +public class NestFramesTest { + WebDriver driver; + + @BeforeClass + void setUp() { + WebDriverManager.chromedriver().setup(); + driver = new ChromeDriver(); + driver.get("https://the-internet.herokuapp.com/nested_frames"); //original page + } + + @Test + void listAllFrames(){ + driver.switchTo().frame("frame-top"); // is frame-top + + driver.switchTo().frame("frame-left"); // is frame-left + String leftFrame = driver.findElement(By.xpath("html/body")).getText(); + Assert.assertEquals(leftFrame,"LEFT"); + driver.switchTo().parentFrame();// back to parent is frame-top + + driver.switchTo().frame("frame-middle"); + String middleFrame = driver.findElement(By.id("content")).getText(); + Assert.assertEquals(middleFrame,"MIDDLE"); + driver.switchTo().parentFrame(); // back to parent is frame-top + + driver.switchTo().frame("frame-right"); + String rightFrame = driver.findElement(By.xpath("html/body")).getText(); + Assert.assertEquals(rightFrame,"RIGHT"); + driver.switchTo().parentFrame();// back to parent is frame-top + + driver.switchTo().parentFrame();// back to parent is original page + driver.switchTo().frame("frame-bottom"); + String bottomFrame = driver.findElement(By.xpath("html/body")).getText(); + Assert.assertEquals(bottomFrame,"BOTTOM"); + } + + @AfterClass + void tearDown(){ + driver.quit(); + } +} \ No newline at end of file diff --git a/src/test/java/testcases/Person.java b/src/test/java/testcases/Person.java new file mode 100644 index 0000000..4b426c8 --- /dev/null +++ b/src/test/java/testcases/Person.java @@ -0,0 +1,16 @@ +package testcases; + + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.Getter; + +@Getter @AllArgsConstructor +@Data +public class Person { + private final String lastName; + private final String firstName; + private final String email; + private final String website; + private final float due; +} \ No newline at end of file diff --git a/src/test/java/testcases/TableTest.java b/src/test/java/testcases/TableTest.java index 995bf79..b9f40e0 100644 --- a/src/test/java/testcases/TableTest.java +++ b/src/test/java/testcases/TableTest.java @@ -6,56 +6,66 @@ import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriver; import org.testng.Assert; +import org.testng.annotations.AfterClass; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; +import java.util.Comparator; import java.util.List; +import java.util.NoSuchElementException; +import java.util.stream.Collectors; public class TableTest { WebDriver driver; + List persons; @BeforeClass void setup(){ WebDriverManager.chromedriver().setup(); driver = new ChromeDriver(); driver.get("https://the-internet.herokuapp.com/tables"); - } -// Open browser -// Navigate to https://the-internet.herokuapp.com/tables + List rows = driver.findElements(By.xpath("//table[@id='table1']/tbody/tr")); + persons = rows.stream() + .map(this::toPerson).collect(Collectors.toList()); -// Focus on table 1 -// The person who has largest due is "Doe Jacson" + } @Test void largestDuePerson(){ + Person largestDuePerson = persons + .stream() + .max(Comparator.comparing(Person::getDue)) + .orElseThrow(NoSuchElementException::new); + + Assert.assertEquals(String.format("%s %s", largestDuePerson.getLastName(), largestDuePerson.getFirstName()), "Jason Doe"); + } + + @Test + void smallestDuePerson(){ + Person smallestDuePerson = persons + .stream() + .min(Comparator.comparing(Person::getDue)) + .orElseThrow(NoSuchElementException::new); + + Assert.assertEquals(String.format("%s %s", smallestDuePerson.getLastName(), smallestDuePerson.getFirstName()), "Jason Doe"); + } + + /** + * element is a row in table + * @param element + * @return + */ + private Person toPerson(WebElement element) { + String lastName = element.findElements(By.tagName("td")).get(0).getText(); + String firstname = element.findElements(By.tagName("td")).get(1).getText(); + String email = element.findElements(By.tagName("td")).get(2).getText(); + float due = Float.parseFloat(element.findElements(By.tagName("td")).get(3).getText().trim().replace("$", "")); + String website = element.findElements(By.tagName("td")).get(4).getText(); + return new Person(firstname, lastName, email, website, due); + } - String maximumDuePerson = ""; - - List dues = driver.findElements(By.xpath("//table[@id='table1']/tbody/tr/td[4]")); - float maxDueValue = Float.parseFloat(dues.get(0).getText().replace("$", "")); - - for(int i=1;imaxDueValue){ - maxDueValue = dueValue; - } - } - System.out.printf("Maximum due is %f",maxDueValue); - - - List rows =driver.findElements(By.xpath("//table[@id='table1']/tbody/tr")); - for (WebElement row : rows){ - List cells = row.findElements(By.tagName("td")); - String firstName = cells.get(1).getText(); - String lastName = cells.get(0).getText(); - String fullName = String.format("%s %s",firstName,lastName); - float due = Float.parseFloat(cells.get(3).getText().replace("$","")); - if (due == maxDueValue){ - maximumDuePerson = fullName; - System.out.printf("Larges Due person is %s",fullName); - } - } - - Assert.assertEquals(maximumDuePerson,"Jason Doe"); + @AfterClass + void tearDown(){ + driver.quit(); } } From 39dcbbb0771ad004b8d03a9ed9032dde708d30a4 Mon Sep 17 00:00:00 2001 From: Ha Do Date: Sat, 8 May 2021 15:05:54 +0700 Subject: [PATCH 09/13] add page object model section --- src/test/java/bases/BaseTest.java | 43 +++++++++++++++++ src/test/java/pages/BmiPage.java | 47 +++++++++++++++++++ .../java/pages/FormAuthenticationPage.java | 36 ++++++++++++++ src/test/java/testcases/BmiTest.java | 38 ++++----------- .../testcases/FormAuthenticationTest.java | 39 +++++---------- 5 files changed, 149 insertions(+), 54 deletions(-) create mode 100644 src/test/java/bases/BaseTest.java create mode 100644 src/test/java/pages/BmiPage.java create mode 100644 src/test/java/pages/FormAuthenticationPage.java diff --git a/src/test/java/bases/BaseTest.java b/src/test/java/bases/BaseTest.java new file mode 100644 index 0000000..70729ec --- /dev/null +++ b/src/test/java/bases/BaseTest.java @@ -0,0 +1,43 @@ +package bases; + +import io.github.bonigarcia.wdm.WebDriverManager; +import org.apache.commons.io.FileUtils; +import org.openqa.selenium.OutputType; +import org.openqa.selenium.TakesScreenshot; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.chrome.ChromeDriver; +import org.testng.ITestResult; +import org.testng.annotations.AfterClass; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.BeforeClass; + +import java.io.File; +import java.io.IOException; + +public class BaseTest { + + public WebDriver driver; + + @BeforeClass + public void setUp() { + WebDriverManager.chromedriver().setup(); + driver = new ChromeDriver(); + } + + @AfterMethod + public void captureScreen(ITestResult testResult) throws IOException { + if(!testResult.isSuccess()){ + File file = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE); + File DestFile=new File("./target/screenshot/" + +testResult.getMethod().getMethodName() + +System.currentTimeMillis()+".png"); + + FileUtils.copyFile(file, DestFile); + } + } + + @AfterClass + public void tearDown(){ + driver.quit(); + } +} diff --git a/src/test/java/pages/BmiPage.java b/src/test/java/pages/BmiPage.java new file mode 100644 index 0000000..41990a6 --- /dev/null +++ b/src/test/java/pages/BmiPage.java @@ -0,0 +1,47 @@ +package pages; + +import org.openqa.selenium.By; +import org.openqa.selenium.WebDriver; + +public class BmiPage { + WebDriver driver; + By metricTab = By.xpath("//a[.='Metric Units']"); + By ageTxt = By.id("cage"); + By maleRad = By.id("csex1"); + By femaleRad = By.id("csex2"); + By heightTxt = By.id("cheightmeter"); + By weightTxt = By.id("ckg"); + By calculateBtn = By.xpath("//input[@value='Calculate']"); + By clearBtn = By.className("clearbtn"); + By resultLbl = By.className("rightresult"); + + public BmiPage(WebDriver driver) { + this.driver = driver; + } + + public void open(){ + driver.get("https://www.calculator.net/bmi-calculator.html"); + } + + public void selectMetricTab(){ + driver.findElement(metricTab).click(); + } + public void calculate(String age,String gender,String height,String weight){ + driver.findElement(ageTxt).sendKeys(age); + if (gender.equalsIgnoreCase("male")){ + driver.findElement(maleRad).click(); + }else driver.findElement(femaleRad).click(); + + driver.findElement(heightTxt).sendKeys(height); + driver.findElement(weightTxt).sendKeys(weight); + driver.findElement(calculateBtn).click(); + } + + public void clear(){ + driver.findElement(clearBtn).click(); + } + + public String getResult(){ + return driver.findElement(resultLbl).getText(); + } +} diff --git a/src/test/java/pages/FormAuthenticationPage.java b/src/test/java/pages/FormAuthenticationPage.java new file mode 100644 index 0000000..3a26cbe --- /dev/null +++ b/src/test/java/pages/FormAuthenticationPage.java @@ -0,0 +1,36 @@ +package pages; + +import org.openqa.selenium.By; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.support.PageFactory; + +public class FormAuthenticationPage { + WebDriver driver; + + /** + * Suffix: + * txt --> text box + * btn --> button + * lbl --> label + * rad --> radio Button + * chk --> checkbox + * ..... + */ + By usernameTxt = By.id("username"); + By passwordTxt = By.id("password"); + By submitBtn = By.xpath("//*[@type='submit']"); + + public FormAuthenticationPage(WebDriver driver) { + this.driver = driver; + } + + public void open(){ + driver.get("https://the-internet.herokuapp.com/login"); + } + + public void login(String username, String password){ + driver.findElement(usernameTxt).sendKeys(username); + driver.findElement(passwordTxt).sendKeys(password); + driver.findElement(submitBtn).click(); + } +} diff --git a/src/test/java/testcases/BmiTest.java b/src/test/java/testcases/BmiTest.java index 9e79bab..aab0d82 100644 --- a/src/test/java/testcases/BmiTest.java +++ b/src/test/java/testcases/BmiTest.java @@ -1,26 +1,22 @@ package testcases; +import bases.BaseTest; import io.github.bonigarcia.wdm.WebDriverManager; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; import org.testng.Assert; import org.testng.annotations.*; +import pages.BmiPage; -public class BmiTest { - WebDriver driver; - - @BeforeClass - void setUp() { - WebDriverManager.chromedriver().setup(); - driver = new ChromeDriver(); - driver.get("https://www.calculator.net/bmi-calculator.html"); - } - +public class BmiTest extends BaseTest { + BmiPage bmiPage; @BeforeMethod void cleanUpForm() { - driver.findElement(By.xpath("//a[.='Metric Units']")).click(); - driver.findElement(By.className("clearbtn")).click(); + bmiPage = new BmiPage(driver); + bmiPage.open(); + bmiPage.selectMetricTab(); + bmiPage.clear(); } @DataProvider @@ -47,22 +43,8 @@ Object[][] testdata(){ @Test(dataProvider ="testdata" ) void tc01(String age,String gender,String height,String weight,String expected) { - driver.findElement(By.id("cage")).sendKeys(age); - - if (gender.equalsIgnoreCase("male")){ - driver.findElement(By.id("csex1")).click(); - }else driver.findElement(By.id("csex2")).click(); - - driver.findElement(By.id("cheightmeter")).sendKeys(height); - driver.findElement(By.id("ckg")).sendKeys(weight); - driver.findElement(By.xpath("//input[@value='Calculate']")).click(); - - String actualResult = driver.findElement(By.className("rightresult")).getText(); - Assert.assertTrue(actualResult.contains(expected)); + bmiPage.calculate(age, gender, height, weight); + Assert.assertTrue(bmiPage.getResult().contains(expected)); } - @AfterClass - void tearDown(){ - driver.quit(); - } } diff --git a/src/test/java/testcases/FormAuthenticationTest.java b/src/test/java/testcases/FormAuthenticationTest.java index 74a5c18..c7aa9a1 100644 --- a/src/test/java/testcases/FormAuthenticationTest.java +++ b/src/test/java/testcases/FormAuthenticationTest.java @@ -1,5 +1,6 @@ package testcases; +import bases.BaseTest; import io.github.bonigarcia.wdm.WebDriverManager; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; @@ -9,53 +10,39 @@ import org.testng.annotations.BeforeClass; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; +import pages.FormAuthenticationPage; -public class FormAuthenticationTest { - WebDriver driver; +public class FormAuthenticationTest extends BaseTest { + + FormAuthenticationPage formAuthenticationPage; @BeforeClass void setup() { - WebDriverManager.chromedriver().setup(); - driver = new ChromeDriver(); + formAuthenticationPage = new FormAuthenticationPage(driver); } - @BeforeMethod void load() { - driver.get("https://the-internet.herokuapp.com/login"); + formAuthenticationPage.open(); } @Test void validCredential() { - - driver.findElement(By.id("username")).sendKeys("tomsmith"); - driver.findElement(By.id("password")).sendKeys("SuperSecretPassword!"); - - driver.findElement(By.xpath("//*[@type='submit']")).click(); - + formAuthenticationPage.login("tomsmith", "SuperSecretPassword"); Assert.assertEquals(driver.getCurrentUrl(), "https://the-internet.herokuapp.com/secure"); - Assert.assertTrue(driver.findElement(By.id("flash-messages")).isDisplayed()); //You logged into a secure area! } @Test void invalidCredential() { - - driver.findElement(By.id("username")).sendKeys("tomsmith"); - driver.findElement(By.id("password")).sendKeys("SuperSecretPassword"); - - driver.findElement(By.xpath("//*[@type='submit']")).click(); - - + formAuthenticationPage.login("tomsmith", "SuperSecretPassword"); Assert.assertEquals(driver.getCurrentUrl(), "https://the-internet.herokuapp.com/login"); Assert.assertTrue(driver.findElement(By.className("error")).isDisplayed()); - } - @AfterClass - void tearDown() { - driver.quit(); - - } +// @AfterClass +// void tearDown() { +// driver.quit(); +// } } From 5c64a64b23ded503bf0bebd6395c00d66172da32 Mon Sep 17 00:00:00 2001 From: Ha Do Date: Sat, 8 May 2021 15:45:41 +0700 Subject: [PATCH 10/13] refactor code --- .github/workflows/maven.yml | 2 +- src/test/java/bases/BasePage.java | 37 +++++++++++++++++++ src/test/java/bases/BaseTest.java | 10 ++--- src/test/java/bases/Browser.java | 28 ++++++++++++++ .../java/{testcases => model}/Person.java | 2 +- src/test/java/pages/BmiPage.java | 28 +++++++------- .../java/pages/FormAuthenticationPage.java | 16 +++----- src/test/java/testcases/BmiTest.java | 2 +- src/test/java/testcases/ContextMenuTest.java | 16 +++----- src/test/java/testcases/DropDownTest.java | 23 +++--------- .../testcases/FormAuthenticationTest.java | 19 ++++------ src/test/java/testcases/HoverTest.java | 19 +++------- src/test/java/testcases/TableTest.java | 1 + 13 files changed, 117 insertions(+), 86 deletions(-) create mode 100644 src/test/java/bases/BasePage.java create mode 100644 src/test/java/bases/Browser.java rename src/test/java/{testcases => model}/Person.java (94%) diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml index 125c5d3..4da621d 100644 --- a/.github/workflows/maven.yml +++ b/.github/workflows/maven.yml @@ -21,7 +21,7 @@ jobs: with: java-version: 1.8 - name: Run Selenium Test - run: mvn test -Dtestplan=todoTestPlan.xml + run: mvn test - name: Publish Test Report uses: scacap/action-surefire-report@v1 with: diff --git a/src/test/java/bases/BasePage.java b/src/test/java/bases/BasePage.java new file mode 100644 index 0000000..3988ac8 --- /dev/null +++ b/src/test/java/bases/BasePage.java @@ -0,0 +1,37 @@ +package bases; + +import org.openqa.selenium.By; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.interactions.Actions; +import org.openqa.selenium.support.ui.WebDriverWait; + +import static bases.Browser.getDriver; + +public abstract class BasePage { + protected Actions mouse; + protected WebDriverWait wait; + + public BasePage() { + mouse = new Actions(getDriver()); + wait = new WebDriverWait(getDriver(),30); + } + + public void visit(String url){ + getDriver().get(url); + } + + public void fill(By locator, String withText){ + getDriver().findElement(locator).clear(); + getDriver().findElement(locator).sendKeys(withText); + } + + public void click(By locator){ + getDriver().findElement(locator).click(); + } + + public String getText(By locator){ + return getDriver().findElement(locator).getText(); + } + + public abstract void open() ; +} diff --git a/src/test/java/bases/BaseTest.java b/src/test/java/bases/BaseTest.java index 70729ec..836f844 100644 --- a/src/test/java/bases/BaseTest.java +++ b/src/test/java/bases/BaseTest.java @@ -16,20 +16,18 @@ public class BaseTest { - public WebDriver driver; - @BeforeClass public void setUp() { - WebDriverManager.chromedriver().setup(); - driver = new ChromeDriver(); + Browser.launch("chrome"); } @AfterMethod public void captureScreen(ITestResult testResult) throws IOException { if(!testResult.isSuccess()){ - File file = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE); + File file = ((TakesScreenshot) Browser.getDriver()).getScreenshotAs(OutputType.FILE); File DestFile=new File("./target/screenshot/" +testResult.getMethod().getMethodName() + + "-" +System.currentTimeMillis()+".png"); FileUtils.copyFile(file, DestFile); @@ -38,6 +36,6 @@ public void captureScreen(ITestResult testResult) throws IOException { @AfterClass public void tearDown(){ - driver.quit(); + Browser.getDriver().quit(); } } diff --git a/src/test/java/bases/Browser.java b/src/test/java/bases/Browser.java new file mode 100644 index 0000000..ff1f41a --- /dev/null +++ b/src/test/java/bases/Browser.java @@ -0,0 +1,28 @@ +package bases; + +import io.github.bonigarcia.wdm.WebDriverManager; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.chrome.ChromeDriver; +import org.openqa.selenium.firefox.FirefoxDriver; +import org.openqa.selenium.ie.InternetExplorerDriver; + +public class Browser { + private static WebDriver driver; + + public static void launch(String name){ + if (name.equalsIgnoreCase("chrome")){ + WebDriverManager.chromedriver().setup(); + driver= new ChromeDriver(); + }else if(name.equalsIgnoreCase("firefox")){ + WebDriverManager.firefoxdriver().setup(); + driver= new FirefoxDriver(); + }else if(name.equalsIgnoreCase("ie")){ + WebDriverManager.iedriver().setup(); + driver= new InternetExplorerDriver(); + } + } + + public static WebDriver getDriver() { + return driver; + } +} diff --git a/src/test/java/testcases/Person.java b/src/test/java/model/Person.java similarity index 94% rename from src/test/java/testcases/Person.java rename to src/test/java/model/Person.java index 4b426c8..20fb804 100644 --- a/src/test/java/testcases/Person.java +++ b/src/test/java/model/Person.java @@ -1,4 +1,4 @@ -package testcases; +package model; import lombok.AllArgsConstructor; diff --git a/src/test/java/pages/BmiPage.java b/src/test/java/pages/BmiPage.java index 41990a6..fed93f0 100644 --- a/src/test/java/pages/BmiPage.java +++ b/src/test/java/pages/BmiPage.java @@ -1,10 +1,10 @@ package pages; +import bases.BasePage; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; -public class BmiPage { - WebDriver driver; +public class BmiPage extends BasePage { By metricTab = By.xpath("//a[.='Metric Units']"); By ageTxt = By.id("cage"); By maleRad = By.id("csex1"); @@ -15,33 +15,31 @@ public class BmiPage { By clearBtn = By.className("clearbtn"); By resultLbl = By.className("rightresult"); - public BmiPage(WebDriver driver) { - this.driver = driver; - } public void open(){ - driver.get("https://www.calculator.net/bmi-calculator.html"); + visit("https://www.calculator.net/bmi-calculator.html"); } public void selectMetricTab(){ - driver.findElement(metricTab).click(); + click(metricTab); } public void calculate(String age,String gender,String height,String weight){ - driver.findElement(ageTxt).sendKeys(age); + fill(ageTxt,age); if (gender.equalsIgnoreCase("male")){ - driver.findElement(maleRad).click(); - }else driver.findElement(femaleRad).click(); + click(maleRad); + }else click(femaleRad); + + fill(heightTxt,height); + fill(weightTxt,weight); + click(calculateBtn); - driver.findElement(heightTxt).sendKeys(height); - driver.findElement(weightTxt).sendKeys(weight); - driver.findElement(calculateBtn).click(); } public void clear(){ - driver.findElement(clearBtn).click(); + click(clearBtn); } public String getResult(){ - return driver.findElement(resultLbl).getText(); + return getText(resultLbl); } } diff --git a/src/test/java/pages/FormAuthenticationPage.java b/src/test/java/pages/FormAuthenticationPage.java index 3a26cbe..e7982cc 100644 --- a/src/test/java/pages/FormAuthenticationPage.java +++ b/src/test/java/pages/FormAuthenticationPage.java @@ -1,11 +1,11 @@ package pages; +import bases.BasePage; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.support.PageFactory; -public class FormAuthenticationPage { - WebDriver driver; +public class FormAuthenticationPage extends BasePage { /** * Suffix: @@ -20,17 +20,13 @@ public class FormAuthenticationPage { By passwordTxt = By.id("password"); By submitBtn = By.xpath("//*[@type='submit']"); - public FormAuthenticationPage(WebDriver driver) { - this.driver = driver; - } - public void open(){ - driver.get("https://the-internet.herokuapp.com/login"); + visit("https://the-internet.herokuapp.com/login"); } public void login(String username, String password){ - driver.findElement(usernameTxt).sendKeys(username); - driver.findElement(passwordTxt).sendKeys(password); - driver.findElement(submitBtn).click(); + fill(usernameTxt,username); + fill(passwordTxt,password); + click(submitBtn); } } diff --git a/src/test/java/testcases/BmiTest.java b/src/test/java/testcases/BmiTest.java index aab0d82..ab13a76 100644 --- a/src/test/java/testcases/BmiTest.java +++ b/src/test/java/testcases/BmiTest.java @@ -13,7 +13,7 @@ public class BmiTest extends BaseTest { BmiPage bmiPage; @BeforeMethod void cleanUpForm() { - bmiPage = new BmiPage(driver); + bmiPage = new BmiPage(); bmiPage.open(); bmiPage.selectMetricTab(); bmiPage.clear(); diff --git a/src/test/java/testcases/ContextMenuTest.java b/src/test/java/testcases/ContextMenuTest.java index e1942b5..b0f6377 100644 --- a/src/test/java/testcases/ContextMenuTest.java +++ b/src/test/java/testcases/ContextMenuTest.java @@ -1,5 +1,6 @@ package testcases; +import bases.BaseTest; import io.github.bonigarcia.wdm.WebDriverManager; import org.openqa.selenium.Alert; import org.openqa.selenium.By; @@ -12,18 +13,16 @@ import org.testng.Assert; import org.testng.annotations.AfterClass; import org.testng.annotations.BeforeClass; +import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; -public class ContextMenuTest { - WebDriver driver; +public class ContextMenuTest extends BaseTest { Actions mouse; WebDriverWait wait; - @BeforeClass - void setUp() { + @BeforeMethod + void load() { WebDriverManager.chromedriver().setup(); - driver = new ChromeDriver(); - driver.get("https://the-internet.herokuapp.com/context_menu"); mouse = new Actions(driver); wait = new WebDriverWait(driver, 10); } @@ -38,8 +37,5 @@ void shouldJSAlertPopupAppear(){ alert.accept(); } - @AfterClass - void tearDown(){ - driver.quit(); - } + } diff --git a/src/test/java/testcases/DropDownTest.java b/src/test/java/testcases/DropDownTest.java index c8f97d9..091797d 100644 --- a/src/test/java/testcases/DropDownTest.java +++ b/src/test/java/testcases/DropDownTest.java @@ -1,26 +1,19 @@ package testcases; -import io.github.bonigarcia.wdm.WebDriverManager; +import bases.BaseTest; import org.openqa.selenium.By; -import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; -import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.support.ui.Select; import org.testng.Assert; -import org.testng.annotations.AfterClass; -import org.testng.annotations.BeforeClass; +import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; -public class DropDownTest { - WebDriver driver; - @BeforeClass - void setUp(){ - WebDriverManager.chromedriver().setup(); - driver = new ChromeDriver(); - driver.get("https://the-internet.herokuapp.com/dropdown"); +public class DropDownTest extends BaseTest { + @BeforeMethod + void load(){ + driver.get("https://the-internet.herokuapp.com/dropdown"); } - @Test void option1ShouldSelected(){ WebElement select = driver.findElement(By.id("dropdown")); @@ -32,8 +25,4 @@ void option1ShouldSelected(){ Assert.assertTrue(driver.findElement(By.xpath("//select[@id='dropdown']/option[text()='Option 1']")).isSelected());// text() } - @AfterClass - void tearDown(){ - driver.quit(); - } } diff --git a/src/test/java/testcases/FormAuthenticationTest.java b/src/test/java/testcases/FormAuthenticationTest.java index c7aa9a1..9b060b7 100644 --- a/src/test/java/testcases/FormAuthenticationTest.java +++ b/src/test/java/testcases/FormAuthenticationTest.java @@ -12,13 +12,15 @@ import org.testng.annotations.Test; import pages.FormAuthenticationPage; +import static bases.Browser.getDriver; + public class FormAuthenticationTest extends BaseTest { FormAuthenticationPage formAuthenticationPage; @BeforeClass void setup() { - formAuthenticationPage = new FormAuthenticationPage(driver); + formAuthenticationPage = new FormAuthenticationPage(); } @BeforeMethod @@ -28,21 +30,16 @@ void load() { @Test void validCredential() { - formAuthenticationPage.login("tomsmith", "SuperSecretPassword"); - Assert.assertEquals(driver.getCurrentUrl(), "https://the-internet.herokuapp.com/secure"); - Assert.assertTrue(driver.findElement(By.id("flash-messages")).isDisplayed()); //You logged into a secure area! + formAuthenticationPage.login("tomsmith", "SuperSecretPassword!"); + Assert.assertEquals(getDriver().getCurrentUrl(), "https://the-internet.herokuapp.com/secure"); + Assert.assertTrue(getDriver().findElement(By.id("flash-messages")).isDisplayed()); //You logged into a secure area! } @Test void invalidCredential() { formAuthenticationPage.login("tomsmith", "SuperSecretPassword"); - Assert.assertEquals(driver.getCurrentUrl(), "https://the-internet.herokuapp.com/login"); - Assert.assertTrue(driver.findElement(By.className("error")).isDisplayed()); + Assert.assertEquals(getDriver().getCurrentUrl(), "https://the-internet.herokuapp.com/login"); + Assert.assertTrue(getDriver().findElement(By.className("error")).isDisplayed()); } -// @AfterClass -// void tearDown() { -// driver.quit(); -// } - } diff --git a/src/test/java/testcases/HoverTest.java b/src/test/java/testcases/HoverTest.java index 4d41c9a..c168bf0 100644 --- a/src/test/java/testcases/HoverTest.java +++ b/src/test/java/testcases/HoverTest.java @@ -1,5 +1,6 @@ package testcases; +import bases.BaseTest; import io.github.bonigarcia.wdm.WebDriverManager; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; @@ -7,19 +8,13 @@ import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.interactions.Actions; import org.testng.Assert; -import org.testng.annotations.AfterClass; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.DataProvider; -import org.testng.annotations.Test; +import org.testng.annotations.*; -public class HoverTest { - WebDriver driver; +public class HoverTest extends BaseTest { Actions mouse; - @BeforeClass - void setUp() { - WebDriverManager.chromedriver().setup(); - driver = new ChromeDriver(); + @BeforeMethod + void load() { driver.get("https://the-internet.herokuapp.com/hovers"); mouse = new Actions(driver); } @@ -45,8 +40,4 @@ void avatarCaption(int personIndex, String caption) { Assert.assertEquals(person1Caption.getText(), caption); } - @AfterClass - void tearDown() { - driver.quit(); - } } diff --git a/src/test/java/testcases/TableTest.java b/src/test/java/testcases/TableTest.java index b9f40e0..9d9814f 100644 --- a/src/test/java/testcases/TableTest.java +++ b/src/test/java/testcases/TableTest.java @@ -1,6 +1,7 @@ package testcases; import io.github.bonigarcia.wdm.WebDriverManager; +import model.Person; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; From 06a24156ff4cb574520dbf9707e0d2ab995001cb Mon Sep 17 00:00:00 2001 From: Ha Do Date: Sat, 8 May 2021 15:49:07 +0700 Subject: [PATCH 11/13] fix reference --- src/test/java/testcases/ContextMenuTest.java | 8 +++++--- src/test/java/testcases/DropDownTest.java | 10 ++++++---- src/test/java/testcases/HoverTest.java | 8 +++++--- 3 files changed, 16 insertions(+), 10 deletions(-) diff --git a/src/test/java/testcases/ContextMenuTest.java b/src/test/java/testcases/ContextMenuTest.java index b0f6377..d046a3a 100644 --- a/src/test/java/testcases/ContextMenuTest.java +++ b/src/test/java/testcases/ContextMenuTest.java @@ -16,6 +16,8 @@ import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; +import static bases.Browser.getDriver; + public class ContextMenuTest extends BaseTest { Actions mouse; WebDriverWait wait; @@ -23,13 +25,13 @@ public class ContextMenuTest extends BaseTest { @BeforeMethod void load() { WebDriverManager.chromedriver().setup(); - mouse = new Actions(driver); - wait = new WebDriverWait(driver, 10); + mouse = new Actions(getDriver()); + wait = new WebDriverWait(getDriver(), 10); } @Test void shouldJSAlertPopupAppear(){ - WebElement rectangle = driver.findElement(By.id("hot-spot")); + WebElement rectangle = getDriver().findElement(By.id("hot-spot")); mouse.contextClick(rectangle).perform(); Alert alert = wait.until(ExpectedConditions.alertIsPresent()); diff --git a/src/test/java/testcases/DropDownTest.java b/src/test/java/testcases/DropDownTest.java index 091797d..991b3cd 100644 --- a/src/test/java/testcases/DropDownTest.java +++ b/src/test/java/testcases/DropDownTest.java @@ -8,21 +8,23 @@ import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; +import static bases.Browser.getDriver; + public class DropDownTest extends BaseTest { @BeforeMethod void load(){ - driver.get("https://the-internet.herokuapp.com/dropdown"); + getDriver().get("https://the-internet.herokuapp.com/dropdown"); } @Test void option1ShouldSelected(){ - WebElement select = driver.findElement(By.id("dropdown")); + WebElement select = getDriver().findElement(By.id("dropdown")); Select dropdown = new Select(select); dropdown.selectByVisibleText("Option 1"); // text() - Assert.assertTrue(driver.findElement(By.xpath("//select[@id='dropdown']/option[.='Option 1']")).isSelected());// text() - Assert.assertTrue(driver.findElement(By.xpath("//select[@id='dropdown']/option[text()='Option 1']")).isSelected());// text() + Assert.assertTrue(getDriver().findElement(By.xpath("//select[@id='dropdown']/option[.='Option 1']")).isSelected());// text() + Assert.assertTrue(getDriver().findElement(By.xpath("//select[@id='dropdown']/option[text()='Option 1']")).isSelected());// text() } } diff --git a/src/test/java/testcases/HoverTest.java b/src/test/java/testcases/HoverTest.java index c168bf0..14dd4b9 100644 --- a/src/test/java/testcases/HoverTest.java +++ b/src/test/java/testcases/HoverTest.java @@ -10,13 +10,15 @@ import org.testng.Assert; import org.testng.annotations.*; +import static bases.Browser.getDriver; + public class HoverTest extends BaseTest { Actions mouse; @BeforeMethod void load() { - driver.get("https://the-internet.herokuapp.com/hovers"); - mouse = new Actions(driver); + getDriver().get("https://the-internet.herokuapp.com/hovers"); + mouse = new Actions(getDriver()); } @DataProvider @@ -30,7 +32,7 @@ Object[][] avatar() { @Test(dataProvider = "avatar") void avatarCaption(int personIndex, String caption) { - WebElement person1 = driver.findElements(By.className("figure")).get(personIndex); + WebElement person1 = getDriver().findElements(By.className("figure")).get(personIndex); mouse.moveToElement(person1).perform(); // --> hover WebElement person1Caption = person1 From fd557a32039a0ed2b37e71d4fc66c12522199c19 Mon Sep 17 00:00:00 2001 From: Ha Do Date: Sat, 22 May 2021 15:24:17 +0700 Subject: [PATCH 12/13] update testng --- form-authentication-testplan.xml | 13 ++++ pom.xml | 10 +++ src/test/java/bases/BasePage.java | 32 -------- src/test/java/bases/BaseTest.java | 12 +-- src/test/java/bases/Browser.java | 76 +++++++++++++++++-- src/test/java/helper/DateUtils.java | 55 ++++++++++++++ src/test/java/openBrowser/FirefoxTest.java | 1 - src/test/java/openBrowser/IETest.java | 1 - src/test/java/pages/BmiPage.java | 2 + .../java/pages/FormAuthenticationPage.java | 2 + src/test/java/testcases/BrokenImagesTest.java | 44 +++++++++++ src/test/java/testcases/DatePicker.java | 52 +++++++++++++ src/test/java/testcases/DragDropTest.java | 24 ++++++ .../testcases/FormAuthenticationTest.java | 10 +-- .../java/testcases/JavaScriptAlertTest.java | 4 +- src/test/java/testcases/TodoTest.java | 38 ++++++++++ 16 files changed, 321 insertions(+), 55 deletions(-) create mode 100644 form-authentication-testplan.xml create mode 100644 src/test/java/helper/DateUtils.java create mode 100644 src/test/java/testcases/BrokenImagesTest.java create mode 100644 src/test/java/testcases/DatePicker.java create mode 100644 src/test/java/testcases/DragDropTest.java create mode 100644 src/test/java/testcases/TodoTest.java diff --git a/form-authentication-testplan.xml b/form-authentication-testplan.xml new file mode 100644 index 0000000..39392ab --- /dev/null +++ b/form-authentication-testplan.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/pom.xml b/pom.xml index 36e8521..0e40eae 100644 --- a/pom.xml +++ b/pom.xml @@ -42,6 +42,16 @@ 1.8 + + org.apache.maven.plugins + maven-surefire-plugin + 3.0.0-M5 + + + form-authentication-testplan.xml + + + \ No newline at end of file diff --git a/src/test/java/bases/BasePage.java b/src/test/java/bases/BasePage.java index 3988ac8..b0d727f 100644 --- a/src/test/java/bases/BasePage.java +++ b/src/test/java/bases/BasePage.java @@ -1,37 +1,5 @@ package bases; -import org.openqa.selenium.By; -import org.openqa.selenium.WebDriver; -import org.openqa.selenium.interactions.Actions; -import org.openqa.selenium.support.ui.WebDriverWait; - -import static bases.Browser.getDriver; - public abstract class BasePage { - protected Actions mouse; - protected WebDriverWait wait; - - public BasePage() { - mouse = new Actions(getDriver()); - wait = new WebDriverWait(getDriver(),30); - } - - public void visit(String url){ - getDriver().get(url); - } - - public void fill(By locator, String withText){ - getDriver().findElement(locator).clear(); - getDriver().findElement(locator).sendKeys(withText); - } - - public void click(By locator){ - getDriver().findElement(locator).click(); - } - - public String getText(By locator){ - return getDriver().findElement(locator).getText(); - } - public abstract void open() ; } diff --git a/src/test/java/bases/BaseTest.java b/src/test/java/bases/BaseTest.java index 836f844..7d63f0b 100644 --- a/src/test/java/bases/BaseTest.java +++ b/src/test/java/bases/BaseTest.java @@ -10,18 +10,20 @@ import org.testng.annotations.AfterClass; import org.testng.annotations.AfterMethod; import org.testng.annotations.BeforeClass; +import org.testng.annotations.Parameters; import java.io.File; import java.io.IOException; public class BaseTest { - @BeforeClass - public void setUp() { - Browser.launch("chrome"); + @Parameters({"browser"}) + @BeforeClass(alwaysRun = true) + public void setUp(String name) { + Browser.launch(name); } - @AfterMethod + @AfterMethod(alwaysRun = true) public void captureScreen(ITestResult testResult) throws IOException { if(!testResult.isSuccess()){ File file = ((TakesScreenshot) Browser.getDriver()).getScreenshotAs(OutputType.FILE); @@ -34,7 +36,7 @@ public void captureScreen(ITestResult testResult) throws IOException { } } - @AfterClass + @AfterClass(alwaysRun = true) public void tearDown(){ Browser.getDriver().quit(); } diff --git a/src/test/java/bases/Browser.java b/src/test/java/bases/Browser.java index ff1f41a..455b232 100644 --- a/src/test/java/bases/Browser.java +++ b/src/test/java/bases/Browser.java @@ -1,28 +1,88 @@ package bases; import io.github.bonigarcia.wdm.WebDriverManager; +import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.firefox.FirefoxDriver; import org.openqa.selenium.ie.InternetExplorerDriver; +import org.openqa.selenium.interactions.Actions; +import org.openqa.selenium.support.ui.WebDriverWait; + +import java.util.List; public class Browser { - private static WebDriver driver; + private static WebDriver driver; + public static Actions mouse; + public static WebDriverWait wait; - public static void launch(String name){ - if (name.equalsIgnoreCase("chrome")){ + public static void launch(String name) { + if (name.equalsIgnoreCase("chrome")) { WebDriverManager.chromedriver().setup(); - driver= new ChromeDriver(); - }else if(name.equalsIgnoreCase("firefox")){ + driver = new ChromeDriver(); + } else if (name.equalsIgnoreCase("firefox")) { WebDriverManager.firefoxdriver().setup(); - driver= new FirefoxDriver(); - }else if(name.equalsIgnoreCase("ie")){ + driver = new FirefoxDriver(); + } else if (name.equalsIgnoreCase("ie")) { WebDriverManager.iedriver().setup(); - driver= new InternetExplorerDriver(); + driver = new InternetExplorerDriver(); } + mouse = new Actions(getDriver()); + wait = new WebDriverWait(getDriver(), 30); } public static WebDriver getDriver() { return driver; } + + public static void visit(String url) { + driver.get(url); + } + + public static void fill(By locator, String withText) { + driver.findElement(locator).clear(); + driver.findElement(locator).sendKeys(withText); + } + + public static WebElement find(By locator) { + return driver.findElement(locator); + } + + public static void click(By locator) { + driver.findElement(locator).click(); + } + + public static String getText(By locator) { + return driver.findElement(locator).getText(); + } + + public static boolean isDisplayed(By locator) { + return driver.findElement(locator).isDisplayed(); + } + + public static void hover(By locator) { + mouse.moveToElement(find(locator)).perform(); + } + + public static List all(By locator) { + return driver.findElements(locator); + } + + public static int count(By locator) { + return all(locator).size(); + } + + void check(By checkbox) { + if (!find(checkbox).isSelected()) { + click(checkbox); + } + } + + void uncheck(By checkbox) { + if (find(checkbox).isSelected()) { + click(checkbox); + } + } + } diff --git a/src/test/java/helper/DateUtils.java b/src/test/java/helper/DateUtils.java new file mode 100644 index 0000000..332e4f5 --- /dev/null +++ b/src/test/java/helper/DateUtils.java @@ -0,0 +1,55 @@ +package helper; + +import org.openqa.selenium.WebElement; + +import java.time.LocalDate; +import java.util.Calendar; +import java.util.List; +import java.util.TimeZone; + +public class DateUtils { + //Get The Current Day + public static String getCurrentDay() { + //Create a Calendar Object + Calendar calendar = Calendar.getInstance(TimeZone.getDefault()); + + //Get Current Day as a number + int todayInt = calendar.get(Calendar.DAY_OF_MONTH); + System.out.println("Today Int: " + todayInt + "\n"); + + //Integer to String Conversion + String todayStr = Integer.toString(todayInt); + System.out.println("Today Str: " + todayStr + "\n"); + + return todayStr; + } + + //Get The Current Day plus days. You can change this method based on your needs. + public static String getCurrentDayPlus(int days) { + LocalDate currentDate = LocalDate.now(); + + int dayOfWeekPlus = currentDate.getDayOfWeek().plus(days).getValue(); + return Integer.toString(dayOfWeekPlus); + } + + //Click to given day + public static void clickGivenDay(List elementList, String day) { + //DatePicker is a table. Thus we can navigate to each cell + //and if a cell matches with the current date then we will click it. + /**Functional JAVA version of this method.*/ + elementList.stream() + .filter(element -> element.getText().contains(day)) + .findFirst() + .ifPresent(WebElement::click); + + /**Non-functional JAVA version of this method.*/ + //for ( + // WebElement cell : elementList) { + // String cellText = cell.getText(); + // if (cellText.contains(day)) { + // cell.click(); + // break; + // } + //} + } +} diff --git a/src/test/java/openBrowser/FirefoxTest.java b/src/test/java/openBrowser/FirefoxTest.java index 553be6e..a6c655a 100644 --- a/src/test/java/openBrowser/FirefoxTest.java +++ b/src/test/java/openBrowser/FirefoxTest.java @@ -6,7 +6,6 @@ public class FirefoxTest { public static void main(String[] args) { -// System.setProperty("webdriver.gecko.driver","drivers/geckodriver"); WebDriverManager.firefoxdriver().setup(); WebDriver driver = new FirefoxDriver(); } diff --git a/src/test/java/openBrowser/IETest.java b/src/test/java/openBrowser/IETest.java index ab80d72..4d13e0e 100644 --- a/src/test/java/openBrowser/IETest.java +++ b/src/test/java/openBrowser/IETest.java @@ -5,7 +5,6 @@ public class IETest { public static void main(String[] args) { -// System.setProperty("webdriver.ie.driver",""); WebDriverManager.iedriver().setup(); new InternetExplorerDriver(); } diff --git a/src/test/java/pages/BmiPage.java b/src/test/java/pages/BmiPage.java index fed93f0..93ed115 100644 --- a/src/test/java/pages/BmiPage.java +++ b/src/test/java/pages/BmiPage.java @@ -4,6 +4,8 @@ import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; +import static bases.Browser.*; + public class BmiPage extends BasePage { By metricTab = By.xpath("//a[.='Metric Units']"); By ageTxt = By.id("cage"); diff --git a/src/test/java/pages/FormAuthenticationPage.java b/src/test/java/pages/FormAuthenticationPage.java index e7982cc..bc76fec 100644 --- a/src/test/java/pages/FormAuthenticationPage.java +++ b/src/test/java/pages/FormAuthenticationPage.java @@ -5,6 +5,8 @@ import org.openqa.selenium.WebDriver; import org.openqa.selenium.support.PageFactory; +import static bases.Browser.*; + public class FormAuthenticationPage extends BasePage { /** diff --git a/src/test/java/testcases/BrokenImagesTest.java b/src/test/java/testcases/BrokenImagesTest.java new file mode 100644 index 0000000..af13006 --- /dev/null +++ b/src/test/java/testcases/BrokenImagesTest.java @@ -0,0 +1,44 @@ +package testcases; + +import io.github.bonigarcia.wdm.WebDriverManager; +import org.openqa.selenium.By; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; +import org.openqa.selenium.chrome.ChromeDriver; +import org.testng.annotations.AfterClass; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.Test; + +import java.util.List; + +public class BrokenImagesTest { + WebDriver driver; + + @BeforeClass + void setUp() { + WebDriverManager.chromedriver().setup(); + driver = new ChromeDriver(); + } + + @BeforeMethod + void reloadPage() { + driver.get("http://the-internet.herokuapp.com/broken_images"); + } + + @Test + void tc01() { + List images = driver.findElements(By.cssSelector("img")); + for (WebElement image : images) { + if (image.getAttribute("naturalWidth").equals("0")) { + System.out.println(image.getAttribute("outerHTML") + " is broken."); + } + } + } + + + @AfterClass + void tearDown() { + driver.quit(); + } +} diff --git a/src/test/java/testcases/DatePicker.java b/src/test/java/testcases/DatePicker.java new file mode 100644 index 0000000..913f5f6 --- /dev/null +++ b/src/test/java/testcases/DatePicker.java @@ -0,0 +1,52 @@ +package testcases; + +import helper.DateUtils; +import io.github.bonigarcia.wdm.WebDriverManager; +import org.openqa.selenium.By; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; +import org.openqa.selenium.chrome.ChromeDriver; +import org.openqa.selenium.support.ui.ExpectedConditions; +import org.openqa.selenium.support.ui.WebDriverWait; +import org.testng.annotations.AfterClass; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.Test; + +import java.util.List; + +public class DatePicker { + WebDriver driver; + WebDriverWait wait; + + + @BeforeClass + void setUp() { + WebDriverManager.chromedriver().setup(); + driver = new ChromeDriver(); + wait = new WebDriverWait(driver, 10); + } + + @Test + void ticketPage(){ + driver.get("https://www.vietnamairlines.com/vn/en/home"); + //Accept cookie footer pop up + wait.until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.id("cookie-agree"))).get(0).click(); + // select depart date + driver.findElement(By.id("roundtrip-date-depart")).click(); + WebElement dateWidgetFrom = wait.until( + ExpectedConditions.visibilityOfAllElementsLocatedBy(By.className("ui-datepicker-calendar"))).get(0); + + // This are the columns of the from date picker table + List columns = dateWidgetFrom.findElements(By.tagName("td")); + DateUtils.clickGivenDay(columns, DateUtils.getCurrentDay()); + //close date pickper + driver.findElement(By.className("ui-datepicker-close")).click(); + + } + + @AfterClass + void tearDown() { + driver.quit(); + } + +} diff --git a/src/test/java/testcases/DragDropTest.java b/src/test/java/testcases/DragDropTest.java new file mode 100644 index 0000000..9981457 --- /dev/null +++ b/src/test/java/testcases/DragDropTest.java @@ -0,0 +1,24 @@ +package testcases; + +import bases.BaseTest; +import bases.Browser; +import org.openqa.selenium.By; +import org.openqa.selenium.WebElement; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.Test; + +public class DragDropTest extends BaseTest { + @BeforeMethod + void init(){ + Browser.visit("https://the-internet.herokuapp.com/drag_and_drop"); + } + + @Test + void action(){ + WebElement rectangleA = Browser.find(By.id("column-a")); + WebElement rectangleB = Browser.find(By.id("column-b")); + Browser.mouse.clickAndHold(rectangleA) + .moveToElement(rectangleB).perform(); + }; +} diff --git a/src/test/java/testcases/FormAuthenticationTest.java b/src/test/java/testcases/FormAuthenticationTest.java index 9b060b7..e49ad3e 100644 --- a/src/test/java/testcases/FormAuthenticationTest.java +++ b/src/test/java/testcases/FormAuthenticationTest.java @@ -18,17 +18,15 @@ public class FormAuthenticationTest extends BaseTest { FormAuthenticationPage formAuthenticationPage; - @BeforeClass - void setup() { - formAuthenticationPage = new FormAuthenticationPage(); - } - @BeforeMethod + @BeforeMethod(alwaysRun = true) void load() { + formAuthenticationPage = new FormAuthenticationPage(); formAuthenticationPage.open(); } - @Test + + @Test(groups = {"smoke"}) void validCredential() { formAuthenticationPage.login("tomsmith", "SuperSecretPassword!"); Assert.assertEquals(getDriver().getCurrentUrl(), "https://the-internet.herokuapp.com/secure"); diff --git a/src/test/java/testcases/JavaScriptAlertTest.java b/src/test/java/testcases/JavaScriptAlertTest.java index 66ad6e4..447a328 100644 --- a/src/test/java/testcases/JavaScriptAlertTest.java +++ b/src/test/java/testcases/JavaScriptAlertTest.java @@ -12,7 +12,7 @@ public class JavaScriptAlertTest { WebDriver driver; - @BeforeClass + @BeforeClass(alwaysRun = true) void setUp() { WebDriverManager.chromedriver().setup(); driver = new ChromeDriver(); @@ -28,7 +28,7 @@ void clickForJSAlert(){ Assert.assertEquals(result,"You successfully clicked an alert"); } - @Test + @Test(groups = {"smoke"}) void dismissForJsConfirm(){ driver.findElement(By.xpath("//button[.='Click for JS Confirm']")).click(); driver.switchTo().alert().dismiss(); // ~ click on Cancel button on alert popup diff --git a/src/test/java/testcases/TodoTest.java b/src/test/java/testcases/TodoTest.java new file mode 100644 index 0000000..d3a8f0e --- /dev/null +++ b/src/test/java/testcases/TodoTest.java @@ -0,0 +1,38 @@ +package testcases; + +import bases.BaseTest; +import bases.Browser; +import org.openqa.selenium.By; +import org.testng.Assert; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.Test; + +public class TodoTest extends BaseTest { + @BeforeClass + void navigate(){ + Browser.visit("https://todomvc.com/examples/vanillajs"); + } + + @Test + void addNewTodo(){ + Browser.fill(By.className("new-todo"),"task1\n"); + Assert.assertTrue(Browser.isDisplayed(By.xpath("//label[.='task1']"))); + } + + @Test + void markCompleted(){ + Browser.click(By.xpath("//label[.='task1']/../input[@class='toggle']")); +// Browser.click(By.xpath("//label[.='task1']/preceding-sibling::input[@class='toggle']")); + Browser.click(By.linkText("Completed")); + Assert.assertTrue(Browser.isDisplayed(By.xpath("//label[.='task1']"))); + } + + @Test + void deleteCompleted(){ + Browser.fill(By.className("new-todo"),"task1\n"); + Browser.hover(By.xpath("//label[.='task1']")); + Browser.click(By.xpath("//label[.='task1']/../button[@class='destroy']")); +// Browser.click(By.xpath("//label[.='task1']/following-sibling::button")); + Assert.assertTrue(Browser.count(By.xpath("//label[.='task1']"))==0); + } +} \ No newline at end of file From 9ba3885fa8c4f5a2f86abfdf774a64c461d9a950 Mon Sep 17 00:00:00 2001 From: Ha Do Date: Sat, 22 May 2021 15:29:30 +0700 Subject: [PATCH 13/13] set to chome headless mode --- src/test/java/bases/Browser.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/test/java/bases/Browser.java b/src/test/java/bases/Browser.java index 455b232..39aedc8 100644 --- a/src/test/java/bases/Browser.java +++ b/src/test/java/bases/Browser.java @@ -5,6 +5,7 @@ import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriver; +import org.openqa.selenium.chrome.ChromeOptions; import org.openqa.selenium.firefox.FirefoxDriver; import org.openqa.selenium.ie.InternetExplorerDriver; import org.openqa.selenium.interactions.Actions; @@ -20,7 +21,9 @@ public class Browser { public static void launch(String name) { if (name.equalsIgnoreCase("chrome")) { WebDriverManager.chromedriver().setup(); - driver = new ChromeDriver(); + ChromeOptions chromeOptions = new ChromeOptions(); + chromeOptions.setHeadless(true); + driver = new ChromeDriver(chromeOptions); } else if (name.equalsIgnoreCase("firefox")) { WebDriverManager.firefoxdriver().setup(); driver = new FirefoxDriver();