Skip to content

Commit 3411a96

Browse files
authored
Merge pull request #10 from browserstack/use_native
re-add local samples | update readme
2 parents 62af473 + a32d46c commit 3411a96

File tree

4 files changed

+159
-0
lines changed

4 files changed

+159
-0
lines changed

android/LocalSampleAndroid.java

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
import com.browserstack.local.Local;
2+
3+
import java.net.URL;
4+
import java.util.Map;
5+
import java.util.List;
6+
import java.util.HashMap;
7+
8+
import io.appium.java_client.MobileBy;
9+
import io.appium.java_client.android.AndroidDriver;
10+
import io.appium.java_client.android.AndroidElement;
11+
12+
import org.openqa.selenium.support.ui.ExpectedConditions;
13+
import org.openqa.selenium.support.ui.WebDriverWait;
14+
import org.openqa.selenium.remote.DesiredCapabilities;
15+
16+
17+
public class LocalSampleAndroid {
18+
private static Local localInstance;
19+
public static String accessKey = "BROWSERSTACK_USERNAME";
20+
public static String userName = "BROWSERSTACK_ACCESS_KEY";
21+
22+
23+
public static void setupLocal() throws Exception {
24+
localInstance = new Local();
25+
Map<String, String> options = new HashMap<String, String>();
26+
options.put("key", accessKey);
27+
localInstance.start(options);
28+
}
29+
30+
public static void tearDownLocal() throws Exception {
31+
localInstance.stop();
32+
}
33+
34+
public static void main(String[] args) throws Exception {
35+
setupLocal();
36+
37+
DesiredCapabilities capabilities = new DesiredCapabilities();
38+
39+
capabilities.setCapability("browserstack.local", true);
40+
capabilities.setCapability("realMobile", true);
41+
capabilities.setCapability("device", "Samsung Galaxy S7");
42+
capabilities.setCapability("app", "bs://<hashed app-id>");
43+
44+
AndroidDriver<AndroidElement> driver = new AndroidDriver<AndroidElement>(new URL("https://"+userName+":"+accessKey+"@hub.browserstack.com/wd/hub"), capabilities);
45+
46+
AndroidElement searchElement = (AndroidElement) new WebDriverWait(driver, 30).until(
47+
ExpectedConditions.elementToBeClickable(MobileBy.id("com.example.android.basicnetworking:id/test_action")));
48+
searchElement.click();
49+
AndroidElement insertTextElement = (AndroidElement) new WebDriverWait(driver, 30).until(
50+
ExpectedConditions.elementToBeClickable(MobileBy.className("android.widget.TextView")));
51+
52+
AndroidElement testElement = null;
53+
List<AndroidElement> allTextViewElements = driver.findElementsByClassName("android.widget.TextView");
54+
Thread.sleep(10);
55+
for(AndroidElement textElement : allTextViewElements) {
56+
if(textElement.getText().contains("The active connection is")) {
57+
testElement = textElement;
58+
}
59+
}
60+
61+
if(testElement == null) {
62+
throw new Error("Cannot find the needed TextView element from app");
63+
}
64+
String matchedString = testElement.getText();
65+
System.out.println(matchedString);
66+
assert(matchedString.contains("The active connection is wifi"));
67+
assert(matchedString.contains("Up and running"));
68+
69+
driver.quit();
70+
71+
tearDownLocal();
72+
}
73+
}

android/README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010
to the BrowserStack servers using the above API.
1111
- Update the desired capability "app" with the App URL returned from the above API call
1212

