Skip to content
This repository has been archived by the owner on Dec 14, 2019. It is now read-only.

Commit

Permalink
Merge branch 'serial'
Browse files Browse the repository at this point in the history
  • Loading branch information
mmerrell-sauce committed Apr 22, 2019
2 parents 85801b0 + 0870f53 commit e8b54de
Show file tree
Hide file tree
Showing 9 changed files with 170 additions and 88 deletions.
2 changes: 1 addition & 1 deletion saucedemo-parallel/README.md
Expand Up @@ -20,7 +20,7 @@ This code is provided on an "AS-IS” basis without warranty of any kind, either
3. Project Dependencies
* Check that Packages are available
```
$ cd Java-TestNg-Selenium
$ cd saucedemo-parallel
$ mvn test-compile
```
* You may also want to run the command below to check for outdated dependencies. Please be sure to verify and review updates before editing your pom.xml file. The updated packages may or may not be compatible with your code.
Expand Down
15 changes: 4 additions & 11 deletions saucedemo-parallel/pom.xml
Expand Up @@ -2,14 +2,12 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<artifactId>sauce-project</artifactId>
<groupId>com.yourcompany</groupId>
<artifactId>saucecon19-parallel-workshop</artifactId>
<groupId>com.saucelabs</groupId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>sauce_quickstart</name>
<description>A sample Maven project that demonstrates how to integrate Sauce OnDemand with WebDriver tests
that run using TestNG
</description>
<description>A sample Maven project that demonstrates Sauce Labs Selenium tests using TestNG</description>

<dependencies>
<dependency>
Expand Down Expand Up @@ -57,12 +55,7 @@
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.12.4</version>
<configuration>
<threadCount>40</threadCount>
<parallel>methods</parallel>
<redirectTestOutputToFile>false</redirectTestOutputToFile>
</configuration>
</plugin>
</plugin>
</plugins>
</build>
</project>

This file was deleted.

@@ -1,58 +1,55 @@
package com.saucelabs.saucedemo.pages;

import org.openqa.selenium.By;
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 InventoryPage {
private WebDriver driver;
InventoryPage() {}

public InventoryPage(WebDriver driver) {
this.driver = driver;
PageFactory.initElements(driver, this);
}

@FindBy(className = "header_label")
private WebElement headerLabel;

@FindBy(className = "product_sort_container")
private WebElement sortList;
@FindBy(className = "inventory_container")
private WebElement inventoryContainer;

@FindBy(className ="add-to-cart-button")
private WebElement addToCart;
@FindBy(className = "inventory_list")
private WebElement inventoryList;

@FindBy(className ="remove-from-cart-button")
private WebElement removeFromCartButton;
@FindBy(className = "header_secondary_container")
private WebElement inventoryHeader;

@FindBy(className = "shopping_cart_badge")
private WebElement shoppingCartBadge;
/**
* Returns the Div containing the item specified (zero-indexed)
* @param itemNumber
* @return
*/
private WebElement getItemNumber(int itemNumber) {
return inventoryList.findElement(By.cssSelector(String.format("div.inventory_item:nth-of-type(%d)", itemNumber)));
}

@FindBy(className = "inventory_container")
private WebElement inventoryContainer;
public String getItemName(int itemNumber) {
WebElement itemName = getItemNumber(itemNumber).findElement(By.className("inventory_item_name"));
return itemName.getText();
}

public boolean isOnPage() {
WebDriverWait wait = new WebDriverWait(driver, 5);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.className("header_label")));
return headerLabel.isDisplayed();
public String getItemDescription(int itemNumber) {
WebElement itemDesc = getItemNumber(itemNumber).findElement(By.className("inventory_item_desc"));
return itemDesc.getText();
}

