Appium Appium Python (Android)- 怎样选择最下面 (最新) 一条包含特征的消息?

YiranCdr · 2017年11月01日 · 最后由 Jerry li 回复于 2017年11月02日 · 1428 次阅读

项目需要一个微信抢红包的功能。问题在于,如果一个人连续发了两条或者多条红包,如果希望按照从下向上的顺序依次拆开红包,应该怎么办?
对于每个红包,id 和特征字符都是相同的。测试时发现,如果使用find_element_by_name(), Appium 会自动选择当前屏幕最上面的那个红包(也就是最老的红包)。求助各位怎样实现从屏幕最下方开始按照从下到上的顺序依次拆红包。

共收到 6 条回复 时间 点赞

使用find_elements_by_name 返回 name 为该值的所有 element 点最后一个

null 回复

似乎搞错了= =为了达到模糊匹配,现在使用的是find_element_by_android_uiautomator(),这个功能好像稚只能找第一个

YiranCdr 回复

python 我不知道
java 我亲测使用有这个 api ,并且返回的是 list
Python java 用的都是 android 的 UIautomator ,java 能支持的话 python 应该也能支持的
你试试有没有 find_elements_by_android_uiautomator这个方法

null 回复

经过测试,这个函数只能找按界面 layout 顺序查找,也就是最先找到顶端。
anyway 谢谢你的回复~

YiranCdr 回复

我写了个 demo List 的最后一个就是最后一个红包
做肯定应该是能做的 你再研究一下吧

try {
    Thread.sleep(15000);//我用来点开微信的
    List<WebElement> elementList = driver.findElementsByAndroidUIAutomator("new UiSelector().resourceId(\"com.tencent.mm:id/a_a\")");
    if (elementList.isEmpty()) {
        return;
    }
    for (WebElement element : elementList) {
        System.out.println("坐标为:" + element.getLocation().x + "," + element.getLocation().y);
    }

} catch (NoSuchElementException e) {
    e.printStackTrace();
} catch (InterruptedException e) {
    e.printStackTrace();
}

输出

坐标为:327,1224
坐标为:327,1518

webdriver 一般都提供两类查找元素的方法:
查找单个元素: find_element_by, 返回符合条件的第一个元素
查找多个元素: find_elements_by, 返回符合条件的所有元素

建议可以尝试用下面的方式,用 for 循环逐个点击

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册