java - 如何使 uiscrollable 找到 content-desc 而不是文本

标签 java android appium ui-automation

我正在尝试制作一个程序来自动回复我在 gmail android 应用程序中的电子邮件。我已经完成了最初的初始步骤,但这是下一步:

当程序检测到没有未读电子邮件时,滚动直到找到更多电子邮件。

对于这一步,我使用 uiscrollable 函数:

driver.findElementByAndroidUIAutomator("new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().textContains(\""+A+"\").instance(0))");
Thread.sleep(2500);`

但程序此时不会工作,而是滚动浏览所有未读电子邮件

有没有办法让这个 uiscrollable 函数找到 content-desc 而不是找到文本?

enter image description here

谢谢

最佳答案

主要逻辑是:

  1. 设置与 API 连接的所有内容(添加库等)
  2. 例如,发送请求(查询)并修改该链接 https://www.googleapis.com/gmail/v1/users/HerePutUserId/messages,并使用参数仅获取未读消息:说以下链接

https://developers.google.com/gmail/api/v1/reference/users/messages/list

enter image description here

  • 然后根据需要将其添加到回收商列表中
  • 您可以根据需要修改以下示例

    public class MyClass {
    
        // ...
    
    
        /**
         * List all Messages of the user's mailbox matching the query.
         *
         * @param service Authorized Gmail API instance.
         * @param userId User's email address. The special value "me"
         * can be used to indicate the authenticated user.
         * @param query String used to filter the Messages listed.
         * @throws IOException
         */
        public static List<Message> listMessagesMatchingQuery(Gmail service, String userId,
                                                              String query) throws IOException {
            ListMessagesResponse response = service.users().messages().list(userId).setQ(query).execute();
    
            List<Message> messages = new ArrayList<Message>();
            while (response.getMessages() != null) {
                messages.addAll(response.getMessages());
                if (response.getNextPageToken() != null) {
                    String pageToken = response.getNextPageToken();
                    response = service.users().messages().list(userId).setQ(query)
                            .setPageToken(pageToken).execute();
                } else {
                    break;
                }
            }
    
            for (Message message : messages) {
                System.out.println(message.toPrettyString());
            }
    
            return messages;
        }
    
        /**
         * List all Messages of the user's mailbox with labelIds applied.
         *
         * @param service Authorized Gmail API instance.
         * @param userId User's email address. The special value "me"
         * can be used to indicate the authenticated user.
         * @param labelIds Only return Messages with these labelIds applied.
         * @throws IOException
         */
        public static List<Message> listMessagesWithLabels(Gmail service, String userId,
                                                           List<String> labelIds) throws IOException {
            ListMessagesResponse response = service.users().messages().list(userId)
                    .setLabelIds(labelIds).execute();
    
            List<Message> messages = new ArrayList<Message>();
            while (response.getMessages() != null) {
                messages.addAll(response.getMessages());
                if (response.getNextPageToken() != null) {
                    String pageToken = response.getNextPageToken();
                    response = service.users().messages().list(userId).setLabelIds(labelIds)
                            .setPageToken(pageToken).execute();
                } else {
                    break;
                }
            }
    
            for (Message message : messages) {
                System.out.println(message.toPrettyString());
            }
    
            return messages;
        }
    
        // ...
    
    }
    

    如果您还有其他问题,请告诉我

    关于java - 如何使 uiscrollable 找到 content-desc 而不是文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57356446/

    相关文章:

    java - Jackson 反序列化 JSON,跳过没有必填字段的对象?

    java - 从程序中获取时间复杂度和空间复杂度

    java - 在面向对象编程中,对象是方法调用的一部分吗?

    android - 可以使用 TLS v1.2 打开网页的第 3 方 Android WebView

    java - 如何在 Appium 测试中在 2 个不同的应用程序之间切换?

    java - 在更大的图像上移动视口(viewport); JLabel+JScrollPane

    android - 读取发布者账号配置失败;请检查您配置的应用 ID。收到应用 ID : `ca-app-pub-3940256099942544~3347511713`

    android - 使用 Instant Run 时出现 VerifyError

    typescript - 将 Testcafe 与 Appium 结合使用

    java - 无法使用 appium 进行 native 应用程序自动化在真实设备上执行任何操作