Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 12 additions & 12 deletions .github/workflows/maven.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,15 +14,15 @@ jobs:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v2
- name: Set up JDK 11
uses: actions/setup-java@v1
with:
java-version: 11
- name: Run acceptance tests
env:
SAUCE_USERNAME: ${{ secrets.SAUCE_USERNAME }}
SAUCE_ACCESS_KEY: ${{ secrets.SAUCE_ACCESS_KEY }}
run: |
echo "$TEST_SECRET"
mvn test -X -Dtest=AcceptanceTestDrivenAutomationTest
- uses: actions/checkout@v2
- name: Set up JDK 11
uses: actions/setup-java@v1
with:
java-version: 11
- name: Run acceptance tests
env:
SAUCE_USERNAME: ${{ secrets.SAUCE_USERNAME }}
SAUCE_ACCESS_KEY: ${{ secrets.SAUCE_ACCESS_KEY }}
run: |
echo "$TEST_SECRET"
mvn test -X -Dtest=AcceptanceTestDrivenAutomationTest
7 changes: 6 additions & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@
<groupId>org.ultimateqa</groupId>
<artifactId>selenium.java</artifactId>
<version>1.0-SNAPSHOT</version>

<build>
<pluginManagement>
<plugins>
Expand All @@ -24,6 +23,12 @@
</pluginManagement>
</build>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
Expand Down
59 changes: 23 additions & 36 deletions src/test/java/atda/AcceptanceTestDrivenAutomationTest.java
Original file line number Diff line number Diff line change
@@ -1,50 +1,37 @@
package atda;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;

