Appium:处理 android 系统交互
Appium: dealing with android system interactions
我有一个简单的用例。在 android 应用程序中,按一个按钮,浏览器应用程序将打开 URL.
出现 "Open With" 对话框弹出窗口,允许您 select 浏览器或 Chrome。
在 appium 检查器中看起来像这样:
<android.widget.ListView resource-id="android:id/resolver_list">
<android.widget.LinearLayout>
<android.widget.ImageView resource-id="android:id/icon">
<android.widget.LinearLayout>
<android.widget.TextView resource-id="android:id/text1">
<android.widget.LinearLayout>
<android.widget.ImageView resource-id="android:id/icon">
<android.widget.LinearLayout>
<android.widget.TextView resource-id="android:id/text1">
尝试将其自动化似乎应该是微不足道的,但却给我带来了麻烦。我可以将 "Browser" 和 "Chrome" 的文本作为离散的 AndroidElement
获取,但我似乎无法真正按下实际选项。
我可以实际与这些东西互动吗?还是不可能因为它是 android 系统本身的一部分?
为了帮助解决这个问题,这里是我的页面对象的设置。
@AndroidFindBy(id = "android:id/resolver_list")
private AndroidElement listParentElement;
public List<OpenWithOption> getOptions() {
/* ... */
List<MobileElement> elements = listParentElement
.findElementsById(SYS_ID_PREFIX + "text1"); // Here's where I can only get the text element itself but can't figure out how to get the elements above that.
return elements.stream()
.map(mobileElement -> new OpenWithOptionImpl(mobileElement.getText(), mobileElement))
.collect(toList());
}
这是菜鸟犯的错误。选择浏览器可以在屏幕底部选择 "Just Once" 或 "Always",但我没有注意到。我以为只要按你想要的浏览器就会启动它。
我有一个简单的用例。在 android 应用程序中,按一个按钮,浏览器应用程序将打开 URL.
出现 "Open With" 对话框弹出窗口,允许您 select 浏览器或 Chrome。
在 appium 检查器中看起来像这样:
<android.widget.ListView resource-id="android:id/resolver_list">
<android.widget.LinearLayout>
<android.widget.ImageView resource-id="android:id/icon">
<android.widget.LinearLayout>
<android.widget.TextView resource-id="android:id/text1">
<android.widget.LinearLayout>
<android.widget.ImageView resource-id="android:id/icon">
<android.widget.LinearLayout>
<android.widget.TextView resource-id="android:id/text1">
尝试将其自动化似乎应该是微不足道的,但却给我带来了麻烦。我可以将 "Browser" 和 "Chrome" 的文本作为离散的 AndroidElement
获取,但我似乎无法真正按下实际选项。
我可以实际与这些东西互动吗?还是不可能因为它是 android 系统本身的一部分?
为了帮助解决这个问题,这里是我的页面对象的设置。
@AndroidFindBy(id = "android:id/resolver_list")
private AndroidElement listParentElement;
public List<OpenWithOption> getOptions() {
/* ... */
List<MobileElement> elements = listParentElement
.findElementsById(SYS_ID_PREFIX + "text1"); // Here's where I can only get the text element itself but can't figure out how to get the elements above that.
return elements.stream()
.map(mobileElement -> new OpenWithOptionImpl(mobileElement.getText(), mobileElement))
.collect(toList());
}
这是菜鸟犯的错误。选择浏览器可以在屏幕底部选择 "Just Once" 或 "Always",但我没有注意到。我以为只要按你想要的浏览器就会启动它。