diff --git a/README.md b/android/README.md similarity index 100% rename from README.md rename to android/README.md diff --git a/config/local.testng.xml b/android/config/local.testng.xml similarity index 100% rename from config/local.testng.xml rename to android/config/local.testng.xml diff --git a/config/parallel.testng.xml b/android/config/parallel.testng.xml similarity index 100% rename from config/parallel.testng.xml rename to android/config/parallel.testng.xml diff --git a/config/single.testng.xml b/android/config/single.testng.xml similarity index 100% rename from config/single.testng.xml rename to android/config/single.testng.xml diff --git a/config/suite.testng.xml b/android/config/suite.testng.xml similarity index 100% rename from config/suite.testng.xml rename to android/config/suite.testng.xml diff --git a/pom.xml b/android/pom.xml similarity index 100% rename from pom.xml rename to android/pom.xml diff --git a/src/test/java/com/browserstack/BrowserStackTestNGTest.java b/android/src/test/java/com/browserstack/BrowserStackTestNGTest.java similarity index 100% rename from src/test/java/com/browserstack/BrowserStackTestNGTest.java rename to android/src/test/java/com/browserstack/BrowserStackTestNGTest.java diff --git a/src/test/java/com/browserstack/LocalTest.java b/android/src/test/java/com/browserstack/LocalTest.java similarity index 100% rename from src/test/java/com/browserstack/LocalTest.java rename to android/src/test/java/com/browserstack/LocalTest.java diff --git a/src/test/java/com/browserstack/SingleTest.java b/android/src/test/java/com/browserstack/SingleTest.java similarity index 100% rename from src/test/java/com/browserstack/SingleTest.java rename to android/src/test/java/com/browserstack/SingleTest.java diff --git a/src/test/java/com/browserstack/suite/SuiteTest01.java b/android/src/test/java/com/browserstack/suite/SuiteTest01.java similarity index 100% rename from src/test/java/com/browserstack/suite/SuiteTest01.java rename to android/src/test/java/com/browserstack/suite/SuiteTest01.java diff --git a/src/test/java/com/browserstack/suite/SuiteTest02.java b/android/src/test/java/com/browserstack/suite/SuiteTest02.java similarity index 100% rename from src/test/java/com/browserstack/suite/SuiteTest02.java rename to android/src/test/java/com/browserstack/suite/SuiteTest02.java diff --git a/src/test/java/com/browserstack/suite/SuiteTest03.java b/android/src/test/java/com/browserstack/suite/SuiteTest03.java similarity index 100% rename from src/test/java/com/browserstack/suite/SuiteTest03.java rename to android/src/test/java/com/browserstack/suite/SuiteTest03.java diff --git a/src/test/java/com/browserstack/suite/SuiteTest04.java b/android/src/test/java/com/browserstack/suite/SuiteTest04.java similarity index 100% rename from src/test/java/com/browserstack/suite/SuiteTest04.java rename to android/src/test/java/com/browserstack/suite/SuiteTest04.java diff --git a/src/test/java/com/browserstack/suite/SuiteTest05.java b/android/src/test/java/com/browserstack/suite/SuiteTest05.java similarity index 100% rename from src/test/java/com/browserstack/suite/SuiteTest05.java rename to android/src/test/java/com/browserstack/suite/SuiteTest05.java diff --git a/src/test/java/com/browserstack/suite/SuiteTest06.java b/android/src/test/java/com/browserstack/suite/SuiteTest06.java similarity index 100% rename from src/test/java/com/browserstack/suite/SuiteTest06.java rename to android/src/test/java/com/browserstack/suite/SuiteTest06.java diff --git a/src/test/java/com/browserstack/suite/SuiteTest07.java b/android/src/test/java/com/browserstack/suite/SuiteTest07.java similarity index 100% rename from src/test/java/com/browserstack/suite/SuiteTest07.java rename to android/src/test/java/com/browserstack/suite/SuiteTest07.java diff --git a/src/test/java/com/browserstack/suite/SuiteTest08.java b/android/src/test/java/com/browserstack/suite/SuiteTest08.java similarity index 100% rename from src/test/java/com/browserstack/suite/SuiteTest08.java rename to android/src/test/java/com/browserstack/suite/SuiteTest08.java diff --git a/src/test/java/com/browserstack/suite/SuiteTest09.java b/android/src/test/java/com/browserstack/suite/SuiteTest09.java similarity index 100% rename from src/test/java/com/browserstack/suite/SuiteTest09.java rename to android/src/test/java/com/browserstack/suite/SuiteTest09.java diff --git a/src/test/java/com/browserstack/suite/SuiteTest10.java b/android/src/test/java/com/browserstack/suite/SuiteTest10.java similarity index 100% rename from src/test/java/com/browserstack/suite/SuiteTest10.java rename to android/src/test/java/com/browserstack/suite/SuiteTest10.java diff --git a/src/test/resources/conf/local.conf.json b/android/src/test/resources/conf/local.conf.json similarity index 100% rename from src/test/resources/conf/local.conf.json rename to android/src/test/resources/conf/local.conf.json diff --git a/src/test/resources/conf/parallel.conf.json b/android/src/test/resources/conf/parallel.conf.json similarity index 100% rename from src/test/resources/conf/parallel.conf.json rename to android/src/test/resources/conf/parallel.conf.json diff --git a/src/test/resources/conf/single.conf.json b/android/src/test/resources/conf/single.conf.json similarity index 100% rename from src/test/resources/conf/single.conf.json rename to android/src/test/resources/conf/single.conf.json diff --git a/src/test/resources/conf/suite.conf.json b/android/src/test/resources/conf/suite.conf.json similarity index 100% rename from src/test/resources/conf/suite.conf.json rename to android/src/test/resources/conf/suite.conf.json diff --git a/ios/README.md b/ios/README.md new file mode 100644 index 0000000..51844ca --- /dev/null +++ b/ios/README.md @@ -0,0 +1,23 @@ +## 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 +- To run a single test, run `mvn test -P single` +- To run parallel tests, run `mvn test -P parallel` +- To run local tests, run `mvn test -P local` + +## Notes +* You can view your test results on the [BrowserStack Automate dashboard](https://www.browserstack.com/automate) +* Refer [Get Started](https://www.browserstack.com/app-automate/get-started#getting-started) document to configure the capabilities +* You can export the environment variables for the Username and Access Key of your BrowserStack account + + ``` + export BROWSERSTACK_USERNAME= && + export BROWSERSTACK_ACCESS_KEY= + ``` + +## Additional Resources +* [Getting Started with App Automate](https://www.browserstack.com/app-automate/get-started) diff --git a/ios/config/local.testng.xml b/ios/config/local.testng.xml new file mode 100644 index 0000000..d1f8910 --- /dev/null +++ b/ios/config/local.testng.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/ios/config/parallel.testng.xml b/ios/config/parallel.testng.xml new file mode 100644 index 0000000..8b82034 --- /dev/null +++ b/ios/config/parallel.testng.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/ios/config/single.testng.xml b/ios/config/single.testng.xml new file mode 100644 index 0000000..54fbdd6 --- /dev/null +++ b/ios/config/single.testng.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/ios/config/suite.testng.xml b/ios/config/suite.testng.xml new file mode 100644 index 0000000..2366708 --- /dev/null +++ b/ios/config/suite.testng.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ios/pom.xml b/ios/pom.xml new file mode 100644 index 0000000..18be4c7 --- /dev/null +++ b/ios/pom.xml @@ -0,0 +1,139 @@ + + 4.0.0 + + com.browserstack + testng-browserstack + 1.0-SNAPSHOT + jar + + testng-browserstack + https://github.com/browserstack/testng-appium-app-browserstack + + + UTF-8 + 2.19.1 + + + default + + + + + org.testng + testng + 6.9.10 + + + io.appium + java-client + 4.1.2 + + + 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.apache.maven.plugins + maven-surefire-plugin + 2.12.4 + + + org.apache.maven.plugins + maven-surefire-plugin + 2.18.1 + + + + + + + single + + + + org.apache.maven.plugins + maven-surefire-plugin + + + config/single.testng.xml + + + + + + + + + local + + + + org.apache.maven.plugins + maven-surefire-plugin + + + config/local.testng.xml + + + + + + + + + parallel + + + + org.apache.maven.plugins + maven-surefire-plugin + + + config/parallel.testng.xml + + + + + + + + + suite + + + + org.apache.maven.plugins + maven-surefire-plugin + + + config/suite.testng.xml + + + + + + + + + diff --git a/ios/src/test/java/com/browserstack/BrowserStackTestNGTest.java b/ios/src/test/java/com/browserstack/BrowserStackTestNGTest.java new file mode 100644 index 0000000..0f4c7dc --- /dev/null +++ b/ios/src/test/java/com/browserstack/BrowserStackTestNGTest.java @@ -0,0 +1,76 @@ +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; +import org.json.simple.parser.JSONParser; + +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; + private Local l; + + @BeforeMethod(alwaysRun=true) + @org.testng.annotations.Parameters(value={"config", "environment"}) + 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)); + JSONObject envs = (JSONObject) config.get("environments"); + + DesiredCapabilities capabilities = new DesiredCapabilities(); + + 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 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()); + } + } + + 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("browserstack.local") != null && capabilities.getCapability("browserstack.local") == "true"){ + l = new Local(); + Map options = new HashMap(); + options.put("key", accessKey); + l.start(options); + } + + driver = new IOSDriver(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(); + } +} diff --git a/ios/src/test/java/com/browserstack/LocalTest.java b/ios/src/test/java/com/browserstack/LocalTest.java new file mode 100644 index 0000000..1734928 --- /dev/null +++ b/ios/src/test/java/com/browserstack/LocalTest.java @@ -0,0 +1,50 @@ +package com.browserstack; + +import org.testng.Assert; +import org.testng.annotations.Test; + +import java.io.File; +import org.apache.commons.io.FileUtils; + +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.OutputType; +import org.openqa.selenium.TakesScreenshot; +import org.openqa.selenium.support.ui.WebDriverWait; +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; + + +public class LocalTest extends BrowserStackTestNGTest { + + @Test + public void test() throws Exception { + IOSElement testButton = (IOSElement) new WebDriverWait(driver, 30).until( + ExpectedConditions.elementToBeClickable(MobileBy.AccessibilityId("TestBrowserStackLocal"))); + testButton.click(); + + WebDriverWait wait = new WebDriverWait(driver, 30); + wait.until(new ExpectedCondition() { + @Override + public Boolean apply(WebDriver d) { + String result = d.findElement(MobileBy.AccessibilityId("ResultBrowserStackLocal")).getAttribute("value"); + return result != null && result.length() > 0; + } + }); + IOSElement resultElement = (IOSElement) driver.findElement(MobileBy.AccessibilityId("ResultBrowserStackLocal")); + + String resultString = resultElement.getText().toLowerCase(); + System.out.println(resultString); + if(resultString.contains("not working")) { + File scrFile = (File) ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE); + FileUtils.copyFile(scrFile, new File(System.getProperty("user.dir") + "/screenshot.png")); + System.out.println("Screenshot stored at " + System.getProperty("user.dir") + "/screenshot.png"); + throw new Error("Unexpected BrowserStackLocal test result"); + } + + String expectedString = "Up and running"; + Assert.assertTrue(resultString.contains(expectedString.toLowerCase())); + } +} diff --git a/ios/src/test/java/com/browserstack/SingleTest.java b/ios/src/test/java/com/browserstack/SingleTest.java new file mode 100644 index 0000000..4de996f --- /dev/null +++ b/ios/src/test/java/com/browserstack/SingleTest.java @@ -0,0 +1,48 @@ +package com.browserstack; + +import java.util.List; +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 SingleTest extends BrowserStackTestNGTest { + + @Test + public void test() throws Exception { + IOSElement loginButton = (IOSElement) new WebDriverWait(driver, 30).until( + ExpectedConditions.elementToBeClickable(MobileBy.AccessibilityId("Log In"))); + loginButton.click(); + IOSElement emailTextField = (IOSElement) new WebDriverWait(driver, 30).until( + ExpectedConditions.elementToBeClickable(MobileBy.AccessibilityId("Email address"))); + + // element.sendKeys() method is not supported in Appium 1.6.3 + // Workaround for sendKeys() method: + emailTextField.click(); + String email = "hello@browserstack.com"; + for (int i = 0; i < email.length(); i++) { + driver.findElementByXPath("//XCUIElementTypeKey[@name='" + email.charAt(i) + "']").click(); + } + + driver.findElementByAccessibilityId("Next").click(); + Thread.sleep(5000); + + List textElements = driver.findElementsByXPath("//XCUIElementTypeStaticText"); + Assert.assertTrue(textElements.size() > 0); + String matchedString = ""; + for(IOSElement textElement : textElements) { + String textContent = textElement.getText(); + if(textContent.contains("not registered")) { + matchedString = textContent; + } + } + + System.out.println(matchedString); + Assert.assertTrue(matchedString.contains("not registered on WordPress.com")); + } +} diff --git a/ios/src/test/java/com/browserstack/suite/SuiteTest01.java b/ios/src/test/java/com/browserstack/suite/SuiteTest01.java new file mode 100644 index 0000000..ce8ea02 --- /dev/null +++ b/ios/src/test/java/com/browserstack/suite/SuiteTest01.java @@ -0,0 +1,49 @@ +package com.browserstack.suite; + +import java.util.List; +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; + +import com.browserstack.BrowserStackTestNGTest; + +public class SuiteTest01 extends BrowserStackTestNGTest { + + @Test + public void test_01() throws Exception { + IOSElement loginButton = (IOSElement) new WebDriverWait(driver, 30).until( + ExpectedConditions.elementToBeClickable(MobileBy.AccessibilityId("Log In"))); + loginButton.click(); + IOSElement emailTextField = (IOSElement) new WebDriverWait(driver, 30).until( + ExpectedConditions.elementToBeClickable(MobileBy.AccessibilityId("Email address"))); + + // element.sendKeys() method is not supported in Appium 1.6.3 + // Workaround for sendKeys() method: + emailTextField.click(); + String email = "hello.a@browserstack.com"; + for (int i = 0; i < email.length(); i++) { + driver.findElementByXPath("//XCUIElementTypeKey[@name='" + email.charAt(i) + "']").click(); + } + + driver.findElementByAccessibilityId("Next").click(); + Thread.sleep(5000); + + List textElements = driver.findElementsByXPath("//XCUIElementTypeStaticText"); + Assert.assertTrue(textElements.size() > 0); + String matchedString = ""; + for(IOSElement textElement : textElements) { + String textContent = textElement.getText(); + if(textContent.contains("not registered")) { + matchedString = textContent; + } + } + + System.out.println(matchedString); + Assert.assertTrue(matchedString.contains("not registered on WordPress.com")); + } +} diff --git a/ios/src/test/java/com/browserstack/suite/SuiteTest02.java b/ios/src/test/java/com/browserstack/suite/SuiteTest02.java new file mode 100644 index 0000000..f39197f --- /dev/null +++ b/ios/src/test/java/com/browserstack/suite/SuiteTest02.java @@ -0,0 +1,49 @@ +package com.browserstack.suite; + +import java.util.List; +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; + +import com.browserstack.BrowserStackTestNGTest; + +public class SuiteTest02 extends BrowserStackTestNGTest { + + @Test + public void test_02() throws Exception { + IOSElement loginButton = (IOSElement) new WebDriverWait(driver, 30).until( + ExpectedConditions.elementToBeClickable(MobileBy.AccessibilityId("Log In"))); + loginButton.click(); + IOSElement emailTextField = (IOSElement) new WebDriverWait(driver, 30).until( + ExpectedConditions.elementToBeClickable(MobileBy.AccessibilityId("Email address"))); + + // element.sendKeys() method is not supported in Appium 1.6.3 + // Workaround for sendKeys() method: + emailTextField.click(); + String email = "hello.b@browserstack.com"; + for (int i = 0; i < email.length(); i++) { + driver.findElementByXPath("//XCUIElementTypeKey[@name='" + email.charAt(i) + "']").click(); + } + + driver.findElementByAccessibilityId("Next").click(); + Thread.sleep(5000); + + List textElements = driver.findElementsByXPath("//XCUIElementTypeStaticText"); + Assert.assertTrue(textElements.size() > 0); + String matchedString = ""; + for(IOSElement textElement : textElements) { + String textContent = textElement.getText(); + if(textContent.contains("not registered")) { + matchedString = textContent; + } + } + + System.out.println(matchedString); + Assert.assertTrue(matchedString.contains("not registered on WordPress.com")); + } +} diff --git a/ios/src/test/java/com/browserstack/suite/SuiteTest03.java b/ios/src/test/java/com/browserstack/suite/SuiteTest03.java new file mode 100644 index 0000000..9a4130e --- /dev/null +++ b/ios/src/test/java/com/browserstack/suite/SuiteTest03.java @@ -0,0 +1,49 @@ +package com.browserstack.suite; + +import java.util.List; +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; + +import com.browserstack.BrowserStackTestNGTest; + +public class SuiteTest03 extends BrowserStackTestNGTest { + + @Test + public void test_03() throws Exception { + IOSElement loginButton = (IOSElement) new WebDriverWait(driver, 30).until( + ExpectedConditions.elementToBeClickable(MobileBy.AccessibilityId("Log In"))); + loginButton.click(); + IOSElement emailTextField = (IOSElement) new WebDriverWait(driver, 30).until( + ExpectedConditions.elementToBeClickable(MobileBy.AccessibilityId("Email address"))); + + // element.sendKeys() method is not supported in Appium 1.6.3 + // Workaround for sendKeys() method: + emailTextField.click(); + String email = "hello.c@browserstack.com"; + for (int i = 0; i < email.length(); i++) { + driver.findElementByXPath("//XCUIElementTypeKey[@name='" + email.charAt(i) + "']").click(); + } + + driver.findElementByAccessibilityId("Next").click(); + Thread.sleep(5000); + + List textElements = driver.findElementsByXPath("//XCUIElementTypeStaticText"); + Assert.assertTrue(textElements.size() > 0); + String matchedString = ""; + for(IOSElement textElement : textElements) { + String textContent = textElement.getText(); + if(textContent.contains("not registered")) { + matchedString = textContent; + } + } + + System.out.println(matchedString); + Assert.assertTrue(matchedString.contains("not registered on WordPress.com")); + } +} diff --git a/ios/src/test/java/com/browserstack/suite/SuiteTest04.java b/ios/src/test/java/com/browserstack/suite/SuiteTest04.java new file mode 100644 index 0000000..92c56e7 --- /dev/null +++ b/ios/src/test/java/com/browserstack/suite/SuiteTest04.java @@ -0,0 +1,49 @@ +package com.browserstack.suite; + +import java.util.List; +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; + +import com.browserstack.BrowserStackTestNGTest; + +public class SuiteTest04 extends BrowserStackTestNGTest { + + @Test + public void test_04() throws Exception { + IOSElement loginButton = (IOSElement) new WebDriverWait(driver, 30).until( + ExpectedConditions.elementToBeClickable(MobileBy.AccessibilityId("Log In"))); + loginButton.click(); + IOSElement emailTextField = (IOSElement) new WebDriverWait(driver, 30).until( + ExpectedConditions.elementToBeClickable(MobileBy.AccessibilityId("Email address"))); + + // element.sendKeys() method is not supported in Appium 1.6.3 + // Workaround for sendKeys() method: + emailTextField.click(); + String email = "hello.d@browserstack.com"; + for (int i = 0; i < email.length(); i++) { + driver.findElementByXPath("//XCUIElementTypeKey[@name='" + email.charAt(i) + "']").click(); + } + + driver.findElementByAccessibilityId("Next").click(); + Thread.sleep(5000); + + List textElements = driver.findElementsByXPath("//XCUIElementTypeStaticText"); + Assert.assertTrue(textElements.size() > 0); + String matchedString = ""; + for(IOSElement textElement : textElements) { + String textContent = textElement.getText(); + if(textContent.contains("not registered")) { + matchedString = textContent; + } + } + + System.out.println(matchedString); + Assert.assertTrue(matchedString.contains("not registered on WordPress.com")); + } +} diff --git a/ios/src/test/java/com/browserstack/suite/SuiteTest05.java b/ios/src/test/java/com/browserstack/suite/SuiteTest05.java new file mode 100644 index 0000000..0626058 --- /dev/null +++ b/ios/src/test/java/com/browserstack/suite/SuiteTest05.java @@ -0,0 +1,49 @@ +package com.browserstack.suite; + +import java.util.List; +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; + +import com.browserstack.BrowserStackTestNGTest; + +public class SuiteTest05 extends BrowserStackTestNGTest { + + @Test + public void test_05() throws Exception { + IOSElement loginButton = (IOSElement) new WebDriverWait(driver, 30).until( + ExpectedConditions.elementToBeClickable(MobileBy.AccessibilityId("Log In"))); + loginButton.click(); + IOSElement emailTextField = (IOSElement) new WebDriverWait(driver, 30).until( + ExpectedConditions.elementToBeClickable(MobileBy.AccessibilityId("Email address"))); + + // element.sendKeys() method is not supported in Appium 1.6.3 + // Workaround for sendKeys() method: + emailTextField.click(); + String email = "hello.e@browserstack.com"; + for (int i = 0; i < email.length(); i++) { + driver.findElementByXPath("//XCUIElementTypeKey[@name='" + email.charAt(i) + "']").click(); + } + + driver.findElementByAccessibilityId("Next").click(); + Thread.sleep(5000); + + List textElements = driver.findElementsByXPath("//XCUIElementTypeStaticText"); + Assert.assertTrue(textElements.size() > 0); + String matchedString = ""; + for(IOSElement textElement : textElements) { + String textContent = textElement.getText(); + if(textContent.contains("not registered")) { + matchedString = textContent; + } + } + + System.out.println(matchedString); + Assert.assertTrue(matchedString.contains("not registered on WordPress.com")); + } +} diff --git a/ios/src/test/java/com/browserstack/suite/SuiteTest06.java b/ios/src/test/java/com/browserstack/suite/SuiteTest06.java new file mode 100644 index 0000000..9a8665a --- /dev/null +++ b/ios/src/test/java/com/browserstack/suite/SuiteTest06.java @@ -0,0 +1,49 @@ +package com.browserstack.suite; + +import java.util.List; +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; + +import com.browserstack.BrowserStackTestNGTest; + +public class SuiteTest06 extends BrowserStackTestNGTest { + + @Test + public void test_06() throws Exception { + IOSElement loginButton = (IOSElement) new WebDriverWait(driver, 30).until( + ExpectedConditions.elementToBeClickable(MobileBy.AccessibilityId("Log In"))); + loginButton.click(); + IOSElement emailTextField = (IOSElement) new WebDriverWait(driver, 30).until( + ExpectedConditions.elementToBeClickable(MobileBy.AccessibilityId("Email address"))); + + // element.sendKeys() method is not supported in Appium 1.6.3 + // Workaround for sendKeys() method: + emailTextField.click(); + String email = "hello.f@browserstack.com"; + for (int i = 0; i < email.length(); i++) { + driver.findElementByXPath("//XCUIElementTypeKey[@name='" + email.charAt(i) + "']").click(); + } + + driver.findElementByAccessibilityId("Next").click(); + Thread.sleep(5000); + + List textElements = driver.findElementsByXPath("//XCUIElementTypeStaticText"); + Assert.assertTrue(textElements.size() > 0); + String matchedString = ""; + for(IOSElement textElement : textElements) { + String textContent = textElement.getText(); + if(textContent.contains("not registered")) { + matchedString = textContent; + } + } + + System.out.println(matchedString); + Assert.assertTrue(matchedString.contains("not registered on WordPress.com")); + } +} diff --git a/ios/src/test/java/com/browserstack/suite/SuiteTest07.java b/ios/src/test/java/com/browserstack/suite/SuiteTest07.java new file mode 100644 index 0000000..0aed606 --- /dev/null +++ b/ios/src/test/java/com/browserstack/suite/SuiteTest07.java @@ -0,0 +1,49 @@ +package com.browserstack.suite; + +import java.util.List; +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; + +import com.browserstack.BrowserStackTestNGTest; + +public class SuiteTest07 extends BrowserStackTestNGTest { + + @Test + public void test_07() throws Exception { + IOSElement loginButton = (IOSElement) new WebDriverWait(driver, 30).until( + ExpectedConditions.elementToBeClickable(MobileBy.AccessibilityId("Log In"))); + loginButton.click(); + IOSElement emailTextField = (IOSElement) new WebDriverWait(driver, 30).until( + ExpectedConditions.elementToBeClickable(MobileBy.AccessibilityId("Email address"))); + + // element.sendKeys() method is not supported in Appium 1.6.3 + // Workaround for sendKeys() method: + emailTextField.click(); + String email = "hello.g@browserstack.com"; + for (int i = 0; i < email.length(); i++) { + driver.findElementByXPath("//XCUIElementTypeKey[@name='" + email.charAt(i) + "']").click(); + } + + driver.findElementByAccessibilityId("Next").click(); + Thread.sleep(5000); + + List textElements = driver.findElementsByXPath("//XCUIElementTypeStaticText"); + Assert.assertTrue(textElements.size() > 0); + String matchedString = ""; + for(IOSElement textElement : textElements) { + String textContent = textElement.getText(); + if(textContent.contains("not registered")) { + matchedString = textContent; + } + } + + System.out.println(matchedString); + Assert.assertTrue(matchedString.contains("not registered on WordPress.com")); + } +} diff --git a/ios/src/test/java/com/browserstack/suite/SuiteTest08.java b/ios/src/test/java/com/browserstack/suite/SuiteTest08.java new file mode 100644 index 0000000..7fa791a --- /dev/null +++ b/ios/src/test/java/com/browserstack/suite/SuiteTest08.java @@ -0,0 +1,49 @@ +package com.browserstack.suite; + +import java.util.List; +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; + +import com.browserstack.BrowserStackTestNGTest; + +public class SuiteTest08 extends BrowserStackTestNGTest { + + @Test + public void test_08() throws Exception { + IOSElement loginButton = (IOSElement) new WebDriverWait(driver, 30).until( + ExpectedConditions.elementToBeClickable(MobileBy.AccessibilityId("Log In"))); + loginButton.click(); + IOSElement emailTextField = (IOSElement) new WebDriverWait(driver, 30).until( + ExpectedConditions.elementToBeClickable(MobileBy.AccessibilityId("Email address"))); + + // element.sendKeys() method is not supported in Appium 1.6.3 + // Workaround for sendKeys() method: + emailTextField.click(); + String email = "hello.h@browserstack.com"; + for (int i = 0; i < email.length(); i++) { + driver.findElementByXPath("//XCUIElementTypeKey[@name='" + email.charAt(i) + "']").click(); + } + + driver.findElementByAccessibilityId("Next").click(); + Thread.sleep(5000); + + List textElements = driver.findElementsByXPath("//XCUIElementTypeStaticText"); + Assert.assertTrue(textElements.size() > 0); + String matchedString = ""; + for(IOSElement textElement : textElements) { + String textContent = textElement.getText(); + if(textContent.contains("not registered")) { + matchedString = textContent; + } + } + + System.out.println(matchedString); + Assert.assertTrue(matchedString.contains("not registered on WordPress.com")); + } +} diff --git a/ios/src/test/java/com/browserstack/suite/SuiteTest09.java b/ios/src/test/java/com/browserstack/suite/SuiteTest09.java new file mode 100644 index 0000000..37775ef --- /dev/null +++ b/ios/src/test/java/com/browserstack/suite/SuiteTest09.java @@ -0,0 +1,49 @@ +package com.browserstack.suite; + +import java.util.List; +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; + +import com.browserstack.BrowserStackTestNGTest; + +public class SuiteTest09 extends BrowserStackTestNGTest { + + @Test + public void test_09() throws Exception { + IOSElement loginButton = (IOSElement) new WebDriverWait(driver, 30).until( + ExpectedConditions.elementToBeClickable(MobileBy.AccessibilityId("Log In"))); + loginButton.click(); + IOSElement emailTextField = (IOSElement) new WebDriverWait(driver, 30).until( + ExpectedConditions.elementToBeClickable(MobileBy.AccessibilityId("Email address"))); + + // element.sendKeys() method is not supported in Appium 1.6.3 + // Workaround for sendKeys() method: + emailTextField.click(); + String email = "hello.i@browserstack.com"; + for (int i = 0; i < email.length(); i++) { + driver.findElementByXPath("//XCUIElementTypeKey[@name='" + email.charAt(i) + "']").click(); + } + + driver.findElementByAccessibilityId("Next").click(); + Thread.sleep(5000); + + List textElements = driver.findElementsByXPath("//XCUIElementTypeStaticText"); + Assert.assertTrue(textElements.size() > 0); + String matchedString = ""; + for(IOSElement textElement : textElements) { + String textContent = textElement.getText(); + if(textContent.contains("not registered")) { + matchedString = textContent; + } + } + + System.out.println(matchedString); + Assert.assertTrue(matchedString.contains("not registered on WordPress.com")); + } +} diff --git a/ios/src/test/java/com/browserstack/suite/SuiteTest10.java b/ios/src/test/java/com/browserstack/suite/SuiteTest10.java new file mode 100644 index 0000000..c2a147b --- /dev/null +++ b/ios/src/test/java/com/browserstack/suite/SuiteTest10.java @@ -0,0 +1,49 @@ +package com.browserstack.suite; + +import java.util.List; +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; + +import com.browserstack.BrowserStackTestNGTest; + +public class SuiteTest10 extends BrowserStackTestNGTest { + + @Test + public void test_10() throws Exception { + IOSElement loginButton = (IOSElement) new WebDriverWait(driver, 30).until( + ExpectedConditions.elementToBeClickable(MobileBy.AccessibilityId("Log In"))); + loginButton.click(); + IOSElement emailTextField = (IOSElement) new WebDriverWait(driver, 30).until( + ExpectedConditions.elementToBeClickable(MobileBy.AccessibilityId("Email address"))); + + // element.sendKeys() method is not supported in Appium 1.6.3 + // Workaround for sendKeys() method: + emailTextField.click(); + String email = "hello.j@browserstack.com"; + for (int i = 0; i < email.length(); i++) { + driver.findElementByXPath("//XCUIElementTypeKey[@name='" + email.charAt(i) + "']").click(); + } + + driver.findElementByAccessibilityId("Next").click(); + Thread.sleep(5000); + + List textElements = driver.findElementsByXPath("//XCUIElementTypeStaticText"); + Assert.assertTrue(textElements.size() > 0); + String matchedString = ""; + for(IOSElement textElement : textElements) { + String textContent = textElement.getText(); + if(textContent.contains("not registered")) { + matchedString = textContent; + } + } + + System.out.println(matchedString); + Assert.assertTrue(matchedString.contains("not registered on WordPress.com")); + } +} diff --git a/ios/src/test/resources/conf/local.conf.json b/ios/src/test/resources/conf/local.conf.json new file mode 100644 index 0000000..7523613 --- /dev/null +++ b/ios/src/test/resources/conf/local.conf.json @@ -0,0 +1,21 @@ +{ + "server": "hub.browserstack.com", + "user": "BROWSERSTACK_USERNAME", + "key": "BROWSERSTACK_ACCESS_KEY", + + "capabilities": { + "build": "testng-browserstack", + "name": "local_appium_test", + "browserstack.debug": true, + "browserstack.local": true, + "realMobile": true, + "app": "bs://", + "automationName": "XCUITest" + }, + + "environments": { + "iPhone_7": { + "device": "iPhone 7" + } + } +} diff --git a/ios/src/test/resources/conf/parallel.conf.json b/ios/src/test/resources/conf/parallel.conf.json new file mode 100644 index 0000000..7ff595d --- /dev/null +++ b/ios/src/test/resources/conf/parallel.conf.json @@ -0,0 +1,23 @@ +{ + "server": "hub.browserstack.com", + "user": "BROWSERSTACK_USERNAME", + "key": "BROWSERSTACK_ACCESS_KEY", + + "capabilities": { + "build": "testng-browserstack", + "name": "parallel_appium_test", + "browserstack.debug": true, + "realMobile": true, + "app": "bs://", + "automationName": "XCUITest" + }, + + "environments": { + "iPhone_7": { + "device": "iPhone 7" + }, + "iPhone_7_Plus": { + "device": "iPhone 7 Plus" + } + } +} diff --git a/ios/src/test/resources/conf/single.conf.json b/ios/src/test/resources/conf/single.conf.json new file mode 100644 index 0000000..30339e5 --- /dev/null +++ b/ios/src/test/resources/conf/single.conf.json @@ -0,0 +1,20 @@ +{ + "server": "hub.browserstack.com", + "user": "BROWSERSTACK_USERNAME", + "key": "BROWSERSTACK_ACCESS_KEY", + + "capabilities": { + "build": "testng-browserstack", + "name": "single_appium_test", + "browserstack.debug": true, + "realMobile": true, + "app": "bs://", + "automationName": "XCUITest" + }, + + "environments": { + "iPhone_7": { + "device": "iPhone 7" + } + } +} diff --git a/ios/src/test/resources/conf/suite.conf.json b/ios/src/test/resources/conf/suite.conf.json new file mode 100644 index 0000000..193d0ba --- /dev/null +++ b/ios/src/test/resources/conf/suite.conf.json @@ -0,0 +1,23 @@ +{ + "server": "hub.browserstack.com", + "user": "BROWSERSTACK_USERNAME", + "key": "BROWSERSTACK_ACCESS_KEY", + + "capabilities": { + "build": "testng-browserstack", + "name": "suite_appium_test", + "browserstack.debug": true, + "realMobile": true, + "app": "bs://", + "automationName": "XCUITest" + }, + + "environments": { + "iPhone_7": { + "device": "iPhone 7" + }, + "iPhone_7_Plus": { + "device": "iPhone 7 Plus" + } + } +}