diff --git a/src/main/java/io/appium/java_client/ios/PerformsTouchID.java b/src/main/java/io/appium/java_client/ios/PerformsTouchID.java index 5b0b422f2..53a3d1bf1 100644 --- a/src/main/java/io/appium/java_client/ios/PerformsTouchID.java +++ b/src/main/java/io/appium/java_client/ios/PerformsTouchID.java @@ -16,8 +16,8 @@ package io.appium.java_client.ios; -import static io.appium.java_client.ios.IOSMobileCommandHelper.touchIdCommand; import static io.appium.java_client.ios.IOSMobileCommandHelper.toggleTouchIdEnrollmentCommand; +import static io.appium.java_client.ios.IOSMobileCommandHelper.touchIdCommand; import io.appium.java_client.CommandExecutionHelper; import io.appium.java_client.ExecutesMethod; diff --git a/src/main/java/io/appium/java_client/pagefactory/OverrideWidget.java b/src/main/java/io/appium/java_client/pagefactory/OverrideWidget.java index 9efff1e6e..d4d8870d0 100644 --- a/src/main/java/io/appium/java_client/pagefactory/OverrideWidget.java +++ b/src/main/java/io/appium/java_client/pagefactory/OverrideWidget.java @@ -59,11 +59,31 @@ Class iOSUIAutomation() default Widget.class; /** - * This property is designed for Android native content when Selendroid automation is used. + * This property is designed for Android native content when + * {@link io.appium.java_client.remote.AutomationName#SELENDROID} automation is used. * A declared class should not be abstract. Declared class also should be a subclass * of an annotated class/class which is declared by an annotated field. * * @return a class which extends {@link io.appium.java_client.pagefactory.Widget} */ Class selendroid() default Widget.class; + + /** + * This property is designed for iOS native content when + * {@link io.appium.java_client.remote.AutomationName#IOS_XCUI_TEST} automation is used. + * A declared class should not be abstract. Declared class also should be a subclass + * of an annotated class/class which is declared by an annotated field. + * + * @return a class which extends {@link io.appium.java_client.pagefactory.Widget} + */ + Class iOSXCUITAutomation() default Widget.class; + + /** + * This property is designed for Windows native content. + * A declared class should not be abstract. Declared class also should be a subclass + * of an annotated class/class which is declared by an annotated field. + * + * @return a class which extends {@link io.appium.java_client.pagefactory.Widget} + */ + Class windowsAutomation() default Widget.class; } diff --git a/src/main/java/io/appium/java_client/pagefactory/OverrideWidgetReader.java b/src/main/java/io/appium/java_client/pagefactory/OverrideWidgetReader.java index b433cb6b4..e814b807b 100644 --- a/src/main/java/io/appium/java_client/pagefactory/OverrideWidgetReader.java +++ b/src/main/java/io/appium/java_client/pagefactory/OverrideWidgetReader.java @@ -19,6 +19,7 @@ import static io.appium.java_client.pagefactory.WidgetConstructorUtil.findConvenientConstructor; import static io.appium.java_client.remote.MobilePlatform.ANDROID; import static io.appium.java_client.remote.MobilePlatform.IOS; +import static io.appium.java_client.remote.MobilePlatform.WINDOWS; import io.appium.java_client.pagefactory.bys.ContentType; import io.appium.java_client.remote.AutomationName; @@ -35,6 +36,8 @@ class OverrideWidgetReader { private static final String ANDROID_UI_AUTOMATOR = "androidUIAutomator"; private static final String IOS_UI_AUTOMATION = "iOSUIAutomation"; private static final String SELENDROID = "selendroid"; + private static final String IOS_XCUIT_AUTOMATION = "iOSXCUITAutomation"; + private static final String WINDOWS_AUTOMATION = "windowsAutomation"; @SuppressWarnings("unchecked") private static Class getConvenientClass(Class declaredClass, @@ -74,19 +77,26 @@ static Class getMobileNativeWidgetClass(Class { + if (HasSessionDetails.class.isAssignableFrom(driver.getClass())) { + HasSessionDetails hasSessionDetails = HasSessionDetails.class.cast(driver); - ContextAware contextAware = ContextAware.class.cast(driver); - String currentContext = contextAware.getContext(); - if (currentContext.contains(NATIVE_APP_PATTERN)) { - return ContentType.NATIVE_MOBILE_SPECIFIC; - } + if (hasSessionDetails.isBrowser()) { + return HTML_OR_DEFAULT; + } + return NATIVE_MOBILE_SPECIFIC; + } + + if (!ContextAware.class.isAssignableFrom(driver.getClass())) { //it is desktop browser + return HTML_OR_DEFAULT; + } + + ContextAware contextAware = ContextAware.class.cast(driver); + String currentContext = contextAware.getContext(); + if (currentContext.contains(NATIVE_APP_PATTERN)) { + return NATIVE_MOBILE_SPECIFIC; + } - return ContentType.HTML_OR_DEFAULT; + return HTML_OR_DEFAULT; + }).orElse(HTML_OR_DEFAULT); } } diff --git a/src/test/java/io/appium/java_client/RottenTomatoes.zip b/src/test/java/io/appium/java_client/RottenTomatoes.zip deleted file mode 100644 index e215950e1..000000000 Binary files a/src/test/java/io/appium/java_client/RottenTomatoes.zip and /dev/null differ diff --git a/src/test/java/io/appium/java_client/RottenTomatoesPageSnapshot.html b/src/test/java/io/appium/java_client/RottenTomatoesPageSnapshot.html deleted file mode 100644 index e64e03732..000000000 --- a/src/test/java/io/appium/java_client/RottenTomatoesPageSnapshot.html +++ /dev/null @@ -1,9304 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Spectre (2015) - Rotten Tomatoes - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
-
- - -
-
-
-
-
-
- - - - - - - - - -
- -
-
-
-
- - -
-
-
-
- - -
-
-

Spectre (2015) -

- -
- -
- - -
-
- -
- -
-
- -
-
-
- -

TOMATOMETER -

- -
-
- -
-
-
- - -
-
- -
-
-
- -
-
-
- - -
-
- -
-
-
-
-

AUDIENCE SCORE -

- - - -
-

Critic Consensus: Spectre - nudges Daniel Craig's rebooted Bond closer to the glorious, action-driven - spectacle of earlier entries, although it's admittedly reliant on - established 007 formula.

- -
-
- - - -
-

Tickets & Showtimes

- -
-
-
There are no showtimes for this theater.
-
- -
Enter your location to see where Spectre is playing near you -
-
-
- -
-
- -
-
-
-
- - -
-
- -
-
-
- -
-
-
-
- -
-

Movie Info

- -
-
A cryptic message from - Bond's past sends him on a trail to uncover a sinister organisation. - While M battles political forces to keep the secret service alive, Bond - peels back the layers of deceit to reveal the terrible truth behind - Spectre. -
-
- - - - - - - - - - - - - - - - - - - - - - - -
Rating:PG-13 (for intense sequences of - action and violence, some disturbing images, sensuality and - language) -
Genre: - Action & Adventure -
Directed By:
Written By: - Ian - Fleming, John - Logan, Neal - Purvis, Robert - Wade
Runtime: - -
-
Sony Pictures - Official Site -
-
-
-
-
-
-
- -
- -
-

Cast

- -
-
-
- -
Daniel Craig -
as James Bond
-
-
-
- -
Christoph Waltz -
as Franz Oberhauser
-
-
- -
Léa Seydoux -
as Madeleine Swann
-
-
- -
Naomie Harris -
as Eve Moneypenney
-
-
- - -
-
- -
Dave Bautista -
as Mr. Hinx
-
-
-
- -
Monica Bellucci -
as Lucia Sciarra
-
-
-
- - -
-
- -
Jesper Christensen -
as Mr. White
-
-
-
- -
Stephanie Sigman -
as Estrella
-
-
-
- -
Andrew Scott -
as Denbigh
-
-
-
- -
Rory Kinnear -
as Bill Tanner
-
-
-
- -
Alessandro Cremona -
as Marco Sciarra
-
-
-
- -
Tenoch Huerta Mejía -
as Mexican Man in Lift
-
-
-
- -
Adriana Paz -
as Mexican Woman in Lif...
-
-
-
- - -
-
- -
Marco Zingaro -
as Gallo's Accomplice
-
-
-
- - -
-
- -
Stefano Elfi DiClaud... -
as Gallo's Accomplice
-
-
-
- -
Ian Bonar -
as Q's Assistant
-
-
- -
Stefano Elfi DiClaud... -
as Gallo's Accomplice
-
-
-
- -
Tam Williams -
as Moneypenny's Boyfrie...
-
-
-
- -
Richard Banham -
as Oberhauser's London ...
-
-
-
- -
Pip Carter -
as SC019 Police Officer
-
-
- -
- -
Marc Zinga -
as Moreau
-
-
-
- - -
-
- -
Adel Bencherif -
as Abrika
-
-
-
- -
Gediminas Adomaitis -
as Oberhauser's Right H...
-
-
-
- -
Peppe Lanzetta -
as Lorenzo
-
-
-
- -
Francesco Arca -
as Francesco
-
-
-
- - -
-
- -
Emilio Aniba -
as Palazzo Security
-
-
- -
Benito Sagredo -
as Guerra
-
-
-
- -
Dai Tabuchi -
as Businessman
-
-
-
- -
George Lasha -
as Businessman
-
-
-
- -
Sargon Yelda -
as Businessman
-
-
-
- -
Erick Hayden -
as Marshall
-
-
-
- -
Oleg Mirochnikov -
as Valerian
-
-
-
- -
Andy Cheung -
as Businessman
-
-
-
- -
Antonio Salines -
as Fiat Driver
-
-
-
- -
Miloud Mourad Benama... -
as Street Sweeper
-
-
-
- -
Gido Schimanski -
as Chairman
-
-
-
- -
Nigel Barber -
as Heads of Nations
-
-
- -
Patrice Naiambana -
as Heads of Nations
-
-
- -
Stephane Cornicard -
as Heads of Nations
-
-
- -
Gary Fannin -
as Heads of Nations
-
-
- -
Sadao Ueda -
as Heads of Nations
-
-
- -
Wai Wong -
as Heads of Nations
-
-
- -
Joseph Balderrama -
as Heads of Nations
-
-
- - -
-
- -
Phillip Law -
as Heads of Nations
-
- -
- -
Victor Schefe -
as Clinic Barman
-
-
-
- -
Harald Windisch -
as Clinic Security Guar...
-
-
-
- -
Tristan Matthiae -
as Clinic Security Guar...
-
-
-
- -
Detlef Bothe -
as Cable Car Heavies
-
-
-
- -
Bodo Friesecke -
as Cable Car Heavies
-
-
-
- -
Wilhem Iben -
as Syringe Heavy
-
-
-
- -
Marlon Boess -
as Snowboarder
-
-
-
- -
Lili Epply -
as Snowboarder
-
-
-
- -
Konstantin Gerlach -
as Snowboarder
-
-
-
- -
Lara Parmiani -
as L'American Manager
-
-
-
- -
Noemi Krausz -
as Snowboarder
-
-
-
- -
Umit Ulgen -
as Train Guard
-
-
-
- -
Noah Saavedra -
as Snowboarder
-
-
-
- -
Amra Mallassi -
as Train Waiter
-
-
-
- -
Francis Attakpah -
as Snowboarder
-
-
-
- -
Ziad Abaza -
as Train Barman
-
-
-
- -
Michael Glantschnig -
as Snowboarder
-
-
-
- -
Walid Mumuni -
as Oberhauser's Chauffe...
-
-
-
- -
Marie Wohlmuth -
as Snowboarder
-
-
-
- -
Michael White -
as Oberhauser's Butler
-
-
-
- -
Derek Horsham -
as Oberhauser's Guard
-
-
-
- -
Adam McGrady -
as Oberhauser's Waiter
-
-
-
- -
Nader Dernaika -
as Oberhauser's Analyst
-
-
-
- -
Pezhmaan Alinia -
as Oberhauser's Chief A...
-
-
-
- -
Nari Blair Mangat -
as Oberhauser's Guard
-
-
- - - Show More Cast - -
-
-
- - -

- Critic Reviews for Spectre

- -

All Critics - (210) | Top - Critics (42)

- -
-
-
-
-
- - - -
-

Dazzles early - and fizzles late...Bond is not Batman; he does not need an - origin story.

- -
Full - Review… | November 7, 2015 - -
-
-
-
-
-
-
-
- -
The - Atlantic -
-
Top Critic -
-
-
-
-
-
-
-
- - - -
-

The franchise - is still doing well after 53 years of following the same - formula.

- -
Full - Review… | November 7, 2015 - -
-
-
-
-
-
-
-
- -
Ozus' - World Movie Reviews -
-
-
-
-
-
-
-
- - - -
-

Beautifully - filmed with plenty of action, but missing a sense of - fun.

- -
Full - Review… | November 7, 2015 - -
-
-
-
-
-
-
-
- -
Three - Movie Buffs -
-
-
-
-
-
-
-
- - - -
-

His name is - Bond, but it may as well be Bland considering how lethargic - Daniel Craig is in going through the motions of playing a - character he's obviously tired of playing.

- -
Full - Review… | November 7, 2015 - -
-
-
-
-
-
-
-
- -
The - Patriot Ledger -
-
-
-
-
-
-
-
- - - -
-

The film is - run into the ground for a wince-inducing final half-hour of - unfortunate developments. It's too bad, because what SPECTRE - provides during its initial two hours is sound -- and potent - enough to still earn this a shaky recommendation.

- -
Full - Review… | November 7, 2015 - -
-
-
-
-
-
-
-
- -
Creative - Loafing -
-
-
-
-
-
-
-
- - - -
-

SPECTRE is - like a strand of pearls. They're shiny, but they're - artificial.

- -
Full - Review… | November 7, 2015 - -
-
-
-
-
-
-
-
- -
- tonymacklin.net -
-
-
-
- - - - - - -
- -
-
-

- Audience Reviews for Spectre

- -
-
-
-
-
-
-
½ -
- Read - More
-
-
-
-
romy861 -
-
Nicki - Marie - -

Super Reviewer -

-
-
-
-
-
-
-
½ -
- Read - More
-
-
-
-
jlewis07 -
-
Josh - Lewis - -

Super Reviewer -

-
-
-
-
-
-
-
- Read - More
-
-
-
-
KJ Proulx -
-
KJ - Proulx - -

Super Reviewer -

-
-
- -
- -
-
-

Spectre - Quotes

- -
-
- -
-
-
- - - - - - - - -
– Submitted by Matthew - B (8 days ago) -
-
-
-
-
- - - - - - - - - - - - -
– Submitted by Geraldine - D (10 days ago) -
-
-
-
-
- - - - - - - - - - - - - - - - -
– Submitted by Stevie - A (11 days ago) -
-
-
-
-
- - - - - - - - -
– Submitted by Mat - P (12 days ago) -
-
-
- -
-
-
-
-

- Discussion Forum

- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TOPICLAST POST
I'm - very worried this may not be good. - - - Nov 4, 2015 11:51 AM -
So - Craig will be back for at least one more? - - - Nov 4, 2015 11:40 AM -
Box - Office Prediction - - - Nov 3, 2015 6:50 PM -
Same - Score as Quantum of Solace - - - Nov 3, 2015 4:59 PM -
I - am deeply worried about this film - - - Nov 3, 2015 11:11 AM -
- -
-
- - - - - -
-
- - - - - - - -
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - -
-
- -
-
- - - - - - -
-
- - -
- - - - - - - - - - - - - - - -
-
-
-
-
-
-
-
-
-
- - - - - - -
- - - - - - - -
-
- - - - - - - - - -
-
- -
-
- - 4.4.7Status:Inactive
-
-
- - diff --git a/src/test/java/io/appium/java_client/RottenTomatoesSnapshot.html b/src/test/java/io/appium/java_client/RottenTomatoesSnapshot.html deleted file mode 100644 index 4062d004b..000000000 --- a/src/test/java/io/appium/java_client/RottenTomatoesSnapshot.html +++ /dev/null @@ -1,4934 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Top Movies - Opening in Theaters | Rotten Tomatoes - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
-
- - -
-
-
-
-
-
- - - - - - - - - -
- -
-
-
-
- - -
-
-
-
- - -
-
-
-
- -
-
- - -
-
- -
- - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
-
-
-
- -
-
- Spotlight - -
- - - 96% - - - - - 93% - -
-
- - Mark Ruffalo, - - Michael Keaton - -
- -
R, 2 hr. 7 min.
- -
-
-
- - - Critics Consensus: - - - Spotlight gracefully handles the lurid details of its fact-based - story while resisting the temptation to lionize its heroes, - resulting in a drama that - - ... - - honors the audience as well as its real-life subjects. - - More... - -
- -
-
-
-
-
-
- -
-
- -
- - -
- - - - - - - -
- -
-
- - - - - - - - - - - - - - - - -
- -
-
- -
-
- - - - - - -
-
- - -
- - - - - - - - - - - - - - -
- - - - - -
- -
- - - - - - - - - -
- - -
-
- - 4.4.7Status:Active
-
-
-
- - - diff --git a/src/test/java/io/appium/java_client/android-rottentomatoes-demo-debug.apk b/src/test/java/io/appium/java_client/android-rottentomatoes-demo-debug.apk deleted file mode 100644 index f77c8f8eb..000000000 Binary files a/src/test/java/io/appium/java_client/android-rottentomatoes-demo-debug.apk and /dev/null differ diff --git a/src/test/java/io/appium/java_client/pagefactory_tests/widget/tests/AbstractApp.java b/src/test/java/io/appium/java_client/pagefactory_tests/widget/tests/AbstractApp.java new file mode 100644 index 000000000..2fa621f60 --- /dev/null +++ b/src/test/java/io/appium/java_client/pagefactory_tests/widget/tests/AbstractApp.java @@ -0,0 +1,11 @@ +package io.appium.java_client.pagefactory_tests.widget.tests; + +import java.util.List; + +public interface AbstractApp { + + T getWidget(); + + List getWidgets(); + +} diff --git a/src/test/java/io/appium/java_client/pagefactory_tests/widget/tests/AbstractStubWebDriver.java b/src/test/java/io/appium/java_client/pagefactory_tests/widget/tests/AbstractStubWebDriver.java new file mode 100644 index 000000000..d5c5af560 --- /dev/null +++ b/src/test/java/io/appium/java_client/pagefactory_tests/widget/tests/AbstractStubWebDriver.java @@ -0,0 +1,272 @@ +package io.appium.java_client.pagefactory_tests.widget.tests; + +import static com.google.common.collect.ImmutableList.of; +import static io.appium.java_client.remote.AutomationName.APPIUM; +import static io.appium.java_client.remote.AutomationName.IOS_XCUI_TEST; +import static io.appium.java_client.remote.AutomationName.SELENDROID; +import static io.appium.java_client.remote.MobilePlatform.ANDROID; +import static io.appium.java_client.remote.MobilePlatform.IOS; +import static io.appium.java_client.remote.MobilePlatform.WINDOWS; +import static org.apache.commons.lang3.StringUtils.EMPTY; + +import io.appium.java_client.HasSessionDetails; +import org.openqa.selenium.By; +import org.openqa.selenium.Cookie; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.logging.Logs; +import org.openqa.selenium.remote.Response; + +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.concurrent.TimeUnit; + +public abstract class AbstractStubWebDriver implements WebDriver, HasSessionDetails { + @Override + public Response execute(String driverCommand, Map parameters) { + return null; + } + + @Override + public Response execute(String driverCommand) { + return null; + } + + @Override + public abstract String getPlatformName(); + + @Override + public abstract String getAutomationName(); + + @Override + public boolean isBrowser() { + return false; + } + + @Override + public void get(String url) { + //this is just stub and it does nothing. + } + + @Override + public String getCurrentUrl() { + return null; + } + + @Override + public String getTitle() { + return null; + } + + @Override + public List findElements(By by) { + return of(new StubWebElement(this, by), new StubWebElement(this, by)); + } + + @Override + public StubWebElement findElement(By by) { + return new StubWebElement(this, by); + } + + @Override + public String getPageSource() { + return null; + } + + @Override + public void close() { + //this is just stub and it does nothing. + } + + @Override + public void quit() { + //this is just stub and it does nothing. + } + + @Override + public Set getWindowHandles() { + return null; + } + + @Override + public String getWindowHandle() { + return null; + } + + @Override + public TargetLocator switchTo() { + return null; + } + + @Override + public Navigation navigate() { + return null; + } + + @Override + public Options manage() { + return new Options() { + @Override + public void addCookie(Cookie cookie) { + //does nothing + } + + @Override + public void deleteCookieNamed(String name) { + //does nothing + } + + @Override + public void deleteCookie(Cookie cookie) { + //does nothing + } + + @Override + public void deleteAllCookies() { + //does nothing + } + + @Override + public Set getCookies() { + return new HashSet<>(); + } + + @Override + public Cookie getCookieNamed(String name) { + return new Cookie(name, EMPTY); + } + + @Override + public Timeouts timeouts() { + return new Timeouts() { + @Override + public Timeouts implicitlyWait(long time, TimeUnit unit) { + return this; + } + + @Override + public Timeouts setScriptTimeout(long time, TimeUnit unit) { + return this; + } + + @Override + public Timeouts pageLoadTimeout(long time, TimeUnit unit) { + return this; + } + }; + } + + @Override + public ImeHandler ime() { + return null; + } + + @Override + public Window window() { + return null; + } + + @Override + public Logs logs() { + return null; + } + }; + } + + public static class StubAndroidDriver extends AbstractStubWebDriver { + + @Override + public String getPlatformName() { + return ANDROID; + } + + @Override + public String getAutomationName() { + return APPIUM; + } + } + + public static class StubSelendroidDriver extends AbstractStubWebDriver { + + @Override + public String getPlatformName() { + return ANDROID; + } + + @Override + public String getAutomationName() { + return SELENDROID; + } + } + + public static class StubIOSDriver extends AbstractStubWebDriver { + + @Override + public String getPlatformName() { + return IOS; + } + + @Override + public String getAutomationName() { + return APPIUM; + } + } + + public static class StubIOSXCUITDriver extends AbstractStubWebDriver { + + @Override + public String getPlatformName() { + return IOS; + } + + @Override + public String getAutomationName() { + return IOS_XCUI_TEST; + } + } + + public static class StubWindowsDriver extends AbstractStubWebDriver { + + @Override + public String getPlatformName() { + return WINDOWS; + } + + @Override + public String getAutomationName() { + return APPIUM; + } + } + + public static class StubBrowserDriver extends AbstractStubWebDriver { + + @Override + public String getPlatformName() { + return EMPTY; + } + + @Override + public String getAutomationName() { + return EMPTY; + } + } + + public static class StubAndroidBrowserOrWebViewDriver extends AbstractStubWebDriver { + + @Override + public String getPlatformName() { + return ANDROID; + } + + @Override + public String getAutomationName() { + return APPIUM; + } + + @Override + public boolean isBrowser() { + return true; + } + } +} diff --git a/src/test/java/io/appium/java_client/pagefactory_tests/widget/tests/DefaultStubWidget.java b/src/test/java/io/appium/java_client/pagefactory_tests/widget/tests/DefaultStubWidget.java new file mode 100644 index 000000000..e81022a57 --- /dev/null +++ b/src/test/java/io/appium/java_client/pagefactory_tests/widget/tests/DefaultStubWidget.java @@ -0,0 +1,27 @@ +package io.appium.java_client.pagefactory_tests.widget.tests; + +import com.google.common.collect.ImmutableList; + +import io.appium.java_client.pagefactory.Widget; +import org.openqa.selenium.WebElement; + +import java.util.List; + +public class DefaultStubWidget extends Widget { + protected DefaultStubWidget(WebElement element) { + super(element); + } + + public T getSubWidget() { + return null; + } + + public List getSubWidgets() { + return ImmutableList.of(); + } + + @Override + public String toString() { + return getWrappedElement().toString(); + } +} diff --git a/src/test/java/io/appium/java_client/pagefactory_tests/widget/tests/ExtendedApp.java b/src/test/java/io/appium/java_client/pagefactory_tests/widget/tests/ExtendedApp.java new file mode 100644 index 000000000..fb589f217 --- /dev/null +++ b/src/test/java/io/appium/java_client/pagefactory_tests/widget/tests/ExtendedApp.java @@ -0,0 +1,18 @@ +package io.appium.java_client.pagefactory_tests.widget.tests; + +import java.util.List; + +public interface ExtendedApp extends AbstractApp { + + T getAnnotatedWidget(); + + List getAnnotatedWidgets(); + + T getExtendedWidget(); + + List getExtendedWidgets(); + + T getExtendedWidgetWithOverriddenLocators(); + + List getExtendedWidgetsWithOverriddenLocators(); +} diff --git a/src/test/java/io/appium/java_client/pagefactory_tests/widget/tests/ExtendedWidgetTest.java b/src/test/java/io/appium/java_client/pagefactory_tests/widget/tests/ExtendedWidgetTest.java new file mode 100644 index 000000000..2523c017b --- /dev/null +++ b/src/test/java/io/appium/java_client/pagefactory_tests/widget/tests/ExtendedWidgetTest.java @@ -0,0 +1,47 @@ +package io.appium.java_client.pagefactory_tests.widget.tests; + +import static java.util.stream.Collectors.toList; +import static org.hamcrest.Matchers.contains; +import static org.hamcrest.Matchers.containsString; +import static org.junit.Assert.assertThat; + +import org.junit.Test; +import org.openqa.selenium.By; +import org.openqa.selenium.WebDriver; + +import java.util.List; + +public abstract class ExtendedWidgetTest extends WidgetTest { + + protected ExtendedWidgetTest(ExtendedApp app, WebDriver driver) { + super(app, driver); + } + + @Test + public abstract void checkCaseWhenWidgetClassHasDeclaredLocatorAnnotation(); + + @Test + public abstract void checkCaseWhenWidgetClassHasNoDeclaredAnnotationButItHasSuperclass(); + + @Test + public abstract void checkCaseWhenBothWidgetFieldAndClassHaveDelaredAnnotations(); + + protected static void checkThatLocatorsAreCreatedCorrectly(DefaultStubWidget single, + List multiple, By rootLocator, + By subLocator) { + + assertThat(single.toString(), containsString(rootLocator.toString())); + assertThat(multiple.stream().map(DefaultStubWidget::toString).collect(toList()), + contains(containsString(rootLocator.toString()), + containsString(rootLocator.toString()))); + + assertThat(single.getSubWidget().toString(), containsString(subLocator.toString())); + assertThat(single.getSubWidgets().stream().map(Object::toString).collect(toList()), + contains(containsString(subLocator.toString()), + containsString(subLocator.toString()))); + + assertThat(multiple.stream().map(abstractWidget -> abstractWidget.getSubWidget().toString()).collect(toList()), + contains(containsString(subLocator.toString()), + containsString(subLocator.toString()))); + } +} diff --git a/src/test/java/io/appium/java_client/pagefactory_tests/widget/tests/StubWebElement.java b/src/test/java/io/appium/java_client/pagefactory_tests/widget/tests/StubWebElement.java new file mode 100644 index 000000000..859ac475d --- /dev/null +++ b/src/test/java/io/appium/java_client/pagefactory_tests/widget/tests/StubWebElement.java @@ -0,0 +1,121 @@ +package io.appium.java_client.pagefactory_tests.widget.tests; + +import static com.google.common.base.Preconditions.checkNotNull; +import static com.google.common.collect.ImmutableList.of; + +import org.openqa.selenium.By; +import org.openqa.selenium.Dimension; +import org.openqa.selenium.OutputType; +import org.openqa.selenium.Point; +import org.openqa.selenium.Rectangle; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebDriverException; +import org.openqa.selenium.WebElement; +import org.openqa.selenium.internal.WrapsDriver; + +import java.util.List; + +public class StubWebElement implements WebElement, WrapsDriver { + private final WebDriver driver; + private final By by; + + public StubWebElement(WebDriver driver, By by) { + this.driver = checkNotNull(driver); + this.by = checkNotNull(by); + } + + @Override + public void click() { + //this is just stub and it does nothing. + } + + @Override + public void submit() { + //this is just stub and it does nothing. + } + + @Override + public void sendKeys(CharSequence... keysToSend) { + //this is just stub and it does nothing. + } + + @Override + public void clear() { + //this is just stub and it does nothing. + } + + @Override + public String getTagName() { + return null; + } + + @Override + public String getAttribute(String name) { + return null; + } + + @Override + public boolean isSelected() { + return false; + } + + @Override + public boolean isEnabled() { + return false; + } + + @Override + public String getText() { + return null; + } + + @Override + public List findElements(By by) { + return of(new StubWebElement(driver, by), new StubWebElement(driver, by)); + } + + @Override + public StubWebElement findElement(By by) { + return new StubWebElement(driver, by); + } + + @Override + public boolean isDisplayed() { + return false; + } + + @Override + public Point getLocation() { + return null; + } + + @Override + public Dimension getSize() { + return null; + } + + @Override + public Rectangle getRect() { + return null; + } + + @Override + public String getCssValue(String propertyName) { + return null; + } + + @Override + public X getScreenshotAs(OutputType target) throws WebDriverException { + return null; + } + + @Override + public WebDriver getWrappedDriver() { + return driver; + } + + @Override + public String toString() { + return by.toString(); + } +} diff --git a/src/test/java/io/appium/java_client/pagefactory_tests/widget/tests/WidgetTest.java b/src/test/java/io/appium/java_client/pagefactory_tests/widget/tests/WidgetTest.java new file mode 100644 index 000000000..6ef019438 --- /dev/null +++ b/src/test/java/io/appium/java_client/pagefactory_tests/widget/tests/WidgetTest.java @@ -0,0 +1,25 @@ +package io.appium.java_client.pagefactory_tests.widget.tests; + +import static java.util.Arrays.copyOf; +import static org.openqa.selenium.support.PageFactory.initElements; + +import io.appium.java_client.pagefactory.AppiumFieldDecorator; +import org.junit.Test; +import org.openqa.selenium.WebDriver; + +public abstract class WidgetTest { + + protected final AbstractApp app; + + protected static Object[] dataArray(Object...objects) { + return copyOf(objects, objects.length); + } + + protected WidgetTest(AbstractApp app, WebDriver driver) { + this.app = app; + initElements(new AppiumFieldDecorator(driver), app); + } + + @Test + public abstract void checkThatWidgetsAreCreatedCorrectly(); +} diff --git a/src/test/java/io/appium/java_client/pagefactory_tests/widget/tests/android/AndroidApp.java b/src/test/java/io/appium/java_client/pagefactory_tests/widget/tests/android/AndroidApp.java new file mode 100644 index 000000000..419bd4fba --- /dev/null +++ b/src/test/java/io/appium/java_client/pagefactory_tests/widget/tests/android/AndroidApp.java @@ -0,0 +1,114 @@ +package io.appium.java_client.pagefactory_tests.widget.tests.android; + +import io.appium.java_client.pagefactory.AndroidFindBy; +import io.appium.java_client.pagefactory.SelendroidFindBy; +import io.appium.java_client.pagefactory_tests.widget.tests.ExtendedApp; + +import java.util.List; + +public class AndroidApp implements ExtendedApp { + + public static String ANDROID_DEFAULT_WIDGET_LOCATOR = "SOME_ANDROID_DEFAULT_LOCATOR"; + public static String ANDROID_SELENDROID_WIDGET_LOCATOR = "SOME_SELENDROID_DEFAULT_LOCATOR"; + + public static String ANDROID_EXTERNALLY_DEFINED_WIDGET_LOCATOR = "SOME_ANDROID_EXTERNALLY_DEFINED_LOCATOR"; + public static String SELENDROID_EXTERNALLY_DEFINED_WIDGET_LOCATOR = "SOME_SELENDROID_EXTERNALLY_DEFINED_LOCATOR"; + + @AndroidFindBy(uiAutomator = "SOME_ANDROID_DEFAULT_LOCATOR") + @SelendroidFindBy(linkText = "SOME_SELENDROID_DEFAULT_LOCATOR") + private DefaultAndroidWidget singleAndroidWidget; + + @AndroidFindBy(uiAutomator = "SOME_ANDROID_DEFAULT_LOCATOR") + @SelendroidFindBy(linkText = "SOME_SELENDROID_DEFAULT_LOCATOR") + private List multipleAndroidWidgets; + + /** + * This class is annotated by {@link AndroidFindBy} and @{@link SelendroidFindBy}. + * This field was added to check that locator is created correctly according to current platform + * and current automation. + */ + private AnnotatedAndroidWidget singleAnnotatedAndroidWidget; + + /** + * This class is annotated by {@link AndroidFindBy} and @{@link SelendroidFindBy}. + * This field was added to check that locator is created correctly according to current platform + * and current automation. + */ + private List multipleAnnotatedAndroidWidgets; + + /** + * This class is not annotated by {@link AndroidFindBy} and {@link SelendroidFindBy}. + * But the superclass is annotated by these annotations. This field was added to check that locator is + * created correctly according to current platform and current automation. + */ + private ExtendedAndroidWidget singleExtendedAndroidWidget; + + /** + * This class is not annotated by {@link AndroidFindBy} and {@link SelendroidFindBy}. + * But the superclass is annotated by these annotations. This field was added to check that locator is + * created correctly according to current platform and current automation. + */ + private List multipleExtendedAndroidWidgets; + + /** + * The superclass is annotated by {@link AndroidFindBy} and {@link SelendroidFindBy}. + * However there is the field which is annotated by this annotations. + * This field was added to check that locator is + * created correctly according to current platform and current automation and + * annotations that mark the field. + */ + @AndroidFindBy(uiAutomator = "SOME_ANDROID_EXTERNALLY_DEFINED_LOCATOR") + @SelendroidFindBy(linkText = "SOME_SELENDROID_EXTERNALLY_DEFINED_LOCATOR") + private ExtendedAndroidWidget singleOverriddenAndroidWidget; + + /** + * The superclass is annotated by {@link AndroidFindBy} and {@link SelendroidFindBy}. + * However there is the field which is annotated by this annotations. + * This field was added to check that locator is + * created correctly according to current platform and current automation and + * annotations that mark the field. + */ + @AndroidFindBy(uiAutomator = "SOME_ANDROID_EXTERNALLY_DEFINED_LOCATOR") + @SelendroidFindBy(linkText = "SOME_SELENDROID_EXTERNALLY_DEFINED_LOCATOR") + private List multipleOverriddenAndroidWidgets; + + @Override + public DefaultAndroidWidget getWidget() { + return singleAndroidWidget; + } + + @Override + public List getWidgets() { + return multipleAndroidWidgets; + } + + @Override + public DefaultAndroidWidget getAnnotatedWidget() { + return singleAnnotatedAndroidWidget; + } + + @Override + public List getAnnotatedWidgets() { + return multipleAnnotatedAndroidWidgets; + } + + @Override + public DefaultAndroidWidget getExtendedWidget() { + return singleExtendedAndroidWidget; + } + + @Override + public List getExtendedWidgets() { + return multipleExtendedAndroidWidgets; + } + + @Override + public DefaultAndroidWidget getExtendedWidgetWithOverriddenLocators() { + return singleOverriddenAndroidWidget; + } + + @Override + public List getExtendedWidgetsWithOverriddenLocators() { + return multipleOverriddenAndroidWidgets; + } +} diff --git a/src/test/java/io/appium/java_client/pagefactory_tests/widget/tests/android/AndroidWidgetTest.java b/src/test/java/io/appium/java_client/pagefactory_tests/widget/tests/android/AndroidWidgetTest.java new file mode 100644 index 000000000..7985e67c4 --- /dev/null +++ b/src/test/java/io/appium/java_client/pagefactory_tests/widget/tests/android/AndroidWidgetTest.java @@ -0,0 +1,46 @@ +package io.appium.java_client.pagefactory_tests.widget.tests.android; + +import static io.appium.java_client.MobileBy.AndroidUIAutomator; +import static io.appium.java_client.pagefactory_tests.widget.tests.android.AndroidApp.ANDROID_DEFAULT_WIDGET_LOCATOR; +import static io.appium.java_client.pagefactory_tests.widget.tests.android.AndroidApp.ANDROID_EXTERNALLY_DEFINED_WIDGET_LOCATOR; +import static io.appium.java_client.pagefactory_tests.widget.tests.android.AnnotatedAndroidWidget.ANDROID_ROOT_WIDGET_LOCATOR; +import static io.appium.java_client.pagefactory_tests.widget.tests.android.DefaultAndroidWidget.ANDROID_SUB_WIDGET_LOCATOR; + +import io.appium.java_client.pagefactory_tests.widget.tests.AbstractStubWebDriver; +import io.appium.java_client.pagefactory_tests.widget.tests.ExtendedApp; +import io.appium.java_client.pagefactory_tests.widget.tests.ExtendedWidgetTest; + +public class AndroidWidgetTest extends ExtendedWidgetTest { + + public AndroidWidgetTest() { + super(new AndroidApp(), new AbstractStubWebDriver.StubAndroidDriver()); + } + + @Override + public void checkThatWidgetsAreCreatedCorrectly() { + checkThatLocatorsAreCreatedCorrectly(app.getWidget(), app.getWidgets(), + AndroidUIAutomator(ANDROID_DEFAULT_WIDGET_LOCATOR), AndroidUIAutomator(ANDROID_SUB_WIDGET_LOCATOR)); + } + + @Override + public void checkCaseWhenWidgetClassHasDeclaredLocatorAnnotation() { + checkThatLocatorsAreCreatedCorrectly(((ExtendedApp) app).getAnnotatedWidget(), + ((ExtendedApp) app).getAnnotatedWidgets(), + AndroidUIAutomator(ANDROID_ROOT_WIDGET_LOCATOR), AndroidUIAutomator(ANDROID_SUB_WIDGET_LOCATOR)); + } + + @Override + public void checkCaseWhenWidgetClassHasNoDeclaredAnnotationButItHasSuperclass() { + checkThatLocatorsAreCreatedCorrectly(((ExtendedApp) app).getExtendedWidget(), + ((ExtendedApp) app).getExtendedWidgets(), + AndroidUIAutomator(ANDROID_ROOT_WIDGET_LOCATOR), AndroidUIAutomator(ANDROID_SUB_WIDGET_LOCATOR)); + } + + @Override + public void checkCaseWhenBothWidgetFieldAndClassHaveDelaredAnnotations() { + checkThatLocatorsAreCreatedCorrectly(((ExtendedApp) app).getExtendedWidgetWithOverriddenLocators(), + ((ExtendedApp) app).getExtendedWidgetsWithOverriddenLocators(), + AndroidUIAutomator(ANDROID_EXTERNALLY_DEFINED_WIDGET_LOCATOR), + AndroidUIAutomator(ANDROID_SUB_WIDGET_LOCATOR)); + } +} diff --git a/src/test/java/io/appium/java_client/pagefactory_tests/widget/tests/android/AnnotatedAndroidWidget.java b/src/test/java/io/appium/java_client/pagefactory_tests/widget/tests/android/AnnotatedAndroidWidget.java new file mode 100644 index 000000000..2b1706e78 --- /dev/null +++ b/src/test/java/io/appium/java_client/pagefactory_tests/widget/tests/android/AnnotatedAndroidWidget.java @@ -0,0 +1,16 @@ +package io.appium.java_client.pagefactory_tests.widget.tests.android; + +import io.appium.java_client.pagefactory.AndroidFindBy; +import io.appium.java_client.pagefactory.SelendroidFindBy; +import org.openqa.selenium.WebElement; + +@AndroidFindBy(uiAutomator = "SOME_ROOT_LOCATOR") +@SelendroidFindBy(linkText = "SELENDROID_SOME_ROOT_LOCATOR") +public class AnnotatedAndroidWidget extends DefaultAndroidWidget { + public static String ANDROID_ROOT_WIDGET_LOCATOR = "SOME_ROOT_LOCATOR"; + public static String SELENDROID_ROOT_WIDGET_LOCATOR = "SELENDROID_SOME_ROOT_LOCATOR"; + + protected AnnotatedAndroidWidget(WebElement element) { + super(element); + } +} diff --git a/src/test/java/io/appium/java_client/pagefactory_tests/widget/tests/android/DefaultAndroidWidget.java b/src/test/java/io/appium/java_client/pagefactory_tests/widget/tests/android/DefaultAndroidWidget.java new file mode 100644 index 000000000..461699939 --- /dev/null +++ b/src/test/java/io/appium/java_client/pagefactory_tests/widget/tests/android/DefaultAndroidWidget.java @@ -0,0 +1,36 @@ +package io.appium.java_client.pagefactory_tests.widget.tests.android; + +import io.appium.java_client.pagefactory.AndroidFindBy; +import io.appium.java_client.pagefactory.SelendroidFindBy; +import io.appium.java_client.pagefactory_tests.widget.tests.DefaultStubWidget; +import org.openqa.selenium.WebElement; + +import java.util.List; + +public class DefaultAndroidWidget extends DefaultStubWidget { + + public static String ANDROID_SUB_WIDGET_LOCATOR = "SOME_SUB_LOCATOR"; + public static String SELENDROID_SUB_WIDGET_LOCATOR = "SELENDROID_SOME_SUB_LOCATOR"; + + @AndroidFindBy(uiAutomator = "SOME_SUB_LOCATOR") + @SelendroidFindBy(linkText = "SELENDROID_SOME_SUB_LOCATOR") + private DefaultAndroidWidget singleWidget; + + @AndroidFindBy(uiAutomator = "SOME_SUB_LOCATOR") + @SelendroidFindBy(linkText = "SELENDROID_SOME_SUB_LOCATOR") + private List multipleWidgets; + + protected DefaultAndroidWidget(WebElement element) { + super(element); + } + + @Override + public DefaultAndroidWidget getSubWidget() { + return singleWidget; + } + + @Override + public List getSubWidgets() { + return multipleWidgets; + } +} diff --git a/src/test/java/io/appium/java_client/pagefactory_tests/widget/tests/android/ExtendedAndroidWidget.java b/src/test/java/io/appium/java_client/pagefactory_tests/widget/tests/android/ExtendedAndroidWidget.java new file mode 100644 index 000000000..96b80c7d2 --- /dev/null +++ b/src/test/java/io/appium/java_client/pagefactory_tests/widget/tests/android/ExtendedAndroidWidget.java @@ -0,0 +1,9 @@ +package io.appium.java_client.pagefactory_tests.widget.tests.android; + +import org.openqa.selenium.WebElement; + +public class ExtendedAndroidWidget extends AnnotatedAndroidWidget { + protected ExtendedAndroidWidget(WebElement element) { + super(element); + } +} diff --git a/src/test/java/io/appium/java_client/pagefactory_tests/widget/tests/android/SelendroidWidgetTest.java b/src/test/java/io/appium/java_client/pagefactory_tests/widget/tests/android/SelendroidWidgetTest.java new file mode 100644 index 000000000..0166b4f16 --- /dev/null +++ b/src/test/java/io/appium/java_client/pagefactory_tests/widget/tests/android/SelendroidWidgetTest.java @@ -0,0 +1,44 @@ +package io.appium.java_client.pagefactory_tests.widget.tests.android; + +import static io.appium.java_client.pagefactory_tests.widget.tests.android.AndroidApp.ANDROID_SELENDROID_WIDGET_LOCATOR; +import static io.appium.java_client.pagefactory_tests.widget.tests.android.AndroidApp.SELENDROID_EXTERNALLY_DEFINED_WIDGET_LOCATOR; +import static io.appium.java_client.pagefactory_tests.widget.tests.android.AnnotatedAndroidWidget.SELENDROID_ROOT_WIDGET_LOCATOR; +import static io.appium.java_client.pagefactory_tests.widget.tests.android.DefaultAndroidWidget.SELENDROID_SUB_WIDGET_LOCATOR; +import static org.openqa.selenium.By.linkText; + +import io.appium.java_client.pagefactory_tests.widget.tests.AbstractStubWebDriver; +import io.appium.java_client.pagefactory_tests.widget.tests.ExtendedApp; +import io.appium.java_client.pagefactory_tests.widget.tests.ExtendedWidgetTest; + +public class SelendroidWidgetTest extends ExtendedWidgetTest { + public SelendroidWidgetTest() { + super(new AndroidApp(), new AbstractStubWebDriver.StubSelendroidDriver()); + } + + @Override + public void checkThatWidgetsAreCreatedCorrectly() { + checkThatLocatorsAreCreatedCorrectly(app.getWidget(), app.getWidgets(), + linkText(ANDROID_SELENDROID_WIDGET_LOCATOR), linkText(SELENDROID_SUB_WIDGET_LOCATOR)); + } + + @Override + public void checkCaseWhenWidgetClassHasDeclaredLocatorAnnotation() { + checkThatLocatorsAreCreatedCorrectly(((ExtendedApp) app).getAnnotatedWidget(), + ((ExtendedApp) app).getAnnotatedWidgets(), + linkText(SELENDROID_ROOT_WIDGET_LOCATOR), linkText(SELENDROID_SUB_WIDGET_LOCATOR)); + } + + @Override + public void checkCaseWhenWidgetClassHasNoDeclaredAnnotationButItHasSuperclass() { + checkThatLocatorsAreCreatedCorrectly(((ExtendedApp) app).getExtendedWidget(), + ((ExtendedApp) app).getExtendedWidgets(), + linkText(SELENDROID_ROOT_WIDGET_LOCATOR), linkText(SELENDROID_SUB_WIDGET_LOCATOR)); + } + + @Override + public void checkCaseWhenBothWidgetFieldAndClassHaveDelaredAnnotations() { + checkThatLocatorsAreCreatedCorrectly(((ExtendedApp) app).getExtendedWidgetWithOverriddenLocators(), + ((ExtendedApp) app).getExtendedWidgetsWithOverriddenLocators(), + linkText(SELENDROID_EXTERNALLY_DEFINED_WIDGET_LOCATOR), linkText(SELENDROID_SUB_WIDGET_LOCATOR)); + } +} diff --git a/src/test/java/io/appium/java_client/pagefactory_tests/widget/tests/combined/CombinedAppTest.java b/src/test/java/io/appium/java_client/pagefactory_tests/widget/tests/combined/CombinedAppTest.java new file mode 100644 index 000000000..c74a0847e --- /dev/null +++ b/src/test/java/io/appium/java_client/pagefactory_tests/widget/tests/combined/CombinedAppTest.java @@ -0,0 +1,137 @@ +package io.appium.java_client.pagefactory_tests.widget.tests.combined; + +import static java.util.Arrays.asList; +import static java.util.stream.Collectors.toList; +import static org.hamcrest.Matchers.contains; +import static org.hamcrest.Matchers.equalTo; +import static org.junit.Assert.assertThat; + +import io.appium.java_client.pagefactory.OverrideWidget; +import io.appium.java_client.pagefactory_tests.widget.tests.AbstractApp; +import io.appium.java_client.pagefactory_tests.widget.tests.AbstractStubWebDriver; +import io.appium.java_client.pagefactory_tests.widget.tests.DefaultStubWidget; +import io.appium.java_client.pagefactory_tests.widget.tests.WidgetTest; +import io.appium.java_client.pagefactory_tests.widget.tests.android.DefaultAndroidWidget; +import io.appium.java_client.pagefactory_tests.widget.tests.ios.DefaultIosWidget; +import io.appium.java_client.pagefactory_tests.widget.tests.windows.DefaultWindowsWidget; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +import org.openqa.selenium.WebDriver; + +import java.util.Collection; +import java.util.List; + +@RunWith(Parameterized.class) +public class CombinedAppTest extends WidgetTest { + + private final Class widgetClass; + + /** + * Test data generation. + * + * @return test parameters + */ + @Parameterized.Parameters + public static Collection data() { + return asList( + dataArray(new CombinedApp(), new AbstractStubWebDriver.StubAndroidDriver(), DefaultAndroidWidget.class), + dataArray(new CombinedApp(), new AbstractStubWebDriver.StubSelendroidDriver(), + DefaultSelendroidWidget.class), + dataArray(new CombinedApp(), new AbstractStubWebDriver.StubIOSDriver(), DefaultIosWidget.class), + dataArray(new CombinedApp(), new AbstractStubWebDriver.StubIOSXCUITDriver(), + DefaultIosXCUITWidget.class), + dataArray(new CombinedApp(), new AbstractStubWebDriver.StubWindowsDriver(), DefaultWindowsWidget.class), + dataArray(new CombinedApp(), new AbstractStubWebDriver.StubBrowserDriver(), DefaultFindByWidget.class), + dataArray(new CombinedApp(), new AbstractStubWebDriver.StubAndroidBrowserOrWebViewDriver(), + DefaultFindByWidget.class), + dataArray(new PartiallyCombinedApp(), new AbstractStubWebDriver.StubAndroidDriver(), + DefaultAndroidWidget.class), + dataArray(new PartiallyCombinedApp(), new AbstractStubWebDriver.StubSelendroidDriver(), + DefaultSelendroidWidget.class), + dataArray(new PartiallyCombinedApp(), new AbstractStubWebDriver.StubIOSDriver(), + DefaultStubWidget.class), + dataArray(new PartiallyCombinedApp(), new AbstractStubWebDriver.StubIOSXCUITDriver(), + DefaultStubWidget.class), + dataArray(new PartiallyCombinedApp(), new AbstractStubWebDriver.StubWindowsDriver(), + DefaultStubWidget.class), + dataArray(new PartiallyCombinedApp(), new AbstractStubWebDriver.StubBrowserDriver(), + DefaultFindByWidget.class), + dataArray(new PartiallyCombinedApp(), new AbstractStubWebDriver.StubAndroidBrowserOrWebViewDriver(), + DefaultFindByWidget.class) + ); + } + + public CombinedAppTest(AbstractApp app, WebDriver driver, Class widgetClass) { + super(app, driver); + this.widgetClass = widgetClass; + } + + @Override + public void checkThatWidgetsAreCreatedCorrectly() { + assertThat("Excpected widget class was " + widgetClass.getName(), + app.getWidget().getSelfReference().getClass(), + equalTo(widgetClass)); + + List> classes = app.getWidgets().stream().map(abstractWidget -> abstractWidget + .getSelfReference().getClass()) + .collect(toList()); + assertThat(classes, + contains(widgetClass, widgetClass)); + } + + public static class CombinedApp implements AbstractApp { + + @OverrideWidget(html = DefaultFindByWidget.class, + androidUIAutomator = DefaultAndroidWidget.class, + selendroid = DefaultSelendroidWidget.class, + iOSUIAutomation = DefaultIosWidget.class, + iOSXCUITAutomation = DefaultIosXCUITWidget.class, + windowsAutomation = DefaultWindowsWidget.class + ) + private DefaultStubWidget singleWidget; + + @OverrideWidget(html = DefaultFindByWidget.class, + androidUIAutomator = DefaultAndroidWidget.class, + selendroid = DefaultSelendroidWidget.class, + iOSUIAutomation = DefaultIosWidget.class, + iOSXCUITAutomation = DefaultIosXCUITWidget.class, + windowsAutomation = DefaultWindowsWidget.class + ) + private List multipleWidget; + + @Override + public DefaultStubWidget getWidget() { + return singleWidget; + } + + @Override + public List getWidgets() { + return multipleWidget; + } + } + + public static class PartiallyCombinedApp implements AbstractApp { + + @OverrideWidget(html = DefaultFindByWidget.class, + androidUIAutomator = DefaultAndroidWidget.class, + selendroid = DefaultSelendroidWidget.class + ) + private DefaultStubWidget singleWidget; + + @OverrideWidget(html = DefaultFindByWidget.class, + androidUIAutomator = DefaultAndroidWidget.class, + selendroid = DefaultSelendroidWidget.class + ) + private List multipleWidget; + + @Override + public DefaultStubWidget getWidget() { + return singleWidget; + } + + @Override + public List getWidgets() { + return multipleWidget; + } + } +} diff --git a/src/test/java/io/appium/java_client/pagefactory_tests/widget/tests/combined/CombinedWidgetTest.java b/src/test/java/io/appium/java_client/pagefactory_tests/widget/tests/combined/CombinedWidgetTest.java new file mode 100644 index 000000000..4d6740f4a --- /dev/null +++ b/src/test/java/io/appium/java_client/pagefactory_tests/widget/tests/combined/CombinedWidgetTest.java @@ -0,0 +1,191 @@ +package io.appium.java_client.pagefactory_tests.widget.tests.combined; + +import static java.util.Arrays.asList; +import static java.util.stream.Collectors.toList; +import static org.hamcrest.Matchers.contains; +import static org.hamcrest.Matchers.equalTo; +import static org.junit.Assert.assertThat; + +import io.appium.java_client.pagefactory.OverrideWidget; +import io.appium.java_client.pagefactory_tests.widget.tests.AbstractApp; +import io.appium.java_client.pagefactory_tests.widget.tests.AbstractStubWebDriver; +import io.appium.java_client.pagefactory_tests.widget.tests.DefaultStubWidget; +import io.appium.java_client.pagefactory_tests.widget.tests.WidgetTest; +import io.appium.java_client.pagefactory_tests.widget.tests.android.DefaultAndroidWidget; +import io.appium.java_client.pagefactory_tests.widget.tests.ios.DefaultIosWidget; +import io.appium.java_client.pagefactory_tests.widget.tests.windows.DefaultWindowsWidget; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + + +@RunWith(Parameterized.class) +public class CombinedWidgetTest extends WidgetTest { + + private final Class widgetClass; + + /** + * Test data generation. + * + * @return test parameters + */ + @Parameterized.Parameters + public static Collection data() { + return asList( + dataArray(new AppWithCombinedWidgets(), + new AbstractStubWebDriver.StubAndroidDriver(), DefaultAndroidWidget.class), + dataArray(new AppWithCombinedWidgets(), + new AbstractStubWebDriver.StubSelendroidDriver(), DefaultSelendroidWidget.class), + dataArray(new AppWithCombinedWidgets(), + new AbstractStubWebDriver.StubIOSDriver(), DefaultIosWidget.class), + dataArray(new AppWithCombinedWidgets(), + new AbstractStubWebDriver.StubIOSXCUITDriver(), DefaultIosXCUITWidget.class), + dataArray(new AppWithCombinedWidgets(), + new AbstractStubWebDriver.StubWindowsDriver(), DefaultWindowsWidget.class), + dataArray(new AppWithCombinedWidgets(), + new AbstractStubWebDriver.StubBrowserDriver(), DefaultFindByWidget.class), + dataArray(new AppWithCombinedWidgets(), + new AbstractStubWebDriver.StubAndroidBrowserOrWebViewDriver(), DefaultFindByWidget.class), + dataArray(new AppWithPartiallyCombinedWidgets(), + new AbstractStubWebDriver.StubAndroidDriver(), DefaultAndroidWidget.class), + dataArray(new AppWithPartiallyCombinedWidgets(), + new AbstractStubWebDriver.StubSelendroidDriver(), DefaultSelendroidWidget.class), + dataArray(new AppWithPartiallyCombinedWidgets(), + new AbstractStubWebDriver.StubIOSDriver(), DefaultStubWidget.class), + dataArray(new AppWithPartiallyCombinedWidgets(), + new AbstractStubWebDriver.StubIOSXCUITDriver(), DefaultStubWidget.class), + dataArray(new AppWithPartiallyCombinedWidgets(), + new AbstractStubWebDriver.StubWindowsDriver(), DefaultStubWidget.class), + dataArray(new AppWithPartiallyCombinedWidgets(), + new AbstractStubWebDriver.StubBrowserDriver(), DefaultFindByWidget.class), + dataArray(new AppWithPartiallyCombinedWidgets(), + new AbstractStubWebDriver.StubAndroidBrowserOrWebViewDriver(), DefaultFindByWidget.class) + ); + } + + public CombinedWidgetTest(AbstractApp app, WebDriver driver, Class widgetClass) { + super(app, driver); + this.widgetClass = widgetClass; + } + + @Override + public void checkThatWidgetsAreCreatedCorrectly() { + assertThat("Excpected widget class was " + widgetClass.getName(), + app.getWidget().getSubWidget().getSelfReference().getClass(), + equalTo(widgetClass)); + + List> classes = new ArrayList<>(); + + app.getWidgets().forEach(abstractWidget -> + classes.addAll(abstractWidget.getSubWidgets().stream() + .map(widget -> widget.getSelfReference().getClass()).collect(toList()))); + + assertThat(classes, + contains(widgetClass, widgetClass, widgetClass, widgetClass)); + } + + public static class CombinedWidget extends DefaultStubWidget { + + @OverrideWidget(html = DefaultFindByWidget.class, + androidUIAutomator = DefaultAndroidWidget.class, + selendroid = DefaultSelendroidWidget.class, + iOSUIAutomation = DefaultIosWidget.class, + iOSXCUITAutomation = DefaultIosXCUITWidget.class, + windowsAutomation = DefaultWindowsWidget.class + ) + private DefaultStubWidget singleWidget; + + @OverrideWidget(html = DefaultFindByWidget.class, + androidUIAutomator = DefaultAndroidWidget.class, + selendroid = DefaultSelendroidWidget.class, + iOSUIAutomation = DefaultIosWidget.class, + iOSXCUITAutomation = DefaultIosXCUITWidget.class, + windowsAutomation = DefaultWindowsWidget.class + ) + private List multipleWidget; + + + protected CombinedWidget(WebElement element) { + super(element); + } + + @Override + public DefaultStubWidget getSubWidget() { + return singleWidget; + } + + @Override + public List getSubWidgets() { + return multipleWidget; + } + } + + public static class PartiallyCombinedWidget extends DefaultStubWidget { + + @OverrideWidget(html = DefaultFindByWidget.class, + androidUIAutomator = DefaultAndroidWidget.class, + selendroid = DefaultSelendroidWidget.class + ) + private DefaultStubWidget singleWidget; + + @OverrideWidget(html = DefaultFindByWidget.class, + androidUIAutomator = DefaultAndroidWidget.class, + selendroid = DefaultSelendroidWidget.class + ) + private List multipleWidget; + + + protected PartiallyCombinedWidget(WebElement element) { + super(element); + } + + @Override + public DefaultStubWidget getSubWidget() { + return singleWidget; + } + + @Override + public List getSubWidgets() { + return multipleWidget; + } + } + + public static class AppWithCombinedWidgets implements AbstractApp { + + private CombinedWidget singleWidget; + + private List multipleWidgets; + + @Override + public CombinedWidget getWidget() { + return singleWidget; + } + + @Override + public List getWidgets() { + return multipleWidgets; + } + } + + public static class AppWithPartiallyCombinedWidgets implements AbstractApp { + + private PartiallyCombinedWidget singleWidget; + + private List multipleWidgets; + + @Override + public PartiallyCombinedWidget getWidget() { + return singleWidget; + } + + @Override + public List getWidgets() { + return multipleWidgets; + } + } +} diff --git a/src/test/java/io/appium/java_client/pagefactory_tests/widget/tests/combined/DefaultFindByWidget.java b/src/test/java/io/appium/java_client/pagefactory_tests/widget/tests/combined/DefaultFindByWidget.java new file mode 100644 index 000000000..45dd5685c --- /dev/null +++ b/src/test/java/io/appium/java_client/pagefactory_tests/widget/tests/combined/DefaultFindByWidget.java @@ -0,0 +1,31 @@ +package io.appium.java_client.pagefactory_tests.widget.tests.combined; + +import io.appium.java_client.pagefactory_tests.widget.tests.DefaultStubWidget; +import org.openqa.selenium.WebElement; +import org.openqa.selenium.support.FindBy; + +import java.util.List; + +public class DefaultFindByWidget extends DefaultStubWidget { + + @FindBy(id = "SOME_SUB_LOCATOR") + private DefaultFindByWidget singleWidget; + + @FindBy(id = "SOME_SUB_LOCATOR") + private List multipleWidgets; + + + protected DefaultFindByWidget(WebElement element) { + super(element); + } + + @Override + public DefaultFindByWidget getSubWidget() { + return singleWidget; + } + + @Override + public List getSubWidgets() { + return multipleWidgets; + } +} diff --git a/src/test/java/io/appium/java_client/pagefactory_tests/widget/tests/combined/DefaultIosXCUITWidget.java b/src/test/java/io/appium/java_client/pagefactory_tests/widget/tests/combined/DefaultIosXCUITWidget.java new file mode 100644 index 000000000..e82cebe37 --- /dev/null +++ b/src/test/java/io/appium/java_client/pagefactory_tests/widget/tests/combined/DefaultIosXCUITWidget.java @@ -0,0 +1,30 @@ +package io.appium.java_client.pagefactory_tests.widget.tests.combined; + +import io.appium.java_client.pagefactory.iOSXCUITFindBy; +import io.appium.java_client.pagefactory_tests.widget.tests.DefaultStubWidget; +import org.openqa.selenium.WebElement; + +import java.util.List; + +public class DefaultIosXCUITWidget extends DefaultStubWidget { + + @iOSXCUITFindBy(iOSNsPredicate = "XCUIT_SOME_SUB_LOCATOR") + private DefaultIosXCUITWidget singleWidget; + + @iOSXCUITFindBy(iOSNsPredicate = "XCUIT_SOME_SUB_LOCATOR") + private List multipleWidgets; + + protected DefaultIosXCUITWidget(WebElement element) { + super(element); + } + + @Override + public DefaultIosXCUITWidget getSubWidget() { + return singleWidget; + } + + @Override + public List getSubWidgets() { + return multipleWidgets; + } +} diff --git a/src/test/java/io/appium/java_client/pagefactory_tests/widget/tests/combined/DefaultSelendroidWidget.java b/src/test/java/io/appium/java_client/pagefactory_tests/widget/tests/combined/DefaultSelendroidWidget.java new file mode 100644 index 000000000..34ff23f68 --- /dev/null +++ b/src/test/java/io/appium/java_client/pagefactory_tests/widget/tests/combined/DefaultSelendroidWidget.java @@ -0,0 +1,30 @@ +package io.appium.java_client.pagefactory_tests.widget.tests.combined; + +import io.appium.java_client.pagefactory.SelendroidFindBy; +import io.appium.java_client.pagefactory_tests.widget.tests.DefaultStubWidget; +import org.openqa.selenium.WebElement; + +import java.util.List; + +public class DefaultSelendroidWidget extends DefaultStubWidget { + + @SelendroidFindBy(linkText = "SELENDROID_SOME_SUB_LOCATOR") + private DefaultSelendroidWidget singleWidget; + + @SelendroidFindBy(linkText = "SELENDROID_SOME_SUB_LOCATOR") + private List multipleWidgets; + + protected DefaultSelendroidWidget(WebElement element) { + super(element); + } + + @Override + public DefaultSelendroidWidget getSubWidget() { + return singleWidget; + } + + @Override + public List getSubWidgets() { + return multipleWidgets; + } +} diff --git a/src/test/java/io/appium/java_client/pagefactory_tests/widget/tests/ios/AnnotatedIosWidget.java b/src/test/java/io/appium/java_client/pagefactory_tests/widget/tests/ios/AnnotatedIosWidget.java new file mode 100644 index 000000000..f1eaa796e --- /dev/null +++ b/src/test/java/io/appium/java_client/pagefactory_tests/widget/tests/ios/AnnotatedIosWidget.java @@ -0,0 +1,16 @@ +package io.appium.java_client.pagefactory_tests.widget.tests.ios; + +import io.appium.java_client.pagefactory.iOSFindBy; +import io.appium.java_client.pagefactory.iOSXCUITFindBy; +import org.openqa.selenium.WebElement; + +@iOSFindBy(uiAutomator = "SOME_ROOT_LOCATOR") +@iOSXCUITFindBy(iOSNsPredicate = "XCUIT_SOME_ROOT_LOCATOR") +public class AnnotatedIosWidget extends DefaultIosWidget { + public static String IOS_ROOT_WIDGET_LOCATOR = "SOME_ROOT_LOCATOR"; + public static String XCUIT_ROOT_WIDGET_LOCATOR = "XCUIT_SOME_ROOT_LOCATOR"; + + protected AnnotatedIosWidget(WebElement element) { + super(element); + } +} diff --git a/src/test/java/io/appium/java_client/pagefactory_tests/widget/tests/ios/DefaultIosWidget.java b/src/test/java/io/appium/java_client/pagefactory_tests/widget/tests/ios/DefaultIosWidget.java new file mode 100644 index 000000000..61c75880a --- /dev/null +++ b/src/test/java/io/appium/java_client/pagefactory_tests/widget/tests/ios/DefaultIosWidget.java @@ -0,0 +1,36 @@ +package io.appium.java_client.pagefactory_tests.widget.tests.ios; + +import io.appium.java_client.pagefactory.iOSFindBy; +import io.appium.java_client.pagefactory.iOSXCUITFindBy; +import io.appium.java_client.pagefactory_tests.widget.tests.DefaultStubWidget; +import org.openqa.selenium.WebElement; + +import java.util.List; + +public class DefaultIosWidget extends DefaultStubWidget { + + public static String IOS_SUB_WIDGET_LOCATOR = "SOME_SUB_LOCATOR"; + public static String XCUIT_SUB_WIDGET_LOCATOR = "XCUIT_SOME_SUB_LOCATOR"; + + @iOSFindBy(uiAutomator = "SOME_SUB_LOCATOR") + @iOSXCUITFindBy(iOSNsPredicate = "XCUIT_SOME_SUB_LOCATOR") + private DefaultIosWidget singleWidget; + + @iOSFindBy(uiAutomator = "SOME_SUB_LOCATOR") + @iOSXCUITFindBy(iOSNsPredicate = "XCUIT_SOME_SUB_LOCATOR") + private List multipleWidgets; + + protected DefaultIosWidget(WebElement element) { + super(element); + } + + @Override + public DefaultIosWidget getSubWidget() { + return singleWidget; + } + + @Override + public List getSubWidgets() { + return multipleWidgets; + } +} diff --git a/src/test/java/io/appium/java_client/pagefactory_tests/widget/tests/ios/ExtendedIosWidget.java b/src/test/java/io/appium/java_client/pagefactory_tests/widget/tests/ios/ExtendedIosWidget.java new file mode 100644 index 000000000..1186d01fc --- /dev/null +++ b/src/test/java/io/appium/java_client/pagefactory_tests/widget/tests/ios/ExtendedIosWidget.java @@ -0,0 +1,9 @@ +package io.appium.java_client.pagefactory_tests.widget.tests.ios; + +import org.openqa.selenium.WebElement; + +public class ExtendedIosWidget extends AnnotatedIosWidget { + protected ExtendedIosWidget(WebElement element) { + super(element); + } +} diff --git a/src/test/java/io/appium/java_client/pagefactory_tests/widget/tests/ios/IosApp.java b/src/test/java/io/appium/java_client/pagefactory_tests/widget/tests/ios/IosApp.java new file mode 100644 index 000000000..8fbc1643a --- /dev/null +++ b/src/test/java/io/appium/java_client/pagefactory_tests/widget/tests/ios/IosApp.java @@ -0,0 +1,120 @@ +package io.appium.java_client.pagefactory_tests.widget.tests.ios; + +import io.appium.java_client.pagefactory.iOSFindBy; +import io.appium.java_client.pagefactory.iOSXCUITFindBy; +import io.appium.java_client.pagefactory_tests.widget.tests.ExtendedApp; + +import java.util.List; + +public class IosApp implements ExtendedApp { + + public static String IOS_DEFAULT_WIDGET_LOCATOR = "SOME_IOS_DEFAULT_LOCATOR"; + public static String IOS_XCUIT_WIDGET_LOCATOR = "SOME_XCUIT_DEFAULT_LOCATOR"; + + public static String IOS_EXTERNALLY_DEFINED_WIDGET_LOCATOR = "IOS_EXTERNALLY_DEFINED_WIDGET_LOCATOR"; + public static String XCUIT_EXTERNALLY_DEFINED_WIDGET_LOCATOR = "SOME_XCUIT_EXTERNALLY_DEFINED_LOCATOR"; + + @iOSFindBy(uiAutomator = "SOME_IOS_DEFAULT_LOCATOR") + @iOSXCUITFindBy(iOSNsPredicate = "SOME_XCUIT_DEFAULT_LOCATOR") + private DefaultIosWidget singleIosWidget; + + @iOSFindBy(uiAutomator = "SOME_IOS_DEFAULT_LOCATOR") + @iOSXCUITFindBy(iOSNsPredicate = "SOME_XCUIT_DEFAULT_LOCATOR") + private List multipleIosWidgets; + + /** + * This class is annotated by {@link io.appium.java_client.pagefactory.iOSFindBy} and + * {@link io.appium.java_client.pagefactory.iOSXCUITFindBy}. + * This field was added to check that locator is created correctly according to current platform + * and current automation. + */ + private AnnotatedIosWidget singleAnnotatedIosWidget; + + /** + * This class is annotated by {@link io.appium.java_client.pagefactory.iOSFindBy} and + * {@link io.appium.java_client.pagefactory.iOSXCUITFindBy}. + * This field was added to check that locator is created correctly according to current platform + * and current automation. + */ + private List multipleIosIosWidgets; + + /** + * This class is not annotated by {@link io.appium.java_client.pagefactory.iOSFindBy} and + * {@link io.appium.java_client.pagefactory.iOSXCUITFindBy}. + * But the superclass is annotated by these annotations. This field was added to check that locator is + * created correctly according to current platform and current automation. + */ + private ExtendedIosWidget singleExtendedIosWidget; + + /** + * This class is not annotated by {@link io.appium.java_client.pagefactory.iOSFindBy} and + * {@link io.appium.java_client.pagefactory.iOSXCUITFindBy}. + * But the superclass is annotated by these annotations. This field was added to check that locator is + * created correctly according to current platform and current automation. + */ + private List multipleExtendedIosWidgets; + + /** + * The superclass is annotated by {@link io.appium.java_client.pagefactory.iOSFindBy} and + * {@link io.appium.java_client.pagefactory.iOSXCUITFindBy}. + * However there is the field which is annotated by this annotations. + * This field was added to check that locator is + * created correctly according to current platform and current automation and + * annotations that mark the field. + */ + @iOSFindBy(uiAutomator = "IOS_EXTERNALLY_DEFINED_WIDGET_LOCATOR") + @iOSXCUITFindBy(iOSNsPredicate = "SOME_XCUIT_EXTERNALLY_DEFINED_LOCATOR") + private ExtendedIosWidget singleOverriddenIosWidget; + + /** + * The superclass is annotated by {@link io.appium.java_client.pagefactory.iOSFindBy} and + * {@link io.appium.java_client.pagefactory.iOSXCUITFindBy}. + * However there is the field which is annotated by this annotations. + * This field was added to check that locator is + * created correctly according to current platform and current automation and + * annotations that mark the field. + */ + @iOSFindBy(uiAutomator = "IOS_EXTERNALLY_DEFINED_WIDGET_LOCATOR") + @iOSXCUITFindBy(iOSNsPredicate = "SOME_XCUIT_EXTERNALLY_DEFINED_LOCATOR") + private List multipleOverriddenIosWidgets; + + @Override + public DefaultIosWidget getWidget() { + return singleIosWidget; + } + + @Override + public List getWidgets() { + return multipleIosWidgets; + } + + @Override + public DefaultIosWidget getAnnotatedWidget() { + return singleAnnotatedIosWidget; + } + + @Override + public List getAnnotatedWidgets() { + return multipleIosIosWidgets; + } + + @Override + public DefaultIosWidget getExtendedWidget() { + return singleExtendedIosWidget; + } + + @Override + public List getExtendedWidgets() { + return multipleExtendedIosWidgets; + } + + @Override + public DefaultIosWidget getExtendedWidgetWithOverriddenLocators() { + return singleOverriddenIosWidget; + } + + @Override + public List getExtendedWidgetsWithOverriddenLocators() { + return multipleOverriddenIosWidgets; + } +} diff --git a/src/test/java/io/appium/java_client/pagefactory_tests/widget/tests/ios/IosWidgetTest.java b/src/test/java/io/appium/java_client/pagefactory_tests/widget/tests/ios/IosWidgetTest.java new file mode 100644 index 000000000..ad84fef59 --- /dev/null +++ b/src/test/java/io/appium/java_client/pagefactory_tests/widget/tests/ios/IosWidgetTest.java @@ -0,0 +1,45 @@ +package io.appium.java_client.pagefactory_tests.widget.tests.ios; + +import static io.appium.java_client.MobileBy.IosUIAutomation; +import static io.appium.java_client.pagefactory_tests.widget.tests.ios.AnnotatedIosWidget.IOS_ROOT_WIDGET_LOCATOR; +import static io.appium.java_client.pagefactory_tests.widget.tests.ios.DefaultIosWidget.IOS_SUB_WIDGET_LOCATOR; +import static io.appium.java_client.pagefactory_tests.widget.tests.ios.IosApp.IOS_DEFAULT_WIDGET_LOCATOR; +import static io.appium.java_client.pagefactory_tests.widget.tests.ios.IosApp.IOS_EXTERNALLY_DEFINED_WIDGET_LOCATOR; + +import io.appium.java_client.pagefactory_tests.widget.tests.AbstractStubWebDriver; +import io.appium.java_client.pagefactory_tests.widget.tests.ExtendedApp; +import io.appium.java_client.pagefactory_tests.widget.tests.ExtendedWidgetTest; + +public class IosWidgetTest extends ExtendedWidgetTest { + + public IosWidgetTest() { + super(new IosApp(), new AbstractStubWebDriver.StubIOSDriver()); + } + + @Override + public void checkThatWidgetsAreCreatedCorrectly() { + checkThatLocatorsAreCreatedCorrectly(app.getWidget(), app.getWidgets(), + IosUIAutomation(IOS_DEFAULT_WIDGET_LOCATOR), IosUIAutomation(IOS_SUB_WIDGET_LOCATOR)); + } + + @Override + public void checkCaseWhenWidgetClassHasDeclaredLocatorAnnotation() { + checkThatLocatorsAreCreatedCorrectly(((ExtendedApp) app).getAnnotatedWidget(), + ((ExtendedApp) app).getAnnotatedWidgets(), + IosUIAutomation(IOS_ROOT_WIDGET_LOCATOR), IosUIAutomation(IOS_SUB_WIDGET_LOCATOR)); + } + + @Override + public void checkCaseWhenWidgetClassHasNoDeclaredAnnotationButItHasSuperclass() { + checkThatLocatorsAreCreatedCorrectly(((ExtendedApp) app).getExtendedWidget(), + ((ExtendedApp) app).getExtendedWidgets(), + IosUIAutomation(IOS_ROOT_WIDGET_LOCATOR), IosUIAutomation(IOS_SUB_WIDGET_LOCATOR)); + } + + @Override + public void checkCaseWhenBothWidgetFieldAndClassHaveDelaredAnnotations() { + checkThatLocatorsAreCreatedCorrectly(((ExtendedApp) app).getExtendedWidgetWithOverriddenLocators(), + ((ExtendedApp) app).getExtendedWidgetsWithOverriddenLocators(), + IosUIAutomation(IOS_EXTERNALLY_DEFINED_WIDGET_LOCATOR), IosUIAutomation(IOS_SUB_WIDGET_LOCATOR)); + } +} diff --git a/src/test/java/io/appium/java_client/pagefactory_tests/widget/tests/ios/XCUITWidgetTest.java b/src/test/java/io/appium/java_client/pagefactory_tests/widget/tests/ios/XCUITWidgetTest.java new file mode 100644 index 000000000..c55365610 --- /dev/null +++ b/src/test/java/io/appium/java_client/pagefactory_tests/widget/tests/ios/XCUITWidgetTest.java @@ -0,0 +1,46 @@ +package io.appium.java_client.pagefactory_tests.widget.tests.ios; + +import static io.appium.java_client.MobileBy.iOSNsPredicateString; +import static io.appium.java_client.pagefactory_tests.widget.tests.ios.AnnotatedIosWidget.XCUIT_ROOT_WIDGET_LOCATOR; +import static io.appium.java_client.pagefactory_tests.widget.tests.ios.DefaultIosWidget.XCUIT_SUB_WIDGET_LOCATOR; +import static io.appium.java_client.pagefactory_tests.widget.tests.ios.IosApp.IOS_XCUIT_WIDGET_LOCATOR; +import static io.appium.java_client.pagefactory_tests.widget.tests.ios.IosApp.XCUIT_EXTERNALLY_DEFINED_WIDGET_LOCATOR; + +import io.appium.java_client.pagefactory_tests.widget.tests.AbstractStubWebDriver; +import io.appium.java_client.pagefactory_tests.widget.tests.ExtendedApp; +import io.appium.java_client.pagefactory_tests.widget.tests.ExtendedWidgetTest; + +public class XCUITWidgetTest extends ExtendedWidgetTest { + + public XCUITWidgetTest() { + super(new IosApp(), new AbstractStubWebDriver.StubIOSXCUITDriver()); + } + + @Override + public void checkThatWidgetsAreCreatedCorrectly() { + checkThatLocatorsAreCreatedCorrectly(app.getWidget(), app.getWidgets(), + iOSNsPredicateString(IOS_XCUIT_WIDGET_LOCATOR), iOSNsPredicateString(XCUIT_SUB_WIDGET_LOCATOR)); + } + + @Override + public void checkCaseWhenWidgetClassHasDeclaredLocatorAnnotation() { + checkThatLocatorsAreCreatedCorrectly(((ExtendedApp) app).getAnnotatedWidget(), + ((ExtendedApp) app).getAnnotatedWidgets(), + iOSNsPredicateString(XCUIT_ROOT_WIDGET_LOCATOR), iOSNsPredicateString(XCUIT_SUB_WIDGET_LOCATOR)); + } + + @Override + public void checkCaseWhenWidgetClassHasNoDeclaredAnnotationButItHasSuperclass() { + checkThatLocatorsAreCreatedCorrectly(((ExtendedApp) app).getExtendedWidget(), + ((ExtendedApp) app).getExtendedWidgets(), + iOSNsPredicateString(XCUIT_ROOT_WIDGET_LOCATOR), iOSNsPredicateString(XCUIT_SUB_WIDGET_LOCATOR)); + } + + @Override + public void checkCaseWhenBothWidgetFieldAndClassHaveDelaredAnnotations() { + checkThatLocatorsAreCreatedCorrectly(((ExtendedApp) app).getExtendedWidgetWithOverriddenLocators(), + ((ExtendedApp) app).getExtendedWidgetsWithOverriddenLocators(), + iOSNsPredicateString(XCUIT_EXTERNALLY_DEFINED_WIDGET_LOCATOR), + iOSNsPredicateString(XCUIT_SUB_WIDGET_LOCATOR)); + } +} diff --git a/src/test/java/io/appium/java_client/pagefactory_tests/widget/tests/windows/AnnotatedWindowsWidget.java b/src/test/java/io/appium/java_client/pagefactory_tests/widget/tests/windows/AnnotatedWindowsWidget.java new file mode 100644 index 000000000..733d0db95 --- /dev/null +++ b/src/test/java/io/appium/java_client/pagefactory_tests/widget/tests/windows/AnnotatedWindowsWidget.java @@ -0,0 +1,15 @@ +package io.appium.java_client.pagefactory_tests.widget.tests.windows; + +import io.appium.java_client.pagefactory.WindowsFindBy; +import io.appium.java_client.pagefactory.iOSXCUITFindBy; +import org.openqa.selenium.WebElement; + +@WindowsFindBy(windowsAutomation = "SOME_ROOT_LOCATOR") +@iOSXCUITFindBy(iOSNsPredicate = "XCUIT_SOME_ROOT_LOCATOR") +public class AnnotatedWindowsWidget extends DefaultWindowsWidget { + public static String WINDOWS_ROOT_WIDGET_LOCATOR = "SOME_ROOT_LOCATOR"; + + protected AnnotatedWindowsWidget(WebElement element) { + super(element); + } +} diff --git a/src/test/java/io/appium/java_client/pagefactory_tests/widget/tests/windows/DefaultWindowsWidget.java b/src/test/java/io/appium/java_client/pagefactory_tests/widget/tests/windows/DefaultWindowsWidget.java new file mode 100644 index 000000000..ab7b81a41 --- /dev/null +++ b/src/test/java/io/appium/java_client/pagefactory_tests/widget/tests/windows/DefaultWindowsWidget.java @@ -0,0 +1,35 @@ +package io.appium.java_client.pagefactory_tests.widget.tests.windows; + +import io.appium.java_client.pagefactory.WindowsFindBy; +import io.appium.java_client.pagefactory.iOSXCUITFindBy; +import io.appium.java_client.pagefactory_tests.widget.tests.DefaultStubWidget; +import org.openqa.selenium.WebElement; + +import java.util.List; + +public class DefaultWindowsWidget extends DefaultStubWidget { + + public static String WINDOWS_SUB_WIDGET_LOCATOR = "SOME_SUB_LOCATOR"; + + @WindowsFindBy(windowsAutomation = "SOME_SUB_LOCATOR") + @iOSXCUITFindBy(iOSNsPredicate = "XCUIT_SOME_SUB_LOCATOR") + private DefaultWindowsWidget singleWidget; + + @WindowsFindBy(windowsAutomation = "SOME_SUB_LOCATOR") + @iOSXCUITFindBy(iOSNsPredicate = "XCUIT_SOME_SUB_LOCATOR") + private List multipleWidgets; + + protected DefaultWindowsWidget(WebElement element) { + super(element); + } + + @Override + public DefaultWindowsWidget getSubWidget() { + return singleWidget; + } + + @Override + public List getSubWidgets() { + return multipleWidgets; + } +} diff --git a/src/test/java/io/appium/java_client/pagefactory_tests/widget/tests/windows/ExtendedWindowsWidget.java b/src/test/java/io/appium/java_client/pagefactory_tests/widget/tests/windows/ExtendedWindowsWidget.java new file mode 100644 index 000000000..14cc95f65 --- /dev/null +++ b/src/test/java/io/appium/java_client/pagefactory_tests/widget/tests/windows/ExtendedWindowsWidget.java @@ -0,0 +1,9 @@ +package io.appium.java_client.pagefactory_tests.widget.tests.windows; + +import org.openqa.selenium.WebElement; + +public class ExtendedWindowsWidget extends AnnotatedWindowsWidget { + protected ExtendedWindowsWidget(WebElement element) { + super(element); + } +} diff --git a/src/test/java/io/appium/java_client/pagefactory_tests/widget/tests/windows/WindowsApp.java b/src/test/java/io/appium/java_client/pagefactory_tests/widget/tests/windows/WindowsApp.java new file mode 100644 index 000000000..4d264820c --- /dev/null +++ b/src/test/java/io/appium/java_client/pagefactory_tests/widget/tests/windows/WindowsApp.java @@ -0,0 +1,124 @@ +package io.appium.java_client.pagefactory_tests.widget.tests.windows; + +import io.appium.java_client.pagefactory.WindowsFindBy; +import io.appium.java_client.pagefactory.iOSXCUITFindBy; +import io.appium.java_client.pagefactory_tests.widget.tests.ExtendedApp; + +import java.util.List; + +public class WindowsApp implements ExtendedApp { + + public static String WINDOWS_DEFAULT_WIDGET_LOCATOR = "SOME_WINDOWS_DEFAULT_LOCATOR"; + + public static String WINDOWS_EXTERNALLY_DEFINED_WIDGET_LOCATOR = "WINDOWS_EXTERNALLY_DEFINED_WIDGET_LOCATOR"; + + @WindowsFindBy(windowsAutomation = "SOME_WINDOWS_DEFAULT_LOCATOR") + @iOSXCUITFindBy(iOSNsPredicate = "SOME_XCUIT_DEFAULT_LOCATOR") + private DefaultWindowsWidget singleIosWidget; + + @WindowsFindBy(windowsAutomation = "SOME_WINDOWS_DEFAULT_LOCATOR") + @iOSXCUITFindBy(iOSNsPredicate = "SOME_XCUIT_DEFAULT_LOCATOR") + private List multipleIosWidgets; + + /** + * This class is annotated by {@link WindowsFindBy} and + * {@link io.appium.java_client.pagefactory.iOSXCUITFindBy}. + * This field was added to check that locator is created correctly according to current platform. + * It is expected that the root element and sub-elements are found using + * {@link io.appium.java_client.MobileBy#windowsAutomation(String)} + */ + private AnnotatedWindowsWidget singleAnnotatedIosWidget; + + /** + * This class is annotated by {@link WindowsFindBy} and + * {@link io.appium.java_client.pagefactory.iOSXCUITFindBy}. + * This field was added to check that locator is created correctly according to current platform. + * It is expected that the root element and sub-elements are found using + * {@link io.appium.java_client.MobileBy#windowsAutomation(String)}. + */ + private List multipleIosIosWidgets; + + /** + * This class is not annotated by {@link WindowsFindBy} and + * {@link io.appium.java_client.pagefactory.iOSXCUITFindBy}. + * But the superclass is annotated by these annotations. This field was added to check that locator is + * created correctly according to current platform. + * It is expected that the root element and sub-elements are found using + * {@link io.appium.java_client.MobileBy#windowsAutomation(String)}. + */ + private ExtendedWindowsWidget singleExtendedIosWidget; + + /** + * This class is not annotated by {@link WindowsFindBy} and + * {@link io.appium.java_client.pagefactory.iOSXCUITFindBy}. + * But the superclass is annotated by these annotations. This field was added to check that locator is + * created correctly according to current platform. + * It is expected that the root element and sub-elements are found using + * {@link io.appium.java_client.MobileBy#windowsAutomation(String)}. + */ + private List multipleExtendedIosWidgets; + + /** + * This class is not annotated by {@link WindowsFindBy} and + * {@link io.appium.java_client.pagefactory.iOSXCUITFindBy}. + * But the superclass is annotated by these annotations. This field was added to check that locator is + * created correctly according to current platform. + * It is expected that the root element and sub-elements are found using + * {@link io.appium.java_client.MobileBy#windowsAutomation(String)}. + */ + @WindowsFindBy(windowsAutomation = "WINDOWS_EXTERNALLY_DEFINED_WIDGET_LOCATOR") + @iOSXCUITFindBy(iOSNsPredicate = "SOME_XCUIT_EXTERNALLY_DEFINED_LOCATOR") + private ExtendedWindowsWidget singleOverriddenIosWidget; + + /** + * This class is not annotated by {@link WindowsFindBy} and + * {@link io.appium.java_client.pagefactory.iOSXCUITFindBy}. + * But the superclass is annotated by these annotations. This field was added to check that locator is + * created correctly according to current platform. + * It is expected that the root element and sub-elements are found using + * {@link io.appium.java_client.MobileBy#windowsAutomation(String)}. + */ + @WindowsFindBy(windowsAutomation = "WINDOWS_EXTERNALLY_DEFINED_WIDGET_LOCATOR") + @iOSXCUITFindBy(iOSNsPredicate = "SOME_XCUIT_EXTERNALLY_DEFINED_LOCATOR") + private List multipleOverriddenIosWidgets; + + @Override + public DefaultWindowsWidget getWidget() { + return singleIosWidget; + } + + @Override + public List getWidgets() { + return multipleIosWidgets; + } + + @Override + public DefaultWindowsWidget getAnnotatedWidget() { + return singleAnnotatedIosWidget; + } + + @Override + public List getAnnotatedWidgets() { + return multipleIosIosWidgets; + } + + @Override + public DefaultWindowsWidget getExtendedWidget() { + return singleExtendedIosWidget; + } + + @Override + public List getExtendedWidgets() { + return multipleExtendedIosWidgets; + } + + @Override + public DefaultWindowsWidget getExtendedWidgetWithOverriddenLocators() { + return singleOverriddenIosWidget; + } + + @Override + public List getExtendedWidgetsWithOverriddenLocators() { + return multipleOverriddenIosWidgets; + } +} diff --git a/src/test/java/io/appium/java_client/pagefactory_tests/widget/tests/windows/WindowsWidgetTest.java b/src/test/java/io/appium/java_client/pagefactory_tests/widget/tests/windows/WindowsWidgetTest.java new file mode 100644 index 000000000..5358b29dc --- /dev/null +++ b/src/test/java/io/appium/java_client/pagefactory_tests/widget/tests/windows/WindowsWidgetTest.java @@ -0,0 +1,46 @@ +package io.appium.java_client.pagefactory_tests.widget.tests.windows; + +import static io.appium.java_client.MobileBy.windowsAutomation; +import static io.appium.java_client.pagefactory_tests.widget.tests.windows.AnnotatedWindowsWidget.WINDOWS_ROOT_WIDGET_LOCATOR; +import static io.appium.java_client.pagefactory_tests.widget.tests.windows.DefaultWindowsWidget.WINDOWS_SUB_WIDGET_LOCATOR; +import static io.appium.java_client.pagefactory_tests.widget.tests.windows.WindowsApp.WINDOWS_DEFAULT_WIDGET_LOCATOR; +import static io.appium.java_client.pagefactory_tests.widget.tests.windows.WindowsApp.WINDOWS_EXTERNALLY_DEFINED_WIDGET_LOCATOR; + +import io.appium.java_client.pagefactory_tests.widget.tests.AbstractStubWebDriver; +import io.appium.java_client.pagefactory_tests.widget.tests.ExtendedApp; +import io.appium.java_client.pagefactory_tests.widget.tests.ExtendedWidgetTest; + +public class WindowsWidgetTest extends ExtendedWidgetTest { + + public WindowsWidgetTest() { + super(new WindowsApp(), new AbstractStubWebDriver.StubWindowsDriver()); + } + + @Override + public void checkThatWidgetsAreCreatedCorrectly() { + checkThatLocatorsAreCreatedCorrectly(app.getWidget(), app.getWidgets(), + windowsAutomation(WINDOWS_DEFAULT_WIDGET_LOCATOR), windowsAutomation(WINDOWS_SUB_WIDGET_LOCATOR)); + } + + @Override + public void checkCaseWhenWidgetClassHasDeclaredLocatorAnnotation() { + checkThatLocatorsAreCreatedCorrectly(((ExtendedApp) app).getAnnotatedWidget(), + ((ExtendedApp) app).getAnnotatedWidgets(), + windowsAutomation(WINDOWS_ROOT_WIDGET_LOCATOR), windowsAutomation(WINDOWS_SUB_WIDGET_LOCATOR)); + } + + @Override + public void checkCaseWhenWidgetClassHasNoDeclaredAnnotationButItHasSuperclass() { + checkThatLocatorsAreCreatedCorrectly(((ExtendedApp) app).getExtendedWidget(), + ((ExtendedApp) app).getExtendedWidgets(), + windowsAutomation(WINDOWS_ROOT_WIDGET_LOCATOR), windowsAutomation(WINDOWS_SUB_WIDGET_LOCATOR)); + } + + @Override + public void checkCaseWhenBothWidgetFieldAndClassHaveDelaredAnnotations() { + checkThatLocatorsAreCreatedCorrectly(((ExtendedApp) app).getExtendedWidgetWithOverriddenLocators(), + ((ExtendedApp) app).getExtendedWidgetsWithOverriddenLocators(), + windowsAutomation(WINDOWS_EXTERNALLY_DEFINED_WIDGET_LOCATOR), + windowsAutomation(WINDOWS_SUB_WIDGET_LOCATOR)); + } +} diff --git a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/AndroidOverrideWidgetTest.java b/src/test/java/io/appium/java_client/pagefactory_tests/widgets/AndroidOverrideWidgetTest.java deleted file mode 100644 index 8ac3f6f80..000000000 --- a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/AndroidOverrideWidgetTest.java +++ /dev/null @@ -1,145 +0,0 @@ -package io.appium.java_client.pagefactory_tests.widgets; - -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; - -import io.appium.java_client.MobileElement; -import io.appium.java_client.android.Activity; -import io.appium.java_client.android.AndroidDriver; -import io.appium.java_client.pagefactory.AppiumFieldDecorator; -import io.appium.java_client.pagefactory.TimeOutDuration; -import io.appium.java_client.pagefactory_tests.widgets.android.annotated.AnnotatedAndroidMovie; -import io.appium.java_client.pagefactory_tests.widgets.android.simple.AndroidMovie; -import io.appium.java_client.remote.MobileCapabilityType; -import io.appium.java_client.service.local.AppiumDriverLocalService; -import org.apache.commons.lang3.StringUtils; -import org.junit.AfterClass; -import org.junit.Before; -import org.junit.BeforeClass; -import org.junit.Test; -import org.openqa.selenium.NoSuchElementException; -import org.openqa.selenium.remote.DesiredCapabilities; -import org.openqa.selenium.support.PageFactory; - -import java.io.File; -import java.util.concurrent.TimeUnit; - -public class AndroidOverrideWidgetTest implements WidgetTest { - - private static AndroidDriver driver; - private static AppiumDriverLocalService service; - private static RottenTomatoes rottenTomatoes; - - /** - * initialization. - */ - @BeforeClass - public static void beforeClass() throws Exception { - service = AppiumDriverLocalService.buildDefaultService(); - service.start(); - - File appDir = new File("src/test/java/io/appium/java_client"); - File app = new File(appDir, "android-rottentomatoes-demo-debug.apk"); - DesiredCapabilities capabilities = new DesiredCapabilities(); - capabilities.setCapability(MobileCapabilityType.DEVICE_NAME, "Android Emulator"); - capabilities.setCapability(MobileCapabilityType.APP, app.getAbsolutePath()); - driver = new AndroidDriver<>(service.getUrl(), capabilities); - - rottenTomatoes = new RottenTomatoes(); - PageFactory.initElements( - new AppiumFieldDecorator(driver, new TimeOutDuration(5, TimeUnit.SECONDS)), - rottenTomatoes); - } - - /** - * finishing. - */ - @AfterClass - public static void afterClass() throws Exception { - if (driver != null) { - driver.quit(); - } - - if (service != null) { - service.stop(); - } - } - - /** - * The setting up. - */ - @Before - public void setUp() throws Exception { - if (driver != null) { - Activity activity = new Activity("com.codepath.example.rottentomatoes", - "BoxOfficeActivity"); - driver.startActivity(activity); - } - } - - @Test - @Override public void checkACommonWidget() { - assertTrue(rottenTomatoes.getSimpleMovieCount() >= 1); - Movie movie = rottenTomatoes.getASimpleMovie(0); - assertTrue(!StringUtils.isBlank(movie.title())); - assertTrue(!StringUtils.isBlank(movie.score())); - assertNotNull(movie.getPoster()); - movie.goToReview(); - - rottenTomatoes.checkSimpleReview(); - assertTrue(movie.getSelfReference().getClass().equals(AndroidMovie.class)); - } - - @Override - @Test public void checkAnAnnotatedWidget() { - assertTrue(rottenTomatoes.getAnnotatedMovieCount() >= 1); - Movie movie = rottenTomatoes.getAnAnnotatedMovie(0); - assertTrue(!StringUtils.isBlank(movie.title())); - assertTrue(!StringUtils.isBlank(movie.score())); - assertNotNull(movie.getPoster()); - movie.goToReview(); - - rottenTomatoes.checkAnnotatedReview(); - assertTrue(movie.getSelfReference().getClass().equals(AnnotatedAndroidMovie.class)); - } - - - @Override - @Test - public void checkAnExtendedWidget() { - assertTrue(rottenTomatoes.getExtendeddMovieCount() >= 1); - Movie movie = rottenTomatoes.getAnExtendedMovie(0); - assertTrue(!StringUtils.isBlank(movie.title())); - assertTrue(!StringUtils.isBlank(movie.score())); - assertNotNull(movie.getPoster()); - movie.goToReview(); - - rottenTomatoes.checkExtendedReview(); - assertTrue(movie.getSelfReference().getClass().equals(AnnotatedAndroidMovie.class)); - } - - @Override - @Test - public void checkTheLocatorOverridingOnAWidget() { - try { - assertTrue(rottenTomatoes.getFakedMovieCount() == 0); - } catch (Exception e) { - if (!NoSuchElementException.class.isAssignableFrom(e.getClass())) { - throw e; - } - } - - rottenTomatoes.getASimpleMovie(0).goToReview(); - - try { - rottenTomatoes.checkFakeReview(); - } catch (Exception e) { - if (NoSuchElementException.class.isAssignableFrom(e.getClass())) { - return; - } else { - throw e; - } - } - throw new RuntimeException("Any exception was expected"); - } -} diff --git a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/HtmlOverrideWidgetTest.java b/src/test/java/io/appium/java_client/pagefactory_tests/widgets/HtmlOverrideWidgetTest.java deleted file mode 100644 index 213550910..000000000 --- a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/HtmlOverrideWidgetTest.java +++ /dev/null @@ -1,140 +0,0 @@ -package io.appium.java_client.pagefactory_tests.widgets; - -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; - -import io.appium.java_client.pagefactory.AppiumFieldDecorator; -import io.appium.java_client.pagefactory.TimeOutDuration; -import io.appium.java_client.pagefactory_tests.widgets.html.annotated.AnnotatedHtmlMovie; -import io.appium.java_client.pagefactory_tests.widgets.html.simple.HtmlMovie; -import org.apache.commons.lang3.StringUtils; -import org.junit.AfterClass; -import org.junit.Before; -import org.junit.BeforeClass; -import org.junit.Test; -import org.openqa.selenium.NoSuchElementException; -import org.openqa.selenium.Platform; -import org.openqa.selenium.chrome.ChromeDriver; -import org.openqa.selenium.chrome.ChromeDriverService; -import org.openqa.selenium.support.PageFactory; - -import java.io.File; -import java.util.concurrent.TimeUnit; - -public class HtmlOverrideWidgetTest implements WidgetTest { - - private static ChromeDriver driver; - private static RottenTomatoes rottenTomatoes; - - /** - * initialization. - */ - @BeforeClass - public static void beforeClass() throws Exception { - - if (Platform.getCurrent().is(Platform.WINDOWS)) { - System.setProperty(ChromeDriverService.CHROME_DRIVER_EXE_PROPERTY, - "src/test/java/io/appium/java_client/pagefactory_tests/chromedriver.exe"); - } else { - System.setProperty(ChromeDriverService.CHROME_DRIVER_EXE_PROPERTY, - "src/test/java/io/appium/java_client/pagefactory_tests/chromedriver"); - } - - driver = new ChromeDriver(); - driver.manage().timeouts().pageLoadTimeout(30, TimeUnit.SECONDS); - rottenTomatoes = new RottenTomatoes(); - PageFactory.initElements( - new AppiumFieldDecorator(driver, new TimeOutDuration(5, TimeUnit.SECONDS)), - rottenTomatoes); - } - - /** - * finishing. - */ - @AfterClass - public static void afterClass() throws Exception { - if (driver != null) { - driver.quit(); - } - } - - /** - * The setting up. - */ - @Before - public void setUp() throws Exception { - if (driver != null) { - driver.get( - new File("src/test/java/io/appium/java_client/RottenTomatoesSnapshot.html") - .toURI().toString()); - } - } - - @Test - @Override - public void checkACommonWidget() { - assertTrue(rottenTomatoes.getSimpleMovieCount() >= 1); - Movie movie = rottenTomatoes.getASimpleMovie(0); - assertTrue(!StringUtils.isBlank(movie.title())); - assertTrue(!StringUtils.isBlank(movie.score())); - assertNotNull(movie.getPoster()); - movie.goToReview(); - - rottenTomatoes.checkSimpleReview(); - assertTrue(movie.getSelfReference().getClass().equals(HtmlMovie.class)); - } - - @Override - @Test - public void checkAnAnnotatedWidget() { - assertTrue(rottenTomatoes.getAnnotatedMovieCount() >= 1); - Movie movie = rottenTomatoes.getAnAnnotatedMovie(0); - assertTrue(!StringUtils.isBlank(movie.title())); - assertTrue(!StringUtils.isBlank(movie.score())); - assertNotNull(movie.getPoster()); - movie.goToReview(); - - rottenTomatoes.checkAnnotatedReview(); - assertTrue(movie.getSelfReference().getClass().equals(AnnotatedHtmlMovie.class)); - } - - - @Override - @Test - public void checkAnExtendedWidget() { - assertTrue(rottenTomatoes.getExtendeddMovieCount() >= 1); - Movie movie = rottenTomatoes.getAnExtendedMovie(0); - assertTrue(!StringUtils.isBlank(movie.title())); - assertTrue(!StringUtils.isBlank(movie.score())); - assertNotNull(movie.getPoster()); - movie.goToReview(); - - rottenTomatoes.checkExtendedReview(); - assertTrue(movie.getSelfReference().getClass().equals(AnnotatedHtmlMovie.class)); - } - - @Override - @Test - public void checkTheLocatorOverridingOnAWidget() { - try { - assertTrue(rottenTomatoes.getFakedMovieCount() == 0); - } catch (Exception e) { - if (!NoSuchElementException.class.isAssignableFrom(e.getClass())) { - throw e; - } - } - - rottenTomatoes.getASimpleMovie(0).goToReview(); - - try { - rottenTomatoes.checkFakeReview(); - } catch (Exception e) { - if (NoSuchElementException.class.isAssignableFrom(e.getClass())) { - return; - } else { - throw e; - } - } - throw new RuntimeException("Any exception was expected"); - } -} diff --git a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/IOSOverrideWidgetTest.java b/src/test/java/io/appium/java_client/pagefactory_tests/widgets/IOSOverrideWidgetTest.java deleted file mode 100644 index 4946946c9..000000000 --- a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/IOSOverrideWidgetTest.java +++ /dev/null @@ -1,155 +0,0 @@ -package io.appium.java_client.pagefactory_tests.widgets; - -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; - -import io.appium.java_client.MobileElement; -import io.appium.java_client.ios.IOSDriver; -import io.appium.java_client.pagefactory.AppiumFieldDecorator; -import io.appium.java_client.pagefactory.TimeOutDuration; -import io.appium.java_client.pagefactory_tests.widgets.ios.annotated.AnnotatedIOSMovie; -import io.appium.java_client.pagefactory_tests.widgets.ios.simple.IOSMovie; -import io.appium.java_client.remote.IOSMobileCapabilityType; -import io.appium.java_client.remote.MobileCapabilityType; -import io.appium.java_client.service.local.AppiumDriverLocalService; -import org.apache.commons.lang3.StringUtils; - -import org.junit.After; -import org.junit.AfterClass; -import org.junit.Before; -import org.junit.BeforeClass; -import org.junit.Test; - -import org.openqa.selenium.NoSuchElementException; -import org.openqa.selenium.remote.DesiredCapabilities; -import org.openqa.selenium.support.PageFactory; - -import java.io.File; -import java.util.concurrent.TimeUnit; - -public class IOSOverrideWidgetTest implements WidgetTest { - - private static AppiumDriverLocalService service; - private static RottenTomatoes rottenTomatoes; - private IOSDriver driver; - - /** - * initialization. - */ - @BeforeClass - public static void beforeClass() throws Exception { - service = AppiumDriverLocalService.buildDefaultService(); - service.start(); - } - - /** - * finishing. - */ - @AfterClass - public static void afterClass() throws Exception { - if (service != null) { - service.stop(); - } - } - - /** - * The setting up. - */ - @Before - public void setUp() throws Exception { - File appDir = new File("src/test/java/io/appium/java_client"); - File app = new File(appDir, "RottenTomatoes.zip"); - - DesiredCapabilities capabilities = new DesiredCapabilities(); - capabilities.setCapability(MobileCapabilityType.BROWSER_NAME, ""); - capabilities.setCapability(MobileCapabilityType.PLATFORM_VERSION, "9.2"); - //sometimes environment has performance problems - capabilities.setCapability(IOSMobileCapabilityType.LAUNCH_TIMEOUT, 500000); - capabilities.setCapability(MobileCapabilityType.DEVICE_NAME, "iPhone Simulator"); - capabilities.setCapability(MobileCapabilityType.APP, app.getAbsolutePath()); - driver = new IOSDriver<>(service.getUrl(), capabilities); - - rottenTomatoes = new RottenTomatoes(); - PageFactory.initElements( - new AppiumFieldDecorator(driver, new TimeOutDuration(5, TimeUnit.SECONDS)), - rottenTomatoes); - } - - /** - * finishing. - */ - @After - public void tearDown() { - if (driver != null) { - driver.quit(); - } - } - - @Test - @Override - public void checkACommonWidget() { - assertTrue(rottenTomatoes.getSimpleMovieCount() >= 1); - Movie movie = rottenTomatoes.getASimpleMovie(0); - assertTrue(!StringUtils.isBlank(movie.title())); - assertTrue(!StringUtils.isBlank(movie.score())); - assertNotNull(movie.getPoster()); - movie.goToReview(); - - rottenTomatoes.checkSimpleReview(); - assertTrue(movie.getSelfReference().getClass().equals(IOSMovie.class)); - } - - @Override - @Test - public void checkAnAnnotatedWidget() { - assertTrue(rottenTomatoes.getAnnotatedMovieCount() >= 1); - Movie movie = rottenTomatoes.getAnAnnotatedMovie(0); - assertTrue(!StringUtils.isBlank(movie.title())); - assertTrue(!StringUtils.isBlank(movie.score())); - assertNotNull(movie.getPoster()); - movie.goToReview(); - - rottenTomatoes.checkAnnotatedReview(); - assertTrue(movie.getSelfReference().getClass().equals(AnnotatedIOSMovie.class)); - } - - - @Override - @Test - public void checkAnExtendedWidget() { - assertTrue(rottenTomatoes.getExtendeddMovieCount() >= 1); - Movie movie = rottenTomatoes.getAnExtendedMovie(0); - assertTrue(!StringUtils.isBlank(movie.title())); - assertTrue(!StringUtils.isBlank(movie.score())); - assertNotNull(movie.getPoster()); - movie.goToReview(); - - rottenTomatoes.checkExtendedReview(); - assertTrue(movie.getSelfReference().getClass().equals(AnnotatedIOSMovie.class)); - } - - @Override - @Test - public void checkTheLocatorOverridingOnAWidget() { - try { - assertTrue(rottenTomatoes.getFakedMovieCount() == 0); - } catch (Exception e) { - if (!NoSuchElementException.class.isAssignableFrom(e.getClass())) { - throw e; - } - } - - rottenTomatoes.getASimpleMovie(0).goToReview(); - - try { - rottenTomatoes.checkFakeReview(); - } catch (Exception e) { - if (NoSuchElementException.class.isAssignableFrom(e.getClass())) { - return; - } else { - throw e; - } - } - throw new RuntimeException("Any exception was expected"); - } -} diff --git a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/Movie.java b/src/test/java/io/appium/java_client/pagefactory_tests/widgets/Movie.java deleted file mode 100644 index 4893d67dc..000000000 --- a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/Movie.java +++ /dev/null @@ -1,22 +0,0 @@ -package io.appium.java_client.pagefactory_tests.widgets; - -import io.appium.java_client.pagefactory.Widget; -import org.openqa.selenium.WebElement; - -public abstract class Movie extends Widget { - protected Movie(WebElement element) { - super(element); - } - - public abstract String title(); - - public abstract String score(); - - public abstract Object getPoster(); - - public abstract void goToReview(); - - @Override public Movie getSelfReference() { - return (Movie) super.getSelfReference(); - } -} diff --git a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/Movies.java b/src/test/java/io/appium/java_client/pagefactory_tests/widgets/Movies.java deleted file mode 100644 index 8607f61d2..000000000 --- a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/Movies.java +++ /dev/null @@ -1,19 +0,0 @@ -package io.appium.java_client.pagefactory_tests.widgets; - -import io.appium.java_client.pagefactory.Widget; -import org.openqa.selenium.WebElement; - -public abstract class Movies extends Widget { - - protected Movies(WebElement element) { - super(element); - } - - public abstract int getMovieCount(); - - public abstract Movie getMovie(int index); - - @Override public Movies getSelfReference() { - return (Movies) super.getSelfReference(); - } -} diff --git a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/PartiallyOverrideNegativeWidgetTest.java b/src/test/java/io/appium/java_client/pagefactory_tests/widgets/PartiallyOverrideNegativeWidgetTest.java deleted file mode 100644 index 1df5c6d22..000000000 --- a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/PartiallyOverrideNegativeWidgetTest.java +++ /dev/null @@ -1,64 +0,0 @@ -package io.appium.java_client.pagefactory_tests.widgets; - - -import io.appium.java_client.MobileElement; -import io.appium.java_client.android.AndroidDriver; -import io.appium.java_client.pagefactory.AppiumFieldDecorator; -import io.appium.java_client.pagefactory.TimeOutDuration; -import io.appium.java_client.remote.MobileCapabilityType; -import io.appium.java_client.service.local.AppiumDriverLocalService; -import org.junit.AfterClass; -import org.junit.BeforeClass; -import org.junit.Test; -import org.openqa.selenium.remote.DesiredCapabilities; -import org.openqa.selenium.support.PageFactory; - -import java.io.File; -import java.util.concurrent.TimeUnit; - -public class PartiallyOverrideNegativeWidgetTest { - - private static AndroidDriver driver; - private static AppiumDriverLocalService service; - private static PartiallyOverrideRottenTomatoes rottenTomatoes; - - /** - * initialization. - */ - @BeforeClass - public static void beforeClass() throws Exception { - service = AppiumDriverLocalService.buildDefaultService(); - service.start(); - - File appDir = new File("src/test/java/io/appium/java_client"); - File app = new File(appDir, "android-rottentomatoes-demo-debug.apk"); - DesiredCapabilities capabilities = new DesiredCapabilities(); - capabilities.setCapability(MobileCapabilityType.DEVICE_NAME, "Android Emulator"); - capabilities.setCapability(MobileCapabilityType.APP, app.getAbsolutePath()); - driver = new AndroidDriver<>(service.getUrl(), capabilities); - - rottenTomatoes = new PartiallyOverrideRottenTomatoes(); - PageFactory.initElements( - new AppiumFieldDecorator(driver, new TimeOutDuration(5, TimeUnit.SECONDS)), - rottenTomatoes); - } - - /** - * finishing. - */ - @AfterClass - public static void afterClass() throws Exception { - if (driver != null) { - driver.quit(); - } - - if (service != null) { - service.stop(); - } - } - - @Test(expected = InstantiationException.class) - public void gettingOfAnElement() { - rottenTomatoes.checkSimpleReview(); - } -} diff --git a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/PartiallyOverrideRottenTomatoes.java b/src/test/java/io/appium/java_client/pagefactory_tests/widgets/PartiallyOverrideRottenTomatoes.java deleted file mode 100644 index 451da184d..000000000 --- a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/PartiallyOverrideRottenTomatoes.java +++ /dev/null @@ -1,142 +0,0 @@ -package io.appium.java_client.pagefactory_tests.widgets; - -import static org.junit.Assert.assertTrue; - -import io.appium.java_client.pagefactory.AndroidFindBy; -import io.appium.java_client.pagefactory.OverrideWidget; -import io.appium.java_client.pagefactory_tests.widgets.html.annotated.AnnotatedHtmlMovies; -import io.appium.java_client.pagefactory_tests.widgets.html.annotated.AnnotatedHtmlReview; -import io.appium.java_client.pagefactory_tests.widgets.html.extended.ExtendedHtmlMovies; -import io.appium.java_client.pagefactory_tests.widgets.html.extended.ExtendedHtmlReview; -import io.appium.java_client.pagefactory_tests.widgets.html.simple.HtmlMovies; -import io.appium.java_client.pagefactory_tests.widgets.html.simple.HtmlReview; -import org.apache.commons.lang3.StringUtils; -import org.openqa.selenium.support.FindBy; - -public class PartiallyOverrideRottenTomatoes implements RottenTomatoesAbstractApp { - - @AndroidFindBy(id = "com.codepath.example.rottentomatoes:id/lvMovies") - @FindBy(id = "movies-collection") - @OverrideWidget(html = HtmlMovies.class) - private Movies simpleMovies; - - @FindBy(id = "main_container") - @AndroidFindBy(id = "android:id/content") - @AndroidFindBy(className = "android.widget.RelativeLayout") - @OverrideWidget(html = HtmlReview.class) - private Review simpleReview; - - @OverrideWidget(html = AnnotatedHtmlMovies.class) - private Movies annotatedMovies; - - @OverrideWidget(html = AnnotatedHtmlReview.class) - private Review annotatedReview; - - @OverrideWidget(html = ExtendedHtmlMovies.class) - private Movies extendedMovies; - - @OverrideWidget(html = ExtendedHtmlReview.class) - private Review extendedReview; - - - @FindBy(id = "Fake_ID_For_All_Platforms") - @OverrideWidget(html = ExtendedHtmlMovies.class) - private Movies fakeMovies; - - @FindBy(id = "Fake_ID_For_All_Platforms") - @OverrideWidget(html = ExtendedHtmlReview.class) - private Review fakeReview; - - /** - * It gets movie count. - */ - public int getSimpleMovieCount() { - return simpleMovies.getMovieCount(); - } - - /** - * @param index is the desired index. - * @return a movie. - */ - public Movie getASimpleMovie(int index) { - return simpleMovies.getMovie(index); - } - - /** - * It reads a review. - */ - public void checkSimpleReview() { - assertTrue(!StringUtils.isBlank(simpleReview.title())); - assertTrue(!StringUtils.isBlank(simpleReview.score())); - assertTrue(!StringUtils.isBlank(simpleReview.info())); - assertTrue(simpleReview.getPoster() != null); - } - - /** - * It gets movie count. - */ - public int getAnnotatedMovieCount() { - return annotatedMovies.getMovieCount(); - } - - /** - * @param index is the desired index. - * @return a movie. - */ - public Movie getAnAnnotatedMovie(int index) { - return annotatedMovies.getMovie(index); - } - - /** - * It reads a review. - */ - public void checkAnnotatedReview() { - assertTrue(!StringUtils.isBlank(annotatedReview.title())); - assertTrue(!StringUtils.isBlank(annotatedReview.score())); - assertTrue(!StringUtils.isBlank(annotatedReview.info())); - assertTrue(annotatedReview.getPoster() != null); - } - - /** - * It gets movie count. - */ - public int getExtendeddMovieCount() { - return extendedMovies.getMovieCount(); - } - - /** - * @param index is the desired index. - * @return a movie. - */ - public Movie getAnExtendedMovie(int index) { - return extendedMovies.getMovie(index); - } - - /** - * It reads a review. - */ - public void checkExtendedReview() { - assertTrue(!StringUtils.isBlank(extendedReview.title())); - assertTrue(!StringUtils.isBlank(extendedReview.score())); - assertTrue(!StringUtils.isBlank(extendedReview.info())); - assertTrue(extendedReview.getPoster() != null); - } - - /** - * It gets movie count. - */ - public int getFakedMovieCount() { - return fakeMovies.getMovieCount(); - } - - /** - * It reads a review. - */ - public void checkFakeReview() { - assertTrue(!StringUtils.isBlank(fakeReview.title())); - assertTrue(!StringUtils.isBlank(fakeReview.score())); - assertTrue(!StringUtils.isBlank(fakeReview.info())); - assertTrue(fakeReview.getPoster() != null); - } - -} diff --git a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/PartiallyOverrideWidgetTest.java b/src/test/java/io/appium/java_client/pagefactory_tests/widgets/PartiallyOverrideWidgetTest.java deleted file mode 100644 index 76207879c..000000000 --- a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/PartiallyOverrideWidgetTest.java +++ /dev/null @@ -1,140 +0,0 @@ -package io.appium.java_client.pagefactory_tests.widgets; - -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; - -import io.appium.java_client.pagefactory.AppiumFieldDecorator; -import io.appium.java_client.pagefactory.TimeOutDuration; -import io.appium.java_client.pagefactory_tests.widgets.html.annotated.AnnotatedHtmlMovie; -import io.appium.java_client.pagefactory_tests.widgets.html.simple.HtmlMovie; -import org.apache.commons.lang3.StringUtils; -import org.junit.AfterClass; -import org.junit.Before; -import org.junit.BeforeClass; -import org.junit.Test; -import org.openqa.selenium.NoSuchElementException; -import org.openqa.selenium.Platform; -import org.openqa.selenium.chrome.ChromeDriver; -import org.openqa.selenium.chrome.ChromeDriverService; -import org.openqa.selenium.support.PageFactory; - -import java.io.File; -import java.util.concurrent.TimeUnit; - -public class PartiallyOverrideWidgetTest implements WidgetTest { - - private static ChromeDriver driver; - private static PartiallyOverrideRottenTomatoes rottenTomatoes; - - /** - * initialization. - */ - @BeforeClass - public static void beforeClass() throws Exception { - - if (Platform.getCurrent().is(Platform.WINDOWS)) { - System.setProperty(ChromeDriverService.CHROME_DRIVER_EXE_PROPERTY, - "src/test/java/io/appium/java_client/pagefactory_tests/chromedriver.exe"); - } else { - System.setProperty(ChromeDriverService.CHROME_DRIVER_EXE_PROPERTY, - "src/test/java/io/appium/java_client/pagefactory_tests/chromedriver"); - } - - driver = new ChromeDriver(); - driver.manage().timeouts().pageLoadTimeout(30, TimeUnit.SECONDS); - rottenTomatoes = new PartiallyOverrideRottenTomatoes(); - PageFactory.initElements( - new AppiumFieldDecorator(driver, new TimeOutDuration(5, TimeUnit.SECONDS)), - rottenTomatoes); - } - - /** - * finishing. - */ - @AfterClass - public static void afterClass() throws Exception { - if (driver != null) { - driver.quit(); - } - } - - /** - * The setting up. - */ - @Before - public void setUp() throws Exception { - if (driver != null) { - driver.get( - new File("src/test/java/io/appium/java_client/RottenTomatoesSnapshot.html") - .toURI().toString()); - } - } - - @Test - @Override - public void checkACommonWidget() { - assertTrue(rottenTomatoes.getSimpleMovieCount() >= 1); - Movie movie = rottenTomatoes.getASimpleMovie(0); - assertTrue(!StringUtils.isBlank(movie.title())); - assertTrue(!StringUtils.isBlank(movie.score())); - assertNotNull(movie.getPoster()); - movie.goToReview(); - - rottenTomatoes.checkSimpleReview(); - assertTrue(movie.getSelfReference().getClass().equals(HtmlMovie.class)); - } - - @Override - @Test - public void checkAnAnnotatedWidget() { - assertTrue(rottenTomatoes.getAnnotatedMovieCount() >= 1); - Movie movie = rottenTomatoes.getAnAnnotatedMovie(0); - assertTrue(!StringUtils.isBlank(movie.title())); - assertTrue(!StringUtils.isBlank(movie.score())); - assertNotNull(movie.getPoster()); - movie.goToReview(); - - rottenTomatoes.checkAnnotatedReview(); - assertTrue(movie.getSelfReference().getClass().equals(AnnotatedHtmlMovie.class)); - } - - - @Override - @Test - public void checkAnExtendedWidget() { - assertTrue(rottenTomatoes.getExtendeddMovieCount() >= 1); - Movie movie = rottenTomatoes.getAnExtendedMovie(0); - assertTrue(!StringUtils.isBlank(movie.title())); - assertTrue(!StringUtils.isBlank(movie.score())); - assertNotNull(movie.getPoster()); - movie.goToReview(); - - rottenTomatoes.checkExtendedReview(); - assertTrue(movie.getSelfReference().getClass().equals(AnnotatedHtmlMovie.class)); - } - - @Override - @Test - public void checkTheLocatorOverridingOnAWidget() { - try { - assertTrue(rottenTomatoes.getFakedMovieCount() == 0); - } catch (Exception e) { - if (!NoSuchElementException.class.isAssignableFrom(e.getClass())) { - throw e; - } - } - - rottenTomatoes.getASimpleMovie(0).goToReview(); - - try { - rottenTomatoes.checkFakeReview(); - } catch (Exception e) { - if (NoSuchElementException.class.isAssignableFrom(e.getClass())) { - return; - } else { - throw e; - } - } - throw new RuntimeException("Any exception was expected"); - } -} diff --git a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/Review.java b/src/test/java/io/appium/java_client/pagefactory_tests/widgets/Review.java deleted file mode 100644 index 27483ed91..000000000 --- a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/Review.java +++ /dev/null @@ -1,23 +0,0 @@ -package io.appium.java_client.pagefactory_tests.widgets; - -import io.appium.java_client.pagefactory.Widget; -import org.openqa.selenium.WebElement; - -public abstract class Review extends Widget { - - protected Review(WebElement element) { - super(element); - } - - public abstract String title(); - - public abstract String score(); - - public abstract String info(); - - public abstract Object getPoster(); - - @Override public Review getSelfReference() { - return (Review) super.getSelfReference(); - } -} diff --git a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/RottenTomatoes.java b/src/test/java/io/appium/java_client/pagefactory_tests/widgets/RottenTomatoes.java deleted file mode 100644 index d8741125d..000000000 --- a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/RottenTomatoes.java +++ /dev/null @@ -1,194 +0,0 @@ -package io.appium.java_client.pagefactory_tests.widgets; - -import static org.junit.Assert.assertTrue; - -import io.appium.java_client.pagefactory.AndroidFindBy; -import io.appium.java_client.pagefactory.OverrideWidget; -import io.appium.java_client.pagefactory.SelendroidFindBy; -import io.appium.java_client.pagefactory.iOSFindBy; - -import io.appium.java_client.pagefactory_tests.widgets.android.annotated.AnnotatedAndroidMovies; -import io.appium.java_client.pagefactory_tests.widgets.android.annotated.AnnotatedAndroidReview; -import io.appium.java_client.pagefactory_tests.widgets.android.extended.ExtendedAndroidMovies; -import io.appium.java_client.pagefactory_tests.widgets.android.extended.ExtendedAndroidReview; -import io.appium.java_client.pagefactory_tests.widgets.android.simple.AndroidMovies; -import io.appium.java_client.pagefactory_tests.widgets.android.simple.AndroidReview; -import io.appium.java_client.pagefactory_tests.widgets.html.annotated.AnnotatedHtmlMovies; -import io.appium.java_client.pagefactory_tests.widgets.html.annotated.AnnotatedHtmlReview; -import io.appium.java_client.pagefactory_tests.widgets.html.extended.ExtendedHtmlMovies; -import io.appium.java_client.pagefactory_tests.widgets.html.extended.ExtendedHtmlReview; -import io.appium.java_client.pagefactory_tests.widgets.html.simple.HtmlMovies; -import io.appium.java_client.pagefactory_tests.widgets.html.simple.HtmlReview; -import io.appium.java_client.pagefactory_tests.widgets.ios.annotated.AnnotatedIOSMovies; -import io.appium.java_client.pagefactory_tests.widgets.ios.annotated.AnnotatedIOSReview; -import io.appium.java_client.pagefactory_tests.widgets.ios.extended.ExtendedIOSMovies; -import io.appium.java_client.pagefactory_tests.widgets.ios.extended.ExtendedIOSReview; -import io.appium.java_client.pagefactory_tests.widgets.ios.simple.IOSMovies; -import io.appium.java_client.pagefactory_tests.widgets.ios.simple.IOSReview; -import io.appium.java_client.pagefactory_tests.widgets.selendroid.annotated.AnnotatedSelendroidMovies; -import io.appium.java_client.pagefactory_tests.widgets.selendroid.annotated.AnnotatedSelendroidReview; -import io.appium.java_client.pagefactory_tests.widgets.selendroid.extended.ExtendedSelendroidMovies; -import io.appium.java_client.pagefactory_tests.widgets.selendroid.extended.ExtendedSelendroidReview; -import io.appium.java_client.pagefactory_tests.widgets.selendroid.simple.SelendroidMovies; -import io.appium.java_client.pagefactory_tests.widgets.selendroid.simple.SelendroidReview; -import org.apache.commons.lang3.StringUtils; -import org.openqa.selenium.support.FindBy; - -public class RottenTomatoes implements RottenTomatoesAbstractApp { - - @FindBy(id = "movies-collection") - @AndroidFindBy(id = "com.codepath.example.rottentomatoes:id/lvMovies") - @SelendroidFindBy(id = "lvMovies") @iOSFindBy(className = "UIATableView") - @OverrideWidget(html = HtmlMovies.class, selendroid = SelendroidMovies.class, - androidUIAutomator = AndroidMovies.class, - iOSUIAutomation = IOSMovies.class) private Movies - simpleMovies; - - - @AndroidFindBy(id = "android:id/content") - @AndroidFindBy(className = "android.widget.RelativeLayout") - @FindBy(id = "main_container") - @SelendroidFindBy(className = "android.widget.RelativeLayout") - @iOSFindBy(className = "UIAWindow") - @OverrideWidget(html = HtmlReview.class, selendroid = SelendroidReview.class, - androidUIAutomator = AndroidReview.class, - iOSUIAutomation = IOSReview.class) private Review - simpleReview; - - @OverrideWidget(html = AnnotatedHtmlMovies.class, - selendroid = AnnotatedSelendroidMovies.class, - androidUIAutomator = AnnotatedAndroidMovies.class, - iOSUIAutomation = AnnotatedIOSMovies.class) - private Movies annotatedMovies; - - @OverrideWidget(html = AnnotatedHtmlReview.class, - selendroid = AnnotatedSelendroidReview.class, - androidUIAutomator = AnnotatedAndroidReview.class, - iOSUIAutomation = AnnotatedIOSReview.class) - private Review annotatedReview; - - @OverrideWidget(html = ExtendedHtmlMovies.class, - selendroid = ExtendedSelendroidMovies.class, - androidUIAutomator = ExtendedAndroidMovies.class, - iOSUIAutomation = ExtendedIOSMovies.class) - private Movies extendedMovies; - - @OverrideWidget(html = ExtendedHtmlReview.class, - selendroid = ExtendedSelendroidReview.class, - androidUIAutomator = ExtendedAndroidReview.class, - iOSUIAutomation = ExtendedIOSReview.class) - private Review extendedReview; - - - @FindBy(id = "Fake_ID_For_All_Platforms") @AndroidFindBy(id = "Fake_ID_For_All_Platforms") - @SelendroidFindBy(id = "Fake_ID_For_All_Platforms") - @iOSFindBy(id = "Fake_ID_For_All_Platforms") - @OverrideWidget(html = ExtendedHtmlMovies.class, - selendroid = ExtendedSelendroidMovies.class, - androidUIAutomator = ExtendedAndroidMovies.class, - iOSUIAutomation = ExtendedIOSMovies.class) - private Movies fakeMovies; - - @FindBy(id = "Fake_ID_For_All_Platforms") - @AndroidFindBy(id = "Fake_ID_For_All_Platforms") - @SelendroidFindBy(id = "Fake_ID_For_All_Platforms") - @iOSFindBy(id = "Fake_ID_For_All_Platforms") - @OverrideWidget(html = ExtendedHtmlReview.class, - selendroid = ExtendedSelendroidReview.class, - androidUIAutomator = ExtendedAndroidReview.class, - iOSUIAutomation = ExtendedIOSReview.class) - private Review fakeReview; - - /** - * It gets movie count. - */ - public int getSimpleMovieCount() { - return simpleMovies.getMovieCount(); - } - - /** - * @param index is the desired index. - * @return a movie. - */ - public Movie getASimpleMovie(int index) { - return simpleMovies.getMovie(index); - } - - /** - * It reads a review. - */ - public void checkSimpleReview() { - assertTrue(!StringUtils.isBlank(simpleReview.title())); - assertTrue(!StringUtils.isBlank(simpleReview.score())); - assertTrue(!StringUtils.isBlank(simpleReview.info())); - assertTrue(simpleReview.getPoster() != null); - } - - /** - * It gets movie count. - */ - public int getAnnotatedMovieCount() { - return annotatedMovies.getMovieCount(); - } - - /** - * @param index is the desired index. - * @return a movie. - */ - public Movie getAnAnnotatedMovie(int index) { - return annotatedMovies.getMovie(index); - } - - /** - * It reads a review. - */ - public void checkAnnotatedReview() { - assertTrue(!StringUtils.isBlank(annotatedReview.title())); - assertTrue(!StringUtils.isBlank(annotatedReview.score())); - assertTrue(!StringUtils.isBlank(annotatedReview.info())); - assertTrue(annotatedReview.getPoster() != null); - } - - /** - * It gets movie count. - */ - public int getExtendeddMovieCount() { - return extendedMovies.getMovieCount(); - } - - /** - * @param index is the desired index. - * @return a movie. - */ - public Movie getAnExtendedMovie(int index) { - return extendedMovies.getMovie(index); - } - - /** - * It reads a review. - */ - public void checkExtendedReview() { - assertTrue(!StringUtils.isBlank(extendedReview.title())); - assertTrue(!StringUtils.isBlank(extendedReview.score())); - assertTrue(!StringUtils.isBlank(extendedReview.info())); - assertTrue(extendedReview.getPoster() != null); - } - - /** - * It gets movie count. - */ - public int getFakedMovieCount() { - return fakeMovies.getMovieCount(); - } - - /** - * It reads a review. - */ - public void checkFakeReview() { - assertTrue(!StringUtils.isBlank(fakeReview.title())); - assertTrue(!StringUtils.isBlank(fakeReview.score())); - assertTrue(!StringUtils.isBlank(fakeReview.info())); - assertTrue(fakeReview.getPoster() != null); - } - -} diff --git a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/RottenTomatoesAbstractApp.java b/src/test/java/io/appium/java_client/pagefactory_tests/widgets/RottenTomatoesAbstractApp.java deleted file mode 100644 index 720a36e02..000000000 --- a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/RottenTomatoesAbstractApp.java +++ /dev/null @@ -1,62 +0,0 @@ -package io.appium.java_client.pagefactory_tests.widgets; - -public interface RottenTomatoesAbstractApp { - - /** - * It gets movie count. - */ - int getSimpleMovieCount(); - - /** - * @param index is the desired index. - * @return a movie. - */ - Movie getASimpleMovie(int index); - - /** - * It reads a review. - */ - void checkSimpleReview(); - - /** - * It gets movie count. - */ - int getAnnotatedMovieCount(); - - /** - * @param index is the desired index. - * @return a movie. - */ - Movie getAnAnnotatedMovie(int index); - - /** - * It reads a review. - */ - void checkAnnotatedReview(); - - /** - * It gets movie count. - */ - int getExtendeddMovieCount(); - - /** - * @param index is the desired index. - * @return a movie. - */ - Movie getAnExtendedMovie(int index); - - /** - * It reads a review. - */ - void checkExtendedReview(); - - /** - * It gets movie count. - */ - int getFakedMovieCount(); - - /** - * It reads a review. - */ - void checkFakeReview(); -} diff --git a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/SelendroidOverrideWidgetTest.java b/src/test/java/io/appium/java_client/pagefactory_tests/widgets/SelendroidOverrideWidgetTest.java deleted file mode 100644 index 759ca2b38..000000000 --- a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/SelendroidOverrideWidgetTest.java +++ /dev/null @@ -1,147 +0,0 @@ -package io.appium.java_client.pagefactory_tests.widgets; - -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; - -import io.appium.java_client.MobileElement; -import io.appium.java_client.android.AndroidDriver; -import io.appium.java_client.pagefactory.AppiumFieldDecorator; -import io.appium.java_client.pagefactory.TimeOutDuration; -import io.appium.java_client.remote.AndroidMobileCapabilityType; -import io.appium.java_client.remote.AutomationName; -import io.appium.java_client.remote.MobileCapabilityType; -import io.appium.java_client.service.local.AppiumDriverLocalService; -import org.apache.commons.lang3.StringUtils; - -import org.junit.After; -import org.junit.AfterClass; -import org.junit.Before; -import org.junit.BeforeClass; -import org.junit.Test; - -import org.openqa.selenium.NoSuchElementException; -import org.openqa.selenium.remote.DesiredCapabilities; -import org.openqa.selenium.support.PageFactory; - -import java.io.File; -import java.util.concurrent.TimeUnit; - -public class SelendroidOverrideWidgetTest implements WidgetTest { - private static AppiumDriverLocalService service; - private AndroidDriver driver; - private RottenTomatoes rottenTomatoes; - private TimeOutDuration duration; - - /** - * initialization. - */ - @BeforeClass - public static void beforeClass() throws Exception { - service = AppiumDriverLocalService.buildDefaultService(); - service.start(); - } - - /** - * finishing. - */ - @AfterClass - public static void afterClass() throws Exception { - if (service != null) { - service.stop(); - } - } - - /** - * The setting up. - */ - @Before - public void setUp() throws Exception { - File appDir = new File("src/test/java/io/appium/java_client"); - File app = new File(appDir, "android-rottentomatoes-demo-debug.apk"); - DesiredCapabilities capabilities = new DesiredCapabilities(); - capabilities.setCapability(MobileCapabilityType.DEVICE_NAME, "Android Emulator"); - capabilities.setCapability(MobileCapabilityType.APP, app.getAbsolutePath()); - capabilities.setCapability(MobileCapabilityType.AUTOMATION_NAME, AutomationName.SELENDROID); - capabilities.setCapability(AndroidMobileCapabilityType.SELENDROID_PORT, 9999); - driver = new AndroidDriver<>(service.getUrl(), capabilities); - - duration = new TimeOutDuration(20, TimeUnit.SECONDS); - rottenTomatoes = new RottenTomatoes(); - driver.context("NATIVE_APP"); - PageFactory.initElements(new AppiumFieldDecorator(driver, duration), rottenTomatoes); - } - - /** - * finishing. - */ - @After - public void tearDown() throws Exception { - driver.quit(); - } - - @Test - @Override - public void checkACommonWidget() { - assertTrue(rottenTomatoes.getSimpleMovieCount() >= 1); - Movie movie = rottenTomatoes.getASimpleMovie(0); - assertTrue(!StringUtils.isBlank(movie.title())); - assertTrue(!StringUtils.isBlank(movie.score())); - assertNotNull(movie.getPoster()); - movie.goToReview(); - driver.getPageSource(); //forcing the refreshing hierarchy - rottenTomatoes.checkSimpleReview(); - } - - @Override - @Test - public void checkAnAnnotatedWidget() { - assertTrue(rottenTomatoes.getAnnotatedMovieCount() >= 1); - Movie movie = rottenTomatoes.getAnAnnotatedMovie(0); - assertTrue(!StringUtils.isBlank(movie.title())); - assertTrue(!StringUtils.isBlank(movie.score())); - assertNotNull(movie.getPoster()); - movie.goToReview(); - driver.getPageSource(); //forcing the refreshing hierarchy - rottenTomatoes.checkAnnotatedReview(); - } - - - @Override - @Test - public void checkAnExtendedWidget() { - assertTrue(rottenTomatoes.getExtendeddMovieCount() >= 1); - Movie movie = rottenTomatoes.getAnExtendedMovie(0); - assertTrue(!StringUtils.isBlank(movie.title())); - assertTrue(!StringUtils.isBlank(movie.score())); - assertNotNull(movie.getPoster()); - movie.goToReview(); - driver.getPageSource(); //forcing the refreshing hierarchy - rottenTomatoes.checkExtendedReview(); - } - - @Override - @Test - public void checkTheLocatorOverridingOnAWidget() { - duration.setTime(5); - try { - assertTrue(rottenTomatoes.getFakedMovieCount() == 0); - } catch (Exception e) { - if (!NoSuchElementException.class.isAssignableFrom(e.getClass())) { - throw e; - } - } - - rottenTomatoes.getASimpleMovie(0).goToReview(); - driver.getPageSource(); //forcing the refreshing hierarchy - try { - rottenTomatoes.checkFakeReview(); - } catch (Exception e) { - if (NoSuchElementException.class.isAssignableFrom(e.getClass())) { - return; - } else { - throw e; - } - } - throw new RuntimeException("Any exception was expected"); - } -} diff --git a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/WidgetTest.java b/src/test/java/io/appium/java_client/pagefactory_tests/widgets/WidgetTest.java deleted file mode 100644 index 80d1c5c4e..000000000 --- a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/WidgetTest.java +++ /dev/null @@ -1,13 +0,0 @@ -package io.appium.java_client.pagefactory_tests.widgets; - -public interface WidgetTest { - - public void checkACommonWidget(); - - public void checkAnAnnotatedWidget(); - - public void checkAnExtendedWidget(); - - public void checkTheLocatorOverridingOnAWidget(); - -} diff --git a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/android/AndroidWidgetTest.java b/src/test/java/io/appium/java_client/pagefactory_tests/widgets/android/AndroidWidgetTest.java deleted file mode 100644 index d728fba11..000000000 --- a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/android/AndroidWidgetTest.java +++ /dev/null @@ -1,144 +0,0 @@ -package io.appium.java_client.pagefactory_tests.widgets.android; - -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; - -import io.appium.java_client.MobileElement; -import io.appium.java_client.android.Activity; -import io.appium.java_client.android.AndroidDriver; -import io.appium.java_client.pagefactory.AppiumFieldDecorator; -import io.appium.java_client.pagefactory.TimeOutDuration; -import io.appium.java_client.pagefactory_tests.widgets.Movie; -import io.appium.java_client.pagefactory_tests.widgets.WidgetTest; -import io.appium.java_client.remote.MobileCapabilityType; -import io.appium.java_client.service.local.AppiumDriverLocalService; -import org.apache.commons.lang3.StringUtils; -import org.junit.AfterClass; -import org.junit.Before; -import org.junit.BeforeClass; -import org.junit.Test; -import org.openqa.selenium.NoSuchElementException; -import org.openqa.selenium.remote.DesiredCapabilities; -import org.openqa.selenium.support.PageFactory; - -import java.io.File; -import java.util.concurrent.TimeUnit; - -public class AndroidWidgetTest implements WidgetTest { - - private static AndroidDriver driver; - private static AppiumDriverLocalService service; - private static RottenTomatoesApp rottenTomatoesApp; - - /** - * initialization. - */ - @BeforeClass - public static void beforeClass() throws Exception { - service = AppiumDriverLocalService.buildDefaultService(); - service.start(); - - File appDir = new File("src/test/java/io/appium/java_client"); - File app = new File(appDir, "android-rottentomatoes-demo-debug.apk"); - DesiredCapabilities capabilities = new DesiredCapabilities(); - capabilities.setCapability(MobileCapabilityType.DEVICE_NAME, "Android Emulator"); - capabilities.setCapability(MobileCapabilityType.APP, app.getAbsolutePath()); - driver = new AndroidDriver<>(service.getUrl(), capabilities); - - rottenTomatoesApp = new RottenTomatoesApp(); - PageFactory.initElements( - new AppiumFieldDecorator(driver, new TimeOutDuration(5, TimeUnit.SECONDS)), - rottenTomatoesApp); - } - - /** - * finishing. - */ - @AfterClass - public static void afterClass() throws Exception { - if (driver != null) { - driver.quit(); - } - - if (service != null) { - service.stop(); - } - } - - /** - * The setting up. - */ - @Before - public void setUp() throws Exception { - if (driver != null) { - Activity activity = new Activity("com.codepath.example.rottentomatoes", - "BoxOfficeActivity"); - driver.startActivity(activity); - } - } - - @Test - @Override - public void checkACommonWidget() { - assertTrue(rottenTomatoesApp.getSimpleMovieCount() >= 1); - Movie movie = rottenTomatoesApp.getASimpleMovie(0); - assertTrue(!StringUtils.isBlank(movie.title())); - assertTrue(!StringUtils.isBlank(movie.score())); - assertNotNull(movie.getPoster()); - movie.goToReview(); - - rottenTomatoesApp.checkSimpleReview(); - } - - @Override - @Test - public void checkAnAnnotatedWidget() { - assertTrue(rottenTomatoesApp.getAnnotatedMovieCount() >= 1); - Movie movie = rottenTomatoesApp.getAnAnnotatedMovie(0); - assertTrue(!StringUtils.isBlank(movie.title())); - assertTrue(!StringUtils.isBlank(movie.score())); - assertNotNull(movie.getPoster()); - movie.goToReview(); - - rottenTomatoesApp.checkAnnotatedReview(); - } - - - @Override - @Test - public void checkAnExtendedWidget() { - assertTrue(rottenTomatoesApp.getExtendeddMovieCount() >= 1); - Movie movie = rottenTomatoesApp.getAnExtendedMovie(0); - assertTrue(!StringUtils.isBlank(movie.title())); - assertTrue(!StringUtils.isBlank(movie.score())); - assertNotNull(movie.getPoster()); - movie.goToReview(); - - rottenTomatoesApp.checkExtendedReview(); - } - - @Override - @Test - public void checkTheLocatorOverridingOnAWidget() { - try { - assertTrue(rottenTomatoesApp.getFakedMovieCount() == 0); - } catch (Exception e) { - if (!NoSuchElementException.class.isAssignableFrom(e.getClass())) { - throw e; - } - } - - rottenTomatoesApp.getASimpleMovie(0).goToReview(); - - try { - rottenTomatoesApp.checkFakeReview(); - } catch (Exception e) { - if (NoSuchElementException.class.isAssignableFrom(e.getClass())) { - return; - } else { - throw e; - } - } - throw new RuntimeException("Any exception was expected"); - } -} diff --git a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/android/RottenTomatoesApp.java b/src/test/java/io/appium/java_client/pagefactory_tests/widgets/android/RottenTomatoesApp.java deleted file mode 100644 index 191ba6b41..000000000 --- a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/android/RottenTomatoesApp.java +++ /dev/null @@ -1,132 +0,0 @@ -package io.appium.java_client.pagefactory_tests.widgets.android; - -import static org.junit.Assert.assertTrue; - -import io.appium.java_client.pagefactory.AndroidFindBy; -import io.appium.java_client.pagefactory_tests.widgets.Movie; -import io.appium.java_client.pagefactory_tests.widgets.RottenTomatoesAbstractApp; -import io.appium.java_client.pagefactory_tests.widgets.android.annotated.AnnotatedAndroidMovies; -import io.appium.java_client.pagefactory_tests.widgets.android.annotated.AnnotatedAndroidReview; -import io.appium.java_client.pagefactory_tests.widgets.android.extended.ExtendedAndroidMovies; -import io.appium.java_client.pagefactory_tests.widgets.android.extended.ExtendedAndroidReview; -import io.appium.java_client.pagefactory_tests.widgets.android.simple.AndroidMovies; -import io.appium.java_client.pagefactory_tests.widgets.android.simple.AndroidReview; -import org.apache.commons.lang3.StringUtils; - -/** - * This is the example of page object with declared Widgets - * instead of WebElement. - */ -public class RottenTomatoesApp implements RottenTomatoesAbstractApp { - - @AndroidFindBy(id = "com.codepath.example.rottentomatoes:id/lvMovies") private AndroidMovies - simpleMovies; - - @AndroidFindBy(id = "android:id/content") - @AndroidFindBy(className = "android.widget.RelativeLayout") - private AndroidReview simpleReview; - - private AnnotatedAndroidMovies annotatedAndroidMovies; - - private AnnotatedAndroidReview annotatedAndroidReview; - - private ExtendedAndroidMovies extendedAndroidMovies; - - private ExtendedAndroidReview extendedAndroidReview; - - @AndroidFindBy(id = "fakeId") private ExtendedAndroidMovies fakeMovies; - - @AndroidFindBy(id = "fakeId") private ExtendedAndroidReview fakeReview; - - /** - * It gets movie count. - */ - public int getSimpleMovieCount() { - return simpleMovies.getMovieCount(); - } - - /** - * @param index is the desired index. - * @return a movie. - */ - public Movie getASimpleMovie(int index) { - return simpleMovies.getMovie(index); - } - - /** - * It reads a review. - */ - public void checkSimpleReview() { - assertTrue(!StringUtils.isBlank(simpleReview.title())); - assertTrue(!StringUtils.isBlank(simpleReview.score())); - assertTrue(!StringUtils.isBlank(simpleReview.info())); - assertTrue(simpleReview.getPoster() != null); - } - - /** - * It gets movie count. - */ - public int getAnnotatedMovieCount() { - return annotatedAndroidMovies.getMovieCount(); - } - - /** - * @param index is the desired index. - * @return a movie. - */ - public Movie getAnAnnotatedMovie(int index) { - return annotatedAndroidMovies.getMovie(index); - } - - /** - * It reads a review. - */ - public void checkAnnotatedReview() { - assertTrue(!StringUtils.isBlank(annotatedAndroidReview.title())); - assertTrue(!StringUtils.isBlank(annotatedAndroidReview.score())); - assertTrue(!StringUtils.isBlank(annotatedAndroidReview.info())); - assertTrue(annotatedAndroidReview.getPoster() != null); - } - - /** - * It gets movie count. - */ - public int getExtendeddMovieCount() { - return extendedAndroidMovies.getMovieCount(); - } - - /** - * @param index is the desired index. - * @return a movie. - */ - public Movie getAnExtendedMovie(int index) { - return extendedAndroidMovies.getMovie(index); - } - - /** - * It reads a review. - */ - public void checkExtendedReview() { - assertTrue(!StringUtils.isBlank(extendedAndroidReview.title())); - assertTrue(!StringUtils.isBlank(extendedAndroidReview.score())); - assertTrue(!StringUtils.isBlank(extendedAndroidReview.info())); - assertTrue(extendedAndroidReview.getPoster() != null); - } - - /** - * It gets movie count. - */ - public int getFakedMovieCount() { - return fakeMovies.getMovieCount(); - } - - /** - * It reads a review. - */ - public void checkFakeReview() { - assertTrue(!StringUtils.isBlank(fakeReview.title())); - assertTrue(!StringUtils.isBlank(fakeReview.score())); - assertTrue(!StringUtils.isBlank(fakeReview.info())); - assertTrue(fakeReview.getPoster() != null); - } -} diff --git a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/android/annotated/AnnotatedAndroidMovie.java b/src/test/java/io/appium/java_client/pagefactory_tests/widgets/android/annotated/AnnotatedAndroidMovie.java deleted file mode 100644 index bc7106b7a..000000000 --- a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/android/annotated/AnnotatedAndroidMovie.java +++ /dev/null @@ -1,12 +0,0 @@ -package io.appium.java_client.pagefactory_tests.widgets.android.annotated; - -import io.appium.java_client.pagefactory.AndroidFindBy; -import io.appium.java_client.pagefactory_tests.widgets.android.simple.AndroidMovie; -import org.openqa.selenium.WebElement; - -@AndroidFindBy(className = "android.widget.RelativeLayout") public class AnnotatedAndroidMovie - extends AndroidMovie { - protected AnnotatedAndroidMovie(WebElement element) { - super(element); - } -} diff --git a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/android/annotated/AnnotatedAndroidMovies.java b/src/test/java/io/appium/java_client/pagefactory_tests/widgets/android/annotated/AnnotatedAndroidMovies.java deleted file mode 100644 index add9bb54d..000000000 --- a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/android/annotated/AnnotatedAndroidMovies.java +++ /dev/null @@ -1,31 +0,0 @@ -package io.appium.java_client.pagefactory_tests.widgets.android.annotated; - -import io.appium.java_client.pagefactory.AndroidFindBy; -import io.appium.java_client.pagefactory_tests.widgets.Movie; -import io.appium.java_client.pagefactory_tests.widgets.Movies; -import org.openqa.selenium.WebElement; - -import java.util.List; - -@AndroidFindBy(id = "com.codepath.example.rottentomatoes:id/lvMovies") -public class AnnotatedAndroidMovies extends Movies { - - List movieList; - - /* - There could be additional behavior. - But for test it is enough. - */ - - protected AnnotatedAndroidMovies(WebElement element) { - super(element); - } - - @Override public int getMovieCount() { - return movieList.size(); - } - - @Override public Movie getMovie(int index) { - return movieList.get(index); - } -} diff --git a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/android/annotated/AnnotatedAndroidReview.java b/src/test/java/io/appium/java_client/pagefactory_tests/widgets/android/annotated/AnnotatedAndroidReview.java deleted file mode 100644 index c4d0a40b7..000000000 --- a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/android/annotated/AnnotatedAndroidReview.java +++ /dev/null @@ -1,14 +0,0 @@ -package io.appium.java_client.pagefactory_tests.widgets.android.annotated; - -import io.appium.java_client.pagefactory.AndroidFindBy; -import io.appium.java_client.pagefactory_tests.widgets.android.simple.AndroidReview; -import org.openqa.selenium.WebElement; - -@AndroidFindBy(id = "android:id/content") -@AndroidFindBy(className = "android.widget.RelativeLayout") -public class AnnotatedAndroidReview extends AndroidReview { - - protected AnnotatedAndroidReview(WebElement element) { - super(element); - } -} diff --git a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/android/extended/ExtendedAndroidMovies.java b/src/test/java/io/appium/java_client/pagefactory_tests/widgets/android/extended/ExtendedAndroidMovies.java deleted file mode 100644 index 6b91a9e17..000000000 --- a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/android/extended/ExtendedAndroidMovies.java +++ /dev/null @@ -1,11 +0,0 @@ -package io.appium.java_client.pagefactory_tests.widgets.android.extended; - -import io.appium.java_client.pagefactory_tests.widgets.android.annotated.AnnotatedAndroidMovies; -import org.openqa.selenium.WebElement; - -public class ExtendedAndroidMovies extends AnnotatedAndroidMovies { - - protected ExtendedAndroidMovies(WebElement element) { - super(element); - } -} diff --git a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/android/extended/ExtendedAndroidReview.java b/src/test/java/io/appium/java_client/pagefactory_tests/widgets/android/extended/ExtendedAndroidReview.java deleted file mode 100644 index 1fc9891e4..000000000 --- a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/android/extended/ExtendedAndroidReview.java +++ /dev/null @@ -1,11 +0,0 @@ -package io.appium.java_client.pagefactory_tests.widgets.android.extended; - -import io.appium.java_client.pagefactory_tests.widgets.android.annotated.AnnotatedAndroidReview; -import org.openqa.selenium.WebElement; - -public class ExtendedAndroidReview extends AnnotatedAndroidReview { - - protected ExtendedAndroidReview(WebElement element) { - super(element); - } -} diff --git a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/android/simple/AndroidMovie.java b/src/test/java/io/appium/java_client/pagefactory_tests/widgets/android/simple/AndroidMovie.java deleted file mode 100644 index a338789ef..000000000 --- a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/android/simple/AndroidMovie.java +++ /dev/null @@ -1,43 +0,0 @@ -package io.appium.java_client.pagefactory_tests.widgets.android.simple; - -import io.appium.java_client.PerformsTouchActions; -import io.appium.java_client.TouchAction; -import io.appium.java_client.android.AndroidElement; -import io.appium.java_client.pagefactory.AndroidFindBy; -import io.appium.java_client.pagefactory_tests.widgets.Movie; -import org.openqa.selenium.WebElement; - -import java.time.Duration; - -public class AndroidMovie extends Movie { - - @AndroidFindBy(id = "com.codepath.example.rottentomatoes:id/tvTitle") private AndroidElement - title; - - @AndroidFindBy(uiAutomator = - "resourceId(\"com.codepath.example.rottentomatoes:id/tvCriticsScore\")") - private AndroidElement score; - - @AndroidFindBy(accessibility = "poster image") private AndroidElement poster; - - protected AndroidMovie(WebElement element) { - super(element); - } - - @Override public String title() { - return title.getText(); - } - - @Override public String score() { - return score.getText(); - } - - @Override public Object getPoster() { - return poster.getSize(); - } - - @Override public void goToReview() { - TouchAction tap = new TouchAction(PerformsTouchActions.class.cast(getWrappedDriver())); - tap.press(getWrappedElement()).waitAction(Duration.ofMillis(1500)).release().perform(); - } -} diff --git a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/android/simple/AndroidMovies.java b/src/test/java/io/appium/java_client/pagefactory_tests/widgets/android/simple/AndroidMovies.java deleted file mode 100644 index 1edec01d4..000000000 --- a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/android/simple/AndroidMovies.java +++ /dev/null @@ -1,31 +0,0 @@ -package io.appium.java_client.pagefactory_tests.widgets.android.simple; - - -import io.appium.java_client.pagefactory.AndroidFindBy; -import io.appium.java_client.pagefactory_tests.widgets.Movie; -import io.appium.java_client.pagefactory_tests.widgets.Movies; -import org.openqa.selenium.WebElement; - -import java.util.List; - -public class AndroidMovies extends Movies { - - @AndroidFindBy(className = "android.widget.RelativeLayout") List movieList; - - /* - There could be additional behavior. - But for test it is enough. - */ - - protected AndroidMovies(WebElement element) { - super(element); - } - - @Override public int getMovieCount() { - return movieList.size(); - } - - @Override public Movie getMovie(int index) { - return movieList.get(index); - } -} diff --git a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/android/simple/AndroidReview.java b/src/test/java/io/appium/java_client/pagefactory_tests/widgets/android/simple/AndroidReview.java deleted file mode 100644 index c52a8dcc7..000000000 --- a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/android/simple/AndroidReview.java +++ /dev/null @@ -1,43 +0,0 @@ -package io.appium.java_client.pagefactory_tests.widgets.android.simple; - - -import io.appium.java_client.android.AndroidElement; -import io.appium.java_client.pagefactory.AndroidFindBy; -import io.appium.java_client.pagefactory_tests.widgets.Review; -import org.openqa.selenium.WebElement; - -public class AndroidReview extends Review { - - @AndroidFindBy(id = "com.codepath.example.rottentomatoes:id/tvTitle") - private AndroidElement title; - - @AndroidFindBy(uiAutomator = "resourceId(\"com.codepath.example.rottentomatoes:id/tvCriticsScore\")") - private AndroidElement score; - - @AndroidFindBy(id = "com.codepath.example.rottentomatoes:id/tvSynopsis") - private AndroidElement synopsis; - - @AndroidFindBy(id = "com.codepath.example.rottentomatoes:id/ivPosterImage") - private AndroidElement poster; - - - protected AndroidReview(WebElement element) { - super(element); - } - - @Override public String title() { - return title.getText(); - } - - @Override public String score() { - return score.getText(); - } - - @Override public String info() { - return synopsis.getText(); - } - - @Override public Object getPoster() { - return poster.getSize(); - } -} diff --git a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/combined/AndroidCombinedWidgetTest.java b/src/test/java/io/appium/java_client/pagefactory_tests/widgets/combined/AndroidCombinedWidgetTest.java deleted file mode 100644 index d547ce82d..000000000 --- a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/combined/AndroidCombinedWidgetTest.java +++ /dev/null @@ -1,144 +0,0 @@ -package io.appium.java_client.pagefactory_tests.widgets.combined; - -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; - -import io.appium.java_client.MobileElement; -import io.appium.java_client.android.Activity; -import io.appium.java_client.android.AndroidDriver; -import io.appium.java_client.pagefactory.AppiumFieldDecorator; -import io.appium.java_client.pagefactory.TimeOutDuration; -import io.appium.java_client.pagefactory_tests.widgets.Movie; -import io.appium.java_client.pagefactory_tests.widgets.WidgetTest; -import io.appium.java_client.remote.MobileCapabilityType; -import io.appium.java_client.service.local.AppiumDriverLocalService; -import org.apache.commons.lang3.StringUtils; -import org.junit.AfterClass; -import org.junit.Before; -import org.junit.BeforeClass; -import org.junit.Test; -import org.openqa.selenium.NoSuchElementException; -import org.openqa.selenium.remote.DesiredCapabilities; -import org.openqa.selenium.support.PageFactory; - -import java.io.File; -import java.util.concurrent.TimeUnit; - -public class AndroidCombinedWidgetTest implements WidgetTest { - - private static AndroidDriver driver; - private static AppiumDriverLocalService service; - private static RottenTomatoesAppWithCombinedWidgets rottenTomatoes; - - /** - * initialization. - */ - @BeforeClass - public static void beforeClass() throws Exception { - service = AppiumDriverLocalService.buildDefaultService(); - service.start(); - - File appDir = new File("src/test/java/io/appium/java_client"); - File app = new File(appDir, "android-rottentomatoes-demo-debug.apk"); - DesiredCapabilities capabilities = new DesiredCapabilities(); - capabilities.setCapability(MobileCapabilityType.DEVICE_NAME, "Android Emulator"); - capabilities.setCapability(MobileCapabilityType.APP, app.getAbsolutePath()); - driver = new AndroidDriver<>(service.getUrl(), capabilities); - - rottenTomatoes = new RottenTomatoesAppWithCombinedWidgets(); - PageFactory.initElements( - new AppiumFieldDecorator(driver, new TimeOutDuration(5, TimeUnit.SECONDS)), - rottenTomatoes); - } - - /** - * finishing. - */ - @AfterClass - public static void afterClass() throws Exception { - if (driver != null) { - driver.quit(); - } - - if (service != null) { - service.stop(); - } - } - - /** - * The setting up. - */ - @Before - public void setUp() throws Exception { - if (driver != null) { - Activity activity = new Activity("com.codepath.example.rottentomatoes", - "BoxOfficeActivity"); - driver.startActivity(activity); - } - } - - @Test - @Override - public void checkACommonWidget() { - assertTrue(rottenTomatoes.getSimpleMovieCount() >= 1); - Movie movie = rottenTomatoes.getASimpleMovie(0); - assertTrue(!StringUtils.isBlank(movie.title())); - assertTrue(!StringUtils.isBlank(movie.score())); - assertNotNull(movie.getPoster()); - movie.goToReview(); - - rottenTomatoes.checkSimpleReview(); - } - - @Override - @Test - public void checkAnAnnotatedWidget() { - assertTrue(rottenTomatoes.getAnnotatedMovieCount() >= 1); - Movie movie = rottenTomatoes.getAnAnnotatedMovie(0); - assertTrue(!StringUtils.isBlank(movie.title())); - assertTrue(!StringUtils.isBlank(movie.score())); - assertNotNull(movie.getPoster()); - movie.goToReview(); - - rottenTomatoes.checkAnnotatedReview(); - } - - - @Override - @Test - public void checkAnExtendedWidget() { - assertTrue(rottenTomatoes.getExtendeddMovieCount() >= 1); - Movie movie = rottenTomatoes.getAnExtendedMovie(0); - assertTrue(!StringUtils.isBlank(movie.title())); - assertTrue(!StringUtils.isBlank(movie.score())); - assertNotNull(movie.getPoster()); - movie.goToReview(); - - rottenTomatoes.checkExtendedReview(); - } - - @Override - @Test - public void checkTheLocatorOverridingOnAWidget() { - try { - assertTrue(rottenTomatoes.getFakedMovieCount() == 0); - } catch (Exception e) { - if (!NoSuchElementException.class.isAssignableFrom(e.getClass())) { - throw e; - } - } - - rottenTomatoes.getASimpleMovie(0).goToReview(); - - try { - rottenTomatoes.checkFakeReview(); - } catch (Exception e) { - if (NoSuchElementException.class.isAssignableFrom(e.getClass())) { - return; - } else { - throw e; - } - } - throw new RuntimeException("Any exception was expected"); - } -} diff --git a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/combined/HtmlCombinedWidgetTest.java b/src/test/java/io/appium/java_client/pagefactory_tests/widgets/combined/HtmlCombinedWidgetTest.java deleted file mode 100644 index d40689433..000000000 --- a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/combined/HtmlCombinedWidgetTest.java +++ /dev/null @@ -1,138 +0,0 @@ -package io.appium.java_client.pagefactory_tests.widgets.combined; - -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; - -import io.appium.java_client.pagefactory.AppiumFieldDecorator; -import io.appium.java_client.pagefactory.TimeOutDuration; -import io.appium.java_client.pagefactory_tests.widgets.Movie; -import io.appium.java_client.pagefactory_tests.widgets.WidgetTest; -import org.apache.commons.lang3.StringUtils; -import org.junit.AfterClass; -import org.junit.Before; -import org.junit.BeforeClass; -import org.junit.Test; -import org.openqa.selenium.NoSuchElementException; -import org.openqa.selenium.Platform; -import org.openqa.selenium.chrome.ChromeDriver; -import org.openqa.selenium.chrome.ChromeDriverService; -import org.openqa.selenium.support.PageFactory; - -import java.io.File; -import java.util.concurrent.TimeUnit; - -public class HtmlCombinedWidgetTest implements WidgetTest { - - private static ChromeDriver driver; - private static RottenTomatoesAppWithCombinedWidgets rottenTomatoes; - - /** - * initialization. - */ - @BeforeClass - public static void beforeClass() throws Exception { - - if (Platform.getCurrent().is(Platform.WINDOWS)) { - System.setProperty(ChromeDriverService.CHROME_DRIVER_EXE_PROPERTY, - "src/test/java/io/appium/java_client/pagefactory_tests/chromedriver.exe"); - } else { - System.setProperty(ChromeDriverService.CHROME_DRIVER_EXE_PROPERTY, - "src/test/java/io/appium/java_client/pagefactory_tests/chromedriver"); - } - - driver = new ChromeDriver(); - driver.manage().timeouts().pageLoadTimeout(30, TimeUnit.SECONDS); - rottenTomatoes = new RottenTomatoesAppWithCombinedWidgets(); - PageFactory.initElements( - new AppiumFieldDecorator(driver, new TimeOutDuration(5, TimeUnit.SECONDS)), - rottenTomatoes); - } - - /** - * finishing. - */ - @AfterClass - public static void afterClass() throws Exception { - if (driver != null) { - driver.quit(); - } - } - - /** - * The setting up. - */ - @Before - public void setUp() throws Exception { - if (driver != null) { - driver.get("file:///" + new File( - "src/test/java/io/appium/java_client/" - + "RottenTomatoesSnapshot.html") - .getAbsolutePath()); - } - } - - @Test - @Override - public void checkACommonWidget() { - assertTrue(rottenTomatoes.getSimpleMovieCount() >= 1); - Movie movie = rottenTomatoes.getASimpleMovie(0); - assertTrue(!StringUtils.isBlank(movie.title())); - assertTrue(!StringUtils.isBlank(movie.score())); - assertNotNull(movie.getPoster()); - movie.goToReview(); - - rottenTomatoes.checkSimpleReview(); - } - - @Override - @Test - public void checkAnAnnotatedWidget() { - assertTrue(rottenTomatoes.getAnnotatedMovieCount() >= 1); - Movie movie = rottenTomatoes.getAnAnnotatedMovie(0); - assertTrue(!StringUtils.isBlank(movie.title())); - assertTrue(!StringUtils.isBlank(movie.score())); - assertNotNull(movie.getPoster()); - movie.goToReview(); - - rottenTomatoes.checkAnnotatedReview(); - } - - - @Override - @Test - public void checkAnExtendedWidget() { - assertTrue(rottenTomatoes.getExtendeddMovieCount() >= 1); - Movie movie = rottenTomatoes.getAnExtendedMovie(0); - assertTrue(!StringUtils.isBlank(movie.title())); - assertTrue(!StringUtils.isBlank(movie.score())); - assertNotNull(movie.getPoster()); - movie.goToReview(); - - rottenTomatoes.checkExtendedReview(); - } - - @Override - @Test - public void checkTheLocatorOverridingOnAWidget() { - try { - assertTrue(rottenTomatoes.getFakedMovieCount() == 0); - } catch (Exception e) { - if (!NoSuchElementException.class.isAssignableFrom(e.getClass())) { - throw e; - } - } - - rottenTomatoes.getASimpleMovie(0).goToReview(); - - try { - rottenTomatoes.checkFakeReview(); - } catch (Exception e) { - if (NoSuchElementException.class.isAssignableFrom(e.getClass())) { - return; - } else { - throw e; - } - } - throw new RuntimeException("Any exception was expected"); - } -} diff --git a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/combined/RottenTomatoesAppWithCombinedWidgets.java b/src/test/java/io/appium/java_client/pagefactory_tests/widgets/combined/RottenTomatoesAppWithCombinedWidgets.java deleted file mode 100644 index 940d197c2..000000000 --- a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/combined/RottenTomatoesAppWithCombinedWidgets.java +++ /dev/null @@ -1,137 +0,0 @@ -package io.appium.java_client.pagefactory_tests.widgets.combined; - -import static org.junit.Assert.assertTrue; - -import io.appium.java_client.pagefactory.AndroidFindBy; -import io.appium.java_client.pagefactory.SelendroidFindBy; -import io.appium.java_client.pagefactory_tests.widgets.Movie; -import io.appium.java_client.pagefactory_tests.widgets.RottenTomatoesAbstractApp; -import io.appium.java_client.pagefactory_tests.widgets.combined.annotated.AnnotatedCombinedMovies; -import io.appium.java_client.pagefactory_tests.widgets.combined.annotated.AnnotatedCombinedReview; -import io.appium.java_client.pagefactory_tests.widgets.combined.extended.ExtendedCombinedMovies; -import io.appium.java_client.pagefactory_tests.widgets.combined.extended.ExtendedCombinedReview; -import io.appium.java_client.pagefactory_tests.widgets.combined.simple.CombinedMovies; -import io.appium.java_client.pagefactory_tests.widgets.combined.simple.CombinedReview; -import org.apache.commons.lang3.StringUtils; -import org.openqa.selenium.support.FindBy; - -/** - * This is the example of page object with declared Widgets - * instead of WebElement. - */ -public class RottenTomatoesAppWithCombinedWidgets implements RottenTomatoesAbstractApp { - - @AndroidFindBy(id = "com.codepath.example.rottentomatoes:id/lvMovies") - @SelendroidFindBy(id = "lvMovies") @FindBy(id = "movies-collection") private CombinedMovies - simpleMovies; - - @AndroidFindBy(id = "android:id/content") - @AndroidFindBy(className = "android.widget.RelativeLayout") - @FindBy(id = "main_container") - @SelendroidFindBy(className = "android.widget.RelativeLayout") private CombinedReview - simpleReview; - - private AnnotatedCombinedMovies annotatedCombinedMovies; - - private AnnotatedCombinedReview annotatedCombinedReview; - - private ExtendedCombinedMovies extendedCombinedMovies; - - private ExtendedCombinedReview extendedCombinedReview; - - @AndroidFindBy(id = "fakeId") @FindBy(id = "fakeId") private ExtendedCombinedMovies fakeMovies; - - @AndroidFindBy(id = "fakeId") @FindBy(id = "fakeId") private ExtendedCombinedReview fakeReview; - - /** - * It gets movie count. - */ - public int getSimpleMovieCount() { - return simpleMovies.getMovieCount(); - } - - /** - * @param index is the desired index. - * @return a movie. - */ - public Movie getASimpleMovie(int index) { - return simpleMovies.getMovie(index); - } - - /** - * It reads a review. - */ - public void checkSimpleReview() { - assertTrue(!StringUtils.isBlank(simpleReview.title())); - assertTrue(!StringUtils.isBlank(simpleReview.score())); - assertTrue(!StringUtils.isBlank(simpleReview.info())); - assertTrue(simpleReview.getPoster() != null); - } - - /** - * It gets movie count. - */ - public int getAnnotatedMovieCount() { - return annotatedCombinedMovies.getMovieCount(); - } - - /** - * @param index is the desired index. - * @return a movie. - */ - public Movie getAnAnnotatedMovie(int index) { - return annotatedCombinedMovies.getMovie(index); - } - - /** - * It reads a review. - */ - public void checkAnnotatedReview() { - assertTrue(!StringUtils.isBlank(annotatedCombinedReview.title())); - assertTrue(!StringUtils.isBlank(annotatedCombinedReview.score())); - assertTrue(!StringUtils.isBlank(annotatedCombinedReview.info())); - assertTrue(annotatedCombinedReview.getPoster() != null); - } - - /** - * It gets movie count. - */ - public int getExtendeddMovieCount() { - return extendedCombinedMovies.getMovieCount(); - } - - /** - * @param index is the desired index. - * @return a movie. - */ - public Movie getAnExtendedMovie(int index) { - return extendedCombinedMovies.getMovie(index); - } - - /** - * It reads a review. - */ - public void checkExtendedReview() { - assertTrue(!StringUtils.isBlank(extendedCombinedReview.title())); - assertTrue(!StringUtils.isBlank(extendedCombinedReview.score())); - assertTrue(!StringUtils.isBlank(extendedCombinedReview.info())); - assertTrue(extendedCombinedReview.getPoster() != null); - } - - /** - * It gets movie count. - */ - public int getFakedMovieCount() { - return fakeMovies.getMovieCount(); - } - - /** - * It reads a review. - */ - public void checkFakeReview() { - assertTrue(!StringUtils.isBlank(fakeReview.title())); - assertTrue(!StringUtils.isBlank(fakeReview.score())); - assertTrue(!StringUtils.isBlank(fakeReview.info())); - assertTrue(fakeReview.getPoster() != null); - } -} diff --git a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/combined/SelendroidCombinedWidgetTest.java b/src/test/java/io/appium/java_client/pagefactory_tests/widgets/combined/SelendroidCombinedWidgetTest.java deleted file mode 100644 index d0696b686..000000000 --- a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/combined/SelendroidCombinedWidgetTest.java +++ /dev/null @@ -1,140 +0,0 @@ -package io.appium.java_client.pagefactory_tests.widgets.combined; - -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; - -import io.appium.java_client.MobileElement; -import io.appium.java_client.android.AndroidDriver; -import io.appium.java_client.pagefactory.AppiumFieldDecorator; -import io.appium.java_client.pagefactory.TimeOutDuration; -import io.appium.java_client.pagefactory_tests.widgets.Movie; -import io.appium.java_client.pagefactory_tests.widgets.WidgetTest; -import io.appium.java_client.remote.AutomationName; -import io.appium.java_client.remote.MobileCapabilityType; -import io.appium.java_client.service.local.AppiumDriverLocalService; -import io.appium.java_client.service.local.AppiumServiceBuilder; -import org.apache.commons.lang3.StringUtils; -import org.junit.After; -import org.junit.AfterClass; -import org.junit.Before; -import org.junit.BeforeClass; -import org.junit.Test; -import org.openqa.selenium.NoSuchElementException; -import org.openqa.selenium.remote.DesiredCapabilities; -import org.openqa.selenium.support.PageFactory; - -import java.io.File; -import java.util.concurrent.TimeUnit; - -public class SelendroidCombinedWidgetTest implements WidgetTest { - - private static AppiumDriverLocalService service; - private AndroidDriver driver; - private RottenTomatoesAppWithCombinedWidgets rottenTomatoes; - private TimeOutDuration duration; - - /** - * initialization. - */ - @BeforeClass public static void beforeClass() throws Exception { - AppiumServiceBuilder builder = new AppiumServiceBuilder(); - service = builder.build(); - service.start(); - } - - /** - * finishing. - */ - @AfterClass public static void afterClass() throws Exception { - if (service != null) { - service.stop(); - } - } - - /** - * The setting up. - */ - @Before public void setUp() throws Exception { - File appDir = new File("src/test/java/io/appium/java_client"); - File app = new File(appDir, "android-rottentomatoes-demo-debug.apk"); - DesiredCapabilities capabilities = new DesiredCapabilities(); - capabilities.setCapability(MobileCapabilityType.DEVICE_NAME, "Android Emulator"); - capabilities.setCapability(MobileCapabilityType.APP, app.getAbsolutePath()); - capabilities.setCapability(MobileCapabilityType.AUTOMATION_NAME, AutomationName.SELENDROID); - driver = new AndroidDriver<>(service.getUrl(), capabilities); - - duration = new TimeOutDuration(20, TimeUnit.SECONDS); - rottenTomatoes = new RottenTomatoesAppWithCombinedWidgets(); - driver.context("NATIVE_APP"); - PageFactory.initElements(new AppiumFieldDecorator(driver, duration), rottenTomatoes); - } - - /** - * after each test. - */ - @After public void tearDown() throws Exception { - driver.quit(); - } - - @Test - @Override public void checkACommonWidget() { - assertTrue(rottenTomatoes.getSimpleMovieCount() >= 1); - Movie movie = rottenTomatoes.getASimpleMovie(0); - assertTrue(!StringUtils.isBlank(movie.title())); - assertTrue(!StringUtils.isBlank(movie.score())); - assertNotNull(movie.getPoster()); - movie.goToReview(); - driver.getPageSource(); //forcing the refreshing hierarchy - rottenTomatoes.checkSimpleReview(); - } - - @Override - @Test public void checkAnAnnotatedWidget() { - assertTrue(rottenTomatoes.getAnnotatedMovieCount() >= 1); - Movie movie = rottenTomatoes.getAnAnnotatedMovie(0); - assertTrue(!StringUtils.isBlank(movie.title())); - assertTrue(!StringUtils.isBlank(movie.score())); - assertNotNull(movie.getPoster()); - movie.goToReview(); - driver.getPageSource(); //forcing the refreshing hierarchy - rottenTomatoes.checkAnnotatedReview(); - } - - - @Override - @Test public void checkAnExtendedWidget() { - assertTrue(rottenTomatoes.getExtendeddMovieCount() >= 1); - Movie movie = rottenTomatoes.getAnExtendedMovie(0); - assertTrue(!StringUtils.isBlank(movie.title())); - assertTrue(!StringUtils.isBlank(movie.score())); - assertNotNull(movie.getPoster()); - movie.goToReview(); - driver.getPageSource(); //forcing the refreshing hierarchy - rottenTomatoes.checkExtendedReview(); - } - - @Override - @Test public void checkTheLocatorOverridingOnAWidget() { - duration.setTime(5); - try { - assertTrue(rottenTomatoes.getFakedMovieCount() == 0); - } catch (Exception e) { - if (!NoSuchElementException.class.isAssignableFrom(e.getClass())) { - throw e; - } - } - - rottenTomatoes.getASimpleMovie(0).goToReview(); - driver.getPageSource(); //forcing the refreshing hierarchy - try { - rottenTomatoes.checkFakeReview(); - } catch (Exception e) { - if (NoSuchElementException.class.isAssignableFrom(e.getClass())) { - return; - } else { - throw e; - } - } - throw new RuntimeException("Any exception was expected"); - } -} diff --git a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/combined/annotated/AnnotatedCombinedMovie.java b/src/test/java/io/appium/java_client/pagefactory_tests/widgets/combined/annotated/AnnotatedCombinedMovie.java deleted file mode 100644 index 7f379b667..000000000 --- a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/combined/annotated/AnnotatedCombinedMovie.java +++ /dev/null @@ -1,14 +0,0 @@ -package io.appium.java_client.pagefactory_tests.widgets.combined.annotated; - -import io.appium.java_client.pagefactory.AndroidFindBy; -import io.appium.java_client.pagefactory_tests.widgets.combined.simple.CombinedMovie; -import org.openqa.selenium.WebElement; -import org.openqa.selenium.support.FindBy; - -@AndroidFindBy(className = "android.widget.RelativeLayout") -@FindBy(className = "mb-movie") -public class AnnotatedCombinedMovie extends CombinedMovie { - protected AnnotatedCombinedMovie(WebElement element) { - super(element); - } -} diff --git a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/combined/annotated/AnnotatedCombinedMovies.java b/src/test/java/io/appium/java_client/pagefactory_tests/widgets/combined/annotated/AnnotatedCombinedMovies.java deleted file mode 100644 index c7976fdb5..000000000 --- a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/combined/annotated/AnnotatedCombinedMovies.java +++ /dev/null @@ -1,36 +0,0 @@ -package io.appium.java_client.pagefactory_tests.widgets.combined.annotated; - - -import io.appium.java_client.pagefactory.AndroidFindBy; -import io.appium.java_client.pagefactory.SelendroidFindBy; -import io.appium.java_client.pagefactory_tests.widgets.Movie; -import io.appium.java_client.pagefactory_tests.widgets.Movies; -import org.openqa.selenium.WebElement; -import org.openqa.selenium.support.FindBy; - -import java.util.List; - -@AndroidFindBy(id = "com.codepath.example.rottentomatoes:id/lvMovies") -@SelendroidFindBy(id = "lvMovies") -@FindBy(id = "movies-collection") -public class AnnotatedCombinedMovies extends Movies { - - List movieList; - - /* - There could be additional behavior. - But for test it is enough. - */ - - protected AnnotatedCombinedMovies(WebElement element) { - super(element); - } - - @Override public int getMovieCount() { - return movieList.size(); - } - - @Override public Movie getMovie(int index) { - return movieList.get(index); - } -} diff --git a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/combined/annotated/AnnotatedCombinedReview.java b/src/test/java/io/appium/java_client/pagefactory_tests/widgets/combined/annotated/AnnotatedCombinedReview.java deleted file mode 100644 index bbc2a1bb6..000000000 --- a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/combined/annotated/AnnotatedCombinedReview.java +++ /dev/null @@ -1,19 +0,0 @@ -package io.appium.java_client.pagefactory_tests.widgets.combined.annotated; - - - -import io.appium.java_client.pagefactory.AndroidFindBy; -import io.appium.java_client.pagefactory.SelendroidFindBy; -import io.appium.java_client.pagefactory_tests.widgets.combined.simple.CombinedReview; -import org.openqa.selenium.WebElement; -import org.openqa.selenium.support.FindBy; - -@FindBy(id = "main_container") -@SelendroidFindBy(className = "android.widget.RelativeLayout") -@AndroidFindBy(id = "android:id/content") -@AndroidFindBy(className = "android.widget.RelativeLayout") -public class AnnotatedCombinedReview extends CombinedReview { - protected AnnotatedCombinedReview(WebElement element) { - super(element); - } -} diff --git a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/combined/extended/ExtendedCombinedMovies.java b/src/test/java/io/appium/java_client/pagefactory_tests/widgets/combined/extended/ExtendedCombinedMovies.java deleted file mode 100644 index 63d28cac4..000000000 --- a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/combined/extended/ExtendedCombinedMovies.java +++ /dev/null @@ -1,11 +0,0 @@ -package io.appium.java_client.pagefactory_tests.widgets.combined.extended; - - -import io.appium.java_client.pagefactory_tests.widgets.combined.annotated.AnnotatedCombinedMovies; -import org.openqa.selenium.WebElement; - -public class ExtendedCombinedMovies extends AnnotatedCombinedMovies { - protected ExtendedCombinedMovies(WebElement element) { - super(element); - } -} diff --git a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/combined/extended/ExtendedCombinedReview.java b/src/test/java/io/appium/java_client/pagefactory_tests/widgets/combined/extended/ExtendedCombinedReview.java deleted file mode 100644 index 853b83f93..000000000 --- a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/combined/extended/ExtendedCombinedReview.java +++ /dev/null @@ -1,10 +0,0 @@ -package io.appium.java_client.pagefactory_tests.widgets.combined.extended; - -import io.appium.java_client.pagefactory_tests.widgets.combined.annotated.AnnotatedCombinedReview; -import org.openqa.selenium.WebElement; - -public class ExtendedCombinedReview extends AnnotatedCombinedReview { - protected ExtendedCombinedReview(WebElement element) { - super(element); - } -} diff --git a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/combined/simple/CombinedMovie.java b/src/test/java/io/appium/java_client/pagefactory_tests/widgets/combined/simple/CombinedMovie.java deleted file mode 100644 index 1e4a29b58..000000000 --- a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/combined/simple/CombinedMovie.java +++ /dev/null @@ -1,52 +0,0 @@ -package io.appium.java_client.pagefactory_tests.widgets.combined.simple; - -import io.appium.java_client.pagefactory.AndroidFindBy; -import io.appium.java_client.pagefactory.SelendroidFindBy; -import io.appium.java_client.pagefactory_tests.widgets.Movie; -import org.openqa.selenium.WebElement; -import org.openqa.selenium.remote.RemoteWebElement; -import org.openqa.selenium.support.FindBy; - -public class CombinedMovie extends Movie { - - @AndroidFindBy(id = "com.codepath.example.rottentomatoes:id/tvTitle") - @SelendroidFindBy(id = "tvTitle") - @FindBy(className = "movieTitle") - private RemoteWebElement title; - - @AndroidFindBy(uiAutomator = - "resourceId(\"com.codepath.example.rottentomatoes:id/tvCriticsScore\")") - @FindBy(className = "tMeterScore") - @SelendroidFindBy(id = "tvCriticsScore") - private RemoteWebElement score; - - @AndroidFindBy(accessibility = "poster image") - @SelendroidFindBy(id = "ivPosterImage") - @FindBy(className = "poster_container") - private RemoteWebElement poster; - - @AndroidFindBy(accessibility = "poster image") - @SelendroidFindBy(id = "ivPosterImage") - @FindBy(xpath = ".//*[@class=\"movie_info\"]/a/h3") - private RemoteWebElement movieSwitcher; - - protected CombinedMovie(WebElement element) { - super(element); - } - - @Override public String title() { - return title.getText(); - } - - @Override public String score() { - return score.getText(); - } - - @Override public Object getPoster() { - return poster.getSize(); - } - - @Override public void goToReview() { - movieSwitcher.click(); - } -} diff --git a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/combined/simple/CombinedMovies.java b/src/test/java/io/appium/java_client/pagefactory_tests/widgets/combined/simple/CombinedMovies.java deleted file mode 100644 index 1acc2fe3a..000000000 --- a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/combined/simple/CombinedMovies.java +++ /dev/null @@ -1,33 +0,0 @@ -package io.appium.java_client.pagefactory_tests.widgets.combined.simple; - - -import io.appium.java_client.pagefactory.AndroidFindBy; -import io.appium.java_client.pagefactory_tests.widgets.Movie; -import io.appium.java_client.pagefactory_tests.widgets.Movies; -import org.openqa.selenium.WebElement; -import org.openqa.selenium.support.FindBy; - -import java.util.List; - -public class CombinedMovies extends Movies { - - @AndroidFindBy(className = "android.widget.RelativeLayout") @FindBy(className = "mb-movie") - List movieList; - - /* - There could be additional behavior. - But for test it is enough. - */ - - protected CombinedMovies(WebElement element) { - super(element); - } - - @Override public int getMovieCount() { - return movieList.size(); - } - - @Override public Movie getMovie(int index) { - return movieList.get(index); - } -} diff --git a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/combined/simple/CombinedReview.java b/src/test/java/io/appium/java_client/pagefactory_tests/widgets/combined/simple/CombinedReview.java deleted file mode 100644 index 17adcd89c..000000000 --- a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/combined/simple/CombinedReview.java +++ /dev/null @@ -1,51 +0,0 @@ -package io.appium.java_client.pagefactory_tests.widgets.combined.simple; - - -import io.appium.java_client.pagefactory.AndroidFindBy; -import io.appium.java_client.pagefactory.SelendroidFindBy; -import io.appium.java_client.pagefactory_tests.widgets.Review; -import org.openqa.selenium.WebElement; -import org.openqa.selenium.remote.RemoteWebElement; -import org.openqa.selenium.support.FindBy; - -public class CombinedReview extends Review { - - @AndroidFindBy(id = "com.codepath.example.rottentomatoes:id/tvTitle") - @FindBy(id = "movie-title") @SelendroidFindBy(id = "tvTitle") - private RemoteWebElement title; - - @AndroidFindBy(uiAutomator = - "resourceId(\"com.codepath.example.rottentomatoes:id/tvCriticsScore\")") - @SelendroidFindBy(id = "tvCriticsScore") - @FindBy(xpath = ".//*[@id=\"tomato_meter_link\"]//*[@itemprop=\"ratingValue\"]") - private RemoteWebElement score; - - @AndroidFindBy(id = "com.codepath.example.rottentomatoes:id/tvSynopsis") - @SelendroidFindBy(id = "tvSynopsis") - private RemoteWebElement movieSynopsis; - - @AndroidFindBy(id = "com.codepath.example.rottentomatoes:id/ivPosterImage") - @SelendroidFindBy(id = "ivPosterImage") @FindBy(className = "videoPic") - private RemoteWebElement poster; - - - protected CombinedReview(WebElement element) { - super(element); - } - - @Override public String title() { - return title.getText(); - } - - @Override public String score() { - return score.getText(); - } - - @Override public String info() { - return movieSynopsis.getText(); - } - - @Override public Object getPoster() { - return poster.getSize(); - } -} diff --git a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/html/HtmlWidgetTest.java b/src/test/java/io/appium/java_client/pagefactory_tests/widgets/html/HtmlWidgetTest.java deleted file mode 100644 index 2715192bd..000000000 --- a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/html/HtmlWidgetTest.java +++ /dev/null @@ -1,130 +0,0 @@ -package io.appium.java_client.pagefactory_tests.widgets.html; - -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; - -import io.appium.java_client.pagefactory.AppiumFieldDecorator; -import io.appium.java_client.pagefactory.TimeOutDuration; -import io.appium.java_client.pagefactory_tests.widgets.Movie; -import io.appium.java_client.pagefactory_tests.widgets.WidgetTest; -import org.apache.commons.lang3.StringUtils; -import org.junit.AfterClass; -import org.junit.Before; -import org.junit.BeforeClass; -import org.junit.Test; -import org.openqa.selenium.NoSuchElementException; -import org.openqa.selenium.Platform; -import org.openqa.selenium.chrome.ChromeDriver; -import org.openqa.selenium.chrome.ChromeDriverService; -import org.openqa.selenium.support.PageFactory; - -import java.io.File; -import java.util.concurrent.TimeUnit; - -public class HtmlWidgetTest implements WidgetTest { - - private static ChromeDriver driver; - private static RottenTomatoesSite rottenTomatoesSite; - - /** - * initialization. - */ - @BeforeClass public static void beforeClass() throws Exception { - - if (Platform.getCurrent().is(Platform.WINDOWS)) { - System.setProperty(ChromeDriverService.CHROME_DRIVER_EXE_PROPERTY, - "src/test/java/io/appium/java_client/pagefactory_tests/chromedriver.exe"); - } else { - System.setProperty(ChromeDriverService.CHROME_DRIVER_EXE_PROPERTY, - "src/test/java/io/appium/java_client/pagefactory_tests/chromedriver"); - } - - driver = new ChromeDriver(); - driver.manage().timeouts().pageLoadTimeout(30, TimeUnit.SECONDS); - rottenTomatoesSite = new RottenTomatoesSite(); - PageFactory.initElements( - new AppiumFieldDecorator(driver, new TimeOutDuration(5, TimeUnit.SECONDS)), - rottenTomatoesSite); - } - - /** - * finishing. - */ - @AfterClass public static void afterClass() throws Exception { - if (driver != null) { - driver.quit(); - } - } - - /** - * The setting up. - */ - @Before public void setUp() throws Exception { - if (driver != null) { - driver.get("file:///" + new File( - "src/test/java/io/appium/java_client/RottenTomatoesSnapshot.html") - .getAbsolutePath()); - } - } - - @Test - @Override public void checkACommonWidget() { - assertTrue(rottenTomatoesSite.getSimpleMovieCount() == 30); - Movie movie = rottenTomatoesSite.getASimpleMovie(0); - assertTrue(!StringUtils.isBlank(movie.title())); - assertTrue(!StringUtils.isBlank(movie.score())); - assertNotNull(movie.getPoster()); - movie.goToReview(); - - rottenTomatoesSite.checkSimpleReview(); - } - - @Override - @Test public void checkAnAnnotatedWidget() { - assertTrue(rottenTomatoesSite.getAnnotatedMovieCount() == 30); - Movie movie = rottenTomatoesSite.getAnAnnotatedMovie(0); - assertTrue(!StringUtils.isBlank(movie.title())); - assertTrue(!StringUtils.isBlank(movie.score())); - assertNotNull(movie.getPoster()); - movie.goToReview(); - - rottenTomatoesSite.checkAnnotatedReview(); - } - - - @Override - @Test public void checkAnExtendedWidget() { - assertTrue(rottenTomatoesSite.getExtendeddMovieCount() == 30); - Movie movie = rottenTomatoesSite.getAnExtendedMovie(0); - assertTrue(!StringUtils.isBlank(movie.title())); - assertTrue(!StringUtils.isBlank(movie.score())); - assertNotNull(movie.getPoster()); - movie.goToReview(); - - rottenTomatoesSite.checkExtendedReview(); - } - - @Override - @Test public void checkTheLocatorOverridingOnAWidget() { - try { - assertTrue(rottenTomatoesSite.getFakedMovieCount() == 0); - } catch (Exception e) { - if (!NoSuchElementException.class.isAssignableFrom(e.getClass())) { - throw e; - } - } - - rottenTomatoesSite.getASimpleMovie(0).goToReview(); - - try { - rottenTomatoesSite.checkFakeReview(); - } catch (Exception e) { - if (NoSuchElementException.class.isAssignableFrom(e.getClass())) { - return; - } else { - throw e; - } - } - throw new RuntimeException("Any exception was expected"); - } -} diff --git a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/html/RottenTomatoesSite.java b/src/test/java/io/appium/java_client/pagefactory_tests/widgets/html/RottenTomatoesSite.java deleted file mode 100644 index 84eec4261..000000000 --- a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/html/RottenTomatoesSite.java +++ /dev/null @@ -1,129 +0,0 @@ -package io.appium.java_client.pagefactory_tests.widgets.html; - -import static org.junit.Assert.assertTrue; - -import io.appium.java_client.pagefactory_tests.widgets.Movie; -import io.appium.java_client.pagefactory_tests.widgets.RottenTomatoesAbstractApp; -import io.appium.java_client.pagefactory_tests.widgets.html.annotated.AnnotatedHtmlMovies; -import io.appium.java_client.pagefactory_tests.widgets.html.annotated.AnnotatedHtmlReview; -import io.appium.java_client.pagefactory_tests.widgets.html.extended.ExtendedHtmlMovies; -import io.appium.java_client.pagefactory_tests.widgets.html.extended.ExtendedHtmlReview; -import io.appium.java_client.pagefactory_tests.widgets.html.simple.HtmlMovies; -import io.appium.java_client.pagefactory_tests.widgets.html.simple.HtmlReview; -import org.apache.commons.lang3.StringUtils; -import org.openqa.selenium.support.FindBy; - -/** - * This is the example of page object with declared Widgets - * instead of WebElement. - */ -public class RottenTomatoesSite implements RottenTomatoesAbstractApp { - - @FindBy(id = "movies-collection") private HtmlMovies simpleMovies; - - @FindBy(id = "main_container") private HtmlReview simpleReview; - - private AnnotatedHtmlMovies annotatedHtmlMovies; - - private AnnotatedHtmlReview annotatedHtmlReview; - - private ExtendedHtmlMovies extendedHtmlMovies; - - private ExtendedHtmlReview extendedHtmlReview; - - @FindBy(id = "fakeId") private ExtendedHtmlMovies fakeMovies; - - @FindBy(id = "fakeId") private ExtendedHtmlReview fakeReview; - - /** - * It gets movie count. - */ - public int getSimpleMovieCount() { - return simpleMovies.getMovieCount(); - } - - /** - * @param index is the desired index. - * @return a movie. - */ - public Movie getASimpleMovie(int index) { - return simpleMovies.getMovie(index); - } - - /** - * It reads a review. - */ - public void checkSimpleReview() { - assertTrue(!StringUtils.isBlank(simpleReview.title())); - assertTrue(!StringUtils.isBlank(simpleReview.score())); - assertTrue(!StringUtils.isBlank(simpleReview.info())); - assertTrue(simpleReview.getPoster() != null); - } - - /** - * It gets movie count. - */ - public int getAnnotatedMovieCount() { - return annotatedHtmlMovies.getMovieCount(); - } - - /** - * @param index is the desired index. - * @return a movie. - */ - public Movie getAnAnnotatedMovie(int index) { - return annotatedHtmlMovies.getMovie(index); - } - - /** - * It reads a review. - */ - public void checkAnnotatedReview() { - assertTrue(!StringUtils.isBlank(annotatedHtmlReview.title())); - assertTrue(!StringUtils.isBlank(annotatedHtmlReview.score())); - assertTrue(!StringUtils.isBlank(annotatedHtmlReview.info())); - assertTrue(annotatedHtmlReview.getPoster() != null); - } - - /** - * It gets movie count. - */ - public int getExtendeddMovieCount() { - return extendedHtmlMovies.getMovieCount(); - } - - /** - * @param index is the desired index. - * @return a movie. - */ - public Movie getAnExtendedMovie(int index) { - return extendedHtmlMovies.getMovie(index); - } - - /** - * It reads a review. - */ - public void checkExtendedReview() { - assertTrue(!StringUtils.isBlank(extendedHtmlReview.title())); - assertTrue(!StringUtils.isBlank(extendedHtmlReview.score())); - assertTrue(!StringUtils.isBlank(extendedHtmlReview.info())); - assertTrue(extendedHtmlReview.getPoster() != null); - } - - /** - * It gets movie count. - */ - public int getFakedMovieCount() { - return fakeMovies.getMovieCount(); - } - - /** - * It reads a review. - */ - public void checkFakeReview() { - assertTrue(!StringUtils.isBlank(fakeReview.title())); - assertTrue(!StringUtils.isBlank(fakeReview.score())); - assertTrue(!StringUtils.isBlank(fakeReview.info())); - assertTrue(fakeReview.getPoster() != null); - } -} diff --git a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/html/annotated/AnnotatedHtmlMovie.java b/src/test/java/io/appium/java_client/pagefactory_tests/widgets/html/annotated/AnnotatedHtmlMovie.java deleted file mode 100644 index 80a703d54..000000000 --- a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/html/annotated/AnnotatedHtmlMovie.java +++ /dev/null @@ -1,11 +0,0 @@ -package io.appium.java_client.pagefactory_tests.widgets.html.annotated; - -import io.appium.java_client.pagefactory_tests.widgets.html.simple.HtmlMovie; -import org.openqa.selenium.WebElement; -import org.openqa.selenium.support.FindBy; - -@FindBy(className = "mb-movie") public class AnnotatedHtmlMovie extends HtmlMovie { - protected AnnotatedHtmlMovie(WebElement element) { - super(element); - } -} diff --git a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/html/annotated/AnnotatedHtmlMovies.java b/src/test/java/io/appium/java_client/pagefactory_tests/widgets/html/annotated/AnnotatedHtmlMovies.java deleted file mode 100644 index e4462d056..000000000 --- a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/html/annotated/AnnotatedHtmlMovies.java +++ /dev/null @@ -1,29 +0,0 @@ -package io.appium.java_client.pagefactory_tests.widgets.html.annotated; - -import io.appium.java_client.pagefactory_tests.widgets.Movie; -import io.appium.java_client.pagefactory_tests.widgets.Movies; -import org.openqa.selenium.WebElement; -import org.openqa.selenium.support.FindBy; - -import java.util.List; - -@FindBy(id = "movies-collection") public class AnnotatedHtmlMovies extends Movies { - List movieList; - - /* - There could be additional behavior. - But for test it is enough. - */ - - protected AnnotatedHtmlMovies(WebElement element) { - super(element); - } - - @Override public int getMovieCount() { - return movieList.size(); - } - - @Override public Movie getMovie(int index) { - return movieList.get(index); - } -} diff --git a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/html/annotated/AnnotatedHtmlReview.java b/src/test/java/io/appium/java_client/pagefactory_tests/widgets/html/annotated/AnnotatedHtmlReview.java deleted file mode 100644 index 26c7071f2..000000000 --- a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/html/annotated/AnnotatedHtmlReview.java +++ /dev/null @@ -1,12 +0,0 @@ -package io.appium.java_client.pagefactory_tests.widgets.html.annotated; - - -import io.appium.java_client.pagefactory_tests.widgets.html.simple.HtmlReview; -import org.openqa.selenium.WebElement; -import org.openqa.selenium.support.FindBy; - -@FindBy(id = "main_container") public class AnnotatedHtmlReview extends HtmlReview { - protected AnnotatedHtmlReview(WebElement element) { - super(element); - } -} diff --git a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/html/extended/ExtendedHtmlMovies.java b/src/test/java/io/appium/java_client/pagefactory_tests/widgets/html/extended/ExtendedHtmlMovies.java deleted file mode 100644 index f36d1a017..000000000 --- a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/html/extended/ExtendedHtmlMovies.java +++ /dev/null @@ -1,10 +0,0 @@ -package io.appium.java_client.pagefactory_tests.widgets.html.extended; - -import io.appium.java_client.pagefactory_tests.widgets.html.annotated.AnnotatedHtmlMovies; -import org.openqa.selenium.WebElement; - -public class ExtendedHtmlMovies extends AnnotatedHtmlMovies { - protected ExtendedHtmlMovies(WebElement element) { - super(element); - } -} diff --git a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/html/extended/ExtendedHtmlReview.java b/src/test/java/io/appium/java_client/pagefactory_tests/widgets/html/extended/ExtendedHtmlReview.java deleted file mode 100644 index ced4cb70a..000000000 --- a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/html/extended/ExtendedHtmlReview.java +++ /dev/null @@ -1,11 +0,0 @@ -package io.appium.java_client.pagefactory_tests.widgets.html.extended; - - -import io.appium.java_client.pagefactory_tests.widgets.html.annotated.AnnotatedHtmlReview; -import org.openqa.selenium.WebElement; - -public class ExtendedHtmlReview extends AnnotatedHtmlReview { - protected ExtendedHtmlReview(WebElement element) { - super(element); - } -} diff --git a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/html/simple/HtmlMovie.java b/src/test/java/io/appium/java_client/pagefactory_tests/widgets/html/simple/HtmlMovie.java deleted file mode 100644 index 1f83f56d9..000000000 --- a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/html/simple/HtmlMovie.java +++ /dev/null @@ -1,38 +0,0 @@ -package io.appium.java_client.pagefactory_tests.widgets.html.simple; - -import io.appium.java_client.pagefactory_tests.widgets.Movie; -import org.openqa.selenium.WebElement; -import org.openqa.selenium.support.FindBy; - -public class HtmlMovie extends Movie { - - @FindBy(className = "movieTitle") private WebElement title; - - @FindBy(className = "tMeterScore") private WebElement score; - - @FindBy(className = "poster_container") private WebElement poster; - - @FindBy(xpath = ".//*[@class=\"movie_info\"]/a/h3") private WebElement linkToMovie; - - - - protected HtmlMovie(WebElement element) { - super(element); - } - - @Override public String title() { - return title.getText(); - } - - @Override public String score() { - return score.getText(); - } - - @Override public Object getPoster() { - return poster.getSize(); - } - - @Override public void goToReview() { - linkToMovie.click(); - } -} diff --git a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/html/simple/HtmlMovies.java b/src/test/java/io/appium/java_client/pagefactory_tests/widgets/html/simple/HtmlMovies.java deleted file mode 100644 index d4e115853..000000000 --- a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/html/simple/HtmlMovies.java +++ /dev/null @@ -1,30 +0,0 @@ -package io.appium.java_client.pagefactory_tests.widgets.html.simple; - -import io.appium.java_client.pagefactory_tests.widgets.Movie; -import io.appium.java_client.pagefactory_tests.widgets.Movies; -import org.openqa.selenium.WebElement; -import org.openqa.selenium.support.FindBy; - -import java.util.List; - -public class HtmlMovies extends Movies { - - @FindBy(className = "mb-movie") List movieList; - - /* - There could be additional behavior. - But for test it is enough. - */ - - protected HtmlMovies(WebElement element) { - super(element); - } - - @Override public int getMovieCount() { - return movieList.size(); - } - - @Override public Movie getMovie(int index) { - return movieList.get(index); - } -} diff --git a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/html/simple/HtmlReview.java b/src/test/java/io/appium/java_client/pagefactory_tests/widgets/html/simple/HtmlReview.java deleted file mode 100644 index 1e93c5140..000000000 --- a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/html/simple/HtmlReview.java +++ /dev/null @@ -1,39 +0,0 @@ -package io.appium.java_client.pagefactory_tests.widgets.html.simple; - - -import io.appium.java_client.pagefactory_tests.widgets.Review; -import org.openqa.selenium.WebElement; -import org.openqa.selenium.support.FindBy; - -public class HtmlReview extends Review { - - @FindBy(id = "movie-title") private WebElement title; - - @FindBy(xpath = ".//*[@id=\"tomato_meter_link\"]//*[@itemprop=\"ratingValue\"]") - private WebElement score; - - private WebElement movieSynopsis; - - @FindBy(className = "videoPic") private WebElement poster; - - - protected HtmlReview(WebElement element) { - super(element); - } - - @Override public String title() { - return title.getText(); - } - - @Override public String score() { - return score.getText(); - } - - @Override public String info() { - return movieSynopsis.getText(); - } - - @Override public Object getPoster() { - return poster.getSize(); - } -} diff --git a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/ios/IOSWidgetTest.java b/src/test/java/io/appium/java_client/pagefactory_tests/widgets/ios/IOSWidgetTest.java deleted file mode 100644 index b883eb2ae..000000000 --- a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/ios/IOSWidgetTest.java +++ /dev/null @@ -1,142 +0,0 @@ -package io.appium.java_client.pagefactory_tests.widgets.ios; - -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; - -import io.appium.java_client.MobileElement; -import io.appium.java_client.ios.IOSDriver; -import io.appium.java_client.pagefactory.AppiumFieldDecorator; -import io.appium.java_client.pagefactory.TimeOutDuration; -import io.appium.java_client.pagefactory_tests.widgets.Movie; -import io.appium.java_client.pagefactory_tests.widgets.WidgetTest; -import io.appium.java_client.remote.IOSMobileCapabilityType; -import io.appium.java_client.remote.MobileCapabilityType; -import io.appium.java_client.service.local.AppiumDriverLocalService; -import org.apache.commons.lang3.StringUtils; -import org.junit.After; -import org.junit.AfterClass; -import org.junit.Before; -import org.junit.BeforeClass; -import org.junit.Test; -import org.openqa.selenium.NoSuchElementException; -import org.openqa.selenium.remote.DesiredCapabilities; -import org.openqa.selenium.support.PageFactory; - -import java.io.File; -import java.util.concurrent.TimeUnit; - -public class IOSWidgetTest implements WidgetTest { - - private static AppiumDriverLocalService service; - private IOSDriver driver; - private RottenTomatoesIOSApp rottenTomatoesApp; - - /** - * initialization. - */ - @BeforeClass public static void beforeClass() throws Exception { - service = AppiumDriverLocalService.buildDefaultService(); - service.start(); - } - - /** - * finishing. - */ - @AfterClass public static void afterClass() throws Exception { - if (service != null) { - service.stop(); - } - } - - /** - * The setting up. - */ - @Before public void setUp() throws Exception { - File appDir = new File("src/test/java/io/appium/java_client"); - File app = new File(appDir, "RottenTomatoes.zip"); - - DesiredCapabilities capabilities = new DesiredCapabilities(); - capabilities.setCapability(MobileCapabilityType.BROWSER_NAME, ""); - capabilities.setCapability(MobileCapabilityType.PLATFORM_VERSION, "9.2"); - //sometimes environment has performance problems - capabilities.setCapability(IOSMobileCapabilityType.LAUNCH_TIMEOUT, 500000); - capabilities.setCapability(MobileCapabilityType.DEVICE_NAME, "iPhone Simulator"); - capabilities.setCapability(MobileCapabilityType.APP, app.getAbsolutePath()); - driver = new IOSDriver<>(service.getUrl(), capabilities); - - rottenTomatoesApp = new RottenTomatoesIOSApp(); - PageFactory.initElements( - new AppiumFieldDecorator(driver, new TimeOutDuration(5, TimeUnit.SECONDS)), - rottenTomatoesApp); - } - - /** - * after each test. - */ - @After public void tearDown() { - if (driver != null) { - driver.quit(); - } - } - - @Test - @Override public void checkACommonWidget() { - assertTrue(rottenTomatoesApp.getSimpleMovieCount() >= 1); - Movie movie = rottenTomatoesApp.getASimpleMovie(0); - assertTrue(!StringUtils.isBlank(movie.title())); - assertTrue(!StringUtils.isBlank(movie.score())); - assertNotNull(movie.getPoster()); - movie.goToReview(); - - rottenTomatoesApp.checkSimpleReview(); - } - - @Override - @Test public void checkAnAnnotatedWidget() { - assertTrue(rottenTomatoesApp.getAnnotatedMovieCount() >= 1); - Movie movie = rottenTomatoesApp.getAnAnnotatedMovie(0); - assertTrue(!StringUtils.isBlank(movie.title())); - assertTrue(!StringUtils.isBlank(movie.score())); - assertNotNull(movie.getPoster()); - movie.goToReview(); - - rottenTomatoesApp.checkAnnotatedReview(); - } - - - @Override - @Test public void checkAnExtendedWidget() { - assertTrue(rottenTomatoesApp.getExtendeddMovieCount() >= 1); - Movie movie = rottenTomatoesApp.getAnExtendedMovie(0); - assertTrue(!StringUtils.isBlank(movie.title())); - assertTrue(!StringUtils.isBlank(movie.score())); - assertNotNull(movie.getPoster()); - movie.goToReview(); - - rottenTomatoesApp.checkExtendedReview(); - } - - @Override - @Test public void checkTheLocatorOverridingOnAWidget() { - try { - assertTrue(rottenTomatoesApp.getFakedMovieCount() == 0); - } catch (Exception e) { - if (!NoSuchElementException.class.isAssignableFrom(e.getClass())) { - throw e; - } - } - - rottenTomatoesApp.getASimpleMovie(0).goToReview(); - - try { - rottenTomatoesApp.checkFakeReview(); - } catch (Exception e) { - if (NoSuchElementException.class.isAssignableFrom(e.getClass())) { - return; - } else { - throw e; - } - } - throw new RuntimeException("Any exception was expected"); - } -} diff --git a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/ios/RottenTomatoesIOSApp.java b/src/test/java/io/appium/java_client/pagefactory_tests/widgets/ios/RottenTomatoesIOSApp.java deleted file mode 100644 index 010fcf6ad..000000000 --- a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/ios/RottenTomatoesIOSApp.java +++ /dev/null @@ -1,129 +0,0 @@ -package io.appium.java_client.pagefactory_tests.widgets.ios; - -import static org.junit.Assert.assertTrue; - -import io.appium.java_client.pagefactory.iOSFindBy; -import io.appium.java_client.pagefactory_tests.widgets.Movie; -import io.appium.java_client.pagefactory_tests.widgets.RottenTomatoesAbstractApp; -import io.appium.java_client.pagefactory_tests.widgets.ios.annotated.AnnotatedIOSMovies; -import io.appium.java_client.pagefactory_tests.widgets.ios.annotated.AnnotatedIOSReview; -import io.appium.java_client.pagefactory_tests.widgets.ios.extended.ExtendedIOSMovies; -import io.appium.java_client.pagefactory_tests.widgets.ios.extended.ExtendedIOSReview; -import io.appium.java_client.pagefactory_tests.widgets.ios.simple.IOSMovies; -import io.appium.java_client.pagefactory_tests.widgets.ios.simple.IOSReview; -import org.apache.commons.lang3.StringUtils; - -/** - * This is the example of page object with declared Widgets - * instead of WebElement. - */ -public class RottenTomatoesIOSApp implements RottenTomatoesAbstractApp { - - @iOSFindBy(className = "UIATableView") private IOSMovies simpleMovies; - - @iOSFindBy(xpath = ".//UIAWindow[2]") private IOSReview simpleReview; - - private AnnotatedIOSMovies annotatedIOSMovies; - - private AnnotatedIOSReview annotatedIOSReview; - - private ExtendedIOSMovies extendedIOSMovies; - - private ExtendedIOSReview extendedIOSReview; - - @iOSFindBy(id = "fakeId") private ExtendedIOSMovies fakeMovies; - - @iOSFindBy(id = "fakeId") private ExtendedIOSReview fakeReview; - - /** - * It gets movie count. - */ - public int getSimpleMovieCount() { - return simpleMovies.getMovieCount(); - } - - /** - * @param index is the desired index. - * @return a movie. - */ - public Movie getASimpleMovie(int index) { - return simpleMovies.getMovie(index); - } - - /** - * It reads a review. - */ - public void checkSimpleReview() { - assertTrue(!StringUtils.isBlank(simpleReview.title())); - assertTrue(!StringUtils.isBlank(simpleReview.score())); - assertTrue(!StringUtils.isBlank(simpleReview.info())); - assertTrue(simpleReview.getPoster() != null); - } - - /** - * It gets movie count. - */ - public int getAnnotatedMovieCount() { - return annotatedIOSMovies.getMovieCount(); - } - - /** - * @param index is the desired index. - * @return a movie. - */ - public Movie getAnAnnotatedMovie(int index) { - return annotatedIOSMovies.getMovie(index); - } - - /** - * It reads a review. - */ - public void checkAnnotatedReview() { - assertTrue(!StringUtils.isBlank(annotatedIOSReview.title())); - assertTrue(!StringUtils.isBlank(annotatedIOSReview.score())); - assertTrue(!StringUtils.isBlank(annotatedIOSReview.info())); - assertTrue(annotatedIOSReview.getPoster() != null); - } - - /** - * It gets movie count. - */ - public int getExtendeddMovieCount() { - return extendedIOSMovies.getMovieCount(); - } - - /** - * @param index is the desired index. - * @return a movie. - */ - public Movie getAnExtendedMovie(int index) { - return extendedIOSMovies.getMovie(index); - } - - /** - * It reads a review. - */ - public void checkExtendedReview() { - assertTrue(!StringUtils.isBlank(extendedIOSReview.title())); - assertTrue(!StringUtils.isBlank(extendedIOSReview.score())); - assertTrue(!StringUtils.isBlank(extendedIOSReview.info())); - assertTrue(extendedIOSReview.getPoster() != null); - } - - /** - * It gets movie count. - */ - public int getFakedMovieCount() { - return fakeMovies.getMovieCount(); - } - - /** - * It reads a review. - */ - public void checkFakeReview() { - assertTrue(!StringUtils.isBlank(fakeReview.title())); - assertTrue(!StringUtils.isBlank(fakeReview.score())); - assertTrue(!StringUtils.isBlank(fakeReview.info())); - assertTrue(fakeReview.getPoster() != null); - } -} diff --git a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/ios/annotated/AnnotatedIOSMovie.java b/src/test/java/io/appium/java_client/pagefactory_tests/widgets/ios/annotated/AnnotatedIOSMovie.java deleted file mode 100644 index dd3fe027f..000000000 --- a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/ios/annotated/AnnotatedIOSMovie.java +++ /dev/null @@ -1,11 +0,0 @@ -package io.appium.java_client.pagefactory_tests.widgets.ios.annotated; - -import io.appium.java_client.pagefactory.iOSFindBy; -import io.appium.java_client.pagefactory_tests.widgets.ios.simple.IOSMovie; -import org.openqa.selenium.WebElement; - -@iOSFindBy(className = "UIATableCell") public class AnnotatedIOSMovie extends IOSMovie { - protected AnnotatedIOSMovie(WebElement element) { - super(element); - } -} diff --git a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/ios/annotated/AnnotatedIOSMovies.java b/src/test/java/io/appium/java_client/pagefactory_tests/widgets/ios/annotated/AnnotatedIOSMovies.java deleted file mode 100644 index 29fd05782..000000000 --- a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/ios/annotated/AnnotatedIOSMovies.java +++ /dev/null @@ -1,30 +0,0 @@ -package io.appium.java_client.pagefactory_tests.widgets.ios.annotated; - -import io.appium.java_client.pagefactory.iOSFindBy; -import io.appium.java_client.pagefactory_tests.widgets.Movie; -import io.appium.java_client.pagefactory_tests.widgets.Movies; -import org.openqa.selenium.WebElement; - -import java.util.List; - -@iOSFindBy(className = "UIATableView") public class AnnotatedIOSMovies extends Movies { - - List movieList; - - /* - There could be additional behavior. - But for test it is enough. - */ - - protected AnnotatedIOSMovies(WebElement element) { - super(element); - } - - @Override public int getMovieCount() { - return movieList.size(); - } - - @Override public Movie getMovie(int index) { - return movieList.get(index); - } -} diff --git a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/ios/annotated/AnnotatedIOSReview.java b/src/test/java/io/appium/java_client/pagefactory_tests/widgets/ios/annotated/AnnotatedIOSReview.java deleted file mode 100644 index 407c742b1..000000000 --- a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/ios/annotated/AnnotatedIOSReview.java +++ /dev/null @@ -1,11 +0,0 @@ -package io.appium.java_client.pagefactory_tests.widgets.ios.annotated; - -import io.appium.java_client.pagefactory.iOSFindBy; -import io.appium.java_client.pagefactory_tests.widgets.ios.simple.IOSReview; -import org.openqa.selenium.WebElement; - -@iOSFindBy(xpath = ".//UIAWindow[2]") public class AnnotatedIOSReview extends IOSReview { - protected AnnotatedIOSReview(WebElement element) { - super(element); - } -} diff --git a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/ios/extended/ExtendedIOSMovies.java b/src/test/java/io/appium/java_client/pagefactory_tests/widgets/ios/extended/ExtendedIOSMovies.java deleted file mode 100644 index 5dfab6e49..000000000 --- a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/ios/extended/ExtendedIOSMovies.java +++ /dev/null @@ -1,10 +0,0 @@ -package io.appium.java_client.pagefactory_tests.widgets.ios.extended; - -import io.appium.java_client.pagefactory_tests.widgets.ios.annotated.AnnotatedIOSMovies; -import org.openqa.selenium.WebElement; - -public class ExtendedIOSMovies extends AnnotatedIOSMovies { - protected ExtendedIOSMovies(WebElement element) { - super(element); - } -} diff --git a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/ios/extended/ExtendedIOSReview.java b/src/test/java/io/appium/java_client/pagefactory_tests/widgets/ios/extended/ExtendedIOSReview.java deleted file mode 100644 index c18a233d1..000000000 --- a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/ios/extended/ExtendedIOSReview.java +++ /dev/null @@ -1,11 +0,0 @@ -package io.appium.java_client.pagefactory_tests.widgets.ios.extended; - - -import io.appium.java_client.pagefactory_tests.widgets.ios.annotated.AnnotatedIOSReview; -import org.openqa.selenium.WebElement; - -public class ExtendedIOSReview extends AnnotatedIOSReview { - protected ExtendedIOSReview(WebElement element) { - super(element); - } -} diff --git a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/ios/simple/IOSMovie.java b/src/test/java/io/appium/java_client/pagefactory_tests/widgets/ios/simple/IOSMovie.java deleted file mode 100644 index fc4f895f8..000000000 --- a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/ios/simple/IOSMovie.java +++ /dev/null @@ -1,37 +0,0 @@ -package io.appium.java_client.pagefactory_tests.widgets.ios.simple; - -import io.appium.java_client.PerformsTouchActions; -import io.appium.java_client.TouchAction; -import io.appium.java_client.ios.IOSElement; -import io.appium.java_client.pagefactory.iOSFindBy; -import io.appium.java_client.pagefactory_tests.widgets.Movie; -import org.openqa.selenium.WebElement; - -import java.time.Duration; -import java.util.List; - -public class IOSMovie extends Movie { - - @iOSFindBy(className = "UIAStaticText") private List staticTexts; - - protected IOSMovie(WebElement element) { - super(element); - } - - @Override public String title() { - return staticTexts.get(0).getText(); - } - - @Override public String score() { - return staticTexts.get(3).getText(); - } - - @Override public Object getPoster() { - return getWrappedElement().getSize(); - } - - @Override public void goToReview() { - TouchAction tap = new TouchAction(PerformsTouchActions.class.cast(getWrappedDriver())); - tap.press(getWrappedElement()).waitAction(Duration.ofMillis(1500)).release().perform(); - } -} diff --git a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/ios/simple/IOSMovies.java b/src/test/java/io/appium/java_client/pagefactory_tests/widgets/ios/simple/IOSMovies.java deleted file mode 100644 index 7deb9575d..000000000 --- a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/ios/simple/IOSMovies.java +++ /dev/null @@ -1,31 +0,0 @@ -package io.appium.java_client.pagefactory_tests.widgets.ios.simple; - -import io.appium.java_client.pagefactory.iOSFindBy; -import io.appium.java_client.pagefactory_tests.widgets.Movie; -import io.appium.java_client.pagefactory_tests.widgets.Movies; -import org.openqa.selenium.WebElement; - -import java.util.List; - -//classNme = UIATableView -public class IOSMovies extends Movies { - - @iOSFindBy(className = "UIATableCell") List movieList; - - /* - There could be additional behavior. - But for test it is enough. - */ - - protected IOSMovies(WebElement element) { - super(element); - } - - @Override public int getMovieCount() { - return movieList.size(); - } - - @Override public Movie getMovie(int index) { - return movieList.get(index); - } -} diff --git a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/ios/simple/IOSReview.java b/src/test/java/io/appium/java_client/pagefactory_tests/widgets/ios/simple/IOSReview.java deleted file mode 100644 index 98e5ec5ac..000000000 --- a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/ios/simple/IOSReview.java +++ /dev/null @@ -1,39 +0,0 @@ -package io.appium.java_client.pagefactory_tests.widgets.ios.simple; - -import io.appium.java_client.ios.IOSElement; -import io.appium.java_client.pagefactory.iOSFindBy; -import io.appium.java_client.pagefactory_tests.widgets.Review; -import org.openqa.selenium.WebElement; - -//className = UIAWindow -public class IOSReview extends Review { - - @iOSFindBy(className = "UIANavigationBar") @iOSFindBy(className = "UIAStaticText") - private IOSElement title; - - @iOSFindBy(className = "UIAScrollView") @iOSFindBy(className = "UIAStaticText") - private IOSElement synopsis; - - @iOSFindBy(className = "UIAImage") private IOSElement poster; - - - protected IOSReview(WebElement element) { - super(element); - } - - @Override public String title() { - return title.getText(); - } - - @Override public String score() { - return "100"; - } - - @Override public String info() { - return synopsis.getText(); - } - - @Override public Object getPoster() { - return poster.getSize(); - } -} diff --git a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/selendroid/RottenTomatoesSelendroidApp.java b/src/test/java/io/appium/java_client/pagefactory_tests/widgets/selendroid/RottenTomatoesSelendroidApp.java deleted file mode 100644 index 3c2ed58b4..000000000 --- a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/selendroid/RottenTomatoesSelendroidApp.java +++ /dev/null @@ -1,130 +0,0 @@ -package io.appium.java_client.pagefactory_tests.widgets.selendroid; - -import static org.junit.Assert.assertTrue; - -import io.appium.java_client.pagefactory.SelendroidFindBy; -import io.appium.java_client.pagefactory_tests.widgets.Movie; -import io.appium.java_client.pagefactory_tests.widgets.RottenTomatoesAbstractApp; -import io.appium.java_client.pagefactory_tests.widgets.selendroid.annotated.AnnotatedSelendroidMovies; -import io.appium.java_client.pagefactory_tests.widgets.selendroid.annotated.AnnotatedSelendroidReview; -import io.appium.java_client.pagefactory_tests.widgets.selendroid.extended.ExtendedSelendroidMovies; -import io.appium.java_client.pagefactory_tests.widgets.selendroid.extended.ExtendedSelendroidReview; -import io.appium.java_client.pagefactory_tests.widgets.selendroid.simple.SelendroidMovies; -import io.appium.java_client.pagefactory_tests.widgets.selendroid.simple.SelendroidReview; -import org.apache.commons.lang3.StringUtils; - -/** - * This is the example of page object with declared Widgets - * instead of WebElement. - */ -public class RottenTomatoesSelendroidApp implements RottenTomatoesAbstractApp { - - @SelendroidFindBy(id = "lvMovies") private SelendroidMovies simpleMovies; - - @SelendroidFindBy(className = "android.widget.RelativeLayout") private SelendroidReview - simpleReview; - - private AnnotatedSelendroidMovies annotatedSelendroidMovies; - - private AnnotatedSelendroidReview annotatedSelendroidReview; - - private ExtendedSelendroidMovies extendedSelendroidMovies; - - private ExtendedSelendroidReview extendedSelendroidReview; - - @SelendroidFindBy(id = "fakeId") private ExtendedSelendroidMovies fakeMovies; - - @SelendroidFindBy(id = "fakeId") private ExtendedSelendroidReview fakeReview; - - /** - * It gets movie count. - */ - public int getSimpleMovieCount() { - return simpleMovies.getMovieCount(); - } - - /** - * @param index is the desired index. - * @return a movie. - */ - public Movie getASimpleMovie(int index) { - return simpleMovies.getMovie(index); - } - - /** - * It reads a review. - */ - public void checkSimpleReview() { - assertTrue(!StringUtils.isBlank(simpleReview.title())); - assertTrue(!StringUtils.isBlank(simpleReview.score())); - assertTrue(!StringUtils.isBlank(simpleReview.info())); - assertTrue(simpleReview.getPoster() != null); - } - - /** - * It gets movie count. - */ - public int getAnnotatedMovieCount() { - return annotatedSelendroidMovies.getMovieCount(); - } - - /** - * @param index is the desired index. - * @return a movie. - */ - public Movie getAnAnnotatedMovie(int index) { - return annotatedSelendroidMovies.getMovie(index); - } - - /** - * It reads a review. - */ - public void checkAnnotatedReview() { - assertTrue(!StringUtils.isBlank(annotatedSelendroidReview.title())); - assertTrue(!StringUtils.isBlank(annotatedSelendroidReview.score())); - assertTrue(!StringUtils.isBlank(annotatedSelendroidReview.info())); - assertTrue(annotatedSelendroidReview.getPoster() != null); - } - - /** - * It gets movie count. - */ - public int getExtendeddMovieCount() { - return extendedSelendroidMovies.getMovieCount(); - } - - /** - * @param index is the desired index. - * @return a movie. - */ - public Movie getAnExtendedMovie(int index) { - return extendedSelendroidMovies.getMovie(index); - } - - /** - * It reads a review. - */ - public void checkExtendedReview() { - assertTrue(!StringUtils.isBlank(extendedSelendroidReview.title())); - assertTrue(!StringUtils.isBlank(extendedSelendroidReview.score())); - assertTrue(!StringUtils.isBlank(extendedSelendroidReview.info())); - assertTrue(extendedSelendroidReview.getPoster() != null); - } - - /** - * It gets movie count. - */ - public int getFakedMovieCount() { - return fakeMovies.getMovieCount(); - } - - /** - * It reads a review. - */ - public void checkFakeReview() { - assertTrue(!StringUtils.isBlank(fakeReview.title())); - assertTrue(!StringUtils.isBlank(fakeReview.score())); - assertTrue(!StringUtils.isBlank(fakeReview.info())); - assertTrue(fakeReview.getPoster() != null); - } -} diff --git a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/selendroid/SelendroidWidgetTest.java b/src/test/java/io/appium/java_client/pagefactory_tests/widgets/selendroid/SelendroidWidgetTest.java deleted file mode 100644 index a2b04350e..000000000 --- a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/selendroid/SelendroidWidgetTest.java +++ /dev/null @@ -1,138 +0,0 @@ -package io.appium.java_client.pagefactory_tests.widgets.selendroid; - -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; - -import io.appium.java_client.MobileElement; -import io.appium.java_client.android.AndroidDriver; -import io.appium.java_client.pagefactory.AppiumFieldDecorator; -import io.appium.java_client.pagefactory.TimeOutDuration; -import io.appium.java_client.pagefactory_tests.widgets.Movie; -import io.appium.java_client.pagefactory_tests.widgets.WidgetTest; -import io.appium.java_client.remote.AndroidMobileCapabilityType; -import io.appium.java_client.remote.AutomationName; -import io.appium.java_client.remote.MobileCapabilityType; -import io.appium.java_client.service.local.AppiumDriverLocalService; -import io.appium.java_client.service.local.AppiumServiceBuilder; -import org.apache.commons.lang3.StringUtils; -import org.junit.After; -import org.junit.AfterClass; -import org.junit.Before; -import org.junit.BeforeClass; -import org.junit.Test; -import org.openqa.selenium.NoSuchElementException; -import org.openqa.selenium.remote.DesiredCapabilities; -import org.openqa.selenium.support.PageFactory; - -import java.io.File; -import java.util.concurrent.TimeUnit; - -public class SelendroidWidgetTest implements WidgetTest { - private static AppiumDriverLocalService service; - TimeOutDuration duration; - private AndroidDriver driver; - private RottenTomatoesSelendroidApp rottenTomatoesApp; - - /** - * initialization. - */ - @BeforeClass public static void beforeClass() throws Exception { - AppiumServiceBuilder builder = new AppiumServiceBuilder(); - service = builder.build(); - service.start(); - } - - /** - * finishing. - */ - @AfterClass public static void afterClass() throws Exception { - if (service != null) { - service.stop(); - } - } - - /** - * The setting up. - */ - @Before public void setUp() throws Exception { - File appDir = new File("src/test/java/io/appium/java_client"); - File app = new File(appDir, "android-rottentomatoes-demo-debug.apk"); - DesiredCapabilities capabilities = new DesiredCapabilities(); - capabilities.setCapability(MobileCapabilityType.DEVICE_NAME, "Android Emulator"); - capabilities.setCapability(MobileCapabilityType.APP, app.getAbsolutePath()); - capabilities.setCapability(AndroidMobileCapabilityType.SELENDROID_PORT, 9999); - capabilities.setCapability(MobileCapabilityType.AUTOMATION_NAME, AutomationName.SELENDROID); - driver = new AndroidDriver<>(service.getUrl(), capabilities); - driver.context("NATIVE_APP"); - - duration = new TimeOutDuration(20, TimeUnit.SECONDS); - rottenTomatoesApp = new RottenTomatoesSelendroidApp(); - PageFactory.initElements(new AppiumFieldDecorator(driver, duration), rottenTomatoesApp); - } - - @After public void tearDown() throws Exception { - driver.quit(); - } - - @Test - @Override public void checkACommonWidget() { - assertTrue(rottenTomatoesApp.getSimpleMovieCount() >= 1); - Movie movie = rottenTomatoesApp.getASimpleMovie(0); - assertTrue(!StringUtils.isBlank(movie.title())); - assertTrue(!StringUtils.isBlank(movie.score())); - assertNotNull(movie.getPoster()); - movie.goToReview(); - driver.getPageSource(); //forcing the refreshing hierarchy - rottenTomatoesApp.checkSimpleReview(); - } - - @Override - @Test public void checkAnAnnotatedWidget() { - assertTrue(rottenTomatoesApp.getAnnotatedMovieCount() >= 1); - Movie movie = rottenTomatoesApp.getAnAnnotatedMovie(0); - assertTrue(!StringUtils.isBlank(movie.title())); - assertTrue(!StringUtils.isBlank(movie.score())); - assertNotNull(movie.getPoster()); - movie.goToReview(); - driver.getPageSource(); //forcing the refreshing hierarchy - rottenTomatoesApp.checkAnnotatedReview(); - } - - - @Override - @Test public void checkAnExtendedWidget() { - assertTrue(rottenTomatoesApp.getExtendeddMovieCount() >= 1); - Movie movie = rottenTomatoesApp.getAnExtendedMovie(0); - assertTrue(!StringUtils.isBlank(movie.title())); - assertTrue(!StringUtils.isBlank(movie.score())); - assertNotNull(movie.getPoster()); - movie.goToReview(); - driver.getPageSource(); //forcing the refreshing hierarchy - rottenTomatoesApp.checkExtendedReview(); - } - - @Override - @Test public void checkTheLocatorOverridingOnAWidget() { - duration.setTime(5); - try { - assertTrue(rottenTomatoesApp.getFakedMovieCount() == 0); - } catch (Exception e) { - if (!NoSuchElementException.class.isAssignableFrom(e.getClass())) { - throw e; - } - } - - rottenTomatoesApp.getASimpleMovie(0).goToReview(); - driver.getPageSource(); //forcing the refreshing hierarchy - try { - rottenTomatoesApp.checkFakeReview(); - } catch (Exception e) { - if (NoSuchElementException.class.isAssignableFrom(e.getClass())) { - return; - } else { - throw e; - } - } - throw new RuntimeException("Any exception was expected"); - } -} diff --git a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/selendroid/annotated/AnnotatedSelendroidMovie.java b/src/test/java/io/appium/java_client/pagefactory_tests/widgets/selendroid/annotated/AnnotatedSelendroidMovie.java deleted file mode 100644 index 7e555eb21..000000000 --- a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/selendroid/annotated/AnnotatedSelendroidMovie.java +++ /dev/null @@ -1,13 +0,0 @@ -package io.appium.java_client.pagefactory_tests.widgets.selendroid.annotated; - -import io.appium.java_client.pagefactory.SelendroidFindBy; -import io.appium.java_client.pagefactory_tests.widgets.selendroid.simple.SelendroidMovie; -import org.openqa.selenium.WebElement; - -@SelendroidFindBy(className = "android.widget.RelativeLayout") public class AnnotatedSelendroidMovie - extends SelendroidMovie { - - protected AnnotatedSelendroidMovie(WebElement element) { - super(element); - } -} diff --git a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/selendroid/annotated/AnnotatedSelendroidMovies.java b/src/test/java/io/appium/java_client/pagefactory_tests/widgets/selendroid/annotated/AnnotatedSelendroidMovies.java deleted file mode 100644 index 1d4cd51b0..000000000 --- a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/selendroid/annotated/AnnotatedSelendroidMovies.java +++ /dev/null @@ -1,31 +0,0 @@ -package io.appium.java_client.pagefactory_tests.widgets.selendroid.annotated; - - -import io.appium.java_client.pagefactory.SelendroidFindBy; -import io.appium.java_client.pagefactory_tests.widgets.Movie; -import io.appium.java_client.pagefactory_tests.widgets.Movies; -import org.openqa.selenium.WebElement; - -import java.util.List; - -@SelendroidFindBy(id = "lvMovies") public class AnnotatedSelendroidMovies extends Movies { - - List movieList; - - /* - There could be additional behavior. - But for test it is enough. - */ - - protected AnnotatedSelendroidMovies(WebElement element) { - super(element); - } - - @Override public int getMovieCount() { - return movieList.size(); - } - - @Override public Movie getMovie(int index) { - return movieList.get(index); - } -} diff --git a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/selendroid/annotated/AnnotatedSelendroidReview.java b/src/test/java/io/appium/java_client/pagefactory_tests/widgets/selendroid/annotated/AnnotatedSelendroidReview.java deleted file mode 100644 index e1c5afac3..000000000 --- a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/selendroid/annotated/AnnotatedSelendroidReview.java +++ /dev/null @@ -1,15 +0,0 @@ -package io.appium.java_client.pagefactory_tests.widgets.selendroid.annotated; - - -import io.appium.java_client.pagefactory.SelendroidFindBy; -import io.appium.java_client.pagefactory_tests.widgets.selendroid.simple.SelendroidReview; -import org.openqa.selenium.WebElement; - - -@SelendroidFindBy(className = "android.widget.RelativeLayout") -public class AnnotatedSelendroidReview extends SelendroidReview { - - protected AnnotatedSelendroidReview(WebElement element) { - super(element); - } -} diff --git a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/selendroid/extended/ExtendedSelendroidMovies.java b/src/test/java/io/appium/java_client/pagefactory_tests/widgets/selendroid/extended/ExtendedSelendroidMovies.java deleted file mode 100644 index e3073250a..000000000 --- a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/selendroid/extended/ExtendedSelendroidMovies.java +++ /dev/null @@ -1,11 +0,0 @@ -package io.appium.java_client.pagefactory_tests.widgets.selendroid.extended; - -import io.appium.java_client.pagefactory_tests.widgets.selendroid.annotated.AnnotatedSelendroidMovies; -import org.openqa.selenium.WebElement; - -public class ExtendedSelendroidMovies extends AnnotatedSelendroidMovies { - - protected ExtendedSelendroidMovies(WebElement element) { - super(element); - } -} diff --git a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/selendroid/extended/ExtendedSelendroidReview.java b/src/test/java/io/appium/java_client/pagefactory_tests/widgets/selendroid/extended/ExtendedSelendroidReview.java deleted file mode 100644 index fae3b7423..000000000 --- a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/selendroid/extended/ExtendedSelendroidReview.java +++ /dev/null @@ -1,12 +0,0 @@ -package io.appium.java_client.pagefactory_tests.widgets.selendroid.extended; - - -import io.appium.java_client.pagefactory_tests.widgets.selendroid.annotated.AnnotatedSelendroidReview; -import org.openqa.selenium.WebElement; - -public class ExtendedSelendroidReview extends AnnotatedSelendroidReview { - - protected ExtendedSelendroidReview(WebElement element) { - super(element); - } -} diff --git a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/selendroid/simple/SelendroidMovie.java b/src/test/java/io/appium/java_client/pagefactory_tests/widgets/selendroid/simple/SelendroidMovie.java deleted file mode 100644 index 75dfa7754..000000000 --- a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/selendroid/simple/SelendroidMovie.java +++ /dev/null @@ -1,35 +0,0 @@ -package io.appium.java_client.pagefactory_tests.widgets.selendroid.simple; - -import io.appium.java_client.pagefactory.SelendroidFindBy; -import io.appium.java_client.pagefactory_tests.widgets.Movie; -import org.openqa.selenium.WebElement; -import org.openqa.selenium.remote.RemoteWebElement; - -public class SelendroidMovie extends Movie { - - @SelendroidFindBy(id = "tvTitle") private RemoteWebElement title; - - @SelendroidFindBy(id = "tvCriticsScore") private RemoteWebElement score; - - @SelendroidFindBy(id = "ivPosterImage") private RemoteWebElement poster; - - protected SelendroidMovie(WebElement element) { - super(element); - } - - @Override public String title() { - return title.getText(); - } - - @Override public String score() { - return score.getText(); - } - - @Override public Object getPoster() { - return poster.getSize(); - } - - @Override public void goToReview() { - getWrappedElement().click(); - } -} diff --git a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/selendroid/simple/SelendroidMovies.java b/src/test/java/io/appium/java_client/pagefactory_tests/widgets/selendroid/simple/SelendroidMovies.java deleted file mode 100644 index 375c30ee4..000000000 --- a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/selendroid/simple/SelendroidMovies.java +++ /dev/null @@ -1,31 +0,0 @@ -package io.appium.java_client.pagefactory_tests.widgets.selendroid.simple; - - -import io.appium.java_client.pagefactory.SelendroidFindBy; -import io.appium.java_client.pagefactory_tests.widgets.Movie; -import io.appium.java_client.pagefactory_tests.widgets.Movies; -import org.openqa.selenium.WebElement; - -import java.util.List; - -public class SelendroidMovies extends Movies { - - @SelendroidFindBy(className = "android.widget.RelativeLayout") List movieList; - - /* - There could be additional behavior. - But for test it is enough. - */ - - protected SelendroidMovies(WebElement element) { - super(element); - } - - @Override public int getMovieCount() { - return movieList.size(); - } - - @Override public Movie getMovie(int index) { - return movieList.get(index); - } -} diff --git a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/selendroid/simple/SelendroidReview.java b/src/test/java/io/appium/java_client/pagefactory_tests/widgets/selendroid/simple/SelendroidReview.java deleted file mode 100644 index 1e6532c48..000000000 --- a/src/test/java/io/appium/java_client/pagefactory_tests/widgets/selendroid/simple/SelendroidReview.java +++ /dev/null @@ -1,39 +0,0 @@ -package io.appium.java_client.pagefactory_tests.widgets.selendroid.simple; - - -import io.appium.java_client.pagefactory.SelendroidFindBy; -import io.appium.java_client.pagefactory_tests.widgets.Review; -import org.openqa.selenium.WebElement; -import org.openqa.selenium.remote.RemoteWebElement; - -public class SelendroidReview extends Review { - - @SelendroidFindBy(id = "tvTitle") private RemoteWebElement title; - - @SelendroidFindBy(id = "tvCriticsScore") private RemoteWebElement score; - - @SelendroidFindBy(id = "tvSynopsis") private RemoteWebElement synopsis; - - @SelendroidFindBy(id = "ivPosterImage") private RemoteWebElement poster; - - - protected SelendroidReview(WebElement element) { - super(element); - } - - @Override public String title() { - return title.getText(); - } - - @Override public String score() { - return score.getText(); - } - - @Override public String info() { - return synopsis.getText(); - } - - @Override public Object getPoster() { - return poster.getSize(); - } -}