Skip to content

Commit 15009d4

Browse files
#30 is finished.
1 parent 69c2e5c commit 15009d4

8 files changed

Lines changed: 287 additions & 13 deletions

sample-code/examples/java/junit/src/test/java/com/saucelabs/appium/AndroidPageObjectTest_ByAllPossible.java

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,23 +17,37 @@
1717
import org.openqa.selenium.support.PageFactory;
1818

1919
import com.saucelabs.appium.page_object.android.ApiDemosListViewScreenByAllPossible;
20+
import com.saucelabs.appium.page_object.android.ApiDemosListViewScreenChaided;
21+
import com.saucelabs.appium.page_object.android.ApiDemosListViewScreenSimple;
22+
import com.saucelabs.appium.page_object.ios.UICatalogScreenSimple;
2023

24+
/**
25+
* Please read about Page Object design pattern here:
26+
* https://code.google.com/p/selenium/wiki/PageObjects
27+
*
28+
* Please look at:
29+
* {@link ApiDemosListViewScreenSimple}
30+
* {@link ApiDemosListViewScreenChaided}
31+
* {@link ApiDemosListViewScreenByAllPossible}
32+
* {@link UICatalogScreenSimple}
33+
*
34+
*/
2135
public class AndroidPageObjectTest_ByAllPossible {
2236

2337
private WebDriver driver;
2438
private ApiDemosListViewScreenByAllPossible apiDemosPageObject;
2539

2640
@Before
2741
public void setUp() throws Exception {
28-
File appDir = new File("src/test/java/io/appium/java_client");
42+
File classpathRoot = new File(System.getProperty("user.dir"));
43+
File appDir = new File(classpathRoot, "../../../apps/ApiDemos/bin");
2944
File app = new File(appDir, "ApiDemos-debug.apk");
3045
DesiredCapabilities capabilities = new DesiredCapabilities();
3146
capabilities.setCapability(MobileCapabilityType.DEVICE_NAME, "Android Emulator");
3247
capabilities.setCapability(MobileCapabilityType.APP, app.getAbsolutePath());
3348
driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
3449

3550
apiDemosPageObject = new ApiDemosListViewScreenByAllPossible();
36-
//This time out is set because test can be run on slow Android SDK emulator
3751
PageFactory.initElements(new AppiumFieldDecorator(driver, 5, TimeUnit.SECONDS),
3852
apiDemosPageObject);
3953
}

sample-code/examples/java/junit/src/test/java/com/saucelabs/appium/AndroidPageObjectTest_Chained.java

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,24 +16,38 @@
1616
import org.openqa.selenium.remote.DesiredCapabilities;
1717
import org.openqa.selenium.support.PageFactory;
1818

19+
import com.saucelabs.appium.page_object.android.ApiDemosListViewScreenByAllPossible;
1920
import com.saucelabs.appium.page_object.android.ApiDemosListViewScreenChaided;
21+
import com.saucelabs.appium.page_object.android.ApiDemosListViewScreenSimple;
22+
import com.saucelabs.appium.page_object.ios.UICatalogScreenSimple;
2023

24+
/**
25+
* Please read about Page Object design pattern here:
26+
* https://code.google.com/p/selenium/wiki/PageObjects
27+
*
28+
* Please look at:
29+
* {@link ApiDemosListViewScreenSimple}
30+
* {@link ApiDemosListViewScreenChaided}
31+
* {@link ApiDemosListViewScreenByAllPossible}
32+
* {@link UICatalogScreenSimple}
33+
*
34+
*/
2135
public class AndroidPageObjectTest_Chained {
2236

2337
private WebDriver driver;
2438
private ApiDemosListViewScreenChaided apiDemosPageObject;
2539

2640
@Before
2741
public void setUp() throws Exception {
28-
File appDir = new File("src/test/java/io/appium/java_client");
42+
File classpathRoot = new File(System.getProperty("user.dir"));
43+
File appDir = new File(classpathRoot, "../../../apps/ApiDemos/bin");
2944
File app = new File(appDir, "ApiDemos-debug.apk");
3045
DesiredCapabilities capabilities = new DesiredCapabilities();
3146
capabilities.setCapability(MobileCapabilityType.DEVICE_NAME, "Android Emulator");
3247
capabilities.setCapability(MobileCapabilityType.APP, app.getAbsolutePath());
3348
driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
3449

3550
apiDemosPageObject = new ApiDemosListViewScreenChaided();
36-
//This time out is set because test can be run on slow Android SDK emulator
3751
PageFactory.initElements(new AppiumFieldDecorator(driver, 5, TimeUnit.SECONDS),
3852
apiDemosPageObject);
3953
}
Lines changed: 151 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,151 @@
1+
package com.saucelabs.appium;
2+
3+
import io.appium.java_client.android.AndroidDriver;
4+
import io.appium.java_client.pagefactory.AppiumFieldDecorator;
5+
import io.appium.java_client.remote.MobileCapabilityType;
6+
7+
import java.io.File;
8+
import java.net.URL;
9+
import java.util.NoSuchElementException;
10+
import java.util.concurrent.TimeUnit;
11+
12+
import org.junit.After;
13+
import org.junit.Assert;
14+
import org.junit.Before;
15+
import org.junit.Test;
16+
import org.openqa.selenium.By;
17+
import org.openqa.selenium.WebDriver;
18+
import org.openqa.selenium.remote.DesiredCapabilities;
19+
import org.openqa.selenium.support.PageFactory;
20+
21+
import com.saucelabs.appium.page_object.android.ApiDemosListViewScreenByAllPossible;
22+
import com.saucelabs.appium.page_object.android.ApiDemosListViewScreenChaided;
23+
import com.saucelabs.appium.page_object.android.ApiDemosListViewScreenSimple;
24+
import com.saucelabs.appium.page_object.ios.UICatalogScreenSimple;
25+
26+
/**
27+
* Please read about Page Object design pattern here:
28+
* https://code.google.com/p/selenium/wiki/PageObjects
29+
*
30+
* Please look at:
31+
* {@link ApiDemosListViewScreenSimple}
32+
* {@link ApiDemosListViewScreenChaided}
33+
* {@link ApiDemosListViewScreenByAllPossible}
34+
* {@link UICatalogScreenSimple}
35+
*
36+
*/
37+
public class AndroidPageObjectTest_PageObjectLikeComplexElement {
38+
39+
private WebDriver driver;
40+
private ApiDemosListViewScreenSimple apiDemosPageObject;
41+
42+
@Before
43+
public void setUp() throws Exception {
44+
File classpathRoot = new File(System.getProperty("user.dir"));
45+
File appDir = new File(classpathRoot, "../../../apps/ApiDemos/bin");
46+
File app = new File(appDir, "ApiDemos-debug.apk");
47+
DesiredCapabilities capabilities = new DesiredCapabilities();
48+
capabilities.setCapability(MobileCapabilityType.DEVICE_NAME, "Android Emulator");
49+
capabilities.setCapability(MobileCapabilityType.APP, app.getAbsolutePath());
50+
driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
51+
52+
apiDemosPageObject = new ApiDemosListViewScreenSimple();
53+
PageFactory.initElements(new AppiumFieldDecorator(driver.
54+
findElement(By.id("android:id/list")) /*(!!!)*/
55+
, 5, TimeUnit.SECONDS),
56+
apiDemosPageObject);
57+
}
58+
59+
@After
60+
public void tearDown() throws Exception {
61+
driver.quit();
62+
}
63+
64+
@Test
65+
public void findByElementsTest() {
66+
Assert.assertNotEquals(0, apiDemosPageObject.textVieWs.size());
67+
}
68+
69+
@Test
70+
public void findByElementTest() {
71+
Assert.assertNotEquals(null, apiDemosPageObject.textView.getAttribute("text"));
72+
}
73+
74+
75+
@Test
76+
public void androidFindByElementsTest(){
77+
Assert.assertNotEquals(0, apiDemosPageObject.androidTextViews.size());
78+
}
79+
80+
@Test
81+
public void androidFindByElementTest(){
82+
Assert.assertNotEquals(null, apiDemosPageObject.androidTextView.getAttribute("text"));
83+
}
84+
85+
@Test
86+
public void checkThatElementsWereNotFoundByIOSUIAutomator(){
87+
Assert.assertEquals(0, apiDemosPageObject.iosTextViews.size());
88+
}
89+
90+
@Test
91+
public void checkThatElementWasNotFoundByIOSUIAutomator(){
92+
NoSuchElementException nsee = null;
93+
try{
94+
apiDemosPageObject.iosTextView.getAttribute("text");
95+
}
96+
catch (Exception e){
97+
nsee = (NoSuchElementException) e;
98+
}
99+
Assert.assertNotNull(nsee);
100+
}
101+
102+
@Test
103+
public void androidOrIOSFindByElementsTest(){
104+
Assert.assertNotEquals(0, apiDemosPageObject.androidOriOsTextViews.size());
105+
}
106+
107+
@Test
108+
public void androidOrIOSFindByElementTest(){
109+
Assert.assertNotEquals(null, apiDemosPageObject.androidOriOsTextView.getAttribute("text"));
110+
}
111+
112+
@Test
113+
public void androidFindByUIAutomatorElementsTest(){
114+
Assert.assertNotEquals(0, apiDemosPageObject.androidUIAutomatorViews.size());
115+
}
116+
117+
@Test
118+
public void androidFindByUIAutomatorElementTest(){
119+
Assert.assertNotEquals(null, apiDemosPageObject.androidUIAutomatorView.getAttribute("text"));
120+
}
121+
122+
@Test
123+
public void areMobileElementsTest(){
124+
Assert.assertNotEquals(0, apiDemosPageObject.mobileElementViews.size());
125+
}
126+
127+
@Test
128+
public void isMobileElementTest(){
129+
Assert.assertNotEquals(null, apiDemosPageObject.mobileElementView.getAttribute("text"));
130+
}
131+
132+
@Test
133+
public void areMobileElements_FindByTest(){
134+
Assert.assertNotEquals(0, apiDemosPageObject.mobiletextVieWs.size());
135+
}
136+
137+
@Test
138+
public void isMobileElement_FindByTest(){
139+
Assert.assertNotEquals(null, apiDemosPageObject.mobiletextVieW.getAttribute("text"));
140+
}
141+
142+
@Test
143+
public void areRemoteElementsTest(){
144+
Assert.assertNotEquals(0, apiDemosPageObject.remoteElementViews.size());
145+
}
146+
147+
@Test
148+
public void isRemoteElementTest(){
149+
Assert.assertNotEquals(null, apiDemosPageObject.remotetextVieW.getAttribute("text"));
150+
}
151+
}

sample-code/examples/java/junit/src/test/java/com/saucelabs/appium/iOSPageObjectTest.java

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,17 +15,33 @@
1515
import org.openqa.selenium.WebDriver;
1616
import org.openqa.selenium.remote.DesiredCapabilities;
1717
import org.openqa.selenium.support.PageFactory;
18+
19+
import com.saucelabs.appium.page_object.android.ApiDemosListViewScreenByAllPossible;
20+
import com.saucelabs.appium.page_object.android.ApiDemosListViewScreenChaided;
21+
import com.saucelabs.appium.page_object.android.ApiDemosListViewScreenSimple;
1822
import com.saucelabs.appium.page_object.ios.UICatalogScreenSimple;
1923

24+
/**
25+
* Please read about Page Object design pattern here:
26+
* https://code.google.com/p/selenium/wiki/PageObjects
27+
*
28+
* Please look at:
29+
* {@link ApiDemosListViewScreenSimple}
30+
* {@link ApiDemosListViewScreenChaided}
31+
* {@link ApiDemosListViewScreenByAllPossible}
32+
* {@link UICatalogScreenSimple}
33+
*
34+
*/
2035
public class iOSPageObjectTest {
2136

2237
private WebDriver driver;
2338
private UICatalogScreenSimple uiCatalog;
2439

2540
@Before
2641
public void setUp() throws Exception {
27-
File appDir = new File("src/test/java/io/appium/java_client");
28-
File app = new File(appDir, "TestApp.app.zip");
42+
File appDir = new File(System.getProperty("user.dir"),
43+
"../../../apps/TestApp/build/Release-iphonesimulator");
44+
File app = new File(appDir, "TestApp.app");
2945
DesiredCapabilities capabilities = new DesiredCapabilities();
3046
capabilities.setCapability(MobileCapabilityType.BROWSER_NAME, "");
3147
capabilities.setCapability(MobileCapabilityType.PLATFORM_VERSION, "7.1");

sample-code/examples/java/junit/src/test/java/com/saucelabs/appium/page_object/android/ApiDemosListViewScreenByAllPossible.java

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,25 +3,43 @@
33
import io.appium.java_client.MobileElement;
44

55
import java.util.List;
6+
67
import io.appium.java_client.android.AndroidElement;
78
import io.appium.java_client.pagefactory.AndroidFindAll;
89
import io.appium.java_client.pagefactory.AndroidFindBy;
910

11+
/**
12+
*
13+
* @author TikhomirovSergey
14+
* Here is the common sample shows how to use
15+
* {@link AndroidFindAll} annotation to describe all possible
16+
* locators of a target element. This feature should help to
17+
* reduce the number of page PageObject-classes
18+
*
19+
* It demonstrates how to declare screen elements using Appium
20+
* page objects facilities.
21+
*
22+
* About Page Object design pattern read here:
23+
* https://code.google.com/p/selenium/wiki/PageObjects
24+
*
25+
*/
1026
public class ApiDemosListViewScreenByAllPossible {
1127

1228
@AndroidFindAll({
1329
@AndroidFindBy(uiAutomator = "new UiSelector().resourceId(\"android:id/Fakecontent\")"),
1430
@AndroidFindBy(id = "android:id/Faketext1"),
1531
@AndroidFindBy(uiAutomator = "new UiSelector().resourceId(\"android:id/list\")"), //by this locator element is found
1632
@AndroidFindBy(id = "android:id/FakeId")
17-
})
33+
}) //If here is a list then it will be filled by all elements
34+
//which are found using all declared locators
1835
public List<MobileElement> findAllElementViews;
1936

2037
@AndroidFindAll({
2138
@AndroidFindBy(uiAutomator = "new UiSelector().resourceId(\"android:id/Fakecontent\")"),
2239
@AndroidFindBy(id = "android:id/Faketext1"),
2340
@AndroidFindBy(uiAutomator = "new UiSelector().resourceId(\"android:id/list\")"), //by this locator element is found
2441
@AndroidFindBy(id = "android:id/FakeId")
25-
})
42+
}) //If here is a single element then it will find the first
43+
//element that is found by any of declared locators
2644
public AndroidElement findAllElementView;
2745
}

