Skip to content

Commit 9ab8ae6

Browse files
committed
- updated gradle profiles
- added waitforJSMethod
1 parent ad5b6f0 commit 9ab8ae6

6 files changed

Lines changed: 79 additions & 106 deletions

File tree

build.gradle

Lines changed: 2 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -37,22 +37,14 @@ tasks.register('on-prem', Test) {
3737
} else {
3838
systemProperty("cucumber.filter.name", "End to End Scenario")
3939
}
40-
scanForTestClasses = false
41-
testLogging.showStandardStreams(true)
42-
ignoreFailures = false
43-
failFast = true
4440
systemProperty "environment", "local"
4541
systemProperty "application_endpoint", "$APPLICATION_URL"
4642
}
4743
tasks.register('on-prem-suite', Test) {
4844
useTestNG() {
4945
suites 'src/test/resources/conf/TestNG_Single.xml'
5046
}
51-
52-
scanForTestClasses = false
53-
testLogging.showStandardStreams(true)
54-
ignoreFailures = false
55-
failFast = true
47+
5648
systemProperty "environment", "local"
5749
systemProperty "application_endpoint", "$APPLICATION_URL"
5850

@@ -66,10 +58,6 @@ tasks.register('docker', Test) {
6658
} else {
6759
systemProperty("cucumber.filter.name", "End to End Scenario")
6860
}
69-
scanForTestClasses = false
70-
testLogging.showStandardStreams(true)
71-
ignoreFailures = false
72-
failFast = true
7361
systemProperty "environment", "docker"
7462
systemProperty "application_endpoint", "$APPLICATION_URL"
7563

@@ -79,10 +67,6 @@ tasks.register('docker-parallel', Test) {
7967
suites 'src/test/resources/conf/TestNG_Parallel.xml'
8068
}
8169

82-
scanForTestClasses = false
83-
testLogging.showStandardStreams(true)
84-
ignoreFailures = false
85-
failFast = true
8670
systemProperty "environment", "docker"
8771
systemProperty "application_endpoint", "$APPLICATION_URL"
8872

@@ -96,10 +80,6 @@ tasks.register('bstack-single', Test) {
9680
} else {
9781
systemProperty("cucumber.filter.name", "End to End Scenario")
9882
}
99-
scanForTestClasses = false
100-
testLogging.showStandardStreams(true)
101-
ignoreFailures = false
102-
failFast = true
10383
systemProperty "environment", "remote"
10484
systemProperty "application_endpoint", "$APPLICATION_URL"
10585

@@ -113,10 +93,6 @@ tasks.register('bstack-local', Test) {
11393
} else {
11494
systemProperty("cucumber.filter.name", "End to End Scenario")
11595
}
116-
scanForTestClasses = false
117-
testLogging.showStandardStreams(true)
118-
ignoreFailures = false
119-
failFast = true
12096
systemProperty "environment", "remote"
12197
systemProperty "application_endpoint", "$APPLICATION_LOCAL_URL"
12298
systemProperty "caps_type", "local"
@@ -127,10 +103,6 @@ tasks.register('bstack-local-parallel', Test) {
127103
useTestNG() {
128104
suites 'src/test/resources/conf/TestNG_Parallel.xml'
129105
}
130-
scanForTestClasses = false
131-
testLogging.showStandardStreams(true)
132-
ignoreFailures = false
133-
failFast = true
134106
systemProperty "environment", "remote"
135107
systemProperty "application_endpoint", "$APPLICATION_LOCAL_URL"
136108
systemProperty "caps_type", "local"
@@ -140,13 +112,8 @@ tasks.register('bstack-local-parallel', Test) {
140112
tasks.register('bstack-parallel', Test) {
141113
useTestNG() {
142114
suites 'src/test/resources/conf/TestNG_Parallel.xml'
143-
144-
115+
145116
}
146-
scanForTestClasses = false
147-
testLogging.showStandardStreams(true)
148-
ignoreFailures = false
149-
failFast = true
150117
systemProperty "environment", "remote"
151118
systemProperty "application_endpoint", "$APPLICATION_URL"
152119

@@ -156,10 +123,6 @@ tasks.register('bstack-local-parallel-browsers', Test) {
156123
useTestNG() {
157124
suites 'src/test/resources/conf/TestNG_MultipleParallel.xml'
158125
}
159-
scanForTestClasses = false
160-
testLogging.showStandardStreams(true)
161-
ignoreFailures = false
162-
failFast = true
163126
systemProperty "environment", "remote"
164127
systemProperty "application_endpoint", "$APPLICATION_LOCAL_URL"
165128

@@ -168,10 +131,6 @@ tasks.register('bstack-parallel-browsers', Test) {
168131
useTestNG() {
169132
suites 'src/test/resources/conf/TestNG_MultipleParallel.xml'
170133
}
171-
scanForTestClasses = false
172-
testLogging.showStandardStreams(true)
173-
ignoreFailures= false
174-
failFast = true
175134
systemProperty "environment", "remote"
176135
systemProperty "application_endpoint", "$APPLICATION_URL"
177136

@@ -180,10 +139,6 @@ tasks.register('bstack-parallel-mobile', Test) {
180139
useTestNG() {
181140
suites 'src/test/resources/conf/TestNG_Parallel.xml'
182141
}
183-
scanForTestClasses = false
184-
testLogging.showStandardStreams(true)
185-
ignoreFailures = false
186-
failFast = true
187142
systemProperty "environment", "remote"
188143
systemProperty "application_endpoint", "$APPLICATION_URL"
189144
systemProperty "caps_type", "mobile"

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -361,7 +361,7 @@
361361
<groupId>org.apache.maven.plugins</groupId>
362362
<artifactId>maven-surefire-plugin</artifactId>
363363
<configuration>
364-
<systemPropertyVariables>
364+
<systemPropertyVariables>
365365
<environment>remote</environment>
366366
<application_endpoint>${application-url}</application_endpoint>
367367
<caps_type>mobile</caps_type>

src/test/java/browserstack/stepdefs/BaseTest.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ public class BaseTest {
3939
private static String accessKey;
4040
private static final String PASSED = "passed";
4141
private static final String FAILED = "failed";
42-
private static final String REPO_NAME = "browserstack-examples-cucumber-testng - ";
42+
private static final String REPO_NAME = "browserstack_examples_cucumber_testng_";
4343
private static final String WEBDRIVER_CHROME_DRIVER = "webdriver.chrome.driver";
4444
public static String env = "";
4545
public static JSONObject config;
@@ -104,6 +104,7 @@ else if (environment.equalsIgnoreCase("docker")) {
104104
Map<String, String> localCapabilities = (Map<String, String>) envs.get("local_binding_caps");
105105

106106
caps.merge(new DesiredCapabilities(commonCapabilities));
107+
107108
if (caps_type.equals("local")) {
108109
URL = (String) envs.get("application_endpoint");
109110
caps.merge(new DesiredCapabilities(localCapabilities));
@@ -129,9 +130,9 @@ public void startup(Scenario scenario) throws Exception {
129130
derivedCaps.merge(new DesiredCapabilities()).setCapability("name", scenario.getName());
130131
String buildName = System.getenv("BROWSERSTACK_BUILD_NAME");
131132
if (buildName == null) {
132-
buildName = Utility.getEpochTime();
133+
buildName =REPO_NAME + Utility.getEpochTime();
133134
}
134-
derivedCaps.setCapability("build", REPO_NAME + buildName);
135+
derivedCaps.setCapability("build", buildName);
135136
try {
136137
ThreadLocal<DesiredCapabilities> dc = new ThreadLocal<DesiredCapabilities>();
137138
dc.set(derivedCaps);

src/test/java/browserstack/stepdefs/HomePageSteps.java

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,11 @@ public class HomePageSteps {
2121
@And("I add two products to cart")
2222
public void iAddProductsToCart() {
2323
WebDriverWait wait = new WebDriverWait(ThreadLocalDriver.getWebDriver(), 10);
24+
Utility.waitForJSLoad(ThreadLocalDriver.getWebDriver());
2425
wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("#\\31 > .shelf-item__buy-btn"))).click();
2526
wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("div.float-cart__close-btn"))).click();
2627
ThreadLocalDriver.getWebDriver().findElement(By.cssSelector("#\\32 > .shelf-item__buy-btn")).click();
28+
Utility.waitForJSLoad(ThreadLocalDriver.getWebDriver());
2729
}
2830

2931
@And("I click on Buy Button")
@@ -33,8 +35,14 @@ public void iClickOnBuyButton() {
3335

3436
@And("I press the Apple Vendor Filter")
3537
public void iPressTheAppleVendorFilter() {
38+
try {
3639
ThreadLocalDriver.getWebDriver().findElement(By.cssSelector(".filters-available-size:nth-child(2) .checkmark")).click();
37-
}
40+
Utility.waitForJSLoad(ThreadLocalDriver.getWebDriver());
41+
}
42+
catch (NoSuchElementException e) {
43+
throw new AssertionError();
44+
}
45+
}
3846

3947
@And("I order by lowest to highest")
4048
public void iOrderByLowestToHighest() {
@@ -44,7 +52,8 @@ public void iOrderByLowestToHighest() {
4452

4553
@Then("I should see user {string} logged in")
4654
public void iShouldUserLoggedIn(String user) {
47-
WebDriverWait wait = new WebDriverWait(ThreadLocalDriver.getWebDriver(), 5);
55+
WebDriverWait wait = new WebDriverWait(ThreadLocalDriver.getWebDriver(), 10);
56+
Utility.waitForJSLoad(ThreadLocalDriver.getWebDriver());
4857
try {
4958
String loggedInUser = wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector(".username"))).getText();
5059
Assert.assertEquals(user, loggedInUser);
@@ -69,9 +78,9 @@ public void iShouldSeeNoImageLoaded() {
6978
@Then("I should see {int} items in the list")
7079
public void iShouldSeeItemsInTheList(int productCount) {
7180
try {
72-
WebDriverWait webDriverWait = new WebDriverWait(ThreadLocalDriver.getWebDriver(), 5);
73-
// webDriverWait.until(waitWebDriver -> waitWebDriver.findElements(By.cssSelector(".spinner")).isEmpty());
74-
webDriverWait.until(ExpectedConditions.invisibilityOf(ThreadLocalDriver.getWebDriver().findElement(By.cssSelector(".spinner"))));
81+
WebDriverWait webDriverWait = new WebDriverWait(ThreadLocalDriver.getWebDriver(), 10);
82+
Utility.waitForJSLoad(ThreadLocalDriver.getWebDriver());
83+
webDriverWait.until(ExpectedConditions.visibilityOf(ThreadLocalDriver.getWebDriver().findElement(By.cssSelector(".shelf-item__title"))));
7584
List<String> values = ThreadLocalDriver.getWebDriver().findElements(By.cssSelector(".shelf-item__title")).stream().map(WebElement::getText).collect(Collectors.toList());
7685
Assert.assertEquals(productCount, values.size());
7786
} catch (NoSuchElementException e) {
@@ -81,11 +90,11 @@ public void iShouldSeeItemsInTheList(int productCount) {
8190

8291
@Then("I should see prices in ascending order")
8392
public void iShouldSeePricesInAscendingOrder() {
84-
WebDriverWait wait = new WebDriverWait(ThreadLocalDriver.getWebDriver(), 5);
93+
WebDriverWait wait = new WebDriverWait(ThreadLocalDriver.getWebDriver(), 10);
8594
try {
86-
WebDriverWait webDriverWait = new WebDriverWait(ThreadLocalDriver.getWebDriver(), 5);
87-
//webDriverWait.until(waitWebDriver -> waitWebDriver.findElements(By.cssSelector(".spinner")).isEmpty());
88-
webDriverWait.until(ExpectedConditions.invisibilityOf(ThreadLocalDriver.getWebDriver().findElement(By.cssSelector(".spinner"))));
95+
WebDriverWait webDriverWait = new WebDriverWait(ThreadLocalDriver.getWebDriver(), 10);
96+
Utility.waitForJSLoad(ThreadLocalDriver.getWebDriver());
97+
webDriverWait.until(ExpectedConditions.visibilityOf(ThreadLocalDriver.getWebDriver().findElement(By.cssSelector(".shelf-item__price > div.val > b"))));
8998
List<WebElement> priceWebElement = ThreadLocalDriver.getWebDriver().findElements(By.cssSelector(".shelf-item__price > div.val > b"));
9099
Assert.assertTrue(Utility.isAscendingOrder(priceWebElement, priceWebElement.size()));
91100
} catch (NoSuchElementException e) {

src/test/java/browserstack/utils/Utility.java

Lines changed: 51 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -24,54 +24,62 @@
2424

2525
public class Utility {
2626

27-
private Utility(){}
28-
29-
private static final String LOCATION_SCRIPT_FORMAT = "navigator.geolocation.getCurrentPosition = function(success){\n" +
30-
" var position = { \"coords\":{\"latitude\":\"%s\",\"longitude\":\"%s\"}};\n" +
31-
" success(position);\n" +
32-
"}";
33-
private static final String OFFER_LATITUDE = "19";
34-
private static final String OFFER_LONGITUDE = "75";
35-
36-
private static Object SYNCHRONIZER = new Object();
37-
private static String epochTime = null;
27+
private Utility() {
28+
}
3829

39-
public static String getEpochTime() {
40-
if (epochTime == null) {
41-
synchronized (SYNCHRONIZER) {
42-
if (epochTime == null) {
43-
epochTime = String.valueOf(Instant.now().toEpochMilli());
44-
}
45-
}
46-
}
47-
return epochTime;
48-
}
30+
private static final String LOCATION_SCRIPT_FORMAT = "navigator.geolocation.getCurrentPosition = function(success){\n"
31+
+ " var position = { \"coords\":{\"latitude\":\"%s\",\"longitude\":\"%s\"}};\n"
32+
+ " success(position);\n" + "}";
33+
private static final String OFFER_LATITUDE = "19";
34+
private static final String OFFER_LONGITUDE = "75";
4935

50-
51-
public static void setSessionStatus(WebDriver webDriver, String status, String reason) {
52-
JavascriptExecutor jse = (JavascriptExecutor) webDriver;
53-
jse.executeScript(String.format("browserstack_executor: {\"action\": \"setSessionStatus\", \"arguments\": {\"status\": \"%s\", \"reason\": \"%s\"}}", status, reason));
54-
}
36+
private static Object SYNCHRONIZER = new Object();
37+
private static String epochTime = null;
5538

39+
public static String getEpochTime() {
40+
if (epochTime == null) {
41+
synchronized (SYNCHRONIZER) {
42+
if (epochTime == null) {
43+
epochTime = String.valueOf(Instant.now().toEpochMilli());
44+
}
45+
}
46+
}
47+
return epochTime;
48+
}
5649

57-
58-
public static void mockGPS(WebDriver webDriver) {
59-
String locationScript = String.format(LOCATION_SCRIPT_FORMAT, OFFER_LATITUDE, OFFER_LONGITUDE);
60-
((JavascriptExecutor) webDriver).executeScript(locationScript);
61-
}
50+
public static void setSessionStatus(WebDriver webDriver, String status, String reason) {
51+
JavascriptExecutor jse = (JavascriptExecutor) webDriver;
52+
jse.executeScript(String.format(
53+
"browserstack_executor: {\"action\": \"setSessionStatus\", \"arguments\": {\"status\": \"%s\", \"reason\": \"%s\"}}",
54+
status, reason));
55+
}
6256

63-
64-
65-
66-
public static boolean isAscendingOrder(List<WebElement> priceWebElement, int length) {
67-
if (priceWebElement == null || length < 2)
68-
return true;
69-
if (Integer.parseInt(priceWebElement.get(length - 2).getText()) > Integer.parseInt(priceWebElement.get(length - 1).getText()))
70-
return false;
71-
return isAscendingOrder(priceWebElement, length - 1);
72-
}
57+
public static void mockGPS(WebDriver webDriver) {
58+
String locationScript = String.format(LOCATION_SCRIPT_FORMAT, OFFER_LATITUDE, OFFER_LONGITUDE);
59+
((JavascriptExecutor) webDriver).executeScript(locationScript);
60+
}
7361

74-
75-
62+
public static boolean isAscendingOrder(List<WebElement> priceWebElement, int length) {
63+
if (priceWebElement == null || length < 2)
64+
return true;
65+
if (Integer.parseInt(priceWebElement.get(length - 2).getText()) > Integer
66+
.parseInt(priceWebElement.get(length - 1).getText()))
67+
return false;
68+
return isAscendingOrder(priceWebElement, length - 1);
69+
}
7670

71+
public static boolean waitForJSLoad(WebDriver driver) {
72+
WebDriverWait wait = new WebDriverWait(driver, 30);
73+
74+
75+
// wait for Javascript to load
76+
ExpectedCondition<Boolean> jsLoad = new ExpectedCondition<Boolean>() {
77+
@Override
78+
public Boolean apply(WebDriver driver) {
79+
return ((JavascriptExecutor) driver).executeScript("return document.readyState")
80+
.toString().equals("complete");
81+
}
82+
};
83+
return wait.until(jsLoad);
84+
}
7785
}

src/test/resources/config/bs.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -65,11 +65,11 @@
6565
"os_version":"10",
6666
"browser":"Chrome"
6767
},
68-
{
68+
{
6969
"os":"Windows",
7070
"os_version":"10",
71-
"browser":"Internet Explorer",
72-
"browser_version":"11.0"
71+
"browser":"Firefox",
72+
"browser_version":"latest-1"
7373
},
7474
{
7575
"os":"Windows",

0 commit comments

Comments
 (0)