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",但我没有注意到。我以为只要按你想要的浏览器就会启动它。