summaryrefslogtreecommitdiff
path: root/Xamarin.Forms.Android.UITests/PlatformHelpers.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Xamarin.Forms.Android.UITests/PlatformHelpers.cs')
-rw-r--r--Xamarin.Forms.Android.UITests/PlatformHelpers.cs132
1 files changed, 132 insertions, 0 deletions
diff --git a/Xamarin.Forms.Android.UITests/PlatformHelpers.cs b/Xamarin.Forms.Android.UITests/PlatformHelpers.cs
new file mode 100644
index 00000000..6021f2a2
--- /dev/null
+++ b/Xamarin.Forms.Android.UITests/PlatformHelpers.cs
@@ -0,0 +1,132 @@
+using System;
+using Xamarin.UITest;
+using Xamarin.UITest.Android;
+using Xamarin.UITest.Queries;
+using NUnit.Framework;
+using System.Threading;
+
+namespace Xamarin.Forms.UITests
+{
+
+ public static class PlatformHelpers
+ {
+
+ public static string GetTextForQuery (this IApp app, Func<AppQuery, AppQuery> query)
+ {
+ AppResult[] elements = app.Query (query);
+ if (elements.Length > 1) {
+ // Test cloud doesn't support Assert.Fail
+ Assert.False (true, "Query returned more than one result");
+ }
+ return elements [0].Text;
+ }
+
+ public static bool ScrollDownForElement (this IApp app, Func<AppQuery, AppQuery> query, int scrollNumberLimit)
+ {
+ // Check if element exists before scrolling
+ if (app.Query (query).Length > 0)
+ return true;
+
+ int scrollNumber = 0;
+ while (app.Query (query).Length == 0) {
+ app.ScrollDown ();
+ scrollNumber++;
+ if (scrollNumber > scrollNumberLimit)
+ return false;
+ }
+
+ return true;
+ }
+
+ public static bool ScrollUpForElement (this IApp app, Func<AppQuery, AppQuery> query, int scrollNumberLimit)
+ {
+ int scrollNumber = 0;
+ while (app.Query (query).Length == 0) {
+ app.ScrollUp ();
+ scrollNumber++;
+ if (scrollNumber > scrollNumberLimit)
+ return false;
+ }
+
+ return true;
+ }
+
+ public static bool DragFromToForElement (this AndroidApp app, int scrollNumberLimit, Func<AppQuery, AppQuery> query, float xStart, float yStart, float xEnd, float yEnd)
+ {
+ int numberOfScrolls = 0;
+ // Element exists
+ if (app.Query (query).Length > 0)
+ return true;
+
+ while (app.Query (query).Length == 0) {
+ DragFromTo (app, xStart, yStart, xEnd, yEnd);
+ if (numberOfScrolls > scrollNumberLimit) {
+ return false;
+ }
+ numberOfScrolls++;
+ }
+ // Element found
+ return true;
+ }
+
+ public static void SwipeBackNavigation (this AndroidApp app)
+ {
+ // Do nothing on Android
+ }
+
+ public static void DragFromTo (this AndroidApp app, float xStart, float yStart, float xEnd, float yEnd, Speed speed = Speed.Fast)
+ {
+ // No effect on Android
+ app.DragCoordinates (xStart, yStart, xEnd, yEnd);
+ }
+
+ public static void KeyboardIsPresent (this AndroidApp app)
+ {
+ // TODO : Add keyboard detection
+// Thread.Sleep (1000);
+//
+// AppRect screenSize = app.MainScreenBounds ();
+// AppRect contentBounds = app.Query (q => q.Raw ("*").Id ("content"))[0].Rect;
+//
+// bool keyboardIsShown = false;
+// if ((screenSize.Height - contentBounds.Height) > (screenSize.Height / 4)) {
+// // Determine if keyboard is showing by seeing if content size is shrunk by over 1/4 of screens size
+// keyboardIsShown = true;
+// }
+//
+// Assert.IsTrue (keyboardIsShown, "Keyboard should be shown");
+ Assert.Inconclusive ("Keyboard should be shown");
+ }
+
+ public static void KeyboardIsDismissed (this AndroidApp app)
+ {
+ // TODO : Add keyboard detection
+// AppRect screenSize = app.MainScreenBounds ();
+// AppRect contentBounds = app.Query (q => q.Raw ("*").Id ("content"))[0].Rect;
+//
+// bool keyboardIsShown = false;
+// if ((screenSize.Height - contentBounds.Height) > (screenSize.Height / 4)) {
+// // Determine if keyboard is showing by seeing if content size is shrunk by over 1/4 of screens size
+// keyboardIsShown = true;
+// }
+//
+// Assert.IsFalse (keyboardIsShown, "Keyboard should be dismissed");
+ Assert.Inconclusive ("Keyboard should be dismissed");
+ }
+
+ public static int IndexForElementWithText (this AndroidApp app, Func<AppQuery, AppQuery> query, string text)
+ {
+ var elements = app.Query (query);
+ int index = 0;
+ for (int i = 0; i < elements.Length; i++) {
+ string labelText = elements[i].Text;
+ if (labelText == (text)) {
+ index = i;
+ break;
+ }
+ index++;
+ }
+ return index == elements.Length ? -1 : index;
+ }
+ }
+}