13+
For running LocalSample tests, you can download `browserstack-local-java.jar` from [here](http://search.maven.org/#search%7Cga%7C1%7Ca%3A%22browserstack-local-java%22).
14+
1315
For frameworks integration with BrowserStack, refer to their individual repositories -
1416

1517
- [JUnit](https://github.com/browserstack/junit-appium-app-browserstack)

ios/LocalSampleIOS.java

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
import com.browserstack.local.Local;
2+
3+
import java.net.URL;
4+
import java.io.File;
5+
import java.util.Map;
6+
import java.util.HashMap;
7+
import org.apache.commons.io.FileUtils;
8+
9+
import io.appium.java_client.MobileBy;
10+
import io.appium.java_client.ios.IOSDriver;
11+
import io.appium.java_client.ios.IOSElement;
12+
13+
import org.openqa.selenium.WebDriver;
14+
import org.openqa.selenium.OutputType;
15+
import org.openqa.selenium.TakesScreenshot;
16+
import org.openqa.selenium.support.ui.WebDriverWait;
17+
import org.openqa.selenium.remote.DesiredCapabilities;
18+
import org.openqa.selenium.support.ui.ExpectedCondition;
19+
import org.openqa.selenium.support.ui.ExpectedConditions;
20+
21+
22+
public class LocalSampleIOS {
23+
private static Local localInstance;
24+
public static String accessKey = "BROWSERSTACK_USERNAME";
25+
public static String userName = "BROWSERSTACK_ACCESS_KEY";
26+
27+
28+
public static void setupLocal() throws Exception {
29+
localInstance = new Local();
30+
Map<String, String> options = new HashMap<String, String>();
31+
options.put("key", accessKey);
32+
localInstance.start(options);
33+
}
34+
35+
public static void tearDownLocal() throws Exception {
36+
localInstance.stop();
37+
}
38+
39+
public static void main(String[] args) throws Exception {
40+
setupLocal();
41+
42+
DesiredCapabilities capabilities = new DesiredCapabilities();
43+
44+
capabilities.setCapability("browserstack.local", true);
45+
capabilities.setCapability("realMobile", true);
46+
capabilities.setCapability("device", "iPhone 7");
47+
capabilities.setCapability("app", "bs://<hashed app-id>");
48+
capabilities.setCapability("automationName", "XCUITest");
49+
50+
IOSDriver<IOSElement> driver = new IOSDriver<IOSElement>(new URL("http://"+userName+":"+accessKey+"@hub.browserstack.com/wd/hub"), capabilities);
51+
52+
IOSElement testButton = (IOSElement) new WebDriverWait(driver, 30).until(
53+
ExpectedConditions.elementToBeClickable(MobileBy.AccessibilityId("TestBrowserStackLocal")));
54+
testButton.click();
55+
56+
WebDriverWait wait = new WebDriverWait(driver, 30);
57+
wait.until(new ExpectedCondition<Boolean>() {
58+
@Override
59+
public Boolean apply(WebDriver d) {
60+
String result = d.findElement(MobileBy.AccessibilityId("ResultBrowserStackLocal")).getAttribute("value");
61+
return result != null && result.length() > 0;
62+
}
63+
});
64+
IOSElement resultElement = (IOSElement) driver.findElement(MobileBy.AccessibilityId("ResultBrowserStackLocal"));
65+
66+
String resultString = resultElement.getText().toLowerCase();
67+
System.out.println(resultString);
68+
if(resultString.contains("not working")) {
69+
File scrFile = (File) ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
70+
FileUtils.copyFile(scrFile, new File(System.getProperty("user.dir") + "/screenshot.png"));
71+
System.out.println("Screenshot stored at " + System.getProperty("user.dir") + "/screenshot.png");
72+
throw new Error("Unexpected BrowserStackLocal test result");
73+
}
74+
75+
String expectedString = "Up and running";
76+
assert(resultString.contains(expectedString.toLowerCase()));
77+
78+
driver.quit();
79+
80+
tearDownLocal();
81+
}
82+
}

ios/README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010
to the BrowserStack servers using the above API.
1111
- Update the desired capability "app" with the App URL returned from the above API call
1212

13+
For running LocalSample tests, you can download `browserstack-local-java.jar` from [here](http://search.maven.org/#search%7Cga%7C1%7Ca%3A%22browserstack-local-java%22).
14+
1315
For frameworks integration with BrowserStack, refer to their individual repositories -
1416

1517
- [JUnit](https://github.com/browserstack/junit-appium-app-browserstack)

0 commit comments

Comments
 (0)