diff --git a/.travis.yml b/.travis.yml index 286d7af..af17583 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,6 +1,6 @@ language: java jdk: - - oraclejdk8 + - oraclejdk9 before_install: - export | grep SAUCE_ script: mvn clean install diff --git a/src/test/java/com/yourcompany/Pages/GuineaPigPage.java b/src/test/java/com/yourcompany/Pages/GuineaPigPage.java deleted file mode 100644 index dc98889..0000000 --- a/src/test/java/com/yourcompany/Pages/GuineaPigPage.java +++ /dev/null @@ -1,60 +0,0 @@ -package com.yourcompany.Pages; - -import org.openqa.selenium.WebDriver; -import org.openqa.selenium.WebElement; -import org.openqa.selenium.support.FindBy; -import org.openqa.selenium.support.PageFactory; -import org.openqa.selenium.support.ui.ExpectedConditions; -import org.openqa.selenium.support.ui.WebDriverWait; - -public class GuineaPigPage { - - @FindBy(linkText = "i am a link") - private WebElement theActiveLink; - - @FindBy(id = "your_comments") - private WebElement yourCommentsSpan; - - @FindBy(id = "comments") - private WebElement commentsTextAreaInput; - - @FindBy(id = "submit") - private WebElement submitButton; - - public WebDriver driver; - public static String url = "https://saucelabs-sample-test-frameworks.github.io/training-test-page"; - - public static GuineaPigPage visitPage(WebDriver driver) { - GuineaPigPage page = new GuineaPigPage(driver); - page.visitPage(); - return page; - } - - public GuineaPigPage(WebDriver driver) { - this.driver = driver; - PageFactory.initElements(driver, this); - } - - public void visitPage() { - this.driver.get(url); - } - - public void followLink() { - theActiveLink.click(); - } - - public void submitComment(String text) { - commentsTextAreaInput.sendKeys(text); - submitButton.click(); - } - - public String getSubmittedCommentText() { - return yourCommentsSpan.getText(); - } - - public boolean isOnPage() { - String title = "I am a page title - Sauce Labs"; - return driver.getTitle() == title; - } - -} diff --git a/src/test/java/com/yourcompany/Tests/AddItemsToCartTest.java b/src/test/java/com/yourcompany/Tests/AddItemsToCartTest.java new file mode 100644 index 0000000..41803bc --- /dev/null +++ b/src/test/java/com/yourcompany/Tests/AddItemsToCartTest.java @@ -0,0 +1,44 @@ +package com.yourcompany.Tests; + +import org.testng.Assert; +import org.testng.annotations.Test; +import org.openqa.selenium.By; + +import java.lang.reflect.Method; +import java.net.MalformedURLException; + +public class AddItemsToCartTest extends TestBase { + + + @Test(dataProvider = "hardCodedBrowsers") + public void addOneItem(String browser, String version, String os, Method method) throws MalformedURLException { + this.createDriver(browser, version, os, method.getName()); + + getDriver().get("http://www.saucedemo.com/inventory.html"); + getDriver().findElement(By.className("btn_primary")).click(); + + Assert.assertEquals(getDriver().findElement(By.className("shopping_cart_badge")).getText(), "1"); + + getDriver().get("http://www.saucedemo.com/cart.html"); + long expected = getDriver().findElements(By.className("inventory_item_name")).size(); + + Assert.assertEquals(expected, 1); + + } + + @Test(dataProvider = "hardCodedBrowsers") + public void addTwoItems(String browser, String version, String os, Method method) throws MalformedURLException { + this.createDriver(browser, version, os, method.getName()); + + getDriver().get("http://www.saucedemo.com/inventory.html"); + getDriver().findElement(By.className("btn_primary")).click(); + getDriver().findElement(By.className("btn_primary")).click(); + + Assert.assertEquals(getDriver().findElement(By.className("shopping_cart_badge")).getText(), "2"); + + getDriver().get("http://www.saucedemo.com/cart.html"); + long expected = getDriver().findElements(By.className("inventory_item_name")).size(); + + Assert.assertEquals(expected, 2); + } +} diff --git a/src/test/java/com/yourcompany/Tests/FollowLinkTest.java b/src/test/java/com/yourcompany/Tests/FollowLinkTest.java deleted file mode 100644 index a5bec55..0000000 --- a/src/test/java/com/yourcompany/Tests/FollowLinkTest.java +++ /dev/null @@ -1,42 +0,0 @@ -package com.yourcompany.Tests; - -import com.yourcompany.Pages.GuineaPigPage; -import org.openqa.selenium.InvalidElementStateException; -import org.openqa.selenium.WebDriver; -import org.testng.Assert; -import org.testng.annotations.Test; - -import java.lang.reflect.Method; -import java.net.MalformedURLException; -import java.rmi.UnexpectedException; - -/** - * Created by mehmetgerceker on 12/7/15. - */ - -public class FollowLinkTest extends TestBase { - - /** - * Runs a simple test verifying link can be followed. - * - * @throws InvalidElementStateException - */ - @Test(dataProvider = "hardCodedBrowsers") - public void verifyLinkTest(String browser, String version, String os, Method method) - throws MalformedURLException, InvalidElementStateException, UnexpectedException { - - //create webdriver session - this.createDriver(browser, version, os, method.getName()); - WebDriver driver = this.getWebDriver(); - - this.annotate("Visiting GuineaPig page..."); - GuineaPigPage page = GuineaPigPage.visitPage(driver); - - this.annotate("Clicking on link..."); - page.followLink(); - - this.annotate("Asserting that we are on a new page..."); - Assert.assertFalse(page.isOnPage()); - } - -} \ No newline at end of file diff --git a/src/test/java/com/yourcompany/Tests/InvalidLoginTest.java b/src/test/java/com/yourcompany/Tests/InvalidLoginTest.java new file mode 100644 index 0000000..f0024e2 --- /dev/null +++ b/src/test/java/com/yourcompany/Tests/InvalidLoginTest.java @@ -0,0 +1,25 @@ +package com.yourcompany.Tests; + +import org.testng.Assert; +import org.testng.annotations.Test; +import org.openqa.selenium.By; + +import java.lang.reflect.Method; +import java.net.MalformedURLException; + +public class InvalidLoginTest extends TestBase { + + + @Test(dataProvider = "hardCodedBrowsers") + public void blankCredentials(String browser, String version, String os, Method method) throws MalformedURLException { + this.createDriver(browser, version, os, method.getName()); + + getDriver().get("http://www.saucedemo.com"); + + getDriver().findElement(By.id("user-name")).sendKeys(""); + getDriver().findElement(By.id("password")).sendKeys(""); + getDriver().findElement(By.cssSelector(".btn_action")).click(); + + Assert.assertTrue(getDriver().findElement(By.cssSelector(".error-button")).isDisplayed()); + } +} diff --git a/src/test/java/com/yourcompany/Tests/RemoveItemFromCartTest.java b/src/test/java/com/yourcompany/Tests/RemoveItemFromCartTest.java new file mode 100644 index 0000000..3044ecd --- /dev/null +++ b/src/test/java/com/yourcompany/Tests/RemoveItemFromCartTest.java @@ -0,0 +1,29 @@ +package com.yourcompany.Tests; + +import org.testng.Assert; +import org.testng.annotations.Test; +import org.openqa.selenium.By; + +import java.lang.reflect.Method; +import java.net.MalformedURLException; + + +public class RemoveItemFromCartTest extends TestBase { + + + @Test(dataProvider = "hardCodedBrowsers") + public void removeOne(String browser, String version, String os, Method method) throws MalformedURLException { + this.createDriver(browser, version, os, method.getName()); + + getDriver().get("http://www.saucedemo.com/inventory.html"); + getDriver().findElement(By.className("btn_primary")).click(); + getDriver().findElement(By.className("btn_primary")).click(); + getDriver().findElement(By.className("btn_secondary")).click(); + + Assert.assertEquals(getDriver().findElement(By.className("shopping_cart_badge")).getText(), "1"); + + getDriver().get("http://www.saucedemo.com/cart.html"); + long expected = getDriver().findElements(By.className("inventory_item_name")).size(); + Assert.assertEquals(expected, 1); + } +} diff --git a/src/test/java/com/yourcompany/Tests/TestBase.java b/src/test/java/com/yourcompany/Tests/TestBase.java index a678eff..bd1846e 100644 --- a/src/test/java/com/yourcompany/Tests/TestBase.java +++ b/src/test/java/com/yourcompany/Tests/TestBase.java @@ -1,9 +1,5 @@ package com.yourcompany.Tests; -import com.saucelabs.common.SauceOnDemandAuthentication; -import com.saucelabs.common.SauceOnDemandSessionIdProvider; -import com.saucelabs.testng.SauceOnDemandAuthenticationProvider; -import com.saucelabs.testng.SauceOnDemandTestListener; import org.openqa.selenium.JavascriptExecutor; import org.openqa.selenium.WebDriver; import org.openqa.selenium.remote.CapabilityType; @@ -12,7 +8,6 @@ import org.testng.ITestResult; import org.testng.annotations.AfterMethod; import org.testng.annotations.DataProvider; -import org.testng.annotations.Listeners; import java.lang.reflect.Method; import java.net.MalformedURLException; @@ -35,7 +30,7 @@ public class TestBase { /** * ThreadLocal variable which contains the {@link WebDriver} instance which is used to perform browser interactions with. */ - private ThreadLocal webDriver = new ThreadLocal(); + private ThreadLocal driver = new ThreadLocal(); /** * ThreadLocal variable which contains the Sauce Job Id. @@ -51,10 +46,8 @@ public class TestBase { @DataProvider(name = "hardCodedBrowsers", parallel = true) public static Object[][] sauceBrowserDataProvider(Method testMethod) { return new Object[][]{ - new Object[]{"MicrosoftEdge", "17.17134", "Windows 10"}, new Object[]{"firefox", "latest", "Windows 10"}, - new Object[]{"internet explorer", "11", "Windows 8.1"}, - new Object[]{"safari", "12.0", "macOS 10.13"}, + new Object[]{"safari", "12.1", "macOS 10.13"}, new Object[]{"chrome", "70", "macOS 10.13"}, new Object[]{"firefox", "latest-1", "Windows 7"}, }; @@ -63,8 +56,8 @@ public static Object[][] sauceBrowserDataProvider(Method testMethod) { /** * @return the {@link WebDriver} for the current thread */ - public WebDriver getWebDriver() { - return webDriver.get(); + public WebDriver getDriver() { + return driver.get(); } /** @@ -88,7 +81,7 @@ public String getSessionId() { * @throws MalformedURLException if an error occurs parsing the url */ protected void createDriver(String browser, String version, String os, String methodName) - throws MalformedURLException, UnexpectedException { + throws MalformedURLException { DesiredCapabilities capabilities = new DesiredCapabilities(); // set desired capabilities to launch appropriate browser on Sauce @@ -102,12 +95,12 @@ protected void createDriver(String browser, String version, String os, String me } // Launch remote browser and set it as the current thread - webDriver.set(new RemoteWebDriver( + driver.set(new RemoteWebDriver( new URL("https://" + username + ":" + accesskey + "@ondemand.saucelabs.com/wd/hub"), capabilities)); // set current sessionId - String id = ((RemoteWebDriver) getWebDriver()).getSessionId().toString(); + String id = ((RemoteWebDriver) getDriver()).getSessionId().toString(); sessionId.set(id); } @@ -118,11 +111,11 @@ protected void createDriver(String browser, String version, String os, String me */ @AfterMethod public void tearDown(ITestResult result) throws Exception { - ((JavascriptExecutor) webDriver.get()).executeScript("sauce:job-result=" + (result.isSuccess() ? "passed" : "failed")); - webDriver.get().quit(); + ((JavascriptExecutor) driver.get()).executeScript("sauce:job-result=" + (result.isSuccess() ? "passed" : "failed")); + driver.get().quit(); } protected void annotate(String text) { - ((JavascriptExecutor) webDriver.get()).executeScript("sauce:context=" + text); + ((JavascriptExecutor) driver.get()).executeScript("sauce:context=" + text); } } diff --git a/src/test/java/com/yourcompany/Tests/TextInputTest.java b/src/test/java/com/yourcompany/Tests/TextInputTest.java deleted file mode 100644 index 6a7313b..0000000 --- a/src/test/java/com/yourcompany/Tests/TextInputTest.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.yourcompany.Tests; - -import com.yourcompany.Pages.GuineaPigPage; -import org.openqa.selenium.InvalidElementStateException; -import org.openqa.selenium.JavascriptExecutor; -import org.openqa.selenium.WebDriver; -import org.testng.Assert; - -import java.lang.reflect.Method; -import java.net.MalformedURLException; -import java.rmi.UnexpectedException; -import java.util.UUID; - - -/** - * Created by mehmetgerceker on 12/7/15. - */ - -public class TextInputTest extends TestBase { - - /** - * Runs a simple test verifying if the comment input is functional. - * @throws InvalidElementStateException - */ - @org.testng.annotations.Test(dataProvider = "hardCodedBrowsers") - public void verifyCommentInputTest(String browser, String version, String os, Method method) - throws MalformedURLException, InvalidElementStateException, UnexpectedException { - this.createDriver(browser, version, os, method.getName()); - WebDriver driver = this.getWebDriver(); - - String commentInputText = UUID.randomUUID().toString(); - - this.annotate("Visiting GuineaPig page..."); - GuineaPigPage page = GuineaPigPage.visitPage(driver); - - this.annotate(String.format("Submitting comment: \"%s\"", commentInputText)); - page.submitComment(commentInputText); - - this.annotate(String.format("Asserting submitted comment is: \"%s\"", commentInputText)); - Assert.assertTrue(page.getSubmittedCommentText().contains(commentInputText)); - } - -} \ No newline at end of file diff --git a/src/test/java/com/yourcompany/Tests/ValidLoginTest.java b/src/test/java/com/yourcompany/Tests/ValidLoginTest.java new file mode 100644 index 0000000..a3b1f91 --- /dev/null +++ b/src/test/java/com/yourcompany/Tests/ValidLoginTest.java @@ -0,0 +1,24 @@ +package com.yourcompany.Tests; + +import org.testng.Assert; +import org.testng.annotations.Test; +import org.openqa.selenium.By; + +import java.lang.reflect.Method; +import java.net.MalformedURLException; + +public class ValidLoginTest extends TestBase { + + @Test(dataProvider = "hardCodedBrowsers") + public void standardUser(String browser, String version, String os, Method method) throws MalformedURLException { + this.createDriver(browser, version, os, method.getName()); + + getDriver().get("http://www.saucedemo.com"); + + getDriver().findElement(By.id("user-name")).sendKeys("standard_user"); + getDriver().findElement(By.id("password")).sendKeys("secret_sauce"); + getDriver().findElement(By.cssSelector(".btn_action")).click(); + + Assert.assertTrue(getDriver().getCurrentUrl().contains("inventory.html")); + } +} diff --git a/src/test/java/com/yourcompany/Tests/W3CTestNG.java b/src/test/java/com/yourcompany/Tests/W3CTestNG.java index 29129db..8597e2d 100644 --- a/src/test/java/com/yourcompany/Tests/W3CTestNG.java +++ b/src/test/java/com/yourcompany/Tests/W3CTestNG.java @@ -1,7 +1,5 @@ package com.yourcompany.Tests; -import com.yourcompany.Pages.GuineaPigPage; -import org.openqa.selenium.JavascriptExecutor; import org.openqa.selenium.MutableCapabilities; import org.openqa.selenium.WebDriver; import org.openqa.selenium.edge.EdgeOptions; @@ -74,9 +72,9 @@ public void teardown(ITestResult result){ public void simpleCase(MutableCapabilities options, String browserVersion, String platformName) throws MalformedURLException { this.createDriverOptions(options, browserVersion, platformName); - GuineaPigPage page = GuineaPigPage.visitPage(driver); - String title = page.driver.getTitle(); + this.driver.get("http://www.saucedemo.com"); + String title = this.driver.getTitle(); - Assert.assertTrue(title.contains("Sauce")); + Assert.assertTrue(title.contains("Swag Labs")); } }