sample-code/examples/java/junit/src/test/java/com/saucelabs/appium/page_object/android/ApiDemosListViewScreenChaided.java

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,38 @@
11
package com.saucelabs.appium.page_object.android;
22

33
import io.appium.java_client.android.AndroidElement;
4+
45
import java.util.List;
6+
57
import org.openqa.selenium.WebElement;
8+
69
import io.appium.java_client.pagefactory.AndroidFindBy;
710
import io.appium.java_client.pagefactory.AndroidFindBys;
811
import io.appium.java_client.pagefactory.iOSFindBy;
912
import io.appium.java_client.pagefactory.iOSFindBys;
1013

14+
/**
15+
*
16+
* @author TikhomirovSergey
17+
* Here is the common sample shows how to use
18+
* {@link AndroidFindBys} annotation to describe the chain of the
19+
* searching for the target element of a native Android app content.
20+
*
21+
* It demonstrates how to declare screen elements using Appium
22+
* page objects facilities.
23+
*
24+
* About Page Object design pattern read here:
25+
* https://code.google.com/p/selenium/wiki/PageObjects
26+
*
27+
*/
1128
public class ApiDemosListViewScreenChaided {
1229

1330

1431
@AndroidFindBys({
15-
@AndroidFindBy(uiAutomator = "new UiSelector().resourceId(\"android:id/list\")"),
16-
@AndroidFindBy(className = "android.widget.TextView")
32+
@AndroidFindBy(uiAutomator = "new UiSelector().resourceId(\"android:id/list\")"), //the searching
33+
//starts here
34+
@AndroidFindBy(className = "android.widget.TextView") //this element is nested
35+
//and so on
1736
})
1837
public List<WebElement> chainElementViews;
1938

0 commit comments

Comments
 (0)