我正在尝试使用Appium自动化原生Android应用程序。我正在使用java客户端。以下是我所包含的依赖项。由于我使用的是java客户端的第7版,因此不支持滚动和滑动方法。或者如何滚动到特定元素?我使用TouchAction类遇到了一些代码片段,但我只是想知道除TouchAction类之外是否还有其他解决方案? Maven依赖 -
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>6.8</version>
</dependency>
<dependency>
<groupId>io.appium</groupId>
<artifactId>java-client</artifactId>
<version>7.0.0</version>
</dependency>
您可以将findElementByAndroidUIAutomator与不同的条件一起使用,例如文本,描述:
((AndroidDriver<?>) appiumDriver).findElementByAndroidUIAutomator("new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().textContains(\""+ text + "\").instance(0))");
public MobileElement scrollElementByTextUsingDescription(String scrollableListContDesc, String uiClassSelector, String text) {
return driver.findElement(MobileBy.AndroidUIAutomator(
"new UiScrollable(new UiSelector().description(\"" + scrollableList + "\"))" +
".getChildByText(new UiSelector().className(\"" + uiClassSelector + "\"), \"" + text + "\")"));
}
scrollableListContDesc是automationId / cont-可滚动列表的描述
uiClassSelector是可滚动列表的类名,例如android.view.View
text是要滚动的元素的文本。
如果在可滚动列表中没有cont-description,则可以使用以下方法:
public MobileElement scrollElementByTextUsingId(String scrollableListId, String uiClassSelector, String text) {
return driver.findElement(MobileBy.AndroidUIAutomator(
"new UiScrollable(new UiSelector().resourceId(\"" + scrollableListId + "\"))" +
".getChildByText(new UiSelector().className(\"" + uiClassSelector + "\"), \"" + text + "\")"));
}
scrollableListId是可滚动列表的id / resourceId
UIScrollable / UISelector是TouchActions的一种替代方法,可用于滚动/滑动。例:
MobileElement element = driver.findElement(MobileBy.AndroidUIAutomator(
"new UiScrollable(new UiSelector().resourceId(\"com.android.vending:id/data_view\")).scrollIntoView("
+ "new UiSelector().textContains(\"HelloWorld\").instance(2))"));
This博客文章涵盖了各种滑动/滚动的解决方案。