public void addItemToCart() {
addToCart.click();
public String getItemPrice(int itemNumber) {
WebElement itemPrice = getItemNumber(itemNumber).findElement(By.className("inventory_item_price"));
return itemPrice.getText();
}

public void removeItemFromCart() {
removeFromCartButton.click();
public void addItemToCart(int itemNumber) {
WebElement addToCart = getItemNumber(itemNumber).findElement(By.className("btn_primary"));
addToCart.click();
}

public int getNumberOfItemsInCart() {
return Integer.valueOf(shoppingCartBadge.getText());
public boolean isOnPage() {
return inventoryHeader.isDisplayed();
}

public int getItemsInPage() {
return Integer.valueOf(inventoryContainer.getText());
public boolean itemAddedToCart(int itemNumber) {
return getItemNumber(itemNumber).findElement(By.className("btn_secondary")).isDisplayed();
}
}
@@ -1,13 +1,14 @@
package com.saucelabs.saucedemo.pages;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.PageFactory;

public class LoginPage {
private static String url = "https://www.saucedemo.com/";
private WebDriver driver;
private String url = "https://www.saucedemo.com/";

public String getUrl() {
return url;
}

@FindBy(id = "user-name")
private WebElement usernameInput;
Expand All @@ -21,14 +22,10 @@ public class LoginPage {
@FindBy(id = "login_credentials")
private WebElement credentialsInfo;

public LoginPage(WebDriver driver) {
this.driver = driver;
PageFactory.initElements(driver, this);
}
@FindBy(className = "svg-inline--fa")
private WebElement epicSadFace;

public void visitPage() {
driver.get(url);
}
public LoginPage() {}

public boolean isOnPage() {
return credentialsInfo.isDisplayed();
Expand All @@ -39,4 +36,8 @@ public void login(String username, String password) {
passwordInput.sendKeys(password);
submitButton.click();
}

public boolean epicSadFaceDisplayed() {
return epicSadFace.isDisplayed();
}
}
@@ -0,0 +1,24 @@
package com.saucelabs.saucedemo.pages;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.support.PageFactory;

public class SauceDemoNavigation {
private WebDriver driver;
public SauceDemoNavigation(WebDriver driver) {
this.driver = driver;
}

public LoginPage goToLoginPage() {
LoginPage loginPage = new LoginPage();
PageFactory.initElements(driver, loginPage);
driver.get(loginPage.getUrl());
return loginPage;
}

public InventoryPage getInventoryPage() {
InventoryPage inventoryPage = new InventoryPage();
PageFactory.initElements(driver, inventoryPage);
return inventoryPage;
}
}
Expand Up @@ -74,7 +74,7 @@ private void createLocalDriver(MutableCapabilities capabilities) {
* @param beforeMethod
* @return TestNG's preferred Object[][] structure, containing browser, version, and platform information
*/
@DataProvider(name = "sauceBrowsers", parallel = true)
@DataProvider(name = "sauceBrowsers", parallel = false)
public static Object[][] sauceBrowserDataProvider(Method beforeMethod) {
RunType runType = RunType.SAUCE;
return new Object[][]{
Expand All @@ -99,7 +99,7 @@ public static Object[][] sauceBrowserDataProvider(Method beforeMethod) {
};
}

@DataProvider(name = "localBrowsers", parallel = true)
@DataProvider(name = "localBrowsers")
public static Object[][] localBrowserDataProvider(Method beforeMethod) {
RunType runType = RunType.LOCAL;
return new Object[][]{
Expand Down
@@ -1,18 +1,50 @@
package com.saucelabs.saucedemo.tests;

import com.saucelabs.saucedemo.pages.SauceDemoNavigation;
import com.saucelabs.saucedemo.pages.InventoryPage;
import org.testng.Assert;
import org.testng.annotations.Test;

import java.util.stream.IntStream;

public class InventoryTest extends BaseWebDriverTest {
@Test
public void addOneItemToCart() {}

public void addItemsToCart(int items) {
IntStream.range(0, items).forEach(i -> {
InventoryPage page = new InventoryPage(getWebDriver());
page.addItemToCart();
});
@Test(dataProvider = "sauceBrowsers")
public void testItem3Label(String browser, String browserVersion, String platformName, RunType runType) {
this.createDriver(browser, browserVersion, platformName, "testItem3Label", runType);

SauceDemoNavigation navigation = new SauceDemoNavigation(getWebDriver());

navigation.goToLoginPage().login("standard_user", "secret_sauce");
InventoryPage inventoryPage = navigation.getInventoryPage();
Assert.assertEquals("Sauce Labs Bolt T-Shirt", inventoryPage.getItemName(3));
}

@Test(dataProvider = "sauceBrowsers")
public void testItem3Price(String browser, String browserVersion, String platformName, RunType runType) {
this.createDriver(browser, browserVersion, platformName, "testItem3Price", runType);

SauceDemoNavigation navigation = new SauceDemoNavigation(getWebDriver());
navigation.goToLoginPage().login("standard_user", "secret_sauce");
InventoryPage inventoryPage = navigation.getInventoryPage();
Assert.assertEquals("$15.99", inventoryPage.getItemPrice(3));
}

@Test(dataProvider = "sauceBrowsers")
public void testItem3Description(String browser, String browserVersion, String platformName, RunType runType) {
this.createDriver(browser, browserVersion, platformName, "testItem3Description", runType);

SauceDemoNavigation navigation = new SauceDemoNavigation(getWebDriver());
navigation.goToLoginPage().login("standard_user", "secret_sauce");
InventoryPage inventoryPage = navigation.getInventoryPage();
Assert.assertEquals("Get your testing superhero on with the Sauce Labs bolt T-shirt. From American Apparel, 100% ringspun combed cotton, heather gray with red bolt.", inventoryPage.getItemDescription(3));
}

@Test(dataProvider = "sauceBrowsers")
public void testAddOneItem(String browser, String browserVersion, String platformName, RunType runType) {
this.createDriver(browser, browserVersion, platformName, "testAddOneItem", runType);

SauceDemoNavigation navigation = new SauceDemoNavigation(getWebDriver());
navigation.goToLoginPage().login("standard_user", "secret_sauce");
InventoryPage inventoryPage = navigation.getInventoryPage();
inventoryPage.addItemToCart(3);
Assert.assertTrue(inventoryPage.itemAddedToCart(3));
}
}
@@ -1,5 +1,6 @@
package com.saucelabs.saucedemo.tests;

import com.saucelabs.saucedemo.pages.SauceDemoNavigation;
import com.saucelabs.saucedemo.pages.InventoryPage;
import com.saucelabs.saucedemo.pages.LoginPage;
import org.testng.Assert;
Expand All @@ -8,20 +9,64 @@
public class LoginTest extends BaseWebDriverTest {
@Test(dataProvider = "sauceBrowsers")
public void loginTestValid(String browser, String browserVersion, String platformName, RunType runType) {
this.createDriver(browser, browserVersion, platformName, "loginTest", runType);
LoginPage loginPage = new LoginPage(getWebDriver());
InventoryPage inventoryPage = new InventoryPage(getWebDriver());
loginPage.visitPage();
this.createDriver(browser, browserVersion, platformName, "loginTestValid", runType);

SauceDemoNavigation navigation = new SauceDemoNavigation(getWebDriver());
LoginPage loginPage = navigation.goToLoginPage();
loginPage.login("standard_user", "secret_sauce");
InventoryPage inventoryPage = navigation.getInventoryPage();
Assert.assertTrue(inventoryPage.isOnPage());
}

@Test(dataProvider = "sauceBrowsers")
public void loginTestValidPerfGlitch(String browser, String browserVersion, String platformName, RunType runType) {
this.createDriver(browser, browserVersion, platformName, "loginTestValidPerfGlitch", runType);

SauceDemoNavigation navigation = new SauceDemoNavigation(getWebDriver());
LoginPage loginPage = navigation.goToLoginPage();
loginPage.login("performance_glitch_user", "secret_sauce");
InventoryPage inventoryPage = navigation.getInventoryPage();
Assert.assertTrue(inventoryPage.isOnPage());
}

@Test(dataProvider = "sauceBrowsers")
public void loginTestInvalid(String browser, String browserVersion, String platformName, RunType runType) {
this.createDriver(browser, browserVersion, platformName, "loginTest", runType);
LoginPage loginPage = new LoginPage(getWebDriver());
loginPage.visitPage();
public void loginTestValidLockedOut(String browser, String browserVersion, String platformName, RunType runType) {
this.createDriver(browser, browserVersion, platformName, "loginTestValidLockedOut", runType);

SauceDemoNavigation navigation = new SauceDemoNavigation(getWebDriver());
LoginPage loginPage = navigation.goToLoginPage();
loginPage.login("locked_out_user", "secret_sauce");
Assert.assertTrue(loginPage.epicSadFaceDisplayed());
}

@Test(dataProvider = "sauceBrowsers")
public void loginTestValidProblem(String browser, String browserVersion, String platformName, RunType runType) {
this.createDriver(browser, browserVersion, platformName, "loginTestValidProblem", runType);

SauceDemoNavigation navigation = new SauceDemoNavigation(getWebDriver());
LoginPage loginPage = navigation.goToLoginPage();
loginPage.login("problem_user", "secret_sauce");
InventoryPage inventoryPage = navigation.getInventoryPage();
Assert.assertTrue(inventoryPage.isOnPage());
}

@Test(dataProvider = "sauceBrowsers")
public void loginTestInvalidUsername(String browser, String browserVersion, String platformName, RunType runType) {
this.createDriver(browser, browserVersion, platformName, "loginTestInvalidUsername", runType);

SauceDemoNavigation navigation = new SauceDemoNavigation(getWebDriver());
LoginPage loginPage = navigation.goToLoginPage();
loginPage.login("invalid_user", "secret_sauce");
Assert.assertTrue(loginPage.isOnPage());
}

@Test(dataProvider = "sauceBrowsers")
public void loginTestInvalidPassword(String browser, String browserVersion, String platformName, RunType runType) {
this.createDriver(browser, browserVersion, platformName, "loginTestInvalidPassword", runType);

SauceDemoNavigation navigation = new SauceDemoNavigation(getWebDriver());
LoginPage loginPage = navigation.goToLoginPage();
loginPage.login("standard_user", "invalid_password");
Assert.assertTrue(loginPage.isOnPage());
}
}

0 comments on commit e8b54de

Please sign in to comment.