From b58ccdc30e6478d65cd6395c0c9fa3771111b9e9 Mon Sep 17 00:00:00 2001 From: Varun Garg Date: Mon, 4 Mar 2019 16:51:36 +0530 Subject: [PATCH 01/17] Selenium 4 changes (#14) * java 10 and selenium 3 Signed-off-by: Varun Garg * selenium 4 changes Signed-off-by: Varun Garg * code review changes Signed-off-by: Varun Garg * fix local Signed-off-by: Varun Garg * Apply suggestions from code review Co-Authored-By: Varun-garg * bump local version * throw exception in case of exception Signed-off-by: Varun Garg * Apply suggestions from code review Co-Authored-By: Varun-garg * Update src/test/resources/conf/local.conf.json Co-Authored-By: Varun-garg * Update src/test/resources/conf/single.conf.json Co-Authored-By: Varun-garg --- pom.xml | 61 +++++++-------- .../browserstack/BrowserStackTestNGTest.java | 76 +++++++++++-------- src/test/resources/conf/local.conf.json | 16 ++-- src/test/resources/conf/parallel.conf.json | 23 ++++-- src/test/resources/conf/single.conf.json | 14 ++-- src/test/resources/conf/suite.conf.json | 23 ++++-- 6 files changed, 123 insertions(+), 90 deletions(-) diff --git a/pom.xml b/pom.xml index 3abfbb2b..96dc165d 100644 --- a/pom.xml +++ b/pom.xml @@ -1,5 +1,5 @@ - + 4.0.0 com.browserstack @@ -12,6 +12,8 @@ UTF-8 + 1.6 + 1.6 2.19.1 @@ -19,40 +21,35 @@ - - org.testng - testng - 6.9.10 - - - commons-io - commons-io - 1.3.2 - - - org.seleniumhq.selenium - selenium-java - 2.52.0 - - - com.browserstack - browserstack-local-java - 0.1.0 - - - com.googlecode.json-simple - json-simple - 1.1.1 - + + org.testng + testng + 6.9.10 + + + commons-io + commons-io + 1.3.2 + + + org.seleniumhq.selenium + selenium-java + 3.12.0 + + + com.browserstack + browserstack-local-java + 1.0.3 + + + com.googlecode.json-simple + json-simple + 1.1.1 + - - org.apache.maven.plugins - maven-surefire-plugin - 2.12.4 - org.apache.maven.plugins maven-surefire-plugin diff --git a/src/test/java/com/browserstack/BrowserStackTestNGTest.java b/src/test/java/com/browserstack/BrowserStackTestNGTest.java index 78c18f92..e3a0dc99 100644 --- a/src/test/java/com/browserstack/BrowserStackTestNGTest.java +++ b/src/test/java/com/browserstack/BrowserStackTestNGTest.java @@ -1,39 +1,29 @@ package com.browserstack; -import com.browserstack.local.Local; -import java.io.File; import java.io.FileReader; -import java.io.IOException; -import java.io.InputStream; import java.net.URL; import java.util.HashMap; -import java.util.Map; -import java.util.ArrayList; -import java.util.List; import java.util.Iterator; +import java.util.Map; + +import com.browserstack.local.Local; + import org.json.simple.JSONObject; -import org.json.simple.JSONArray; import org.json.simple.parser.JSONParser; - import org.openqa.selenium.WebDriver; -import org.openqa.selenium.remote.RemoteWebDriver; import org.openqa.selenium.remote.DesiredCapabilities; - -import org.testng.annotations.BeforeMethod; +import org.openqa.selenium.remote.RemoteWebDriver; import org.testng.annotations.AfterMethod; -import org.testng.annotations.Test; -import org.testng.annotations.Parameters; -import org.testng.annotations.DataProvider; -import org.testng.annotations.Factory; -import org.testng.Assert; +import org.testng.annotations.BeforeMethod; public class BrowserStackTestNGTest { public WebDriver driver; - private Local l; + private Local bsLocal; @BeforeMethod(alwaysRun=true) @org.testng.annotations.Parameters(value={"config", "environment"}) + @SuppressWarnings("unchecked") public void setUp(String config_file, String environment) throws Exception { JSONParser parser = new JSONParser(); JSONObject config = (JSONObject) parser.parse(new FileReader("src/test/resources/conf/" + config_file)); @@ -41,20 +31,23 @@ public void setUp(String config_file, String environment) throws Exception { DesiredCapabilities capabilities = new DesiredCapabilities(); - Map envCapabilities = (Map) envs.get(environment); - Iterator it = envCapabilities.entrySet().iterator(); + Map envCapabilities = (Map) envs.get(environment); + Iterator> it = envCapabilities.entrySet().iterator(); while (it.hasNext()) { - Map.Entry pair = (Map.Entry)it.next(); - capabilities.setCapability(pair.getKey().toString(), pair.getValue().toString()); + Map.Entry pair = (Map.Entry) it.next(); + capabilities.setCapability(pair.getKey().toString(), pair.getValue()); } - - Map commonCapabilities = (Map) config.get("capabilities"); + + Map commonCapabilities = (Map) config.get("capabilities"); it = commonCapabilities.entrySet().iterator(); while (it.hasNext()) { - Map.Entry pair = (Map.Entry)it.next(); - if(capabilities.getCapability(pair.getKey().toString()) == null){ - capabilities.setCapability(pair.getKey().toString(), pair.getValue().toString()); + Map.Entry pair = (Map.Entry) it.next(); + Object envData = capabilities.getCapability(pair.getKey().toString()); + Object resultData = pair.getValue(); + if (envData != null && envData.getClass() == JSONObject.class) { + ((JSONObject) resultData).putAll((JSONObject) envData); } + capabilities.setCapability(pair.getKey().toString(), resultData); } String username = System.getenv("BROWSERSTACK_USERNAME"); @@ -67,19 +60,36 @@ public void setUp(String config_file, String environment) throws Exception { accessKey = (String) config.get("key"); } - if(capabilities.getCapability("browserstack.local") != null && capabilities.getCapability("browserstack.local") == "true"){ - l = new Local(); + this.checkAndStartBrowserStackLocal(capabilities, accessKey); + + driver = new RemoteWebDriver(new URL("https://"+username+":"+accessKey+"@"+config.get("server")+"/wd/hub"), capabilities); + } + + public void checkAndStartBrowserStackLocal(DesiredCapabilities capabilities, String accessKey) throws Exception { + if (bsLocal != null) { + return; + } + if (capabilities.getCapability("bstack:options") != null + && ((JSONObject) capabilities.getCapability("bstack:options")).get("local") != null + && ((Boolean) ((JSONObject) capabilities.getCapability("bstack:options")).get("local")) == true) { + bsLocal = new Local(); Map options = new HashMap(); options.put("key", accessKey); - l.start(options); + try { + bsLocal.start(options); + } catch (Exception e) { + System.out.println("Error: could not start browserstack local"); + e.printStackTrace(); + throw e; + } } - - driver = new RemoteWebDriver(new URL("http://"+username+":"+accessKey+"@"+config.get("server")+"/wd/hub"), capabilities); } @AfterMethod(alwaysRun=true) public void tearDown() throws Exception { driver.quit(); - if(l != null) l.stop(); + if (bsLocal != null) { + bsLocal.stop(); + } } } diff --git a/src/test/resources/conf/local.conf.json b/src/test/resources/conf/local.conf.json index 88ec6f1b..fb5e554d 100644 --- a/src/test/resources/conf/local.conf.json +++ b/src/test/resources/conf/local.conf.json @@ -2,14 +2,18 @@ "server": "hub-cloud.browserstack.com", "user": "BROWSERSTACK_USERNAME", "key": "BROWSERSTACK_ACCESS_KEY", - "capabilities": { - "build": "testng-browserstack", - "name": "local_test", - "browserstack.debug": true, - "browserstack.local": true + "browserstack.use_w3c": true, + "bstack:options": { + "os": "Windows", + "osVersion": "7", + "sessionName": "local_test", + "buildName": "testng-browserstack", + "projectName": "My Awesome App", + "debug": true, + "local": true + } }, - "environments": { "chrome": { "browser": "chrome" diff --git a/src/test/resources/conf/parallel.conf.json b/src/test/resources/conf/parallel.conf.json index 05478baf..fc9e1003 100644 --- a/src/test/resources/conf/parallel.conf.json +++ b/src/test/resources/conf/parallel.conf.json @@ -2,13 +2,15 @@ "server": "hub-cloud.browserstack.com", "user": "BROWSERSTACK_USERNAME", "key": "BROWSERSTACK_ACCESS_KEY", - "capabilities": { - "build": "testng-browserstack", - "name": "parallel_test", - "browserstack.debug": true + "browserstack.use_w3c": true, + "bstack:options": { + "sessionName": "parallel_test", + "buildName": "testng-browserstack", + "projectName": "My Awesome App", + "debug": true + } }, - "environments": { "chrome": { "browser": "chrome" @@ -17,10 +19,17 @@ "browser": "firefox" }, "safari": { - "browser": "safari" + "browser": "safari", + "bstack:options": { + "os": "OS X", + "osVersion": "High Sierra" + } }, "ie": { - "browser": "internet explorer" + "browser": "Internet Explorer", + "bstack:options": { + "os": "Windows", + } } } } diff --git a/src/test/resources/conf/single.conf.json b/src/test/resources/conf/single.conf.json index 7b5e35ce..4360af6e 100644 --- a/src/test/resources/conf/single.conf.json +++ b/src/test/resources/conf/single.conf.json @@ -2,13 +2,17 @@ "server": "hub-cloud.browserstack.com", "user": "BROWSERSTACK_USERNAME", "key": "BROWSERSTACK_ACCESS_KEY", - "capabilities": { - "build": "testng-browserstack", - "name": "single_test", - "browserstack.debug": true + "browserstack.use_w3c": true, + "bstack:options": { + "os": "Windows", + "osVersion": "7", + "sessionName": "single_test", + "buildName": "testng-browserstack", + "projectName": "My Awesome App", + "debug": true + } }, - "environments": { "chrome": { "browser": "chrome" diff --git a/src/test/resources/conf/suite.conf.json b/src/test/resources/conf/suite.conf.json index 4f77840f..b685335c 100644 --- a/src/test/resources/conf/suite.conf.json +++ b/src/test/resources/conf/suite.conf.json @@ -2,13 +2,15 @@ "server": "hub-cloud.browserstack.com", "user": "BROWSERSTACK_USERNAME", "key": "BROWSERSTACK_ACCESS_KEY", - "capabilities": { - "build": "testng-browserstack", - "name": "suite_test", - "browserstack.debug": true + "browserstack.use_w3c": true, + "bstack:options": { + "sessionName": "suite_test", + "buildName": "testng-browserstack", + "projectName": "My Awesome App", + "debug": true + } }, - "environments": { "chrome": { "browser": "chrome" @@ -17,10 +19,17 @@ "browser": "firefox" }, "safari": { - "browser": "safari" + "browser": "safari", + "bstack:options": { + "os": "OS X", + "osVersion": "High Sierra" + } }, "ie": { - "browser": "internet explorer" + "browser": "Internet Explorer", + "bstack:options": { + "os": "Windows", + } } } } From 10b2aa23699c34c182d132e39b6feed9740ae5bf Mon Sep 17 00:00:00 2001 From: RutvikChandla Date: Fri, 1 Apr 2022 13:09:58 +0530 Subject: [PATCH 02/17] bstack demo snippet --- .../java/com/browserstack/SingleTest.java | 30 +++++++++++-------- 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/src/test/java/com/browserstack/SingleTest.java b/src/test/java/com/browserstack/SingleTest.java index f3d63736..b4cbbd7b 100644 --- a/src/test/java/com/browserstack/SingleTest.java +++ b/src/test/java/com/browserstack/SingleTest.java @@ -1,21 +1,27 @@ package com.browserstack; - import org.openqa.selenium.By; import org.openqa.selenium.WebElement; - import org.testng.Assert; import org.testng.annotations.Test; - public class SingleTest extends BrowserStackTestNGTest { - @Test public void test() throws Exception { - driver.get("https://www.google.com/ncr"); - WebElement element = driver.findElement(By.name("q")); - element.sendKeys("BrowserStack"); - element.submit(); - Thread.sleep(5000); - - Assert.assertEquals("BrowserStack - Google Search", driver.getTitle()); + // navigate to bstackdemo + driver.get("https://www.bstackdemo.com"); + + // Check the title + Assert.assertTrue(driver.getTitle().matches("StackDemo")); + + // Save the text of the product for later verify + String productOnScreenText = driver.findElement(By.xpath("//*[@id=\"1\"]/p")).getText(); + // Click on add to cart button + driver.findElement(By.xpath("//*[@id=\"1\"]/div[4]")).click(); + + // See if the cart is opened or not + Assert.assertTrue(driver.findElement(By.cssSelector(".float\\-cart__content")).isDisplayed()); + + // Check the product inside the cart is same as of the main page + String productOnCartText = driver.findElement(By.xpath("//*[@id=\"__next\"]/div/div/div[2]/div[2]/div[2]/div/div[3]/p[1]")).getText(); + Assert.assertEquals(productOnScreenText, productOnCartText); } -} +} \ No newline at end of file From 6f86a294a2d932d278f782886247e07b2102536f Mon Sep 17 00:00:00 2001 From: RutvikChandla Date: Sun, 24 Apr 2022 19:53:51 +0530 Subject: [PATCH 03/17] suite code --- .../com/browserstack/suite/SuiteTest01.java | 26 +++++++++++------ .../com/browserstack/suite/SuiteTest02.java | 27 ++++++++++++------ .../com/browserstack/suite/SuiteTest03.java | 28 ++++++++++++------- .../com/browserstack/suite/SuiteTest04.java | 26 +++++++++++------ .../com/browserstack/suite/SuiteTest05.java | 27 ++++++++++++------ .../com/browserstack/suite/SuiteTest06.java | 28 ++++++++++++------- .../com/browserstack/suite/SuiteTest07.java | 26 +++++++++++------ .../com/browserstack/suite/SuiteTest08.java | 27 ++++++++++++------ .../com/browserstack/suite/SuiteTest09.java | 28 ++++++++++++------- .../com/browserstack/suite/SuiteTest10.java | 26 +++++++++++------ 10 files changed, 180 insertions(+), 89 deletions(-) diff --git a/src/test/java/com/browserstack/suite/SuiteTest01.java b/src/test/java/com/browserstack/suite/SuiteTest01.java index 3169fe8f..016852c4 100644 --- a/src/test/java/com/browserstack/suite/SuiteTest01.java +++ b/src/test/java/com/browserstack/suite/SuiteTest01.java @@ -12,12 +12,22 @@ public class SuiteTest01 extends BrowserStackTestNGTest { @Test public void test_01() throws Exception { - driver.get("https://www.google.com/ncr"); - WebElement element = driver.findElement(By.name("q")); - element.sendKeys("BrowserStack Test 01"); - element.submit(); - Thread.sleep(5000); - - Assert.assertEquals("BrowserStack Test 01 - Google Search", driver.getTitle()); + // navigate to bstackdemo + driver.get("https://www.bstackdemo.com"); + + // Check the title + Assert.assertTrue(driver.getTitle().matches("StackDemo")); + + // Save the text of the product for later verify + String productOnScreenText = driver.findElement(By.xpath("//*[@id=\"1\"]/p")).getText(); + // Click on add to cart button + driver.findElement(By.xpath("//*[@id=\"1\"]/div[4]")).click(); + + // See if the cart is opened or not + Assert.assertTrue(driver.findElement(By.cssSelector(".float\\-cart__content")).isDisplayed()); + + // Check the product inside the cart is same as of the main page + String productOnCartText = driver.findElement(By.xpath("//*[@id=\"__next\"]/div/div/div[2]/div[2]/div[2]/div/div[3]/p[1]")).getText(); + Assert.assertEquals(productOnScreenText, productOnCartText); } -} +} \ No newline at end of file diff --git a/src/test/java/com/browserstack/suite/SuiteTest02.java b/src/test/java/com/browserstack/suite/SuiteTest02.java index 4a924020..79a98e59 100644 --- a/src/test/java/com/browserstack/suite/SuiteTest02.java +++ b/src/test/java/com/browserstack/suite/SuiteTest02.java @@ -12,13 +12,22 @@ public class SuiteTest02 extends BrowserStackTestNGTest { @Test public void test_02() throws Exception { - driver.get("https://www.google.com/ncr"); - Thread.sleep(5000); - WebElement element = driver.findElement(By.name("q")); - element.sendKeys("BrowserStack Test 02"); - element.submit(); - Thread.sleep(5000); - - Assert.assertEquals("BrowserStack Test 02 - Google Search", driver.getTitle()); + // navigate to bstackdemo + driver.get("https://www.bstackdemo.com"); + + // Check the title + Assert.assertTrue(driver.getTitle().matches("StackDemo")); + + // Save the text of the product for later verify + String productOnScreenText = driver.findElement(By.xpath("//*[@id=\"1\"]/p")).getText(); + // Click on add to cart button + driver.findElement(By.xpath("//*[@id=\"1\"]/div[4]")).click(); + + // See if the cart is opened or not + Assert.assertTrue(driver.findElement(By.cssSelector(".float\\-cart__content")).isDisplayed()); + + // Check the product inside the cart is same as of the main page + String productOnCartText = driver.findElement(By.xpath("//*[@id=\"__next\"]/div/div/div[2]/div[2]/div[2]/div/div[3]/p[1]")).getText(); + Assert.assertEquals(productOnScreenText, productOnCartText); } -} +} \ No newline at end of file diff --git a/src/test/java/com/browserstack/suite/SuiteTest03.java b/src/test/java/com/browserstack/suite/SuiteTest03.java index 0afc2228..97468130 100644 --- a/src/test/java/com/browserstack/suite/SuiteTest03.java +++ b/src/test/java/com/browserstack/suite/SuiteTest03.java @@ -12,14 +12,22 @@ public class SuiteTest03 extends BrowserStackTestNGTest { @Test public void test_03() throws Exception { - driver.get("https://www.google.com/ncr"); - Thread.sleep(5000); - WebElement element = driver.findElement(By.name("q")); - element.sendKeys("BrowserStack Test 03"); - Thread.sleep(5000); - element.submit(); - Thread.sleep(5000); - - Assert.assertEquals("BrowserStack Test 03 - Google Search", driver.getTitle()); + // navigate to bstackdemo + driver.get("https://www.bstackdemo.com"); + + // Check the title + Assert.assertTrue(driver.getTitle().matches("StackDemo")); + + // Save the text of the product for later verify + String productOnScreenText = driver.findElement(By.xpath("//*[@id=\"1\"]/p")).getText(); + // Click on add to cart button + driver.findElement(By.xpath("//*[@id=\"1\"]/div[4]")).click(); + + // See if the cart is opened or not + Assert.assertTrue(driver.findElement(By.cssSelector(".float\\-cart__content")).isDisplayed()); + + // Check the product inside the cart is same as of the main page + String productOnCartText = driver.findElement(By.xpath("//*[@id=\"__next\"]/div/div/div[2]/div[2]/div[2]/div/div[3]/p[1]")).getText(); + Assert.assertEquals(productOnScreenText, productOnCartText); } -} +} \ No newline at end of file diff --git a/src/test/java/com/browserstack/suite/SuiteTest04.java b/src/test/java/com/browserstack/suite/SuiteTest04.java index 8db56035..1bece31b 100644 --- a/src/test/java/com/browserstack/suite/SuiteTest04.java +++ b/src/test/java/com/browserstack/suite/SuiteTest04.java @@ -12,12 +12,22 @@ public class SuiteTest04 extends BrowserStackTestNGTest { @Test public void test_04() throws Exception { - driver.get("https://www.google.com/ncr"); - WebElement element = driver.findElement(By.name("q")); - element.sendKeys("BrowserStack Test 04"); - element.submit(); - Thread.sleep(7000); - - Assert.assertEquals("BrowserStack Test 04 - Google Search", driver.getTitle()); + // navigate to bstackdemo + driver.get("https://www.bstackdemo.com"); + + // Check the title + Assert.assertTrue(driver.getTitle().matches("StackDemo")); + + // Save the text of the product for later verify + String productOnScreenText = driver.findElement(By.xpath("//*[@id=\"1\"]/p")).getText(); + // Click on add to cart button + driver.findElement(By.xpath("//*[@id=\"1\"]/div[4]")).click(); + + // See if the cart is opened or not + Assert.assertTrue(driver.findElement(By.cssSelector(".float\\-cart__content")).isDisplayed()); + + // Check the product inside the cart is same as of the main page + String productOnCartText = driver.findElement(By.xpath("//*[@id=\"__next\"]/div/div/div[2]/div[2]/div[2]/div/div[3]/p[1]")).getText(); + Assert.assertEquals(productOnScreenText, productOnCartText); } -} +} \ No newline at end of file diff --git a/src/test/java/com/browserstack/suite/SuiteTest05.java b/src/test/java/com/browserstack/suite/SuiteTest05.java index b4375227..f3cd3f16 100644 --- a/src/test/java/com/browserstack/suite/SuiteTest05.java +++ b/src/test/java/com/browserstack/suite/SuiteTest05.java @@ -12,13 +12,22 @@ public class SuiteTest05 extends BrowserStackTestNGTest { @Test public void test_05() throws Exception { - driver.get("https://www.google.com/ncr"); - Thread.sleep(7000); - WebElement element = driver.findElement(By.name("q")); - element.sendKeys("BrowserStack Test 05"); - element.submit(); - Thread.sleep(7000); - - Assert.assertEquals("BrowserStack Test 05 - Google Search", driver.getTitle()); + // navigate to bstackdemo + driver.get("https://www.bstackdemo.com"); + + // Check the title + Assert.assertTrue(driver.getTitle().matches("StackDemo")); + + // Save the text of the product for later verify + String productOnScreenText = driver.findElement(By.xpath("//*[@id=\"1\"]/p")).getText(); + // Click on add to cart button + driver.findElement(By.xpath("//*[@id=\"1\"]/div[4]")).click(); + + // See if the cart is opened or not + Assert.assertTrue(driver.findElement(By.cssSelector(".float\\-cart__content")).isDisplayed()); + + // Check the product inside the cart is same as of the main page + String productOnCartText = driver.findElement(By.xpath("//*[@id=\"__next\"]/div/div/div[2]/div[2]/div[2]/div/div[3]/p[1]")).getText(); + Assert.assertEquals(productOnScreenText, productOnCartText); } -} +} \ No newline at end of file diff --git a/src/test/java/com/browserstack/suite/SuiteTest06.java b/src/test/java/com/browserstack/suite/SuiteTest06.java index 56b22b6a..c1aad8f1 100644 --- a/src/test/java/com/browserstack/suite/SuiteTest06.java +++ b/src/test/java/com/browserstack/suite/SuiteTest06.java @@ -12,14 +12,22 @@ public class SuiteTest06 extends BrowserStackTestNGTest { @Test public void test_06() throws Exception { - driver.get("https://www.google.com/ncr"); - Thread.sleep(7000); - WebElement element = driver.findElement(By.name("q")); - element.sendKeys("BrowserStack Test 06"); - Thread.sleep(7000); - element.submit(); - Thread.sleep(7000); - - Assert.assertEquals("BrowserStack Test 06 - Google Search", driver.getTitle()); + // navigate to bstackdemo + driver.get("https://www.bstackdemo.com"); + + // Check the title + Assert.assertTrue(driver.getTitle().matches("StackDemo")); + + // Save the text of the product for later verify + String productOnScreenText = driver.findElement(By.xpath("//*[@id=\"1\"]/p")).getText(); + // Click on add to cart button + driver.findElement(By.xpath("//*[@id=\"1\"]/div[4]")).click(); + + // See if the cart is opened or not + Assert.assertTrue(driver.findElement(By.cssSelector(".float\\-cart__content")).isDisplayed()); + + // Check the product inside the cart is same as of the main page + String productOnCartText = driver.findElement(By.xpath("//*[@id=\"__next\"]/div/div/div[2]/div[2]/div[2]/div/div[3]/p[1]")).getText(); + Assert.assertEquals(productOnScreenText, productOnCartText); } -} +} \ No newline at end of file diff --git a/src/test/java/com/browserstack/suite/SuiteTest07.java b/src/test/java/com/browserstack/suite/SuiteTest07.java index 41c9be48..1503dda2 100644 --- a/src/test/java/com/browserstack/suite/SuiteTest07.java +++ b/src/test/java/com/browserstack/suite/SuiteTest07.java @@ -12,12 +12,22 @@ public class SuiteTest07 extends BrowserStackTestNGTest { @Test public void test_07() throws Exception { - driver.get("https://www.google.com/ncr"); - WebElement element = driver.findElement(By.name("q")); - element.sendKeys("BrowserStack Test 07"); - element.submit(); - Thread.sleep(3000); - - Assert.assertEquals("BrowserStack Test 07 - Google Search", driver.getTitle()); + // navigate to bstackdemo + driver.get("https://www.bstackdemo.com"); + + // Check the title + Assert.assertTrue(driver.getTitle().matches("StackDemo")); + + // Save the text of the product for later verify + String productOnScreenText = driver.findElement(By.xpath("//*[@id=\"1\"]/p")).getText(); + // Click on add to cart button + driver.findElement(By.xpath("//*[@id=\"1\"]/div[4]")).click(); + + // See if the cart is opened or not + Assert.assertTrue(driver.findElement(By.cssSelector(".float\\-cart__content")).isDisplayed()); + + // Check the product inside the cart is same as of the main page + String productOnCartText = driver.findElement(By.xpath("//*[@id=\"__next\"]/div/div/div[2]/div[2]/div[2]/div/div[3]/p[1]")).getText(); + Assert.assertEquals(productOnScreenText, productOnCartText); } -} +} \ No newline at end of file diff --git a/src/test/java/com/browserstack/suite/SuiteTest08.java b/src/test/java/com/browserstack/suite/SuiteTest08.java index 87eaa7ea..c59aeff8 100644 --- a/src/test/java/com/browserstack/suite/SuiteTest08.java +++ b/src/test/java/com/browserstack/suite/SuiteTest08.java @@ -12,13 +12,22 @@ public class SuiteTest08 extends BrowserStackTestNGTest { @Test public void test_08() throws Exception { - driver.get("https://www.google.com/ncr"); - Thread.sleep(3000); - WebElement element = driver.findElement(By.name("q")); - element.sendKeys("BrowserStack Test 08"); - element.submit(); - Thread.sleep(3000); - - Assert.assertEquals("BrowserStack Test 08 - Google Search", driver.getTitle()); + // navigate to bstackdemo + driver.get("https://www.bstackdemo.com"); + + // Check the title + Assert.assertTrue(driver.getTitle().matches("StackDemo")); + + // Save the text of the product for later verify + String productOnScreenText = driver.findElement(By.xpath("//*[@id=\"1\"]/p")).getText(); + // Click on add to cart button + driver.findElement(By.xpath("//*[@id=\"1\"]/div[4]")).click(); + + // See if the cart is opened or not + Assert.assertTrue(driver.findElement(By.cssSelector(".float\\-cart__content")).isDisplayed()); + + // Check the product inside the cart is same as of the main page + String productOnCartText = driver.findElement(By.xpath("//*[@id=\"__next\"]/div/div/div[2]/div[2]/div[2]/div/div[3]/p[1]")).getText(); + Assert.assertEquals(productOnScreenText, productOnCartText); } -} +} \ No newline at end of file diff --git a/src/test/java/com/browserstack/suite/SuiteTest09.java b/src/test/java/com/browserstack/suite/SuiteTest09.java index 23a23860..c7d24c8c 100644 --- a/src/test/java/com/browserstack/suite/SuiteTest09.java +++ b/src/test/java/com/browserstack/suite/SuiteTest09.java @@ -12,14 +12,22 @@ public class SuiteTest09 extends BrowserStackTestNGTest { @Test public void test_09() throws Exception { - driver.get("https://www.google.com/ncr"); - Thread.sleep(3000); - WebElement element = driver.findElement(By.name("q")); - element.sendKeys("BrowserStack Test 09"); - Thread.sleep(3000); - element.submit(); - Thread.sleep(3000); - - Assert.assertEquals("BrowserStack Test 09 - Google Search", driver.getTitle()); + // navigate to bstackdemo + driver.get("https://www.bstackdemo.com"); + + // Check the title + Assert.assertTrue(driver.getTitle().matches("StackDemo")); + + // Save the text of the product for later verify + String productOnScreenText = driver.findElement(By.xpath("//*[@id=\"1\"]/p")).getText(); + // Click on add to cart button + driver.findElement(By.xpath("//*[@id=\"1\"]/div[4]")).click(); + + // See if the cart is opened or not + Assert.assertTrue(driver.findElement(By.cssSelector(".float\\-cart__content")).isDisplayed()); + + // Check the product inside the cart is same as of the main page + String productOnCartText = driver.findElement(By.xpath("//*[@id=\"__next\"]/div/div/div[2]/div[2]/div[2]/div/div[3]/p[1]")).getText(); + Assert.assertEquals(productOnScreenText, productOnCartText); } -} +} \ No newline at end of file diff --git a/src/test/java/com/browserstack/suite/SuiteTest10.java b/src/test/java/com/browserstack/suite/SuiteTest10.java index bc9e47b9..4627e6a3 100644 --- a/src/test/java/com/browserstack/suite/SuiteTest10.java +++ b/src/test/java/com/browserstack/suite/SuiteTest10.java @@ -12,12 +12,22 @@ public class SuiteTest10 extends BrowserStackTestNGTest { @Test public void test_10() throws Exception { - driver.get("https://www.google.com/ncr"); - WebElement element = driver.findElement(By.name("q")); - element.sendKeys("BrowserStack Test 10"); - element.submit(); - Thread.sleep(10000); - - Assert.assertEquals("BrowserStack Test 10 - Google Search", driver.getTitle()); + // navigate to bstackdemo + driver.get("https://www.bstackdemo.com"); + + // Check the title + Assert.assertTrue(driver.getTitle().matches("StackDemo")); + + // Save the text of the product for later verify + String productOnScreenText = driver.findElement(By.xpath("//*[@id=\"1\"]/p")).getText(); + // Click on add to cart button + driver.findElement(By.xpath("//*[@id=\"1\"]/div[4]")).click(); + + // See if the cart is opened or not + Assert.assertTrue(driver.findElement(By.cssSelector(".float\\-cart__content")).isDisplayed()); + + // Check the product inside the cart is same as of the main page + String productOnCartText = driver.findElement(By.xpath("//*[@id=\"__next\"]/div/div/div[2]/div[2]/div[2]/div/div[3]/p[1]")).getText(); + Assert.assertEquals(productOnScreenText, productOnCartText); } -} +} \ No newline at end of file From ce8198f491918b5d246e287b69043c7cd7a9d632 Mon Sep 17 00:00:00 2001 From: RutvikChandla Date: Mon, 25 Apr 2022 18:36:12 +0530 Subject: [PATCH 04/17] EOF fix --- src/test/java/com/browserstack/suite/SuiteTest01.java | 2 +- src/test/java/com/browserstack/suite/SuiteTest02.java | 2 +- src/test/java/com/browserstack/suite/SuiteTest03.java | 2 +- src/test/java/com/browserstack/suite/SuiteTest04.java | 2 +- src/test/java/com/browserstack/suite/SuiteTest05.java | 2 +- src/test/java/com/browserstack/suite/SuiteTest06.java | 2 +- src/test/java/com/browserstack/suite/SuiteTest07.java | 2 +- src/test/java/com/browserstack/suite/SuiteTest08.java | 2 +- src/test/java/com/browserstack/suite/SuiteTest09.java | 2 +- src/test/java/com/browserstack/suite/SuiteTest10.java | 2 +- 10 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/test/java/com/browserstack/suite/SuiteTest01.java b/src/test/java/com/browserstack/suite/SuiteTest01.java index 016852c4..42adf5f5 100644 --- a/src/test/java/com/browserstack/suite/SuiteTest01.java +++ b/src/test/java/com/browserstack/suite/SuiteTest01.java @@ -30,4 +30,4 @@ public void test_01() throws Exception { String productOnCartText = driver.findElement(By.xpath("//*[@id=\"__next\"]/div/div/div[2]/div[2]/div[2]/div/div[3]/p[1]")).getText(); Assert.assertEquals(productOnScreenText, productOnCartText); } -} \ No newline at end of file +} diff --git a/src/test/java/com/browserstack/suite/SuiteTest02.java b/src/test/java/com/browserstack/suite/SuiteTest02.java index 79a98e59..86f08087 100644 --- a/src/test/java/com/browserstack/suite/SuiteTest02.java +++ b/src/test/java/com/browserstack/suite/SuiteTest02.java @@ -30,4 +30,4 @@ public void test_02() throws Exception { String productOnCartText = driver.findElement(By.xpath("//*[@id=\"__next\"]/div/div/div[2]/div[2]/div[2]/div/div[3]/p[1]")).getText(); Assert.assertEquals(productOnScreenText, productOnCartText); } -} \ No newline at end of file +} diff --git a/src/test/java/com/browserstack/suite/SuiteTest03.java b/src/test/java/com/browserstack/suite/SuiteTest03.java index 97468130..073ad3d5 100644 --- a/src/test/java/com/browserstack/suite/SuiteTest03.java +++ b/src/test/java/com/browserstack/suite/SuiteTest03.java @@ -30,4 +30,4 @@ public void test_03() throws Exception { String productOnCartText = driver.findElement(By.xpath("//*[@id=\"__next\"]/div/div/div[2]/div[2]/div[2]/div/div[3]/p[1]")).getText(); Assert.assertEquals(productOnScreenText, productOnCartText); } -} \ No newline at end of file +} diff --git a/src/test/java/com/browserstack/suite/SuiteTest04.java b/src/test/java/com/browserstack/suite/SuiteTest04.java index 1bece31b..b623cd82 100644 --- a/src/test/java/com/browserstack/suite/SuiteTest04.java +++ b/src/test/java/com/browserstack/suite/SuiteTest04.java @@ -30,4 +30,4 @@ public void test_04() throws Exception { String productOnCartText = driver.findElement(By.xpath("//*[@id=\"__next\"]/div/div/div[2]/div[2]/div[2]/div/div[3]/p[1]")).getText(); Assert.assertEquals(productOnScreenText, productOnCartText); } -} \ No newline at end of file +} diff --git a/src/test/java/com/browserstack/suite/SuiteTest05.java b/src/test/java/com/browserstack/suite/SuiteTest05.java index f3cd3f16..4d607c5b 100644 --- a/src/test/java/com/browserstack/suite/SuiteTest05.java +++ b/src/test/java/com/browserstack/suite/SuiteTest05.java @@ -30,4 +30,4 @@ public void test_05() throws Exception { String productOnCartText = driver.findElement(By.xpath("//*[@id=\"__next\"]/div/div/div[2]/div[2]/div[2]/div/div[3]/p[1]")).getText(); Assert.assertEquals(productOnScreenText, productOnCartText); } -} \ No newline at end of file +} diff --git a/src/test/java/com/browserstack/suite/SuiteTest06.java b/src/test/java/com/browserstack/suite/SuiteTest06.java index c1aad8f1..7b879384 100644 --- a/src/test/java/com/browserstack/suite/SuiteTest06.java +++ b/src/test/java/com/browserstack/suite/SuiteTest06.java @@ -30,4 +30,4 @@ public void test_06() throws Exception { String productOnCartText = driver.findElement(By.xpath("//*[@id=\"__next\"]/div/div/div[2]/div[2]/div[2]/div/div[3]/p[1]")).getText(); Assert.assertEquals(productOnScreenText, productOnCartText); } -} \ No newline at end of file +} diff --git a/src/test/java/com/browserstack/suite/SuiteTest07.java b/src/test/java/com/browserstack/suite/SuiteTest07.java index 1503dda2..5694a1b0 100644 --- a/src/test/java/com/browserstack/suite/SuiteTest07.java +++ b/src/test/java/com/browserstack/suite/SuiteTest07.java @@ -30,4 +30,4 @@ public void test_07() throws Exception { String productOnCartText = driver.findElement(By.xpath("//*[@id=\"__next\"]/div/div/div[2]/div[2]/div[2]/div/div[3]/p[1]")).getText(); Assert.assertEquals(productOnScreenText, productOnCartText); } -} \ No newline at end of file +} diff --git a/src/test/java/com/browserstack/suite/SuiteTest08.java b/src/test/java/com/browserstack/suite/SuiteTest08.java index c59aeff8..0d6f9d34 100644 --- a/src/test/java/com/browserstack/suite/SuiteTest08.java +++ b/src/test/java/com/browserstack/suite/SuiteTest08.java @@ -30,4 +30,4 @@ public void test_08() throws Exception { String productOnCartText = driver.findElement(By.xpath("//*[@id=\"__next\"]/div/div/div[2]/div[2]/div[2]/div/div[3]/p[1]")).getText(); Assert.assertEquals(productOnScreenText, productOnCartText); } -} \ No newline at end of file +} diff --git a/src/test/java/com/browserstack/suite/SuiteTest09.java b/src/test/java/com/browserstack/suite/SuiteTest09.java index c7d24c8c..a6b74ff4 100644 --- a/src/test/java/com/browserstack/suite/SuiteTest09.java +++ b/src/test/java/com/browserstack/suite/SuiteTest09.java @@ -30,4 +30,4 @@ public void test_09() throws Exception { String productOnCartText = driver.findElement(By.xpath("//*[@id=\"__next\"]/div/div/div[2]/div[2]/div[2]/div/div[3]/p[1]")).getText(); Assert.assertEquals(productOnScreenText, productOnCartText); } -} \ No newline at end of file +} diff --git a/src/test/java/com/browserstack/suite/SuiteTest10.java b/src/test/java/com/browserstack/suite/SuiteTest10.java index 4627e6a3..97b7ce1c 100644 --- a/src/test/java/com/browserstack/suite/SuiteTest10.java +++ b/src/test/java/com/browserstack/suite/SuiteTest10.java @@ -30,4 +30,4 @@ public void test_10() throws Exception { String productOnCartText = driver.findElement(By.xpath("//*[@id=\"__next\"]/div/div/div[2]/div[2]/div[2]/div/div[3]/p[1]")).getText(); Assert.assertEquals(productOnScreenText, productOnCartText); } -} \ No newline at end of file +} From fd72cc1c663ba5a2a98005438b13b85257c43c55 Mon Sep 17 00:00:00 2001 From: RutvikChandla Date: Mon, 25 Apr 2022 18:37:07 +0530 Subject: [PATCH 05/17] EOF --- src/test/java/com/browserstack/SingleTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/com/browserstack/SingleTest.java b/src/test/java/com/browserstack/SingleTest.java index b4cbbd7b..416b535e 100644 --- a/src/test/java/com/browserstack/SingleTest.java +++ b/src/test/java/com/browserstack/SingleTest.java @@ -24,4 +24,4 @@ public void test() throws Exception { String productOnCartText = driver.findElement(By.xpath("//*[@id=\"__next\"]/div/div/div[2]/div[2]/div[2]/div/div[3]/p[1]")).getText(); Assert.assertEquals(productOnScreenText, productOnCartText); } -} \ No newline at end of file +} From 9b3fe37d3ec94d020f5e1fa94be66e88805d6b18 Mon Sep 17 00:00:00 2001 From: Karan Shah <64479353+karanshah-browserstack@users.noreply.github.com> Date: Thu, 14 Jul 2022 14:05:57 +0530 Subject: [PATCH 06/17] Updating version to 4.1.0 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 96dc165d..c3543b6e 100644 --- a/pom.xml +++ b/pom.xml @@ -34,7 +34,7 @@ org.seleniumhq.selenium selenium-java - 3.12.0 + 4.1.0 com.browserstack From 003d346584841889706b164eac9a01da5dec0c3a Mon Sep 17 00:00:00 2001 From: Neha Agarwal Date: Wed, 16 Nov 2022 13:16:11 +0530 Subject: [PATCH 07/17] Added source capability --- src/test/java/com/browserstack/BrowserStackTestNGTest.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/test/java/com/browserstack/BrowserStackTestNGTest.java b/src/test/java/com/browserstack/BrowserStackTestNGTest.java index e3a0dc99..b9b0c6a1 100644 --- a/src/test/java/com/browserstack/BrowserStackTestNGTest.java +++ b/src/test/java/com/browserstack/BrowserStackTestNGTest.java @@ -60,6 +60,10 @@ public void setUp(String config_file, String environment) throws Exception { accessKey = (String) config.get("key"); } + if (capabilities.getCapability("bstack:options") != null) { + HashMap bstackOptionsMap = (HashMap) capabilities.getCapability("bstack:options"); + bstackOptionsMap.put("source", "testng:sample-selenium-4:v1.0"); + } this.checkAndStartBrowserStackLocal(capabilities, accessKey); driver = new RemoteWebDriver(new URL("https://"+username+":"+accessKey+"@"+config.get("server")+"/wd/hub"), capabilities); From e5c4bf4e003843437ca3e4691cc9e049fe85109d Mon Sep 17 00:00:00 2001 From: Neha Agarwal Date: Wed, 16 Nov 2022 13:16:50 +0530 Subject: [PATCH 08/17] Correction --- src/test/java/com/browserstack/BrowserStackTestNGTest.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/test/java/com/browserstack/BrowserStackTestNGTest.java b/src/test/java/com/browserstack/BrowserStackTestNGTest.java index b9b0c6a1..580bd52c 100644 --- a/src/test/java/com/browserstack/BrowserStackTestNGTest.java +++ b/src/test/java/com/browserstack/BrowserStackTestNGTest.java @@ -64,6 +64,7 @@ public void setUp(String config_file, String environment) throws Exception { HashMap bstackOptionsMap = (HashMap) capabilities.getCapability("bstack:options"); bstackOptionsMap.put("source", "testng:sample-selenium-4:v1.0"); } + this.checkAndStartBrowserStackLocal(capabilities, accessKey); driver = new RemoteWebDriver(new URL("https://"+username+":"+accessKey+"@"+config.get("server")+"/wd/hub"), capabilities); From 1e7bdcbb441f81889ca12d1ab4bc1a395786652b Mon Sep 17 00:00:00 2001 From: Neha Agarwal Date: Thu, 17 Nov 2022 17:32:44 +0530 Subject: [PATCH 09/17] Corrections --- .gitignore | 1 + README.md | 1 + config/parallel.testng.xml | 2 +- .../com/browserstack/BrowserStackTestNGTest.java | 12 +++++++++--- src/test/resources/conf/parallel.conf.json | 12 ++++++------ src/test/resources/conf/suite.conf.json | 12 ++++++------ 6 files changed, 24 insertions(+), 16 deletions(-) diff --git a/.gitignore b/.gitignore index 871cd6a6..51ec03ff 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,4 @@ target/ local.log .idea *.iml +logs/ diff --git a/README.md b/README.md index d1fd24dd..68ebeab3 100644 --- a/README.md +++ b/README.md @@ -15,6 +15,7 @@ - To run a single test, run `mvn test -P single` - To run local tests, run `mvn test -P local` - To run parallel tests, run `mvn test -P parallel` +- To run suite, run `mvn test -P suite` Understand how many parallel sessions you need by using our [Parallel Test Calculator](https://www.browserstack.com/automate/parallel-calculator?ref=github) diff --git a/config/parallel.testng.xml b/config/parallel.testng.xml index 72c51a3d..65bdbb08 100644 --- a/config/parallel.testng.xml +++ b/config/parallel.testng.xml @@ -27,7 +27,7 @@ - + diff --git a/src/test/java/com/browserstack/BrowserStackTestNGTest.java b/src/test/java/com/browserstack/BrowserStackTestNGTest.java index 580bd52c..9f476e44 100644 --- a/src/test/java/com/browserstack/BrowserStackTestNGTest.java +++ b/src/test/java/com/browserstack/BrowserStackTestNGTest.java @@ -8,10 +8,11 @@ import com.browserstack.local.Local; +import com.sun.org.apache.xpath.internal.objects.XString; import org.json.simple.JSONObject; import org.json.simple.parser.JSONParser; +import org.openqa.selenium.MutableCapabilities; import org.openqa.selenium.WebDriver; -import org.openqa.selenium.remote.DesiredCapabilities; import org.openqa.selenium.remote.RemoteWebDriver; import org.testng.annotations.AfterMethod; import org.testng.annotations.BeforeMethod; @@ -29,7 +30,7 @@ public void setUp(String config_file, String environment) throws Exception { JSONObject config = (JSONObject) parser.parse(new FileReader("src/test/resources/conf/" + config_file)); JSONObject envs = (JSONObject) config.get("environments"); - DesiredCapabilities capabilities = new DesiredCapabilities(); + MutableCapabilities capabilities = new MutableCapabilities(); Map envCapabilities = (Map) envs.get(environment); Iterator> it = envCapabilities.entrySet().iterator(); @@ -64,13 +65,18 @@ public void setUp(String config_file, String environment) throws Exception { HashMap bstackOptionsMap = (HashMap) capabilities.getCapability("bstack:options"); bstackOptionsMap.put("source", "testng:sample-selenium-4:v1.0"); } + else{ + JSONObject bstackOptions = new JSONObject(); + bstackOptions.put("source", "testng:sample-selenium-4:v1.0"); + capabilities.setCapability("bstack:options", bstackOptions); + } this.checkAndStartBrowserStackLocal(capabilities, accessKey); driver = new RemoteWebDriver(new URL("https://"+username+":"+accessKey+"@"+config.get("server")+"/wd/hub"), capabilities); } - public void checkAndStartBrowserStackLocal(DesiredCapabilities capabilities, String accessKey) throws Exception { + public void checkAndStartBrowserStackLocal(MutableCapabilities capabilities, String accessKey) throws Exception { if (bsLocal != null) { return; } diff --git a/src/test/resources/conf/parallel.conf.json b/src/test/resources/conf/parallel.conf.json index fc9e1003..8705022f 100644 --- a/src/test/resources/conf/parallel.conf.json +++ b/src/test/resources/conf/parallel.conf.json @@ -13,22 +13,22 @@ }, "environments": { "chrome": { - "browser": "chrome" + "browserName": "chrome" }, "firefox": { - "browser": "firefox" + "browserName": "firefox" }, "safari": { - "browser": "safari", + "browserName": "safari", "bstack:options": { "os": "OS X", "osVersion": "High Sierra" } }, - "ie": { - "browser": "Internet Explorer", + "edge": { + "browserName": "edge", "bstack:options": { - "os": "Windows", + "os": "Windows" } } } diff --git a/src/test/resources/conf/suite.conf.json b/src/test/resources/conf/suite.conf.json index b685335c..e534c65b 100644 --- a/src/test/resources/conf/suite.conf.json +++ b/src/test/resources/conf/suite.conf.json @@ -13,22 +13,22 @@ }, "environments": { "chrome": { - "browser": "chrome" + "browserName": "chrome" }, "firefox": { - "browser": "firefox" + "browserName": "firefox" }, "safari": { - "browser": "safari", + "browserName": "safari", "bstack:options": { "os": "OS X", "osVersion": "High Sierra" } }, - "ie": { - "browser": "Internet Explorer", + "edge": { + "browserName": "edge", "bstack:options": { - "os": "Windows", + "os": "Windows" } } } From 2776d20d38c478bc4f310e83c139e70192339725 Mon Sep 17 00:00:00 2001 From: Neha Agarwal Date: Thu, 17 Nov 2022 17:40:53 +0530 Subject: [PATCH 10/17] Corrections --- src/test/java/com/browserstack/BrowserStackTestNGTest.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/test/java/com/browserstack/BrowserStackTestNGTest.java b/src/test/java/com/browserstack/BrowserStackTestNGTest.java index 9f476e44..3c8411b0 100644 --- a/src/test/java/com/browserstack/BrowserStackTestNGTest.java +++ b/src/test/java/com/browserstack/BrowserStackTestNGTest.java @@ -8,7 +8,6 @@ import com.browserstack.local.Local; -import com.sun.org.apache.xpath.internal.objects.XString; import org.json.simple.JSONObject; import org.json.simple.parser.JSONParser; import org.openqa.selenium.MutableCapabilities; @@ -64,8 +63,7 @@ public void setUp(String config_file, String environment) throws Exception { if (capabilities.getCapability("bstack:options") != null) { HashMap bstackOptionsMap = (HashMap) capabilities.getCapability("bstack:options"); bstackOptionsMap.put("source", "testng:sample-selenium-4:v1.0"); - } - else{ + } else { JSONObject bstackOptions = new JSONObject(); bstackOptions.put("source", "testng:sample-selenium-4:v1.0"); capabilities.setCapability("bstack:options", bstackOptions); From ff32314d81ca9056c39157573f5ee2d545c21761 Mon Sep 17 00:00:00 2001 From: Kamalpreet Kaur Date: Fri, 2 Dec 2022 17:06:09 +0530 Subject: [PATCH 11/17] sync selenium-4 branch with master branch --- .gitignore | 5 + README.md | 29 +++- build.gradle | 54 ++++++++ config/local.testng.xml | 2 +- config/parallel.testng.xml | 16 +-- config/single.testng.xml | 2 +- config/suite.testng.xml | 12 +- pom.xml | 26 ++-- .../browserstack/BrowserStackTestNGTest.java | 126 ++++++++++-------- .../com/browserstack/suite/SuiteTest06.java | 33 ----- .../com/browserstack/suite/SuiteTest07.java | 33 ----- .../com/browserstack/suite/SuiteTest08.java | 33 ----- .../com/browserstack/suite/SuiteTest09.java | 33 ----- .../com/browserstack/suite/SuiteTest10.java | 33 ----- src/test/resources/conf/local.conf.json | 14 +- src/test/resources/conf/parallel.conf.json | 33 ++--- src/test/resources/conf/single.conf.json | 15 +-- src/test/resources/conf/suite.conf.json | 24 ++-- 18 files changed, 211 insertions(+), 312 deletions(-) create mode 100644 build.gradle delete mode 100644 src/test/java/com/browserstack/suite/SuiteTest06.java delete mode 100644 src/test/java/com/browserstack/suite/SuiteTest07.java delete mode 100644 src/test/java/com/browserstack/suite/SuiteTest08.java delete mode 100644 src/test/java/com/browserstack/suite/SuiteTest09.java delete mode 100644 src/test/java/com/browserstack/suite/SuiteTest10.java diff --git a/.gitignore b/.gitignore index 51ec03ff..fa501947 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,8 @@ local.log .idea *.iml logs/ +.gradle +build/ +gradlew +gradle/ +gradlew.bat \ No newline at end of file diff --git a/README.md b/README.md index 68ebeab3..5fb52262 100644 --- a/README.md +++ b/README.md @@ -4,20 +4,40 @@ ![BrowserStack Logo](https://d98b8t1nnulk5.cloudfront.net/production/images/layout/logo-header.png?1469004780) -## Setup +## Using Maven + +### Setup * Clone the repo * Install dependencies `mvn compile` * Update `*.conf.json` files inside the `src/test/resources/conf` directory with your [BrowserStack Username and Access Key](https://www.browserstack.com/accounts/settings) -## Running your tests +### Running your tests - To run a single test, run `mvn test -P single` - To run local tests, run `mvn test -P local` - To run parallel tests, run `mvn test -P parallel` -- To run suite, run `mvn test -P suite` +- To run the test suite, run `mvn test -P suite` + +Understand how many parallel sessions you need by using our [Parallel Test Calculator](https://www.browserstack.com/automate/parallel-calculator?ref=github) + - Understand how many parallel sessions you need by using our [Parallel Test Calculator](https://www.browserstack.com/automate/parallel-calculator?ref=github) +## Using Gradle + +### Setup + +* Clone the repo +* Install dependencies `gradle build` +* Update `*.conf.json` files inside the `src/test/resources/conf` directory with your [BrowserStack Username and Access Key](https://www.browserstack.com/accounts/settings) + +### Running your tests + +- To run a single test, run `gradle singleTest` +- To run local tests, run `gradle localTest` +- To run parallel tests, run `gradle parallelTest` +- To run the test suite, run `gradle suiteTest` + +Understand how many parallel sessions you need by using our [Parallel Test Calculator](https://www.browserstack.com/automate/parallel-calculator?ref=github) ## Notes @@ -29,6 +49,7 @@ export BROWSERSTACK_USERNAME= && export BROWSERSTACK_ACCESS_KEY= ``` + ## Additional Resources * [Documentation for writing Automate test scripts in Java](https://www.browserstack.com/automate/java) * [Customizing your tests on BrowserStack](https://www.browserstack.com/automate/capabilities) diff --git a/build.gradle b/build.gradle new file mode 100644 index 00000000..6d569463 --- /dev/null +++ b/build.gradle @@ -0,0 +1,54 @@ +plugins { + id 'java' +} + +repositories { mavenCentral() } + +dependencies { + implementation 'org.testng:testng:7.4.0' + implementation 'commons-io:commons-io:2.11.0' + implementation 'org.seleniumhq.selenium:selenium-java:4.6.0' + implementation 'com.browserstack:browserstack-local-java:1.0.6' + implementation 'com.googlecode.json-simple:json-simple:1.1.1' +} + +group = 'com.browserstack' +version = '1.0-SNAPSHOT' +description = 'testng-browserstack' +sourceCompatibility = '1.8' + +tasks.withType(JavaCompile) { + options.encoding = 'UTF-8' +} + +task singleTest(type: Test) { + useTestNG() { + dependsOn cleanTest + useDefaultListeners = true + suites "config/single.testng.xml" + } +} + +task localTest(type: Test) { + useTestNG() { + dependsOn cleanTest + useDefaultListeners = true + suites "config/local.testng.xml" + } +} + +task parallelTest(type: Test) { + useTestNG() { + dependsOn cleanTest + useDefaultListeners = true + suites "config/parallel.testng.xml" + } +} + +task suiteTest(type: Test) { + useTestNG() { + dependsOn cleanTest + useDefaultListeners = true + suites "config/suite.testng.xml" + } +} \ No newline at end of file diff --git a/config/local.testng.xml b/config/local.testng.xml index bcb99357..0d276a53 100644 --- a/config/local.testng.xml +++ b/config/local.testng.xml @@ -1,8 +1,8 @@ + - diff --git a/config/parallel.testng.xml b/config/parallel.testng.xml index 65bdbb08..8ef86185 100644 --- a/config/parallel.testng.xml +++ b/config/parallel.testng.xml @@ -1,9 +1,9 @@ + - - + @@ -11,7 +11,7 @@ - + @@ -19,15 +19,7 @@ - - - - - - - - - + diff --git a/config/single.testng.xml b/config/single.testng.xml index 43780cbc..e12dbed6 100644 --- a/config/single.testng.xml +++ b/config/single.testng.xml @@ -1,8 +1,8 @@ + - diff --git a/config/suite.testng.xml b/config/suite.testng.xml index 365fdba2..dbd459e6 100644 --- a/config/suite.testng.xml +++ b/config/suite.testng.xml @@ -1,8 +1,8 @@ + - @@ -10,11 +10,6 @@ - - - - - @@ -27,11 +22,6 @@ - - - - - diff --git a/pom.xml b/pom.xml index c3543b6e..7e6608a9 100644 --- a/pom.xml +++ b/pom.xml @@ -12,11 +12,9 @@ UTF-8 - 1.6 - 1.6 + 1.8 + 1.8 2.19.1 - - default @@ -24,22 +22,22 @@ org.testng testng - 6.9.10 + 7.4.0 commons-io commons-io - 1.3.2 + 2.11.0 org.seleniumhq.selenium selenium-java - 4.1.0 + 4.6.0 com.browserstack browserstack-local-java - 1.0.3 + 1.0.6 com.googlecode.json-simple @@ -53,7 +51,12 @@ org.apache.maven.plugins maven-surefire-plugin - 2.18.1 + ${surefire.version} + + + config/single.testng.xml + + @@ -66,6 +69,7 @@ org.apache.maven.plugins maven-surefire-plugin + ${surefire.version} config/single.testng.xml @@ -83,6 +87,7 @@ org.apache.maven.plugins maven-surefire-plugin + ${surefire.version} config/local.testng.xml @@ -100,6 +105,7 @@ org.apache.maven.plugins maven-surefire-plugin + ${surefire.version} config/parallel.testng.xml @@ -117,6 +123,7 @@ org.apache.maven.plugins maven-surefire-plugin + ${surefire.version} config/suite.testng.xml @@ -127,5 +134,4 @@ - diff --git a/src/test/java/com/browserstack/BrowserStackTestNGTest.java b/src/test/java/com/browserstack/BrowserStackTestNGTest.java index 3c8411b0..638aedaf 100644 --- a/src/test/java/com/browserstack/BrowserStackTestNGTest.java +++ b/src/test/java/com/browserstack/BrowserStackTestNGTest.java @@ -10,95 +10,103 @@ import org.json.simple.JSONObject; import org.json.simple.parser.JSONParser; -import org.openqa.selenium.MutableCapabilities; import org.openqa.selenium.WebDriver; +import org.openqa.selenium.MutableCapabilities; import org.openqa.selenium.remote.RemoteWebDriver; -import org.testng.annotations.AfterMethod; -import org.testng.annotations.BeforeMethod; - +import org.testng.annotations.*; public class BrowserStackTestNGTest { public WebDriver driver; - private Local bsLocal; + private static Local l; + private static JSONObject config; + private static Map commonCapabilities; + private static String username; + private static String accessKey; + + @BeforeSuite(alwaysRun=true) + @Parameters(value = { "config" }) + public void beforeSuite(String config_file) throws Exception { + JSONParser parser = new JSONParser(); + config = (JSONObject) parser.parse(new FileReader("src/test/resources/conf/" + config_file)); + commonCapabilities = (Map) config.get("capabilities"); + HashMap bstackOptionsMap = (HashMap) commonCapabilities.get("bstack:options"); + + + username = System.getenv("BROWSERSTACK_USERNAME"); + if (username == null) { + username = (String) config.get("user"); + } + + accessKey = System.getenv("BROWSERSTACK_ACCESS_KEY"); + if (accessKey == null) { + accessKey = (String) config.get("key"); + } + try { + if ((bstackOptionsMap.get("local") != null && + bstackOptionsMap.get("local").toString().equalsIgnoreCase("true") && (l == null))) { + l = new Local(); + Map options = new HashMap(); + options.put("key", accessKey); + l.start(options); + } + } catch (Exception e) { + System.out.println("Error while start local - " + e); + } + } - @BeforeMethod(alwaysRun=true) - @org.testng.annotations.Parameters(value={"config", "environment"}) + @BeforeMethod(alwaysRun = true) + @org.testng.annotations.Parameters(value = { "config", "environment" }) @SuppressWarnings("unchecked") public void setUp(String config_file, String environment) throws Exception { JSONParser parser = new JSONParser(); - JSONObject config = (JSONObject) parser.parse(new FileReader("src/test/resources/conf/" + config_file)); + config = (JSONObject) parser.parse(new FileReader("src/test/resources/conf/" + config_file)); JSONObject envs = (JSONObject) config.get("environments"); MutableCapabilities capabilities = new MutableCapabilities(); Map envCapabilities = (Map) envs.get(environment); - Iterator> it = envCapabilities.entrySet().iterator(); + Iterator it = envCapabilities.entrySet().iterator(); while (it.hasNext()) { - Map.Entry pair = (Map.Entry) it.next(); + Map.Entry pair = (Map.Entry) it.next(); capabilities.setCapability(pair.getKey().toString(), pair.getValue()); } - Map commonCapabilities = (Map) config.get("capabilities"); + commonCapabilities = (Map) config.get("capabilities"); it = commonCapabilities.entrySet().iterator(); while (it.hasNext()) { - Map.Entry pair = (Map.Entry) it.next(); - Object envData = capabilities.getCapability(pair.getKey().toString()); - Object resultData = pair.getValue(); - if (envData != null && envData.getClass() == JSONObject.class) { - ((JSONObject) resultData).putAll((JSONObject) envData); + Map.Entry pair = (Map.Entry) it.next(); + if (capabilities.getCapability(pair.getKey().toString()) == null) { + capabilities.setCapability(pair.getKey().toString(), pair.getValue()); + } else if (pair.getKey().toString().equalsIgnoreCase("bstack:options")) { + HashMap bstackOptionsMap = (HashMap) pair.getValue(); + bstackOptionsMap.putAll((HashMap) capabilities.getCapability("bstack:options")); + capabilities.setCapability(pair.getKey().toString(), bstackOptionsMap); } - capabilities.setCapability(pair.getKey().toString(), resultData); - } - - String username = System.getenv("BROWSERSTACK_USERNAME"); - if(username == null) { - username = (String) config.get("user"); - } - - String accessKey = System.getenv("BROWSERSTACK_ACCESS_KEY"); - if(accessKey == null) { - accessKey = (String) config.get("key"); } if (capabilities.getCapability("bstack:options") != null) { HashMap bstackOptionsMap = (HashMap) capabilities.getCapability("bstack:options"); - bstackOptionsMap.put("source", "testng:sample-selenium-4:v1.0"); - } else { - JSONObject bstackOptions = new JSONObject(); - bstackOptions.put("source", "testng:sample-selenium-4:v1.0"); - capabilities.setCapability("bstack:options", bstackOptions); + if ((bstackOptionsMap.get("local") != null && + bstackOptionsMap.get("local").toString().equalsIgnoreCase("true") && (l == null || !l.isRunning()))) { + l = new Local(); + Map options = new HashMap(); + options.put("key", accessKey); + l.start(options); + } + bstackOptionsMap.put("source", "testng:sample-selenium-4:v1.1"); } - this.checkAndStartBrowserStackLocal(capabilities, accessKey); - - driver = new RemoteWebDriver(new URL("https://"+username+":"+accessKey+"@"+config.get("server")+"/wd/hub"), capabilities); + driver = new RemoteWebDriver( + new URL("http://" + username + ":" + accessKey + "@" + config.get("server") + "/wd/hub"), capabilities); } - public void checkAndStartBrowserStackLocal(MutableCapabilities capabilities, String accessKey) throws Exception { - if (bsLocal != null) { - return; - } - if (capabilities.getCapability("bstack:options") != null - && ((JSONObject) capabilities.getCapability("bstack:options")).get("local") != null - && ((Boolean) ((JSONObject) capabilities.getCapability("bstack:options")).get("local")) == true) { - bsLocal = new Local(); - Map options = new HashMap(); - options.put("key", accessKey); - try { - bsLocal.start(options); - } catch (Exception e) { - System.out.println("Error: could not start browserstack local"); - e.printStackTrace(); - throw e; - } - } + @AfterMethod(alwaysRun = true) + public void tearDown() { + driver.quit(); } - @AfterMethod(alwaysRun=true) - public void tearDown() throws Exception { - driver.quit(); - if (bsLocal != null) { - bsLocal.stop(); - } + @AfterSuite(alwaysRun = true) + public void afterSuite() throws Exception { + if (l != null) l.stop(); } } diff --git a/src/test/java/com/browserstack/suite/SuiteTest06.java b/src/test/java/com/browserstack/suite/SuiteTest06.java deleted file mode 100644 index 7b879384..00000000 --- a/src/test/java/com/browserstack/suite/SuiteTest06.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.browserstack.suite; - -import org.openqa.selenium.By; -import org.openqa.selenium.WebElement; - -import org.testng.Assert; -import org.testng.annotations.Test; - -import com.browserstack.BrowserStackTestNGTest; - -public class SuiteTest06 extends BrowserStackTestNGTest { - - @Test - public void test_06() throws Exception { - // navigate to bstackdemo - driver.get("https://www.bstackdemo.com"); - - // Check the title - Assert.assertTrue(driver.getTitle().matches("StackDemo")); - - // Save the text of the product for later verify - String productOnScreenText = driver.findElement(By.xpath("//*[@id=\"1\"]/p")).getText(); - // Click on add to cart button - driver.findElement(By.xpath("//*[@id=\"1\"]/div[4]")).click(); - - // See if the cart is opened or not - Assert.assertTrue(driver.findElement(By.cssSelector(".float\\-cart__content")).isDisplayed()); - - // Check the product inside the cart is same as of the main page - String productOnCartText = driver.findElement(By.xpath("//*[@id=\"__next\"]/div/div/div[2]/div[2]/div[2]/div/div[3]/p[1]")).getText(); - Assert.assertEquals(productOnScreenText, productOnCartText); - } -} diff --git a/src/test/java/com/browserstack/suite/SuiteTest07.java b/src/test/java/com/browserstack/suite/SuiteTest07.java deleted file mode 100644 index 5694a1b0..00000000 --- a/src/test/java/com/browserstack/suite/SuiteTest07.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.browserstack.suite; - -import org.openqa.selenium.By; -import org.openqa.selenium.WebElement; - -import org.testng.Assert; -import org.testng.annotations.Test; - -import com.browserstack.BrowserStackTestNGTest; - -public class SuiteTest07 extends BrowserStackTestNGTest { - - @Test - public void test_07() throws Exception { - // navigate to bstackdemo - driver.get("https://www.bstackdemo.com"); - - // Check the title - Assert.assertTrue(driver.getTitle().matches("StackDemo")); - - // Save the text of the product for later verify - String productOnScreenText = driver.findElement(By.xpath("//*[@id=\"1\"]/p")).getText(); - // Click on add to cart button - driver.findElement(By.xpath("//*[@id=\"1\"]/div[4]")).click(); - - // See if the cart is opened or not - Assert.assertTrue(driver.findElement(By.cssSelector(".float\\-cart__content")).isDisplayed()); - - // Check the product inside the cart is same as of the main page - String productOnCartText = driver.findElement(By.xpath("//*[@id=\"__next\"]/div/div/div[2]/div[2]/div[2]/div/div[3]/p[1]")).getText(); - Assert.assertEquals(productOnScreenText, productOnCartText); - } -} diff --git a/src/test/java/com/browserstack/suite/SuiteTest08.java b/src/test/java/com/browserstack/suite/SuiteTest08.java deleted file mode 100644 index 0d6f9d34..00000000 --- a/src/test/java/com/browserstack/suite/SuiteTest08.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.browserstack.suite; - -import org.openqa.selenium.By; -import org.openqa.selenium.WebElement; - -import org.testng.Assert; -import org.testng.annotations.Test; - -import com.browserstack.BrowserStackTestNGTest; - -public class SuiteTest08 extends BrowserStackTestNGTest { - - @Test - public void test_08() throws Exception { - // navigate to bstackdemo - driver.get("https://www.bstackdemo.com"); - - // Check the title - Assert.assertTrue(driver.getTitle().matches("StackDemo")); - - // Save the text of the product for later verify - String productOnScreenText = driver.findElement(By.xpath("//*[@id=\"1\"]/p")).getText(); - // Click on add to cart button - driver.findElement(By.xpath("//*[@id=\"1\"]/div[4]")).click(); - - // See if the cart is opened or not - Assert.assertTrue(driver.findElement(By.cssSelector(".float\\-cart__content")).isDisplayed()); - - // Check the product inside the cart is same as of the main page - String productOnCartText = driver.findElement(By.xpath("//*[@id=\"__next\"]/div/div/div[2]/div[2]/div[2]/div/div[3]/p[1]")).getText(); - Assert.assertEquals(productOnScreenText, productOnCartText); - } -} diff --git a/src/test/java/com/browserstack/suite/SuiteTest09.java b/src/test/java/com/browserstack/suite/SuiteTest09.java deleted file mode 100644 index a6b74ff4..00000000 --- a/src/test/java/com/browserstack/suite/SuiteTest09.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.browserstack.suite; - -import org.openqa.selenium.By; -import org.openqa.selenium.WebElement; - -import org.testng.Assert; -import org.testng.annotations.Test; - -import com.browserstack.BrowserStackTestNGTest; - -public class SuiteTest09 extends BrowserStackTestNGTest { - - @Test - public void test_09() throws Exception { - // navigate to bstackdemo - driver.get("https://www.bstackdemo.com"); - - // Check the title - Assert.assertTrue(driver.getTitle().matches("StackDemo")); - - // Save the text of the product for later verify - String productOnScreenText = driver.findElement(By.xpath("//*[@id=\"1\"]/p")).getText(); - // Click on add to cart button - driver.findElement(By.xpath("//*[@id=\"1\"]/div[4]")).click(); - - // See if the cart is opened or not - Assert.assertTrue(driver.findElement(By.cssSelector(".float\\-cart__content")).isDisplayed()); - - // Check the product inside the cart is same as of the main page - String productOnCartText = driver.findElement(By.xpath("//*[@id=\"__next\"]/div/div/div[2]/div[2]/div[2]/div/div[3]/p[1]")).getText(); - Assert.assertEquals(productOnScreenText, productOnCartText); - } -} diff --git a/src/test/java/com/browserstack/suite/SuiteTest10.java b/src/test/java/com/browserstack/suite/SuiteTest10.java deleted file mode 100644 index 97b7ce1c..00000000 --- a/src/test/java/com/browserstack/suite/SuiteTest10.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.browserstack.suite; - -import org.openqa.selenium.By; -import org.openqa.selenium.WebElement; - -import org.testng.Assert; -import org.testng.annotations.Test; - -import com.browserstack.BrowserStackTestNGTest; - -public class SuiteTest10 extends BrowserStackTestNGTest { - - @Test - public void test_10() throws Exception { - // navigate to bstackdemo - driver.get("https://www.bstackdemo.com"); - - // Check the title - Assert.assertTrue(driver.getTitle().matches("StackDemo")); - - // Save the text of the product for later verify - String productOnScreenText = driver.findElement(By.xpath("//*[@id=\"1\"]/p")).getText(); - // Click on add to cart button - driver.findElement(By.xpath("//*[@id=\"1\"]/div[4]")).click(); - - // See if the cart is opened or not - Assert.assertTrue(driver.findElement(By.cssSelector(".float\\-cart__content")).isDisplayed()); - - // Check the product inside the cart is same as of the main page - String productOnCartText = driver.findElement(By.xpath("//*[@id=\"__next\"]/div/div/div[2]/div[2]/div[2]/div/div[3]/p[1]")).getText(); - Assert.assertEquals(productOnScreenText, productOnCartText); - } -} diff --git a/src/test/resources/conf/local.conf.json b/src/test/resources/conf/local.conf.json index fb5e554d..c1fb552a 100644 --- a/src/test/resources/conf/local.conf.json +++ b/src/test/resources/conf/local.conf.json @@ -1,22 +1,20 @@ { - "server": "hub-cloud.browserstack.com", + "server": "hub.browserstack.com", "user": "BROWSERSTACK_USERNAME", "key": "BROWSERSTACK_ACCESS_KEY", + "capabilities": { - "browserstack.use_w3c": true, "bstack:options": { - "os": "Windows", - "osVersion": "7", - "sessionName": "local_test", - "buildName": "testng-browserstack", - "projectName": "My Awesome App", + "buildName": "browserstack-build-1", + "sessionName": "BStack local testng", "debug": true, "local": true } }, + "environments": { "chrome": { - "browser": "chrome" + "browserName": "chrome" } } } diff --git a/src/test/resources/conf/parallel.conf.json b/src/test/resources/conf/parallel.conf.json index 8705022f..63e9879a 100644 --- a/src/test/resources/conf/parallel.conf.json +++ b/src/test/resources/conf/parallel.conf.json @@ -1,35 +1,30 @@ { - "server": "hub-cloud.browserstack.com", + "server": "hub.browserstack.com", "user": "BROWSERSTACK_USERNAME", "key": "BROWSERSTACK_ACCESS_KEY", + "capabilities": { - "browserstack.use_w3c": true, "bstack:options": { - "sessionName": "parallel_test", - "buildName": "testng-browserstack", - "projectName": "My Awesome App", - "debug": true + "buildName": "browserstack-build-1", + "sessionName": "BStack parallel testng", + "browserVersion": "latest", + "debug": true, + "local": true } }, + "environments": { - "chrome": { + "env1": { "browserName": "chrome" }, - "firefox": { + "env2": { "browserName": "firefox" }, - "safari": { - "browserName": "safari", + "env3": { "bstack:options": { - "os": "OS X", - "osVersion": "High Sierra" - } - }, - "edge": { - "browserName": "edge", - "bstack:options": { - "os": "Windows" - } + "os": "OS X" + }, + "browserName": "safari" } } } diff --git a/src/test/resources/conf/single.conf.json b/src/test/resources/conf/single.conf.json index 4360af6e..b3430f92 100644 --- a/src/test/resources/conf/single.conf.json +++ b/src/test/resources/conf/single.conf.json @@ -1,21 +1,20 @@ { - "server": "hub-cloud.browserstack.com", + "server": "hub.browserstack.com", "user": "BROWSERSTACK_USERNAME", "key": "BROWSERSTACK_ACCESS_KEY", + "capabilities": { - "browserstack.use_w3c": true, "bstack:options": { - "os": "Windows", - "osVersion": "7", - "sessionName": "single_test", - "buildName": "testng-browserstack", - "projectName": "My Awesome App", + "buildName": "browserstack-build-1", + "sessionName": "BStack single testng", + "browserVersion": "latest", "debug": true } }, + "environments": { "chrome": { - "browser": "chrome" + "browserName": "chrome" } } } diff --git a/src/test/resources/conf/suite.conf.json b/src/test/resources/conf/suite.conf.json index e534c65b..21ea4904 100644 --- a/src/test/resources/conf/suite.conf.json +++ b/src/test/resources/conf/suite.conf.json @@ -1,16 +1,16 @@ { - "server": "hub-cloud.browserstack.com", + "server": "hub.browserstack.com", "user": "BROWSERSTACK_USERNAME", "key": "BROWSERSTACK_ACCESS_KEY", + "capabilities": { - "browserstack.use_w3c": true, "bstack:options": { - "sessionName": "suite_test", - "buildName": "testng-browserstack", - "projectName": "My Awesome App", + "buildName": "browserstack-build-1", + "sessionName": "BStack suite testng", "debug": true } }, + "environments": { "chrome": { "browserName": "chrome" @@ -19,17 +19,13 @@ "browserName": "firefox" }, "safari": { - "browserName": "safari", "bstack:options": { - "os": "OS X", - "osVersion": "High Sierra" - } + "os": "OS X" + }, + "browserName": "safari" }, - "edge": { - "browserName": "edge", - "bstack:options": { - "os": "Windows" - } + "ie": { + "browserName": "internet explorer" } } } From 9ff7a1fae523c9bae697e9df3791c2178c093654 Mon Sep 17 00:00:00 2001 From: Kamalpreet Kaur Date: Fri, 2 Dec 2022 17:08:09 +0530 Subject: [PATCH 12/17] added new lines --- .gitignore | 2 +- build.gradle | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index fa501947..891280a8 100644 --- a/.gitignore +++ b/.gitignore @@ -8,4 +8,4 @@ logs/ build/ gradlew gradle/ -gradlew.bat \ No newline at end of file +gradlew.bat diff --git a/build.gradle b/build.gradle index 6d569463..d2aec9ca 100644 --- a/build.gradle +++ b/build.gradle @@ -51,4 +51,4 @@ task suiteTest(type: Test) { useDefaultListeners = true suites "config/suite.testng.xml" } -} \ No newline at end of file +} From 2ebb40df159fa9aecb98a8fa0c9e9ccbc29220f8 Mon Sep 17 00:00:00 2001 From: Neha Agarwal Date: Wed, 21 Dec 2022 19:29:14 +0530 Subject: [PATCH 13/17] http->https in hub url --- src/test/java/com/browserstack/BrowserStackTestNGTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/com/browserstack/BrowserStackTestNGTest.java b/src/test/java/com/browserstack/BrowserStackTestNGTest.java index 638aedaf..40dcb451 100644 --- a/src/test/java/com/browserstack/BrowserStackTestNGTest.java +++ b/src/test/java/com/browserstack/BrowserStackTestNGTest.java @@ -97,7 +97,7 @@ public void setUp(String config_file, String environment) throws Exception { } driver = new RemoteWebDriver( - new URL("http://" + username + ":" + accessKey + "@" + config.get("server") + "/wd/hub"), capabilities); + new URL("https://" + username + ":" + accessKey + "@" + config.get("server") + "/wd/hub"), capabilities); } @AfterMethod(alwaysRun = true) From b7a4a307686b9d467578fe70eeb797ce9aa566fb Mon Sep 17 00:00:00 2001 From: Kamalpreet Kaur Date: Mon, 16 Jan 2023 14:28:12 +0530 Subject: [PATCH 14/17] update: use RemoteWebDriver Builder to increase connection timeout --- pom.xml | 8 ++++++++ .../java/com/browserstack/BrowserStackTestNGTest.java | 11 +++++++++-- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 7e6608a9..c300ad02 100644 --- a/pom.xml +++ b/pom.xml @@ -58,6 +58,14 @@ + + org.apache.maven.plugins + maven-compiler-plugin + + 8 + 8 + + diff --git a/src/test/java/com/browserstack/BrowserStackTestNGTest.java b/src/test/java/com/browserstack/BrowserStackTestNGTest.java index 40dcb451..06b9b33c 100644 --- a/src/test/java/com/browserstack/BrowserStackTestNGTest.java +++ b/src/test/java/com/browserstack/BrowserStackTestNGTest.java @@ -2,6 +2,7 @@ import java.io.FileReader; import java.net.URL; +import java.time.Duration; import java.util.HashMap; import java.util.Iterator; import java.util.Map; @@ -13,6 +14,7 @@ import org.openqa.selenium.WebDriver; import org.openqa.selenium.MutableCapabilities; import org.openqa.selenium.remote.RemoteWebDriver; +import org.openqa.selenium.remote.http.ClientConfig; import org.testng.annotations.*; public class BrowserStackTestNGTest { @@ -96,8 +98,13 @@ public void setUp(String config_file, String environment) throws Exception { bstackOptionsMap.put("source", "testng:sample-selenium-4:v1.1"); } - driver = new RemoteWebDriver( - new URL("https://" + username + ":" + accessKey + "@" + config.get("server") + "/wd/hub"), capabilities); + ClientConfig customConfig = ClientConfig.defaultConfig().readTimeout(Duration.ofMinutes(15)) + .connectionTimeout(Duration.ofMinutes(15)); + driver = RemoteWebDriver.builder() + .config(customConfig) + .address(new URL("https://"+username+":"+accessKey+"@"+config.get("server")+"/wd/hub")) + .oneOf(capabilities) + .build(); } @AfterMethod(alwaysRun = true) From f68abe4eadb3e67074f30930fb21567cc4e9b987 Mon Sep 17 00:00:00 2001 From: Neha Agarwal Date: Thu, 23 Mar 2023 14:03:48 +0530 Subject: [PATCH 15/17] Made parallel test as default --- README.md | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 5fb52262..312f8956 100644 --- a/README.md +++ b/README.md @@ -14,9 +14,8 @@ ### Running your tests -- To run a single test, run `mvn test -P single` +- To run tests, run `mvn test -P parallel` - To run local tests, run `mvn test -P local` -- To run parallel tests, run `mvn test -P parallel` - To run the test suite, run `mvn test -P suite` Understand how many parallel sessions you need by using our [Parallel Test Calculator](https://www.browserstack.com/automate/parallel-calculator?ref=github) @@ -32,9 +31,8 @@ Understand how many parallel sessions you need by using our [Parallel Test Calcu ### Running your tests -- To run a single test, run `gradle singleTest` +- To run tests, run `gradle parallelTest` - To run local tests, run `gradle localTest` -- To run parallel tests, run `gradle parallelTest` - To run the test suite, run `gradle suiteTest` Understand how many parallel sessions you need by using our [Parallel Test Calculator](https://www.browserstack.com/automate/parallel-calculator?ref=github) From 5ebdf2c6c07a315732a1a1ddc7e14494c9655d19 Mon Sep 17 00:00:00 2001 From: Neha Agarwal Date: Thu, 23 Mar 2023 18:30:55 +0530 Subject: [PATCH 16/17] Fix --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index c300ad02..529b47f7 100644 --- a/pom.xml +++ b/pom.xml @@ -54,7 +54,7 @@ ${surefire.version} - config/single.testng.xml + config/parallel.testng.xml From 8ff9ac357644daa0388e14f1b7804f6845277e82 Mon Sep 17 00:00:00 2001 From: Neha Agarwal Date: Tue, 28 Mar 2023 13:08:12 +0530 Subject: [PATCH 17/17] Update source --- src/test/java/com/browserstack/BrowserStackTestNGTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/com/browserstack/BrowserStackTestNGTest.java b/src/test/java/com/browserstack/BrowserStackTestNGTest.java index 06b9b33c..413eaf87 100644 --- a/src/test/java/com/browserstack/BrowserStackTestNGTest.java +++ b/src/test/java/com/browserstack/BrowserStackTestNGTest.java @@ -95,7 +95,7 @@ public void setUp(String config_file, String environment) throws Exception { options.put("key", accessKey); l.start(options); } - bstackOptionsMap.put("source", "testng:sample-selenium-4:v1.1"); + bstackOptionsMap.put("source", "testng:sample-selenium-4:v1.2"); } ClientConfig customConfig = ClientConfig.defaultConfig().readTimeout(Duration.ofMinutes(15))