public class AcceptanceTestDrivenAutomationTest {
WebDriver driver;
@Before
public void setup()
{
driver = getDriver();
}
@After
public void cleanup()
{
driver.quit();
}
@Test
public void shouldOpen()
{
LoginPage loginPage = new LoginPage(driver);
loginPage.open();
assertTrue(loginPage.isLoaded());
}
@RunWith(Parameterized.class)
public class AcceptanceTestDrivenAutomationTest extends BaseTest {

@Test
public void shouldLogin()
{
public void shouldLogin() {
LoginPage loginPage = new LoginPage(driver);
loginPage.open();
assertTrue(loginPage.isLoaded());

//I used to do this, now I learned it's not necessary
//assertTrue("Login page should load successfully", loginPage.isLoaded());
loginPage.login("standard_user", "secret_sauce");
assertTrue(new ProductsPage(driver).isLoaded());
assertTrue("Products page should open when we login", new ProductsPage(driver).isLoaded());
}

private WebDriver getDriver() {
//Telling the system where to find chromedriver on mac
//System.setProperty("webdriver.chrome.driver", "resources/mac/chromedriver");

//The path of chromedriver for windows
System.setProperty("webdriver.chrome.driver", "resources/windows/chromedriver.exe");
return new ChromeDriver();
@Test
public void shouldAddOneItemToCart() {
ProductsPage productsPage = new ProductsPage(driver);
productsPage.open();
productsPage.addItemToCart();
assertEquals("1", productsPage.getCountOfItemsInCart());
}
@Test
public void shouldAddTwoItemsToCart() {
ProductsPage productsPage = new ProductsPage(driver);
productsPage.open();
productsPage.addItemToCart();
productsPage.addItemToCart();
assertEquals("2", productsPage.getCountOfItemsInCart());
}
}
9 changes: 6 additions & 3 deletions src/test/java/atda/BasePage.java
Original file line number Diff line number Diff line change
@@ -1,15 +1,18 @@
package atda;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;

public class BasePage {
public final WebDriver driver;
WebDriverWait wait;


public BasePage(WebDriver driver) {
this.driver = driver;
wait = new WebDriverWait(driver, 10);
}
public boolean isElementDisplayed(By locator) {
WebDriverWait wait = new WebDriverWait(driver, 10);
return wait.until(ExpectedConditions.visibilityOfElementLocated(locator)).isDisplayed();
}
}
78 changes: 78 additions & 0 deletions src/test/java/atda/BaseTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
package atda;

import org.junit.Before;
import org.junit.Rule;
import org.junit.rules.TestName;
import org.junit.runners.Parameterized;
import org.openqa.selenium.MutableCapabilities;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.remote.CapabilityType;
import org.openqa.selenium.remote.RemoteWebDriver;

import java.net.MalformedURLException;
import java.net.URL;
import java.util.Arrays;
import java.util.Collection;

public class BaseTest {
public WebDriver driver;

@Rule
public SauceTestWatcher resultReportingTestWatcher = new SauceTestWatcher();

@Rule
public TestName testName = new TestName() {
public String getMethodName() {
return String.format("%s", super.getMethodName());
}
};

@Parameterized.Parameters
public static Collection<Object[]> crossBrowserData() {
return Arrays.asList(new Object[][] {
{ "Chrome", "macOS 10.14", "latest" },
{ "Chrome", "macOS 10.15", "latest" },
{ "Chrome", "macOS 10.14", "latest-1" },
{ "Chrome", "macOS 10.15", "latest-1" },
{ "Safari", "macOS 10.14", "latest" },
{ "Safari", "macOS 10.15", "latest" },
});
}

@Parameterized.Parameter // first data value (0) is default
public String browser;

@Parameterized.Parameter(1)
public String platform;

@Parameterized.Parameter(2)
public String browserVersion;

@Before
public void setup() throws MalformedURLException {
createDriver();
resultReportingTestWatcher.setDriver(driver);
}
private void createDriver() throws MalformedURLException {
String sauceUsername = System.getenv("SAUCE_USERNAME");
String sauceAccessKey = System.getenv("SAUCE_ACCESS_KEY");

MutableCapabilities sauceOpts = new MutableCapabilities();
sauceOpts.setCapability("username", sauceUsername);
sauceOpts.setCapability("accessKey", sauceAccessKey);
sauceOpts.setCapability("name", testName.getMethodName());
sauceOpts.setCapability("build", "ATDA");
sauceOpts.setCapability("commandTimeout", "30");


MutableCapabilities browserOptions = new MutableCapabilities();
browserOptions.setCapability(CapabilityType.PLATFORM_NAME, platform);
browserOptions.setCapability(CapabilityType.BROWSER_VERSION, browserVersion);
browserOptions.setCapability(CapabilityType.BROWSER_NAME, browser);
browserOptions.setCapability("sauce:options", sauceOpts);

String sauceUrl = "https://ondemand.saucelabs.com/wd/hub";
URL url = new URL(sauceUrl);
driver = new RemoteWebDriver(url, browserOptions);
}
}
15 changes: 9 additions & 6 deletions src/test/java/atda/LoginPage.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,18 +9,21 @@ public class LoginPage extends BasePage {
public LoginPage(WebDriver driver) {
super(driver);
}

public By getUserNameLocator()
{
return By.id("user-name");
}
public void open() {
driver.get("http://www.saucedemo.com");
driver.get("https://www.saucedemo.com/");
}

public boolean isLoaded() {
return wait.until(ExpectedConditions.presenceOfElementLocated(By.id("user-name"))).isDisplayed();
return isElementDisplayed(getUserNameLocator());
}

public void login(String userName, String password) {
driver.findElement(By.id("user-name")).sendKeys(userName);
public void login(String username, String password) {
driver.findElement(getUserNameLocator()).sendKeys(username);
driver.findElement(By.id("password")).sendKeys(password);
driver.findElement(By.className("btn_action")).submit();
driver.findElement(By.className("btn_action")).click();
}
}
16 changes: 14 additions & 2 deletions src/test/java/atda/ProductsPage.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,24 @@
import org.openqa.selenium.support.ui.WebDriverWait;

public class ProductsPage extends BasePage{

public ProductsPage(WebDriver driver) {
super(driver);
}

public boolean isLoaded() {
return wait.until(
ExpectedConditions.presenceOfElementLocated(By.id("inventory_filter_container"))).isDisplayed();
return isElementDisplayed(By.id("inventory_container"));
}

public void open() {
driver.navigate().to("https://www.saucedemo.com/inventory.html");
}

public void addItemToCart() {
WebDriverWait wait = new WebDriverWait(driver, 10);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.className("btn_primary"))).click();
}
public String getCountOfItemsInCart() {
return driver.findElement(By.className("shopping_cart_badge")).getText();
}
}
31 changes: 31 additions & 0 deletions src/test/java/atda/SauceTestWatcher.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package atda;

import org.junit.rules.TestWatcher;
import org.junit.runner.Description;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;

public class SauceTestWatcher extends TestWatcher {
private WebDriver driver;

public void setDriver(WebDriver driver)
{
this.driver = driver;
}

protected void succeeded(Description description) {
((JavascriptExecutor) driver).executeScript("sauce:job-result=passed");
if(driver != null)
{
driver.quit();
}
}

protected void failed(Description description) {
((JavascriptExecutor) driver).executeScript("sauce:job-result=failed");
if(driver != null)
{
driver.quit();
}
}
}