diff --git a/example/java/pom.xml b/example/java/pom.xml
index 142d2fcd..f32d8f40 100644
--- a/example/java/pom.xml
+++ b/example/java/pom.xml
@@ -44,10 +44,15 @@
2.2.4
+
+ io.appium
+ java-client
+ 4.1.2
+
pro.truongsinh
appium-flutter-finder
- 0.0.1
+ 0.0.2
diff --git a/example/java/src/test/java/example/appium/BaseDriver.java b/example/java/src/test/java/example/appium/BaseDriver.java
index eddd5fe7..17e4c880 100644
--- a/example/java/src/test/java/example/appium/BaseDriver.java
+++ b/example/java/src/test/java/example/appium/BaseDriver.java
@@ -1,18 +1,20 @@
package example.appium;
import io.appium.java_client.AppiumDriver;
+import io.appium.java_client.MobileElement;
import io.appium.java_client.ios.IOSDriver;
import io.appium.java_client.service.local.AppiumDriverLocalService;
import io.appium.java_client.service.local.AppiumServerHasNotBeenStartedLocallyException;
import org.junit.After;
import org.junit.Before;
-import org.openqa.selenium.WebElement;
import org.openqa.selenium.remote.DesiredCapabilities;
+import org.openqa.selenium.support.ui.WebDriverWait;
import java.io.File;
public class BaseDriver {
- public AppiumDriver driver;
+ public AppiumDriver driver;
+ public WebDriverWait wait;
private static AppiumDriverLocalService service;
@Before
@@ -38,7 +40,8 @@ public void setUp() throws Exception {
capabilities.setCapability("automationName", "Flutter");
- driver = new IOSDriver<>(service.getUrl(), capabilities);
+ driver = new IOSDriver(service.getUrl(), capabilities);
+ wait = new WebDriverWait(driver, 10);
}
@After
diff --git a/example/java/src/test/java/example/appium/FlutterTest.java b/example/java/src/test/java/example/appium/FlutterTest.java
index b07cb2e5..38b44655 100644
--- a/example/java/src/test/java/example/appium/FlutterTest.java
+++ b/example/java/src/test/java/example/appium/FlutterTest.java
@@ -1,19 +1,25 @@
package example.appium;
+import org.junit.Before;
import org.junit.Test;
-import pro.truongsinh.appium_flutter.finder.Finder;
-import org.openqa.selenium.By;
-import org.openqa.selenium.WebElement;
-
-import java.util.List;
+import pro.truongsinh.appium_flutter.FlutterFinder;
import static org.junit.Assert.assertEquals;
-public class FlutterTest extends BaseDriver{
- @Test
- public void simpleTest(){
- String a = Finder.text("input");
- System.out.println(a);
- }
+import io.appium.java_client.MobileElement;
+
+public class FlutterTest extends BaseDriver {
+ protected FlutterFinder finder;
+ @Before
+ public void setUp() throws Exception {
+ super.setUp();
+ finder = new FlutterFinder(driver);
+ }
+ @Test
+ public void basicTest () throws InterruptedException {
+ MobileElement el1 = finder.byValueKey("increment");
+ el1.click();
+ Thread.sleep(1000);
+ }
}
diff --git a/finder/kotlin/build.gradle.kts b/finder/kotlin/build.gradle.kts
index d0a7cce7..176e9bf8 100644
--- a/finder/kotlin/build.gradle.kts
+++ b/finder/kotlin/build.gradle.kts
@@ -1,7 +1,7 @@
import org.gradle.jvm.tasks.Jar
group = "pro.truongsinh"
-version = "0.0.1"
+version = "0.0.2"
plugins {
id("kotlinx-serialization") version "1.3.40"
@@ -18,6 +18,7 @@ repositories {
dependencies {
implementation(kotlin("stdlib"))
implementation ("org.jetbrains.kotlinx:kotlinx-serialization-runtime:0.11.1")
+ implementation ("io.appium:java-client:2.1.0")
testImplementation("junit:junit:4.12")
}
diff --git a/finder/kotlin/src/main/kotlin/pro/truongsinh/appium_flutter/FlutterFinder.kt b/finder/kotlin/src/main/kotlin/pro/truongsinh/appium_flutter/FlutterFinder.kt
new file mode 100644
index 00000000..231ad9e9
--- /dev/null
+++ b/finder/kotlin/src/main/kotlin/pro/truongsinh/appium_flutter/FlutterFinder.kt
@@ -0,0 +1,68 @@
+package pro.truongsinh.appium_flutter
+
+import io.appium.java_client.MobileElement
+import org.openqa.selenium.remote.RemoteWebDriver
+import pro.truongsinh.appium_flutter.finder.FlutterElement
+import pro.truongsinh.appium_flutter.finder.ancestor as _ancestor
+import pro.truongsinh.appium_flutter.finder.bySemanticsLabel as _bySemanticsLabel
+import pro.truongsinh.appium_flutter.finder.byTooltip as _byTooltip
+import pro.truongsinh.appium_flutter.finder.byType as _byType
+import pro.truongsinh.appium_flutter.finder.byValueKey as _byValueKey
+import pro.truongsinh.appium_flutter.finder.descendant as _descendant
+import pro.truongsinh.appium_flutter.finder.pageback as _pageback
+import pro.truongsinh.appium_flutter.finder.text as _text
+
+
+public class FlutterFinder(driver: RemoteWebDriver) {
+ private val driver = driver
+ fun ancestor(of: FlutterElement, matching: FlutterElement, matchRoot: Boolean = false): FlutterElement {
+ val f = _ancestor(of, matching, matchRoot)
+ f.setParent(driver)
+ return f
+ }
+ fun bySemanticsLabel(label: String): FlutterElement {
+ val f = _bySemanticsLabel(label)
+ f.setParent(driver)
+ return f
+ }
+ fun bySemanticsLabel(label: Regex): FlutterElement {
+ val f = _bySemanticsLabel(label)
+ f.setParent(driver)
+ return f
+ }
+ fun byTooltip(input: String): FlutterElement {
+ val f = _byTooltip(input)
+ f.setParent(driver)
+ return f
+ }
+ fun byType(input: String): FlutterElement {
+ val f = _byType(input)
+ f.setParent(driver)
+ return f
+ }
+ fun byValueKey(input: String): FlutterElement {
+ val f = _byValueKey(input)
+ f.setParent(driver)
+ return f
+ }
+ fun byValueKey(input: Int): FlutterElement {
+ val f = _byValueKey(input)
+ f.setParent(driver)
+ return f
+ }
+ fun descendant(of: FlutterElement, matching: FlutterElement, matchRoot: Boolean = false): FlutterElement {
+ val f = _descendant(of, matching, matchRoot)
+ f.setParent(driver)
+ return f
+ }
+ fun pageback(): FlutterElement {
+ val f = _pageback()
+ f.setParent(driver)
+ return f
+ }
+ fun text(input: String): FlutterElement {
+ val f = _text(input)
+ f.setParent(driver)
+ return f
+ }
+}
diff --git a/finder/kotlin/src/main/kotlin/pro/truongsinh/appium_flutter/finder/FlutterElement.kt b/finder/kotlin/src/main/kotlin/pro/truongsinh/appium_flutter/finder/FlutterElement.kt
new file mode 100644
index 00000000..542c5a01
--- /dev/null
+++ b/finder/kotlin/src/main/kotlin/pro/truongsinh/appium_flutter/finder/FlutterElement.kt
@@ -0,0 +1,12 @@
+package pro.truongsinh.appium_flutter.finder
+
+import io.appium.java_client.MobileElement
+
+public class FlutterElement : MobileElement {
+ private var _rawMap: Map
+ constructor(m: Map) {
+ _rawMap = m
+ id = serialize(m)
+ }
+ fun getRawMap(): Map { return _rawMap }
+}
\ No newline at end of file
diff --git a/finder/kotlin/src/main/kotlin/pro/truongsinh/appium_flutter/finder/ancestor.kt b/finder/kotlin/src/main/kotlin/pro/truongsinh/appium_flutter/finder/ancestor.kt
index 18658541..8f2c70b5 100755
--- a/finder/kotlin/src/main/kotlin/pro/truongsinh/appium_flutter/finder/ancestor.kt
+++ b/finder/kotlin/src/main/kotlin/pro/truongsinh/appium_flutter/finder/ancestor.kt
@@ -1,18 +1,17 @@
-@file:JvmName("Finder")
+@file:JvmName("_FinderRawMethods")
@file:JvmMultifileClass
package pro.truongsinh.appium_flutter.finder
-fun ancestor(of: String, matching: String, matchRoot: Boolean = false): String {
+fun ancestor(of: FlutterElement, matching: FlutterElement, matchRoot: Boolean = false): FlutterElement {
val m = mutableMapOf(
"finderType" to "Ancestor",
"matchRoot" to matchRoot
)
- deserialize(of).forEach {
- print(it.value)
+ of.getRawMap().forEach {
m.put("of_${it.key}", it.value!!)
}
- deserialize(matching).forEach {
+ matching.getRawMap().forEach {
m.put("matching_${it.key}", it.value!!)
}
- return serialize(m)
+ return FlutterElement(m)
}
diff --git a/finder/kotlin/src/main/kotlin/pro/truongsinh/appium_flutter/finder/bySemanticsLabel.kt b/finder/kotlin/src/main/kotlin/pro/truongsinh/appium_flutter/finder/bySemanticsLabel.kt
index a29f6d73..acce28c4 100755
--- a/finder/kotlin/src/main/kotlin/pro/truongsinh/appium_flutter/finder/bySemanticsLabel.kt
+++ b/finder/kotlin/src/main/kotlin/pro/truongsinh/appium_flutter/finder/bySemanticsLabel.kt
@@ -1,21 +1,19 @@
-@file:JvmName("Finder")
+@file:JvmName("_FinderRawMethods")
@file:JvmMultifileClass
package pro.truongsinh.appium_flutter.finder
-fun bySemanticsLabel(label: String): String {
- val base64Encoded = serialize(mapOf(
+fun bySemanticsLabel(label: String): FlutterElement {
+ return FlutterElement(mapOf(
"finderType" to "BySemanticsLabel",
"isRegExp" to false,
"label" to label
))
- return base64Encoded
}
-fun bySemanticsLabel(label: Regex): String {
- val base64Encoded = serialize(mapOf(
+fun bySemanticsLabel(label: Regex): FlutterElement {
+ return FlutterElement(mapOf(
"finderType" to "BySemanticsLabel",
"isRegExp" to true,
"label" to label.toString()
))
- return base64Encoded
}
diff --git a/finder/kotlin/src/main/kotlin/pro/truongsinh/appium_flutter/finder/byTooltip.kt b/finder/kotlin/src/main/kotlin/pro/truongsinh/appium_flutter/finder/byTooltip.kt
index d9d0b692..b19da94f 100755
--- a/finder/kotlin/src/main/kotlin/pro/truongsinh/appium_flutter/finder/byTooltip.kt
+++ b/finder/kotlin/src/main/kotlin/pro/truongsinh/appium_flutter/finder/byTooltip.kt
@@ -1,11 +1,10 @@
-@file:JvmName("Finder")
+@file:JvmName("_FinderRawMethods")
@file:JvmMultifileClass
package pro.truongsinh.appium_flutter.finder
-fun byTooltip(input: String): String {
- val base64Encoded = serialize(mapOf(
+fun byTooltip(input: String): FlutterElement {
+ return FlutterElement(mapOf(
"finderType" to "ByTooltipMessage",
"text" to input
))
- return base64Encoded
}
diff --git a/finder/kotlin/src/main/kotlin/pro/truongsinh/appium_flutter/finder/byType.kt b/finder/kotlin/src/main/kotlin/pro/truongsinh/appium_flutter/finder/byType.kt
index bd0eb6f6..73c38184 100755
--- a/finder/kotlin/src/main/kotlin/pro/truongsinh/appium_flutter/finder/byType.kt
+++ b/finder/kotlin/src/main/kotlin/pro/truongsinh/appium_flutter/finder/byType.kt
@@ -1,11 +1,10 @@
-@file:JvmName("Finder")
+@file:JvmName("_FinderRawMethods")
@file:JvmMultifileClass
package pro.truongsinh.appium_flutter.finder
-fun byType(input: String): String {
- val base64Encoded = serialize(mapOf(
+fun byType(input: String): FlutterElement {
+ return FlutterElement(mapOf(
"finderType" to "ByType",
"type" to input
))
- return base64Encoded
}
diff --git a/finder/kotlin/src/main/kotlin/pro/truongsinh/appium_flutter/finder/byValueKey.kt b/finder/kotlin/src/main/kotlin/pro/truongsinh/appium_flutter/finder/byValueKey.kt
index 4aefb733..028218c8 100755
--- a/finder/kotlin/src/main/kotlin/pro/truongsinh/appium_flutter/finder/byValueKey.kt
+++ b/finder/kotlin/src/main/kotlin/pro/truongsinh/appium_flutter/finder/byValueKey.kt
@@ -1,21 +1,19 @@
-@file:JvmName("Finder")
+@file:JvmName("_FinderRawMethods")
@file:JvmMultifileClass
package pro.truongsinh.appium_flutter.finder
-fun byValueKey(input: String): String {
- val base64Encoded = serialize(mapOf(
+fun byValueKey(input: String): FlutterElement {
+ return FlutterElement(mapOf(
"finderType" to "ByValueKey",
"keyValueType" to "String",
"keyValueString" to input
))
- return base64Encoded
}
-fun byValueKey(input: Int): String {
- val base64Encoded = serialize(mapOf(
+fun byValueKey(input: Int): FlutterElement {
+ return FlutterElement(mapOf(
"finderType" to "ByValueKey",
"keyValueType" to "int",
"keyValueString" to input
))
- return base64Encoded
}
diff --git a/finder/kotlin/src/main/kotlin/pro/truongsinh/appium_flutter/finder/descendant.kt b/finder/kotlin/src/main/kotlin/pro/truongsinh/appium_flutter/finder/descendant.kt
index 86456aeb..1e43935f 100755
--- a/finder/kotlin/src/main/kotlin/pro/truongsinh/appium_flutter/finder/descendant.kt
+++ b/finder/kotlin/src/main/kotlin/pro/truongsinh/appium_flutter/finder/descendant.kt
@@ -1,18 +1,17 @@
-@file:JvmName("Finder")
+@file:JvmName("_FinderRawMethods")
@file:JvmMultifileClass
package pro.truongsinh.appium_flutter.finder
-fun descendant(of: String, matching: String, matchRoot: Boolean = false): String {
+fun descendant(of: FlutterElement, matching: FlutterElement, matchRoot: Boolean = false): FlutterElement {
val m = mutableMapOf(
"finderType" to "Descendant",
"matchRoot" to matchRoot
)
- deserialize(of).forEach {
- print(it.value)
+ of.getRawMap().forEach {
m.put("of_${it.key}", it.value!!)
}
- deserialize(matching).forEach {
+ matching.getRawMap().forEach {
m.put("matching_${it.key}", it.value!!)
}
- return serialize(m)
+ return FlutterElement(m)
}
diff --git a/finder/kotlin/src/main/kotlin/pro/truongsinh/appium_flutter/finder/pageback.kt b/finder/kotlin/src/main/kotlin/pro/truongsinh/appium_flutter/finder/pageback.kt
index 65d8e933..29878440 100755
--- a/finder/kotlin/src/main/kotlin/pro/truongsinh/appium_flutter/finder/pageback.kt
+++ b/finder/kotlin/src/main/kotlin/pro/truongsinh/appium_flutter/finder/pageback.kt
@@ -1,8 +1,7 @@
-@file:JvmName("Finder")
+@file:JvmName("_FinderRawMethods")
@file:JvmMultifileClass
package pro.truongsinh.appium_flutter.finder
-fun pageback(): String {
- val base64Encoded = serialize(mapOf("finderType" to "PageBack"))
- return base64Encoded
+fun pageback(): FlutterElement {
+ return FlutterElement(mapOf("finderType" to "PageBack"))
}
diff --git a/finder/kotlin/src/main/kotlin/pro/truongsinh/appium_flutter/finder/serializer.kt b/finder/kotlin/src/main/kotlin/pro/truongsinh/appium_flutter/finder/serializer.kt
index 227a8d39..ede5a6af 100644
--- a/finder/kotlin/src/main/kotlin/pro/truongsinh/appium_flutter/finder/serializer.kt
+++ b/finder/kotlin/src/main/kotlin/pro/truongsinh/appium_flutter/finder/serializer.kt
@@ -1,4 +1,5 @@
-
+@file:JvmName("_FinderRawMethods")
+@file:JvmMultifileClass
package pro.truongsinh.appium_flutter.finder
import java.util.Base64
diff --git a/finder/kotlin/src/main/kotlin/pro/truongsinh/appium_flutter/finder/text.kt b/finder/kotlin/src/main/kotlin/pro/truongsinh/appium_flutter/finder/text.kt
index 556decee..9dc59990 100755
--- a/finder/kotlin/src/main/kotlin/pro/truongsinh/appium_flutter/finder/text.kt
+++ b/finder/kotlin/src/main/kotlin/pro/truongsinh/appium_flutter/finder/text.kt
@@ -1,11 +1,10 @@
-@file:JvmName("Finder")
+@file:JvmName("_FinderRawMethods")
@file:JvmMultifileClass
package pro.truongsinh.appium_flutter.finder
-fun text(input: String): String {
- val base64Encoded = serialize(mapOf(
+fun text(input: String): FlutterElement {
+ return FlutterElement(mapOf(
"finderType" to "ByText",
"text" to input
))
- return base64Encoded
}
diff --git a/finder/kotlin/src/test/kotlin/pro/truongsinh/appium_flutter/finder/FinderTest.kt b/finder/kotlin/src/test/kotlin/pro/truongsinh/appium_flutter/finder/FinderTest.kt
index 4a237c3f..f36efe71 100755
--- a/finder/kotlin/src/test/kotlin/pro/truongsinh/appium_flutter/finder/FinderTest.kt
+++ b/finder/kotlin/src/test/kotlin/pro/truongsinh/appium_flutter/finder/FinderTest.kt
@@ -15,29 +15,29 @@ class FinderTest {
of = pageback(),
matching = pageback()
)
- )
+ ).id
assertEquals(expected, observed)
}
@Test fun TestBySemanticsLabelString() {
- assertEquals("eyJmaW5kZXJUeXBlIjoiQnlTZW1hbnRpY3NMYWJlbCIsImlzUmVnRXhwIjpmYWxzZSwibGFiZWwiOiJzaW1wbGUifQ", bySemanticsLabel("simple"))
+ assertEquals("eyJmaW5kZXJUeXBlIjoiQnlTZW1hbnRpY3NMYWJlbCIsImlzUmVnRXhwIjpmYWxzZSwibGFiZWwiOiJzaW1wbGUifQ", bySemanticsLabel("simple").id)
}
@Test fun TestBySemanticsLabelRegex() {
- assertEquals("eyJmaW5kZXJUeXBlIjoiQnlTZW1hbnRpY3NMYWJlbCIsImlzUmVnRXhwIjp0cnVlLCJsYWJlbCI6ImNvbXBsaWNhdGVkIn0", bySemanticsLabel(Regex("complicated")))
+ assertEquals("eyJmaW5kZXJUeXBlIjoiQnlTZW1hbnRpY3NMYWJlbCIsImlzUmVnRXhwIjp0cnVlLCJsYWJlbCI6ImNvbXBsaWNhdGVkIn0", bySemanticsLabel(Regex("complicated")).id)
}
@Test fun TestByTooltip() {
- assertEquals("eyJmaW5kZXJUeXBlIjoiQnlUb29sdGlwTWVzc2FnZSIsInRleHQiOiJteVRleHQifQ", byTooltip("myText"))
+ assertEquals("eyJmaW5kZXJUeXBlIjoiQnlUb29sdGlwTWVzc2FnZSIsInRleHQiOiJteVRleHQifQ", byTooltip("myText").id)
}
@Test fun TestByType() {
- assertEquals("eyJmaW5kZXJUeXBlIjoiQnlUeXBlIiwidHlwZSI6Im15VGV4dCJ9", byType("myText"))
+ assertEquals("eyJmaW5kZXJUeXBlIjoiQnlUeXBlIiwidHlwZSI6Im15VGV4dCJ9", byType("myText").id)
}
@Test fun testByValueKeyString() {
val expectedJsonElement = deserialize("eyJmaW5kZXJUeXBlIjoiQnlWYWx1ZUtleSIsImtleVZhbHVlU3RyaW5nIjoiNDIiLCJrZXlWYWx1ZVR5cGUiOiJTdHJpbmcifQ")
- val obserbedJsonElement = deserialize(byValueKey("42"))
+ val obserbedJsonElement = deserialize(byValueKey("42").id)
assertEquals(true, expectedJsonElement.equals(obserbedJsonElement))
}
@Test fun testByValueKeyInt() {
val expectedJsonElement = deserialize("eyJmaW5kZXJUeXBlIjoiQnlWYWx1ZUtleSIsImtleVZhbHVlU3RyaW5nIjo0Miwia2V5VmFsdWVUeXBlIjoiaW50In0")
- val obserbedJsonElement = deserialize(byValueKey(42))
+ val obserbedJsonElement = deserialize(byValueKey(42).id)
assertEquals(true, expectedJsonElement.equals(obserbedJsonElement))
}
@Test fun testDescendant() {
@@ -51,13 +51,13 @@ class FinderTest {
of = pageback(),
matching = pageback()
)
- )
+ ).id
assertEquals(expected, observed)
}
@Test fun testPageback() {
- assertEquals("eyJmaW5kZXJUeXBlIjoiUGFnZUJhY2sifQ", pageback())
+ assertEquals("eyJmaW5kZXJUeXBlIjoiUGFnZUJhY2sifQ", pageback().id)
}
@Test fun testText() {
- assertEquals("eyJmaW5kZXJUeXBlIjoiQnlUZXh0IiwidGV4dCI6IlRoaXMgaXMgMm5kIHJvdXRlIn0", text("This is 2nd route"))
+ assertEquals("eyJmaW5kZXJUeXBlIjoiQnlUZXh0IiwidGV4dCI6IlRoaXMgaXMgMm5kIHJvdXRlIn0", text("This is 2nd route").id)
}
}