Skip to content

Commit

Permalink
Amend the DesktopTests (#153)
Browse files Browse the repository at this point in the history
  • Loading branch information
eyaly authored Jul 10, 2023
1 parent ef57eec commit 440e11e
Show file tree
Hide file tree
Showing 5 changed files with 174 additions and 61 deletions.
17 changes: 17 additions & 0 deletions best-practice/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -11,13 +11,30 @@

<artifactId>best-practice</artifactId>

<properties>
<selenium.version>4.10.0</selenium.version>
</properties>

<dependencies>
<dependency>
<groupId>com.saucelabs</groupId>
<artifactId>saucebindings-junit4</artifactId>
<version>${sauce_junit4.version}</version>
<scope>test</scope>
</dependency>

<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-api</artifactId>
<version>${selenium.version}</version>
</dependency>

<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>${selenium.version}</version>
</dependency>

</dependencies>

<build>
Expand Down
13 changes: 13 additions & 0 deletions best-practice/src/test/java/com/saucedemo/Constants.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package com.saucedemo;

public class Constants {
public static final String region = System.getProperty("region", "eu");

public static final String SAUCE_EU_URL = "https://ondemand.eu-central-1.saucelabs.com:443/wd/hub";
public static final String SAUCE_US_URL = "https://ondemand.us-west-1.saucelabs.com:443/wd/hub";

public static final String SAUCE_USERNAME = System.getenv("SAUCE_USERNAME");
public static final String SAUCE_ACCESS_KEY = System.getenv("SAUCE_ACCESS_KEY");

}

142 changes: 142 additions & 0 deletions best-practice/src/test/java/com/saucedemo/tests/BaseTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,142 @@
package com.saucedemo.tests;

import org.junit.Before;
import org.junit.Rule;
import org.junit.rules.TestName;
import org.junit.rules.TestRule;
import org.junit.rules.TestWatcher;
import org.junit.runner.Description;
import org.junit.runners.Parameterized;
import org.openqa.selenium.MutableCapabilities;
import org.openqa.selenium.remote.RemoteWebDriver;

import java.net.MalformedURLException;
import java.net.URL;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Arrays;
import java.util.Collection;

import static com.saucedemo.Constants.*;

public class BaseTest {
protected RemoteWebDriver driver;

protected String WEB_URL = "https://www.saucedemo.com/";

@Parameterized.Parameter
public String platform;
@Parameterized.Parameter(1)
public String browserDeviceName;
@Parameterized.Parameter(2)
public String browserPlatformVersion;
@Parameterized.Parameter(3)
public String platformName;

@Parameterized.Parameters()
public static Collection<Object[]> crossPlatformData() {
return Arrays.asList(new Object[][] {
{ "desktop", "safari", "latest", "macOS 11.00" },
{ "desktop", "chrome", "latest-1", "macOS 13" },
{ "desktop", "firefox", "latest", "Windows 11" },
{ "desktop", "chrome", "latest", "Windows 10" }
});
}
@Rule
public TestName name = new TestName();

@Before
public void setup() throws MalformedURLException {

System.out.println("BeforeMethod hook");
URL url;

switch (region) {
case "us":
url = new URL(SAUCE_US_URL);
break;
case "eu":
default:
url = new URL(SAUCE_EU_URL);
break;
}

boolean isBuildCap = false;
MutableCapabilities caps = new MutableCapabilities();
MutableCapabilities sauceOptions = new MutableCapabilities();

switch (platform) {
case "desktop":
caps.setCapability("browserName", browserDeviceName);
caps.setCapability("browserVersion", browserPlatformVersion);
caps.setCapability("platformName", platformName);
break;
case "android":
caps.setCapability("platformName", "android");
caps.setCapability("appium:automationName", "UiAutomator2");
caps.setCapability("browserName", "chrome");
caps.setCapability("appium:deviceName", browserDeviceName);
caps.setCapability("appium:platformVersion", browserPlatformVersion);
break;
case "ios":
caps.setCapability("platformName", "iOS");
caps.setCapability("appium:automationName", "XCuiTest");
caps.setCapability("browserName", "safari");
caps.setCapability("appium:deviceName", browserDeviceName);
caps.setCapability("appium:platformVersion", browserPlatformVersion);
break;
default:
throw new IllegalStateException("Unexpected value: " + platform);
}

sauceOptions.setCapability("username", System.getenv("SAUCE_USERNAME"));
sauceOptions.setCapability("accessKey", System.getenv("SAUCE_ACCESS_KEY"));
sauceOptions.setCapability("name", name.getMethodName());

if (!isBuildCap) { //handle build cap
LocalDateTime dateTime = LocalDateTime.now();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd-MM-yyyy-HH");
String buildLocal = "sauceDemo-" +dateTime.format(formatter);
String buildVal = System.getenv("BUILD_TAG");
sauceOptions.setCapability("build", buildVal == null ? buildLocal : buildVal);
}

caps.setCapability("sauce:options", sauceOptions);

try {
driver = new RemoteWebDriver(url, caps);

} catch (Exception e) {
System.out.println("*** Problem to create the driver " + e.getMessage());
throw new RuntimeException(e);
}
}


@Rule
public TestRule watcher = new TestWatcher() {

@Override
protected void succeeded(Description description) {
if(driver != null)
{
System.out.println("Test Passed!");
driver.executeScript("sauce:job-result=passed");
driver.quit();
}
}

@Override
public void failed(Throwable e, Description description) {
if(driver != null)
{
System.out.println("Test Failed!");
driver.executeScript("sauce:job-result=failed");
driver.executeScript("sauce:context=" +e.getMessage());
driver.quit();
}
}

};

}
Original file line number Diff line number Diff line change
Expand Up @@ -2,76 +2,17 @@

import com.saucedemo.pages.LoginPage;
import com.saucedemo.pages.ProductsPage;
import com.saucelabs.saucebindings.Browser;
import com.saucelabs.saucebindings.SaucePlatform;
import com.saucelabs.saucebindings.junit4.SauceBaseTest;
import com.saucelabs.saucebindings.options.SauceOptions;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.openqa.selenium.TimeoutException;

import java.util.Arrays;
import java.util.Collection;

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

/** Desktop Tests. */
@RunWith(Parameterized.class)
public class DesktopTests extends SauceBaseTest {
/*
* Configure our data driven parameters
* */
@Parameterized.Parameter
public Browser browserName;
@Parameterized.Parameter(1)
public String browserVersion;
@Parameterized.Parameter(2)
public SaucePlatform platform;

@Parameterized.Parameters()
public static Collection<Object[]> crossBrowserData() {
return Arrays.asList(new Object[][] {
{ Browser.CHROME, "latest", SaucePlatform.WINDOWS_10 },
{ Browser.CHROME, "latest-1", SaucePlatform.WINDOWS_10 },
{ Browser.SAFARI, "latest", SaucePlatform.MAC_MOJAVE },
{ Browser.CHROME, "latest", SaucePlatform.MAC_MOJAVE }
/*
// Duplication below for demo purposes of massive parallelization
{Browser.CHROME, "latest", SaucePlatform.WINDOWS_10},
{Browser.CHROME, "latest-1", SaucePlatform.WINDOWS_10},
{Browser.SAFARI, "latest", SaucePlatform.MAC_MOJAVE},
{Browser.CHROME, "latest", SaucePlatform.MAC_MOJAVE},
{Browser.CHROME, "latest", SaucePlatform.WINDOWS_10},
{Browser.CHROME, "latest-1", SaucePlatform.WINDOWS_10},
{Browser.SAFARI, "latest", SaucePlatform.MAC_MOJAVE},
{Browser.CHROME, "latest", SaucePlatform.MAC_MOJAVE},
{Browser.CHROME, "latest", SaucePlatform.WINDOWS_10},
{Browser.CHROME, "latest-1", SaucePlatform.WINDOWS_10},
{Browser.SAFARI, "latest", SaucePlatform.MAC_MOJAVE},
{Browser.CHROME, "latest", SaucePlatform.MAC_MOJAVE},
{Browser.CHROME, "latest", SaucePlatform.WINDOWS_10},
{Browser.CHROME, "latest-1", SaucePlatform.WINDOWS_10},
{Browser.SAFARI, "latest", SaucePlatform.MAC_MOJAVE},
{Browser.CHROME, "latest", SaucePlatform.MAC_MOJAVE},
{Browser.CHROME, "latest", SaucePlatform.WINDOWS_10},
{Browser.CHROME, "latest-1", SaucePlatform.WINDOWS_10},
{Browser.SAFARI, "latest", SaucePlatform.MAC_MOJAVE},
{Browser.CHROME, "latest", SaucePlatform.MAC_MOJAVE},
*/
});
}

@Override
public SauceOptions createSauceOptions() {
SauceOptions sauceOptions = new SauceOptions();
sauceOptions.setBrowserName(browserName);
sauceOptions.setBrowserVersion(browserVersion);
sauceOptions.setPlatformName(platform);

return sauceOptions;
}
public class DesktopTests extends BaseTest {

@Test()
public void loginWorks() {
Expand Down
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
<version>1.0-SNAPSHOT</version>

<properties>
<selenium.version>4.7.0</selenium.version>
<selenium.version>4.10.0</selenium.version>
<appium.version>8.3.0</appium.version>
<sauce.version>1.2.0</sauce.version>
<sauce_junit5.version>1.0.0</sauce_junit5.version>
Expand Down

0 comments on commit 440e11e

Please sign in to comment.