diff --git a/README.md b/README.md index 3b16806..5409240 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,12 @@ This repository demonstrates how to run Appium tests in [TestNG](http://testng.o ![BrowserStack Logo](https://d98b8t1nnulk5.cloudfront.net/production/images/layout/logo-header.png?1469004780) +## Based on + +These code samples are currently based on: + +- **Appium-Java-Client:** `8.1.1` +- **Protocol:** `W3C` ## Setup ### Requirements @@ -41,18 +47,18 @@ Getting Started with Appium tests in TestNg on BrowserStack couldn't be easier! ### **Run first test :** -- Switch to `run_first_test` directory under [Android examples](android/testng-examples) or [iOS examples](ios/testng-examples) -- Follow the steps outlined in the documentation - [Get Started with your first test on App Automate](https://www.browserstack.com/docs/app-automate/appium/getting-started/java/testng) +- Update `first.conf.json` file inside the `src/test/resources/com/browserstack/run_first_test` with your [BrowserStack Username and Access Key](https://www.browserstack.com/accounts/settings) +- Run `mvn test -P first` ### **Speed up test execution with parallel testing :** -- Switch to `run_parallel_test` directory under [Android examples](android/testng-examples/) or [iOS examples](ios/testng-examples/) -- Follow the steps outlined in the documentation - [Get Started with parallel testing on App Automate](https://www.browserstack.com/docs/app-automate/appium/getting-started/java/testng/parallelize-tests) +- Update `parallel.conf.json` file inside the `src/test/resources/com/browserstack/run_parallel_test` with your [BrowserStack Username and Access Key](https://www.browserstack.com/accounts/settings) +- Run `mvn test -P parallel` ### **Use Local testing for apps that access resources hosted in development or testing environments :** -- Switch to `run_local_test` directory under [Android examples](android/testng-examples/) or [iOS examples](ios/testng-examples/) -- Follow the steps outlined in the documentation - [Get Started with Local testing on App Automate](https://www.browserstack.com/docs/app-automate/appium/getting-started/java/testng/local-testing) +- Update `local.conf.json` file inside the `src/test/resources/com/browserstack/run_local_test` with your [BrowserStack Username and Access Key](https://www.browserstack.com/accounts/settings) +- Run `mvn test -P local` **Note**: If you are facing any issues, refer [Getting Help section](#Getting-Help) diff --git a/android/testng-examples/pom.xml b/android/testng-examples/pom.xml index 0d96421..c5a23e0 100644 --- a/android/testng-examples/pom.xml +++ b/android/testng-examples/pom.xml @@ -22,22 +22,22 @@ org.testng testng - 6.9.10 + 7.6.1 io.appium java-client - 7.0.0 + 8.1.1 commons-io commons-io - 1.3.2 + 2.11.0 org.seleniumhq.selenium selenium-java - 3.141.59 + 4.4.0 com.browserstack diff --git a/android/testng-examples/src/test/java/com/browserstack/run_local_test/BrowserStackTestNGTest.java b/android/testng-examples/src/test/java/com/browserstack/BrowserStackTestNGTest.java similarity index 51% rename from android/testng-examples/src/test/java/com/browserstack/run_local_test/BrowserStackTestNGTest.java rename to android/testng-examples/src/test/java/com/browserstack/BrowserStackTestNGTest.java index 1bbfe29..ef88a76 100644 --- a/android/testng-examples/src/test/java/com/browserstack/run_local_test/BrowserStackTestNGTest.java +++ b/android/testng-examples/src/test/java/com/browserstack/BrowserStackTestNGTest.java @@ -1,9 +1,10 @@ -package com.browserstack.run_local_test; +package com.browserstack; import com.browserstack.local.Local; import java.net.URL; import java.util.Map; import java.util.HashMap; + import java.util.Iterator; import java.io.FileReader; import org.json.simple.JSONObject; @@ -11,65 +12,71 @@ import org.json.simple.JSONArray; import io.appium.java_client.android.AndroidDriver; -import io.appium.java_client.android.AndroidElement; - -import org.openqa.selenium.remote.DesiredCapabilities; +import io.appium.java_client.android.options.UiAutomator2Options; +import org.openqa.selenium.WebElement; import org.testng.annotations.BeforeMethod; import org.testng.annotations.AfterMethod; public class BrowserStackTestNGTest { - public AndroidDriver driver; + public AndroidDriver driver; private Local local; @BeforeMethod(alwaysRun=true) - public void setUp() throws Exception { + @org.testng.annotations.Parameters(value = { "config", "deviceIndex" }) + public void setUp(String config_file, String deviceIndex) throws Exception { JSONParser parser = new JSONParser(); - JSONObject config = (JSONObject) parser.parse(new FileReader("src/test/resources/com/browserstack/run_local_test/local.conf.json")); - JSONArray envs = (JSONArray) config.get("environments"); + JSONObject config = (JSONObject) parser.parse(new FileReader("src/test/resources/com/browserstack/" + config_file)); - DesiredCapabilities capabilities = new DesiredCapabilities(); + UiAutomator2Options options = new UiAutomator2Options(); - Map envCapabilities = (Map) envs.get(0); + JSONArray envs = (JSONArray) config.get("environments"); + Map envCapabilities = (Map) envs.get(Integer.parseInt(deviceIndex)); Iterator it = envCapabilities.entrySet().iterator(); while (it.hasNext()) { Map.Entry pair = (Map.Entry)it.next(); - capabilities.setCapability(pair.getKey().toString(), pair.getValue().toString()); + options.setCapability(pair.getKey().toString(), pair.getValue().toString()); } 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()); + if(options.getCapability(pair.getKey().toString()) == null){ + options.setCapability(pair.getKey().toString(), pair.getValue()); + } else if (pair.getKey().toString().equalsIgnoreCase("bstack:options")){ + HashMap bstackOptionsMap = (HashMap) pair.getValue(); + bstackOptionsMap.putAll((HashMap) options.getCapability("bstack:options")); + options.setCapability(pair.getKey().toString(), bstackOptionsMap); } } + JSONObject browserstackOptions = (JSONObject) options.getCapability("bstack:options"); + String username = System.getenv("BROWSERSTACK_USERNAME"); if(username == null) { - username = (String) config.get("username"); + username = (String) browserstackOptions.get("userName"); } String accessKey = System.getenv("BROWSERSTACK_ACCESS_KEY"); if(accessKey == null) { - accessKey = (String) config.get("access_key"); + accessKey = (String) browserstackOptions.get("accessKey"); } String app = System.getenv("BROWSERSTACK_APP_ID"); if(app != null && !app.isEmpty()) { - capabilities.setCapability("app", app); + options.setCapability("app", app); } - if(capabilities.getCapability("browserstack.local") != null && capabilities.getCapability("browserstack.local") == "true"){ + if(browserstackOptions.get("local") != null && browserstackOptions.get("local").toString() == "true"){ local = new Local(); - Map options = new HashMap(); - options.put("key", accessKey); - local.start(options); + Map LocalOptions = new HashMap(); + LocalOptions.put("key", accessKey); + local.start(LocalOptions); } - driver = new AndroidDriver(new URL("http://"+username+":"+accessKey+"@"+config.get("server")+"/wd/hub"), capabilities); + driver = new AndroidDriver(new URL("http://"+config.get("server")+"/wd/hub"), options); } @AfterMethod(alwaysRun=true) diff --git a/android/testng-examples/src/test/java/com/browserstack/FirstTest.java b/android/testng-examples/src/test/java/com/browserstack/FirstTest.java new file mode 100644 index 0000000..f276f19 --- /dev/null +++ b/android/testng-examples/src/test/java/com/browserstack/FirstTest.java @@ -0,0 +1,30 @@ +package com.browserstack; + +import io.appium.java_client.AppiumBy; + +import org.openqa.selenium.support.ui.WebDriverWait; +import org.openqa.selenium.support.ui.ExpectedConditions; +import org.openqa.selenium.WebElement; + +import org.testng.Assert; +import org.testng.annotations.Test; +import java.util.List; +import java.time.Duration; + +public class FirstTest extends BrowserStackTestNGTest { + + @Test + public void test() throws Exception { + WebElement searchElement = (WebElement) new WebDriverWait(driver, Duration.ofSeconds(30)).until( + ExpectedConditions.elementToBeClickable(AppiumBy.accessibilityId("Search Wikipedia"))); + + searchElement.click(); + WebElement insertTextElement = (WebElement) new WebDriverWait(driver, Duration.ofSeconds(30)).until( + ExpectedConditions.elementToBeClickable(AppiumBy.id("org.wikipedia.alpha:id/search_src_text"))); + insertTextElement.sendKeys("BrowserStack"); + Thread.sleep(5000); + + List allProductsName = driver.findElements(AppiumBy.className("android.widget.TextView")); + Assert.assertTrue(allProductsName.size() > 0); + } +} diff --git a/android/testng-examples/src/test/java/com/browserstack/run_local_test/LocalTest.java b/android/testng-examples/src/test/java/com/browserstack/LocalTest.java similarity index 66% rename from android/testng-examples/src/test/java/com/browserstack/run_local_test/LocalTest.java rename to android/testng-examples/src/test/java/com/browserstack/LocalTest.java index c682666..6dd40ce 100644 --- a/android/testng-examples/src/test/java/com/browserstack/run_local_test/LocalTest.java +++ b/android/testng-examples/src/test/java/com/browserstack/LocalTest.java @@ -1,15 +1,16 @@ -package com.browserstack.run_local_test; +package com.browserstack; import org.testng.Assert; import org.testng.annotations.Test; import java.io.File; import java.util.List; +import java.time.Duration; import org.apache.commons.io.FileUtils; -import io.appium.java_client.MobileBy; -import io.appium.java_client.android.AndroidElement; +import io.appium.java_client.AppiumBy; +import org.openqa.selenium.WebElement; import org.openqa.selenium.OutputType; import org.openqa.selenium.TakesScreenshot; import org.openqa.selenium.support.ui.WebDriverWait; @@ -19,16 +20,16 @@ public class LocalTest extends BrowserStackTestNGTest { @Test public void test() throws Exception { - AndroidElement searchElement = (AndroidElement) new WebDriverWait(driver, 30).until( - ExpectedConditions.elementToBeClickable(MobileBy.id("com.example.android.basicnetworking:id/test_action"))); + WebElement searchElement = (WebElement) new WebDriverWait(driver, Duration.ofSeconds(30)).until( + ExpectedConditions.elementToBeClickable(AppiumBy.id("com.example.android.basicnetworking:id/test_action"))); searchElement.click(); - AndroidElement insertTextElement = (AndroidElement) new WebDriverWait(driver, 30).until( - ExpectedConditions.elementToBeClickable(MobileBy.className("android.widget.TextView"))); + WebElement insertTextElement = (WebElement) new WebDriverWait(driver, Duration.ofSeconds(30)).until( + ExpectedConditions.elementToBeClickable(AppiumBy.className("android.widget.TextView"))); - AndroidElement testElement = null; - List allTextViewElements = driver.findElementsByClassName("android.widget.TextView"); + WebElement testElement = null; + List allTextViewElements = driver.findElements(AppiumBy.className("android.widget.TextView")); Thread.sleep(10); - for(AndroidElement textElement : allTextViewElements) { + for(WebElement textElement : allTextViewElements) { if(textElement.getText().contains("The active connection is")) { testElement = textElement; } diff --git a/android/testng-examples/src/test/java/com/browserstack/ParallelTest.java b/android/testng-examples/src/test/java/com/browserstack/ParallelTest.java new file mode 100644 index 0000000..07cd0a0 --- /dev/null +++ b/android/testng-examples/src/test/java/com/browserstack/ParallelTest.java @@ -0,0 +1,29 @@ +package com.browserstack; + +import io.appium.java_client.AppiumBy; + +import org.openqa.selenium.support.ui.WebDriverWait; +import org.openqa.selenium.support.ui.ExpectedConditions; +import org.openqa.selenium.WebElement; + +import org.testng.Assert; +import org.testng.annotations.Test; +import java.util.List; +import java.time.Duration; + +public class ParallelTest extends BrowserStackTestNGTest { + + @Test + public void test() throws Exception { + WebElement searchElement = (WebElement) new WebDriverWait(driver, Duration.ofSeconds(30)).until( + ExpectedConditions.elementToBeClickable(AppiumBy.accessibilityId("Search Wikipedia"))); + searchElement.click(); + WebElement insertTextElement = (WebElement) new WebDriverWait(driver, Duration.ofSeconds(30)).until( + ExpectedConditions.elementToBeClickable(AppiumBy.id("org.wikipedia.alpha:id/search_src_text"))); + insertTextElement.sendKeys("BrowserStack"); + Thread.sleep(5000); + + List allProductsName = driver.findElements(AppiumBy.className("android.widget.TextView")); + Assert.assertTrue(allProductsName.size() > 0); + } +} diff --git a/android/testng-examples/src/test/java/com/browserstack/run_first_test/BrowserStackTestNGTest.java b/android/testng-examples/src/test/java/com/browserstack/run_first_test/BrowserStackTestNGTest.java deleted file mode 100644 index d763a6d..0000000 --- a/android/testng-examples/src/test/java/com/browserstack/run_first_test/BrowserStackTestNGTest.java +++ /dev/null @@ -1,71 +0,0 @@ -package com.browserstack.run_first_test; - -import java.net.URL; -import java.util.Map; -import java.util.Iterator; -import java.io.FileReader; -import org.json.simple.JSONObject; -import org.json.simple.parser.JSONParser; -import org.json.simple.JSONArray; - -import io.appium.java_client.android.AndroidDriver; -import io.appium.java_client.android.AndroidElement; - -import org.openqa.selenium.remote.DesiredCapabilities; - -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.AfterMethod; - - -public class BrowserStackTestNGTest { - public AndroidDriver driver; - - @BeforeMethod(alwaysRun=true) - public void setUp() throws Exception { - JSONParser parser = new JSONParser(); - JSONObject config = (JSONObject) parser.parse(new FileReader("src/test/resources/com/browserstack/run_first_test/first.conf.json")); - - DesiredCapabilities capabilities = new DesiredCapabilities(); - - JSONArray envs = (JSONArray) config.get("environments"); - Map envCapabilities = (Map) envs.get(0); - Iterator it = envCapabilities.entrySet().iterator(); - while (it.hasNext()) { - Map.Entry pair = (Map.Entry)it.next(); - capabilities.setCapability(pair.getKey().toString(), pair.getValue().toString()); - } - - 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()); - } - } - - String username = System.getenv("BROWSERSTACK_USERNAME"); - if(username == null) { - username = (String) config.get("username"); - } - - String accessKey = System.getenv("BROWSERSTACK_ACCESS_KEY"); - if(accessKey == null) { - accessKey = (String) config.get("access_key"); - } - - String app = System.getenv("BROWSERSTACK_APP_ID"); - if(app != null && !app.isEmpty()) { - capabilities.setCapability("app", app); - } - - driver = new AndroidDriver(new URL("http://"+username+":"+accessKey+"@"+config.get("server")+"/wd/hub"), capabilities); - } - - @AfterMethod(alwaysRun=true) - public void tearDown() throws Exception { - // Invoke driver.quit() to indicate that the test is completed. - // Otherwise, it will appear as timed out on BrowserStack. - driver.quit(); - } -} diff --git a/android/testng-examples/src/test/java/com/browserstack/run_first_test/FirstTest.java b/android/testng-examples/src/test/java/com/browserstack/run_first_test/FirstTest.java deleted file mode 100644 index b77b748..0000000 --- a/android/testng-examples/src/test/java/com/browserstack/run_first_test/FirstTest.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.browserstack.run_first_test; - -import io.appium.java_client.MobileBy; -import io.appium.java_client.android.AndroidElement; - -import org.openqa.selenium.support.ui.WebDriverWait; -import org.openqa.selenium.support.ui.ExpectedConditions; - -import org.testng.Assert; -import org.testng.annotations.Test; -import java.util.List; - -public class FirstTest extends BrowserStackTestNGTest { - - @Test - public void test() throws Exception { - AndroidElement searchElement = (AndroidElement) new WebDriverWait(driver, 30).until( - ExpectedConditions.elementToBeClickable(MobileBy.AccessibilityId("Search Wikipedia"))); - searchElement.click(); - AndroidElement insertTextElement = (AndroidElement) new WebDriverWait(driver, 30).until( - ExpectedConditions.elementToBeClickable(MobileBy.id("org.wikipedia.alpha:id/search_src_text"))); - insertTextElement.sendKeys("BrowserStack"); - Thread.sleep(5000); - - List allProductsName = driver.findElementsByClassName("android.widget.TextView"); - Assert.assertTrue(allProductsName.size() > 0); - } -} diff --git a/android/testng-examples/src/test/java/com/browserstack/run_parallel_test/BrowserStackTestNGTest.java b/android/testng-examples/src/test/java/com/browserstack/run_parallel_test/BrowserStackTestNGTest.java deleted file mode 100644 index 4172790..0000000 --- a/android/testng-examples/src/test/java/com/browserstack/run_parallel_test/BrowserStackTestNGTest.java +++ /dev/null @@ -1,73 +0,0 @@ -package com.browserstack.run_parallel_test; - -import java.net.URL; -import java.util.Map; -import java.util.Iterator; -import java.io.FileReader; -import org.json.simple.JSONObject; -import org.json.simple.parser.JSONParser; -import org.json.simple.JSONArray; - -import io.appium.java_client.android.AndroidDriver; -import io.appium.java_client.android.AndroidElement; - -import org.openqa.selenium.remote.DesiredCapabilities; - -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.AfterMethod; -import org.testng.annotations.Parameters; - - -public class BrowserStackTestNGTest { - public AndroidDriver driver; - - @BeforeMethod(alwaysRun=true) - @org.testng.annotations.Parameters(value={"deviceIndex"}) - public void setUp(String deviceIndex) throws Exception { - JSONParser parser = new JSONParser(); - JSONObject config = (JSONObject) parser.parse(new FileReader("src/test/resources/com/browserstack/run_parallel_test/parallel.conf.json")); - JSONArray envs = (JSONArray) config.get("environments"); - - DesiredCapabilities capabilities = new DesiredCapabilities(); - - Map envCapabilities = (Map) envs.get(Integer.parseInt(deviceIndex)); - Iterator it = envCapabilities.entrySet().iterator(); - while (it.hasNext()) { - Map.Entry pair = (Map.Entry)it.next(); - capabilities.setCapability(pair.getKey().toString(), pair.getValue().toString()); - } - - 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()); - } - } - - String username = System.getenv("BROWSERSTACK_USERNAME"); - if(username == null) { - username = (String) config.get("username"); - } - - String accessKey = System.getenv("BROWSERSTACK_ACCESS_KEY"); - if(accessKey == null) { - accessKey = (String) config.get("access_key"); - } - - String app = System.getenv("BROWSERSTACK_APP_ID"); - if(app != null && !app.isEmpty()) { - capabilities.setCapability("app", app); - } - - driver = new AndroidDriver(new URL("http://"+username+":"+accessKey+"@"+config.get("server")+"/wd/hub"), capabilities); - } - - @AfterMethod(alwaysRun=true) - public void tearDown() throws Exception { - // Invoke driver.quit() to indicate that the test is completed. - // Otherwise, it will appear as timed out on BrowserStack. - driver.quit(); - } -} diff --git a/android/testng-examples/src/test/java/com/browserstack/run_parallel_test/ParallelTest.java b/android/testng-examples/src/test/java/com/browserstack/run_parallel_test/ParallelTest.java deleted file mode 100644 index a6d5e13..0000000 --- a/android/testng-examples/src/test/java/com/browserstack/run_parallel_test/ParallelTest.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.browserstack.run_parallel_test; - -import io.appium.java_client.MobileBy; -import io.appium.java_client.android.AndroidElement; - -import org.openqa.selenium.support.ui.WebDriverWait; -import org.openqa.selenium.support.ui.ExpectedConditions; - -import org.testng.Assert; -import org.testng.annotations.Test; -import java.util.List; - -public class ParallelTest extends BrowserStackTestNGTest { - - @Test - public void test() throws Exception { - AndroidElement searchElement = (AndroidElement) new WebDriverWait(driver, 30).until( - ExpectedConditions.elementToBeClickable(MobileBy.AccessibilityId("Search Wikipedia"))); - searchElement.click(); - AndroidElement insertTextElement = (AndroidElement) new WebDriverWait(driver, 30).until( - ExpectedConditions.elementToBeClickable(MobileBy.id("org.wikipedia.alpha:id/search_src_text"))); - insertTextElement.sendKeys("BrowserStack"); - Thread.sleep(5000); - - List allProductsName = driver.findElementsByClassName("android.widget.TextView"); - Assert.assertTrue(allProductsName.size() > 0); - } -} diff --git a/android/testng-examples/src/test/resources/com/browserstack/run_first_test/first.conf.json b/android/testng-examples/src/test/resources/com/browserstack/run_first_test/first.conf.json index 48f3e7b..f2093c4 100644 --- a/android/testng-examples/src/test/resources/com/browserstack/run_first_test/first.conf.json +++ b/android/testng-examples/src/test/resources/com/browserstack/run_first_test/first.conf.json @@ -1,20 +1,23 @@ { - "server": "hub-cloud.browserstack.com", - "username": "BROWSERSTACK_USERNAME", - "access_key": "BROWSERSTACK_ACCESS_KEY", + "server": "hub.browserstack.com", "capabilities": { - "project": "First TestNg Android Project", - "build": "browserstack-build-1", - "name": "first_test", - "browserstack.debug": true, - "app": "bs://" + "app": "bs://", + "bstack:options": { + "projectName": "First TestNg Android Project", + "buildName": "browserstack-build-1", + "sessionName": "BStack first_test", + "debug": true, + "userName": "BROWSERSTACK_USERNAME", + "accessKey": "BROWSERSTACK_ACCESS_KEY" + } }, "environments": [ - { - "device": "Google Pixel 3", - "os_version": "9.0" + { + "deviceName": "Google Pixel 3", + "platformVersion": "9.0", + "platformName": "android" } ] } diff --git a/android/testng-examples/src/test/resources/com/browserstack/run_first_test/first.testng.xml b/android/testng-examples/src/test/resources/com/browserstack/run_first_test/first.testng.xml index 8624aeb..51aee70 100644 --- a/android/testng-examples/src/test/resources/com/browserstack/run_first_test/first.testng.xml +++ b/android/testng-examples/src/test/resources/com/browserstack/run_first_test/first.testng.xml @@ -2,8 +2,10 @@ + + - + diff --git a/android/testng-examples/src/test/resources/com/browserstack/run_local_test/local.conf.json b/android/testng-examples/src/test/resources/com/browserstack/run_local_test/local.conf.json index af26c45..007467a 100644 --- a/android/testng-examples/src/test/resources/com/browserstack/run_local_test/local.conf.json +++ b/android/testng-examples/src/test/resources/com/browserstack/run_local_test/local.conf.json @@ -1,21 +1,24 @@ { - "server": "hub-cloud.browserstack.com", - "username": "BROWSERSTACK_USERNAME", - "access_key": "BROWSERSTACK_ACCESS_KEY", + "server": "hub.browserstack.com", "capabilities": { - "project": "First TestNg Android Project", - "build": "browserstack-build-1", - "name": "local_test", - "browserstack.debug": true, - "browserstack.local": true, - "app": "bs://" + "app": "bs://", + "bstack:options": { + "projectName": "First TestNg Android Project", + "buildName": "browserstack-build-1", + "sessionName": "BStack local_test", + "userName": "BROWSERSTACK_USERNAME", + "accessKey": "BROWSERSTACK_ACCESS_KEY", + "debug": true, + "local": true + } }, "environments": [ - { - "device": "Google Pixel 3", - "os_version": "9.0" + { + "deviceName": "Google Pixel 3", + "platformVersion": "9.0", + "platformName": "android" } ] } diff --git a/android/testng-examples/src/test/resources/com/browserstack/run_local_test/local.testng.xml b/android/testng-examples/src/test/resources/com/browserstack/run_local_test/local.testng.xml index 26bcaff..73e32d7 100644 --- a/android/testng-examples/src/test/resources/com/browserstack/run_local_test/local.testng.xml +++ b/android/testng-examples/src/test/resources/com/browserstack/run_local_test/local.testng.xml @@ -2,8 +2,10 @@ + + - + diff --git a/android/testng-examples/src/test/resources/com/browserstack/run_parallel_test/parallel.conf.json b/android/testng-examples/src/test/resources/com/browserstack/run_parallel_test/parallel.conf.json index 5571d9a..1715e23 100644 --- a/android/testng-examples/src/test/resources/com/browserstack/run_parallel_test/parallel.conf.json +++ b/android/testng-examples/src/test/resources/com/browserstack/run_parallel_test/parallel.conf.json @@ -1,24 +1,29 @@ { - "server": "hub-cloud.browserstack.com", - "username": "BROWSERSTACK_USERNAME", - "access_key": "BROWSERSTACK_ACCESS_KEY", + "server": "hub.browserstack.com", "capabilities": { - "project": "First TestNg Android Project", - "build": "browserstack-build-1", - "name": "parallel_test", - "browserstack.debug": true, - "app": "bs://" + "app": "bs://", + "bstack:options": { + "projectName": "First TestNg Android Project", + "buildName": "browserstack-build-1", + "sessionName": "BStack parallel_test", + "debug": true, + "userName": "BROWSERSTACK_USERNAME", + "accessKey": "BROWSERSTACK_ACCESS_KEY" + } }, "environments": [ { - "device": "Google Pixel 3", - "os_version": "9.0" + "deviceName": "Google Pixel 3", + "platformVersion": "9.0", + "platformName": "android" }, + { - "device": "Samsung Galaxy S10e", - "os_version": "9.0" + "deviceName": "Samsung Galaxy S22", + "platformVersion": "12.0", + "platformName": "android" } ] } diff --git a/android/testng-examples/src/test/resources/com/browserstack/run_parallel_test/parallel.testng.xml b/android/testng-examples/src/test/resources/com/browserstack/run_parallel_test/parallel.testng.xml index b009413..4c26875 100644 --- a/android/testng-examples/src/test/resources/com/browserstack/run_parallel_test/parallel.testng.xml +++ b/android/testng-examples/src/test/resources/com/browserstack/run_parallel_test/parallel.testng.xml @@ -3,15 +3,17 @@ + - + + - + diff --git a/ios/testng-examples/pom.xml b/ios/testng-examples/pom.xml index 0d96421..c5a23e0 100644 --- a/ios/testng-examples/pom.xml +++ b/ios/testng-examples/pom.xml @@ -22,22 +22,22 @@ org.testng testng - 6.9.10 + 7.6.1 io.appium java-client - 7.0.0 + 8.1.1 commons-io commons-io - 1.3.2 + 2.11.0 org.seleniumhq.selenium selenium-java - 3.141.59 + 4.4.0 com.browserstack diff --git a/ios/testng-examples/src/test/java/com/browserstack/run_local_test/BrowserStackTestNGTest.java b/ios/testng-examples/src/test/java/com/browserstack/BrowserStackTestNGTest.java similarity index 52% rename from ios/testng-examples/src/test/java/com/browserstack/run_local_test/BrowserStackTestNGTest.java rename to ios/testng-examples/src/test/java/com/browserstack/BrowserStackTestNGTest.java index 47764ab..3434967 100644 --- a/ios/testng-examples/src/test/java/com/browserstack/run_local_test/BrowserStackTestNGTest.java +++ b/ios/testng-examples/src/test/java/com/browserstack/BrowserStackTestNGTest.java @@ -1,4 +1,4 @@ -package com.browserstack.run_local_test; +package com.browserstack; import com.browserstack.local.Local; import java.net.URL; @@ -10,66 +10,72 @@ import org.json.simple.parser.JSONParser; import org.json.simple.JSONArray; -import org.openqa.selenium.remote.DesiredCapabilities; +import io.appium.java_client.ios.options.XCUITestOptions; import org.testng.annotations.BeforeMethod; import org.testng.annotations.AfterMethod; import io.appium.java_client.ios.IOSDriver; -import io.appium.java_client.ios.IOSElement; public class BrowserStackTestNGTest { - public IOSDriver driver; + public IOSDriver driver; private Local local; @BeforeMethod(alwaysRun=true) - public void setUp() throws Exception { + @org.testng.annotations.Parameters(value = { "config", "deviceIndex" }) + public void setUp(String config_file, String deviceIndex) throws Exception { JSONParser parser = new JSONParser(); - JSONObject config = (JSONObject) parser.parse(new FileReader("src/test/resources/com/browserstack/run_local_test/local.conf.json")); + JSONObject config = (JSONObject) parser.parse(new FileReader("src/test/resources/com/browserstack/"+config_file)); JSONArray envs = (JSONArray) config.get("environments"); - DesiredCapabilities capabilities = new DesiredCapabilities(); + XCUITestOptions options = new XCUITestOptions(); - Map envCapabilities = (Map) envs.get(0); + Map envCapabilities = (Map) envs.get(Integer.parseInt(deviceIndex)); Iterator it = envCapabilities.entrySet().iterator(); while (it.hasNext()) { Map.Entry pair = (Map.Entry)it.next(); - capabilities.setCapability(pair.getKey().toString(), pair.getValue().toString()); + options.setCapability(pair.getKey().toString(), pair.getValue().toString()); } 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()); + if(options.getCapability(pair.getKey().toString()) == null){ + options.setCapability(pair.getKey().toString(), pair.getValue()); + } else if (pair.getKey().toString().equalsIgnoreCase("bstack:options")){ + HashMap bstackOptionsMap = (HashMap) pair.getValue(); + bstackOptionsMap.putAll((HashMap) options.getCapability("bstack:options")); + options.setCapability(pair.getKey().toString(), bstackOptionsMap); } } + JSONObject browserstackOptions = (JSONObject) options.getCapability("bstack:options"); + String username = System.getenv("BROWSERSTACK_USERNAME"); if(username == null) { - username = (String) config.get("username"); + username = (String) browserstackOptions.get("userName"); } String accessKey = System.getenv("BROWSERSTACK_ACCESS_KEY"); if(accessKey == null) { - accessKey = (String) config.get("access_key"); + accessKey = (String) browserstackOptions.get("accessKey"); } String app = System.getenv("BROWSERSTACK_APP_ID"); if(app != null && !app.isEmpty()) { - capabilities.setCapability("app", app); + options.setCapability("app", app); } - if(capabilities.getCapability("browserstack.local") != null && capabilities.getCapability("browserstack.local") == "true"){ + if(browserstackOptions.get("local") != null && browserstackOptions.get("local").toString() == "true"){ local = new Local(); - Map options = new HashMap(); - options.put("key", accessKey); - local.start(options); + Map LocalOptions = new HashMap(); + LocalOptions.put("key", accessKey); + local.start(LocalOptions); } - driver = new IOSDriver(new URL("http://"+username+":"+accessKey+"@"+config.get("server")+"/wd/hub"), capabilities); + driver = new IOSDriver(new URL("http://"+config.get("server")+"/wd/hub"), options); } @AfterMethod(alwaysRun=true) diff --git a/ios/testng-examples/src/test/java/com/browserstack/FirstTest.java b/ios/testng-examples/src/test/java/com/browserstack/FirstTest.java new file mode 100644 index 0000000..73736fd --- /dev/null +++ b/ios/testng-examples/src/test/java/com/browserstack/FirstTest.java @@ -0,0 +1,33 @@ +package com.browserstack; + +import org.testng.Assert; +import org.testng.annotations.Test; + +import org.openqa.selenium.support.ui.WebDriverWait; +import org.openqa.selenium.support.ui.ExpectedConditions; + +import io.appium.java_client.AppiumBy; +import org.openqa.selenium.WebElement; + +import java.time.Duration; + + +public class FirstTest extends BrowserStackTestNGTest { + + @Test + public void test() throws Exception { + WebElement textButton = (WebElement) new WebDriverWait(driver, Duration.ofSeconds(30)).until( + ExpectedConditions.elementToBeClickable(AppiumBy.accessibilityId("Text Button"))); + textButton.click(); + WebElement textInput = (WebElement) new WebDriverWait(driver, Duration.ofSeconds(30)).until( + ExpectedConditions.elementToBeClickable(AppiumBy.accessibilityId("Text Input"))); + textInput.sendKeys("hello@browserstack.com"+"\n"); + + Thread.sleep(5000); + + WebElement textOutput = (WebElement) new WebDriverWait(driver, Duration.ofSeconds(30)).until( + ExpectedConditions.elementToBeClickable(AppiumBy.accessibilityId("Text Output"))); + + Assert.assertEquals(textOutput.getText(),"hello@browserstack.com"); + } +} diff --git a/ios/testng-examples/src/test/java/com/browserstack/run_local_test/LocalTest.java b/ios/testng-examples/src/test/java/com/browserstack/LocalTest.java similarity index 72% rename from ios/testng-examples/src/test/java/com/browserstack/run_local_test/LocalTest.java rename to ios/testng-examples/src/test/java/com/browserstack/LocalTest.java index 0bf3c26..295100c 100644 --- a/ios/testng-examples/src/test/java/com/browserstack/run_local_test/LocalTest.java +++ b/ios/testng-examples/src/test/java/com/browserstack/LocalTest.java @@ -1,4 +1,4 @@ -package com.browserstack.run_local_test; +package com.browserstack; import org.testng.Assert; import org.testng.annotations.Test; @@ -13,27 +13,29 @@ import org.openqa.selenium.support.ui.ExpectedCondition; import org.openqa.selenium.support.ui.ExpectedConditions; -import io.appium.java_client.MobileBy; -import io.appium.java_client.ios.IOSElement; +import io.appium.java_client.AppiumBy; +import org.openqa.selenium.WebElement; + +import java.time.Duration; public class LocalTest extends BrowserStackTestNGTest { @Test public void test() throws Exception { - IOSElement testButton = (IOSElement) new WebDriverWait(driver, 30).until( - ExpectedConditions.elementToBeClickable(MobileBy.AccessibilityId("TestBrowserStackLocal"))); + WebElement testButton = (WebElement) new WebDriverWait(driver, Duration.ofSeconds(30)).until( + ExpectedConditions.elementToBeClickable(AppiumBy.accessibilityId("TestBrowserStackLocal"))); testButton.click(); - WebDriverWait wait = new WebDriverWait(driver, 30); + WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(30)); wait.until(new ExpectedCondition() { @Override public Boolean apply(WebDriver d) { - String result = d.findElement(MobileBy.AccessibilityId("ResultBrowserStackLocal")).getAttribute("value"); + String result = d.findElement(AppiumBy.accessibilityId("ResultBrowserStackLocal")).getAttribute("value"); return result != null && result.length() > 0; } }); - IOSElement resultElement = (IOSElement) driver.findElement(MobileBy.AccessibilityId("ResultBrowserStackLocal")); + WebElement resultElement = (WebElement) driver.findElement(AppiumBy.accessibilityId("ResultBrowserStackLocal")); String resultString = resultElement.getText().toLowerCase(); System.out.println(resultString); diff --git a/ios/testng-examples/src/test/java/com/browserstack/ParallelTest.java b/ios/testng-examples/src/test/java/com/browserstack/ParallelTest.java new file mode 100644 index 0000000..226b704 --- /dev/null +++ b/ios/testng-examples/src/test/java/com/browserstack/ParallelTest.java @@ -0,0 +1,33 @@ +package com.browserstack; + +import org.testng.Assert; +import org.testng.annotations.Test; + +import org.openqa.selenium.support.ui.WebDriverWait; +import org.openqa.selenium.support.ui.ExpectedConditions; + +import io.appium.java_client.AppiumBy; +import org.openqa.selenium.WebElement; + +import java.time.Duration; + + +public class ParallelTest extends BrowserStackTestNGTest { + + @Test + public void test() throws Exception { + WebElement textButton = (WebElement) new WebDriverWait(driver, Duration.ofSeconds(30)).until( + ExpectedConditions.elementToBeClickable(AppiumBy.accessibilityId("Text Button"))); + textButton.click(); + WebElement textInput = (WebElement) new WebDriverWait(driver, Duration.ofSeconds(30)).until( + ExpectedConditions.elementToBeClickable(AppiumBy.accessibilityId("Text Input"))); + textInput.sendKeys("hello@browserstack.com"+"\n"); + + Thread.sleep(5000); + + WebElement textOutput = (WebElement) new WebDriverWait(driver, Duration.ofSeconds(30)).until( + ExpectedConditions.elementToBeClickable(AppiumBy.accessibilityId("Text Output"))); + + Assert.assertEquals(textOutput.getText(),"hello@browserstack.com"); + } +} diff --git a/ios/testng-examples/src/test/java/com/browserstack/run_first_test/BrowserStackTestNGTest.java b/ios/testng-examples/src/test/java/com/browserstack/run_first_test/BrowserStackTestNGTest.java deleted file mode 100644 index a615c89..0000000 --- a/ios/testng-examples/src/test/java/com/browserstack/run_first_test/BrowserStackTestNGTest.java +++ /dev/null @@ -1,72 +0,0 @@ -package com.browserstack.run_first_test; -import com.browserstack.local.Local; - -import java.net.URL; -import java.util.Map; -import java.util.Iterator; -import java.io.FileReader; -import org.json.simple.JSONObject; -import org.json.simple.parser.JSONParser; -import org.json.simple.JSONArray; - -import org.openqa.selenium.remote.DesiredCapabilities; - -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.AfterMethod; - -import io.appium.java_client.ios.IOSDriver; -import io.appium.java_client.ios.IOSElement; - - -public class BrowserStackTestNGTest { - public IOSDriver driver; - - @BeforeMethod(alwaysRun=true) - public void setUp() throws Exception { - JSONParser parser = new JSONParser(); - JSONObject config = (JSONObject) parser.parse(new FileReader("src/test/resources/com/browserstack/run_first_test/first.conf.json")); - JSONArray envs = (JSONArray) config.get("environments"); - - DesiredCapabilities capabilities = new DesiredCapabilities(); - - Map envCapabilities = (Map) envs.get(0); - Iterator it = envCapabilities.entrySet().iterator(); - while (it.hasNext()) { - Map.Entry pair = (Map.Entry)it.next(); - capabilities.setCapability(pair.getKey().toString(), pair.getValue().toString()); - } - - 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()); - } - } - - String username = System.getenv("BROWSERSTACK_USERNAME"); - if(username == null) { - username = (String) config.get("username"); - } - - String accessKey = System.getenv("BROWSERSTACK_ACCESS_KEY"); - if(accessKey == null) { - accessKey = (String) config.get("access_key"); - } - - String app = System.getenv("BROWSERSTACK_APP_ID"); - if(app != null && !app.isEmpty()) { - capabilities.setCapability("app", app); - } - - driver = new IOSDriver(new URL("http://"+username+":"+accessKey+"@"+config.get("server")+"/wd/hub"), capabilities); - } - - @AfterMethod(alwaysRun=true) - public void tearDown() throws Exception { - // Invoke driver.quit() to indicate that the test is completed. - // Otherwise, it will appear as timed out on BrowserStack. - driver.quit(); - } -} diff --git a/ios/testng-examples/src/test/java/com/browserstack/run_first_test/FirstTest.java b/ios/testng-examples/src/test/java/com/browserstack/run_first_test/FirstTest.java deleted file mode 100644 index 738163e..0000000 --- a/ios/testng-examples/src/test/java/com/browserstack/run_first_test/FirstTest.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.browserstack.run_first_test; - -import org.testng.Assert; -import org.testng.annotations.Test; - -import org.openqa.selenium.support.ui.WebDriverWait; -import org.openqa.selenium.support.ui.ExpectedConditions; - -import io.appium.java_client.MobileBy; -import io.appium.java_client.ios.IOSElement; - - -public class FirstTest extends BrowserStackTestNGTest { - - @Test - public void test() throws Exception { - IOSElement textButton = (IOSElement) new WebDriverWait(driver, 30).until( - ExpectedConditions.elementToBeClickable(MobileBy.AccessibilityId("Text Button"))); - textButton.click(); - IOSElement textInput = (IOSElement) new WebDriverWait(driver, 30).until( - ExpectedConditions.elementToBeClickable(MobileBy.AccessibilityId("Text Input"))); - textInput.sendKeys("hello@browserstack.com"+"\n"); - - Thread.sleep(5000); - - IOSElement textOutput = (IOSElement) new WebDriverWait(driver, 30).until( - ExpectedConditions.elementToBeClickable(MobileBy.AccessibilityId("Text Output"))); - - Assert.assertEquals(textOutput.getText(),"hello@browserstack.com"); - } -} diff --git a/ios/testng-examples/src/test/java/com/browserstack/run_parallel_test/BrowserStackTestNGTest.java b/ios/testng-examples/src/test/java/com/browserstack/run_parallel_test/BrowserStackTestNGTest.java deleted file mode 100644 index e6e08bc..0000000 --- a/ios/testng-examples/src/test/java/com/browserstack/run_parallel_test/BrowserStackTestNGTest.java +++ /dev/null @@ -1,73 +0,0 @@ -package com.browserstack.run_parallel_test; - -import java.net.URL; -import java.util.Map; -import java.util.Iterator; -import java.io.FileReader; -import org.json.simple.JSONObject; -import org.json.simple.parser.JSONParser; -import org.json.simple.JSONArray; - -import org.openqa.selenium.remote.DesiredCapabilities; - -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.AfterMethod; -import org.testng.annotations.Parameters; - -import io.appium.java_client.ios.IOSDriver; -import io.appium.java_client.ios.IOSElement; - - -public class BrowserStackTestNGTest { - public IOSDriver driver; - - @BeforeMethod(alwaysRun=true) - @org.testng.annotations.Parameters(value={"deviceIndex"}) - public void setUp(String deviceIndex) throws Exception { - JSONParser parser = new JSONParser(); - JSONObject config = (JSONObject) parser.parse(new FileReader("src/test/resources/com/browserstack/run_parallel_test/parallel.conf.json")); - JSONArray envs = (JSONArray) config.get("environments"); - - DesiredCapabilities capabilities = new DesiredCapabilities(); - - Map envCapabilities = (Map) envs.get(Integer.parseInt(deviceIndex)); - Iterator it = envCapabilities.entrySet().iterator(); - while (it.hasNext()) { - Map.Entry pair = (Map.Entry)it.next(); - capabilities.setCapability(pair.getKey().toString(), pair.getValue().toString()); - } - - 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()); - } - } - - String username = System.getenv("BROWSERSTACK_USERNAME"); - if(username == null) { - username = (String) config.get("username"); - } - - String accessKey = System.getenv("BROWSERSTACK_ACCESS_KEY"); - if(accessKey == null) { - accessKey = (String) config.get("access_key"); - } - - String app = System.getenv("BROWSERSTACK_APP_ID"); - if(app != null && !app.isEmpty()) { - capabilities.setCapability("app", app); - } - - driver = new IOSDriver(new URL("http://"+username+":"+accessKey+"@"+config.get("server")+"/wd/hub"), capabilities); - } - - @AfterMethod(alwaysRun=true) - public void tearDown() throws Exception { - // Invoke driver.quit() to indicate that the test is completed. - // Otherwise, it will appear as timed out on BrowserStack. - driver.quit(); - } -} diff --git a/ios/testng-examples/src/test/java/com/browserstack/run_parallel_test/ParallelTest.java b/ios/testng-examples/src/test/java/com/browserstack/run_parallel_test/ParallelTest.java deleted file mode 100644 index bbd3b80..0000000 --- a/ios/testng-examples/src/test/java/com/browserstack/run_parallel_test/ParallelTest.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.browserstack.run_parallel_test; - -import org.testng.Assert; -import org.testng.annotations.Test; - -import org.openqa.selenium.support.ui.WebDriverWait; -import org.openqa.selenium.support.ui.ExpectedConditions; - -import io.appium.java_client.MobileBy; -import io.appium.java_client.ios.IOSElement; - - -public class ParallelTest extends BrowserStackTestNGTest { - - @Test - public void test() throws Exception { - IOSElement textButton = (IOSElement) new WebDriverWait(driver, 30).until( - ExpectedConditions.elementToBeClickable(MobileBy.AccessibilityId("Text Button"))); - textButton.click(); - IOSElement textInput = (IOSElement) new WebDriverWait(driver, 30).until( - ExpectedConditions.elementToBeClickable(MobileBy.AccessibilityId("Text Input"))); - textInput.sendKeys("hello@browserstack.com"+"\n"); - - Thread.sleep(5000); - - IOSElement textOutput = (IOSElement) new WebDriverWait(driver, 30).until( - ExpectedConditions.elementToBeClickable(MobileBy.AccessibilityId("Text Output"))); - - Assert.assertEquals(textOutput.getText(),"hello@browserstack.com"); - } -} diff --git a/ios/testng-examples/src/test/resources/com/browserstack/run_first_test/first.conf.json b/ios/testng-examples/src/test/resources/com/browserstack/run_first_test/first.conf.json index 9cba216..8ae888e 100644 --- a/ios/testng-examples/src/test/resources/com/browserstack/run_first_test/first.conf.json +++ b/ios/testng-examples/src/test/resources/com/browserstack/run_first_test/first.conf.json @@ -1,20 +1,23 @@ { - "server": "hub-cloud.browserstack.com", - "username": "BROWSERSTACK_USERNAME", - "access_key": "BROWSERSTACK_ACCESS_KEY", + "server": "hub.browserstack.com", "capabilities": { - "project": "First TestNg iOS Project", - "build": "browserstack-build-1", - "name": "first_test", - "browserstack.debug": true, - "app": "bs://" + "app": "bs://", + "bstack:options": { + "projectName": "First TestNg iOS Project", + "buildName": "browserstack-build-1", + "sessionName": "BStack first_test", + "debug": true, + "userName": "BROWSERSTACK_USERNAME", + "accessKey": "BROWSERSTACK_ACCESS_KEY" + } }, "environments": [ { - "device": "iPhone 11 Pro", - "os_version": "13" + "deviceName": "iPhone 11 Pro Max", + "platformVersion": "13", + "platformName": "ios" } ] } diff --git a/ios/testng-examples/src/test/resources/com/browserstack/run_first_test/first.testng.xml b/ios/testng-examples/src/test/resources/com/browserstack/run_first_test/first.testng.xml index 8624aeb..51aee70 100644 --- a/ios/testng-examples/src/test/resources/com/browserstack/run_first_test/first.testng.xml +++ b/ios/testng-examples/src/test/resources/com/browserstack/run_first_test/first.testng.xml @@ -2,8 +2,10 @@ + + - + diff --git a/ios/testng-examples/src/test/resources/com/browserstack/run_local_test/local.conf.json b/ios/testng-examples/src/test/resources/com/browserstack/run_local_test/local.conf.json index 9acbe44..2c214f3 100644 --- a/ios/testng-examples/src/test/resources/com/browserstack/run_local_test/local.conf.json +++ b/ios/testng-examples/src/test/resources/com/browserstack/run_local_test/local.conf.json @@ -1,21 +1,24 @@ { - "server": "hub-cloud.browserstack.com", - "username": "BROWSERSTACK_USERNAME", - "access_key": "BROWSERSTACK_ACCESS_KEY", + "server": "hub.browserstack.com", "capabilities": { - "project": "First TestNg iOS Project", - "build": "browserstack-build-1", - "name": "local_test", - "browserstack.debug": true, - "browserstack.local": true, - "app": "bs://" + "app": "bs://", + "bstack:options": { + "projectName": "First TestNg iOS Project", + "buildName": "browserstack-build-1", + "sessionName": "BStack local_test", + "debug": true, + "local": true, + "userName": "BROWSERSTACK_USERNAME", + "accessKey": "BROWSERSTACK_ACCESS_KEY" + } }, "environments": [ { - "device": "iPhone 11 Pro", - "os_version": "13" + "deviceName": "iPhone XS", + "platformVersion": "12", + "platformName": "ios" } ] } diff --git a/ios/testng-examples/src/test/resources/com/browserstack/run_local_test/local.testng.xml b/ios/testng-examples/src/test/resources/com/browserstack/run_local_test/local.testng.xml index 26bcaff..73e32d7 100644 --- a/ios/testng-examples/src/test/resources/com/browserstack/run_local_test/local.testng.xml +++ b/ios/testng-examples/src/test/resources/com/browserstack/run_local_test/local.testng.xml @@ -2,8 +2,10 @@ + + - + diff --git a/ios/testng-examples/src/test/resources/com/browserstack/run_parallel_test/parallel.conf.json b/ios/testng-examples/src/test/resources/com/browserstack/run_parallel_test/parallel.conf.json index 6b7afe9..aab4b7f 100644 --- a/ios/testng-examples/src/test/resources/com/browserstack/run_parallel_test/parallel.conf.json +++ b/ios/testng-examples/src/test/resources/com/browserstack/run_parallel_test/parallel.conf.json @@ -1,24 +1,28 @@ { - "server": "hub-cloud.browserstack.com", - "username": "BROWSERSTACK_USERNAME", - "access_key": "BROWSERSTACK_ACCESS_KEY", + "server": "hub.browserstack.com", "capabilities": { - "project": "First TestNg iOS Project", - "build": "browserstack-build-1", - "name": "parallel_test", - "browserstack.debug": true, - "app": "bs://" + "app": "bs://", + "bstack:options": { + "projectName": "First TestNg iOS Project", + "buildName": "browserstack-build-1", + "sessionName": "BStack parallel_test", + "debug": true, + "userName": "BROWSERSTACK_USERNAME", + "accessKey": "BROWSERSTACK_ACCESS_KEY" + } }, "environments": [ - { - "device": "iPhone 11 Pro", - "os_version": "13" + { + "deviceName": "iPhone 11 Pro Max", + "platformVersion": "13", + "platformName": "ios" }, - { - "device": "iPhone 11 Pro Max", - "os_version": "13" + { + "deviceName": "iPhone 11 Pro Max", + "platformVersion": "13", + "platformName": "ios" } ] } diff --git a/ios/testng-examples/src/test/resources/com/browserstack/run_parallel_test/parallel.testng.xml b/ios/testng-examples/src/test/resources/com/browserstack/run_parallel_test/parallel.testng.xml index b009413..4c26875 100644 --- a/ios/testng-examples/src/test/resources/com/browserstack/run_parallel_test/parallel.testng.xml +++ b/ios/testng-examples/src/test/resources/com/browserstack/run_parallel_test/parallel.testng.xml @@ -3,15 +3,17 @@ + - + + - +