项目需要一个微信抢红包的功能。问题在于,如果一个人连续发了两条或者多条红包,如果希望按照从下向上的顺序依次拆开红包,应该怎么办? 对于每个红包,id 和特征字符都是相同的。测试时发现,如果使用find_element_by_name(), Appium 会自动选择当前屏幕最上面的那个红包(也就是最老的红包)。求助各位怎样实现从屏幕最下方开始按照从下到上的顺序依次拆红包。
find_element_by_name()
使用find_elements_by_name 返回 name 为该值的所有 element 点最后一个
find_elements_by_name
似乎搞错了= =为了达到模糊匹配,现在使用的是find_element_by_android_uiautomator(),这个功能好像稚只能找第一个
find_element_by_android_uiautomator()
python 我不知道 java 我亲测使用有这个 api ,并且返回的是 list Python java 用的都是 android 的 UIautomator ,java 能支持的话 python 应该也能支持的 你试试有没有 find_elements_by_android_uiautomator这个方法
find_elements_by_android_uiautomator
经过测试,这个函数只能找按界面 layout 顺序查找,也就是最先找到顶端。 anyway 谢谢你的回复~
我写了个 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 循环逐个点击