Skip to content

Commit c6dacb7

Browse files
committed
Merge pull request appium#142 from TikhomirovSergey/master
[*] appium#141 fix
2 parents 3432ef7 + 28223fb commit c6dacb7

File tree

6 files changed

+102
-9
lines changed

6 files changed

+102
-9
lines changed

src/main/java/io/appium/java_client/pagefactory/AppiumAnnotations.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -138,14 +138,16 @@ By getBy(Annotation annotation) {
138138
private final Field mobileField;
139139
private final String platform;
140140
private final String automation;
141+
private final boolean isBrowser;
141142

142-
AppiumAnnotations(Field field, String platform, String automation) {
143+
AppiumAnnotations(Field field, String platform, String automation, boolean isBrowser) {
143144
super(field);
144145
mobileField = field;
145146
this.platform = String.valueOf(platform).
146147
toUpperCase().trim();
147148
this.automation = String.valueOf(automation).
148149
toUpperCase().trim();
150+
this.isBrowser = isBrowser;
149151
}
150152

151153
private static void checkDisallowedAnnotationPairs(Annotation a1,
@@ -260,6 +262,11 @@ private <T extends By> T getComplexMobileBy(Annotation[] annotations, Class<T> r
260262

261263
@Override
262264
public By buildBy() {
265+
266+
if (isBrowser){
267+
return super.buildBy();
268+
}
269+
263270
assertValidAnnotations();
264271

265272
SelendroidFindBy selendroidBy = mobileField

src/main/java/io/appium/java_client/pagefactory/AppiumElementLocator.java

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import java.util.concurrent.TimeUnit;
99

1010
import org.openqa.selenium.By;
11+
import org.openqa.selenium.Capabilities;
1112
import org.openqa.selenium.HasCapabilities;
1213
import org.openqa.selenium.NoSuchElementException;
1314
import org.openqa.selenium.SearchContext;
@@ -17,6 +18,7 @@
1718
import org.openqa.selenium.WebElement;
1819
import org.openqa.selenium.internal.WrapsDriver;
1920
import org.openqa.selenium.internal.WrapsElement;
21+
import org.openqa.selenium.remote.CapabilityType;
2022
import org.openqa.selenium.support.pagefactory.ElementLocator;
2123
import org.openqa.selenium.support.ui.FluentWait;
2224

@@ -67,16 +69,24 @@ public List<WebElement> apply(By by) {
6769
TimeOutContainer timeOutContainer) {
6870
this.searchContext = searchContext;
6971
// All known webdrivers implement HasCapabilities
72+
Capabilities capabilities = ((HasCapabilities) unpackWebDriverFromSearchContext()).
73+
getCapabilities();
74+
7075
String platform = String
71-
.valueOf(((HasCapabilities) unpackWebDriverFromSearchContext())
72-
.getCapabilities().getCapability(
76+
.valueOf(capabilities.getCapability(
7377
MobileCapabilityType.PLATFORM_NAME));
7478
String automation = String
75-
.valueOf(((HasCapabilities) unpackWebDriverFromSearchContext())
76-
.getCapabilities().getCapability(
79+
.valueOf(capabilities.getCapability(
7780
MobileCapabilityType.AUTOMATION_NAME));
81+
82+
String browser = (String) capabilities.getCapability(CapabilityType.BROWSER_NAME);
83+
String app = (String) capabilities.getCapability(MobileCapabilityType.APP);
84+
85+
boolean isBrowser = ((app == null || "".equals(app.trim())) &&
86+
(browser != null && !"".equals(browser.trim())));
7887

79-
AppiumAnnotations annotations = new AppiumAnnotations(field, platform, automation);
88+
AppiumAnnotations annotations = new AppiumAnnotations(field,
89+
platform, automation, isBrowser);
8090
this.timeOutContainer = timeOutContainer;
8191
shouldCache = annotations.isLookupCached();
8292
by = annotations.buildBy();

src/main/java/io/appium/java_client/pagefactory/SelendroidFindBy.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
* element or a list of elements. Used in conjunction with
1212
* {@link org.openqa.selenium.support.PageFactory}
1313
* this allows users to quickly and easily create PageObjects.
14-
* using Android UI selectors, accessibility, id, name, class name, tag and xpath
14+
* using Selendroid UI selectors like, id, name, class name, tag and xpath
1515
*/
1616
@Retention(RetentionPolicy.RUNTIME)
1717
@Target({ElementType.FIELD, ElementType.TYPE})

src/test/java/io/appium/java_client/pagefactory_tests/BrowserCompatibilityTest.java renamed to src/test/java/io/appium/java_client/pagefactory_tests/DesctopBrowserCompatibilityTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
import org.openqa.selenium.support.PageFactory;
3131
import org.openqa.selenium.remote.RemoteWebElement;
3232

33-
public class BrowserCompatibilityTest {
33+
public class DesctopBrowserCompatibilityTest {
3434

3535
private static enum AvailableDrivers {
3636
FIREFOX(FirefoxDriver.class, new ArrayList<Platform>() {
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
package io.appium.java_client.pagefactory_tests;
2+
3+
import io.appium.java_client.android.AndroidDriver;
4+
import io.appium.java_client.pagefactory.AndroidFindBy;
5+
import io.appium.java_client.pagefactory.AndroidFindBys;
6+
import io.appium.java_client.pagefactory.AppiumFieldDecorator;
7+
import io.appium.java_client.remote.MobileBrowserType;
8+
import io.appium.java_client.remote.MobileCapabilityType;
9+
10+
import java.net.URL;
11+
import java.util.List;
12+
import java.util.concurrent.TimeUnit;
13+
14+
import org.junit.After;
15+
import org.junit.Assert;
16+
import org.junit.Before;
17+
import org.junit.Test;
18+
import org.openqa.selenium.WebDriver;
19+
import org.openqa.selenium.WebElement;
20+
import org.openqa.selenium.remote.DesiredCapabilities;
21+
import org.openqa.selenium.remote.RemoteWebElement;
22+
import org.openqa.selenium.support.FindBy;
23+
import org.openqa.selenium.support.FindBys;
24+
import org.openqa.selenium.support.PageFactory;
25+
26+
public class MobileBrowserCompatibilityTest {
27+
28+
private WebDriver driver;
29+
30+
@FindBy(name = "q")
31+
@AndroidFindBy(uiAutomator = "new UiSelector().resourceId(\"android:id/someId\")")
32+
private WebElement searchTextField;
33+
34+
@AndroidFindBys({
35+
@AndroidFindBy(className = "someClass"),
36+
@AndroidFindBy(xpath = "//someTag")})
37+
@FindBy(name="btnG")
38+
private RemoteWebElement searchButton;
39+
40+
@AndroidFindBy(className = "someClass")
41+
@FindBys({@FindBy(className = "r"), @FindBy(tagName = "a")})
42+
private List<WebElement> foundLinks;
43+
44+
@Before
45+
public void setUp() throws Exception {
46+
DesiredCapabilities capabilities = new DesiredCapabilities();
47+
capabilities.setCapability(MobileCapabilityType.DEVICE_NAME, "Android Emulator");
48+
capabilities.setCapability(MobileCapabilityType.BROWSER_NAME, MobileBrowserType.BROWSER);
49+
driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
50+
//This time out is set because test can be run on slow Android SDK emulator
51+
PageFactory.initElements(new AppiumFieldDecorator(driver, 5, TimeUnit.SECONDS), this);
52+
}
53+
54+
@After
55+
public void tearDown() throws Exception {
56+
driver.quit();
57+
}
58+
59+
@Test
60+
public void test() {
61+
driver.get("https://www.google.com");
62+
63+
searchTextField.sendKeys("Hello");
64+
searchButton.click();
65+
Assert.assertNotEquals(0, foundLinks.size());
66+
searchTextField.clear();
67+
searchTextField.sendKeys("Hello, Appium!");
68+
searchButton.click();
69+
}
70+
71+
}

src/test/java/io/appium/java_client/pagefactory_tests/SelendroidModeTest.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,14 @@
77
import io.appium.java_client.pagefactory.SelendroidFindBy;
88
import io.appium.java_client.pagefactory.SelendroidFindBys;
99
import io.appium.java_client.remote.MobileCapabilityType;
10+
1011
import org.openqa.selenium.WebElement;
12+
1113
import java.io.File;
1214
import java.net.URL;
1315
import java.util.List;
1416
import java.util.concurrent.TimeUnit;
17+
1518
import org.junit.After;
1619
import org.junit.Assert;
1720
import org.junit.Before;
@@ -22,6 +25,7 @@
2225
import org.openqa.selenium.support.PageFactory;
2326

2427
public class SelendroidModeTest {
28+
private static int SELENDROID_PORT = 9999;
2529

2630
private WebDriver driver;
2731

@@ -62,14 +66,15 @@ public class SelendroidModeTest {
6266
@SelendroidFindBy(tagName = "TextView")
6367
private WebElement textTag;
6468

65-
@Before
69+
@Before
6670
public void setUp() throws Exception {
6771
File appDir = new File("src/test/java/io/appium/java_client");
6872
File app = new File(appDir, "ApiDemos-debug.apk");
6973
DesiredCapabilities capabilities = new DesiredCapabilities();
7074
capabilities.setCapability(MobileCapabilityType.DEVICE_NAME, "Android Emulator");
7175
capabilities.setCapability(MobileCapabilityType.APP, app.getAbsolutePath());
7276
capabilities.setCapability(MobileCapabilityType.AUTOMATION_NAME, "Selendroid");
77+
capabilities.setCapability(MobileCapabilityType.SELENDROID_PORT, SELENDROID_PORT);
7378
driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
7479

7580
//This time out is set because test can be run on slow Android SDK emulator

0 commit comments

Comments
 (0)