1.@AndroidFindBy与@HowToUseLocators。
a.基本查找逻辑:如果只有一个@AndroidFindBy注解,则只查找这一个。如果有多个注解,但是没有@HowToUseLocators,则默认是链式查找的,也就是:先查找第一个@AndroidFindBy中的id,再用查找到的结果元素result再去查找下一个@AndroidFindBy中的id,直到所有的@AndroidFindBy中的id都查找完毕。但是要注意的是在查找的过程中只要有一个@AndroidFindBy中的id没有结果,则直接返回null。具体逻辑代码在AppiumFunction类中:
@Override default <V> AppiumFunction<F, V> andThen(java.util.function.Function<? super T, ? extends V> after) {
Objects.requireNonNull(after);
return (F f) -> {
T result = apply(f);
return Optional.ofNullable(result != null ? after.apply(result) : null).orElse(null);
};
}
b.具体使用方式:先查最外层的viewPager(com.kikijie:id/swipe_toLoad_layout),在查viewPager的子元素scrollview(com.kikijie:id/id_stickynavlayout_innerscrollview),最后查找scrollview的子元素coverview(com.kikijie:id/hot_new_grid_cover_view);
@AndroidFindBy(id = "com.kikijie:id/swipe_toLoad_layout")
@AndroidFindBy(id = "com.kikijie:id/id_stickynavlayout_innerscrollview")
@AndroidFindBy(id = "com.kikijie:id/hot_new_grid_cover_view")
或者配合@HowToUseLocators注解使用。默认HowToUseLocators是CHAIN
@HowToUseLocators(androidAutomation = CHAIN)
@AndroidFindBy(id = "com.kikijie:id/swipe_toLoad_layout")
@AndroidFindBy(id = "com.kikijie:id/id_stickynavlayout_innerscrollview")
@AndroidFindBy(id = "com.kikijie:id/hot_new_grid_cover_view")
public WebElement firstWatch;
c.使用场景:当页面中有相同元素时,可以通过父元素来限定要找的元素。
d.如果@HowToUseLocators设置为ALL_POSSIBLE,则会查找AndroidFindBy数组中的所有元素,取第一个。
@HowToUseLocators(androidAutomation = ALL_POSSIBLE)
@AndroidFindBy(id = "com.kikijie:id/live_bottom_shot")
@AndroidFindBy(id = "com.kikijie:id/btn_snapshot")
public WebElement snapshotBtn;
e.ALL_POSSIBLE的使用场景:当页面可能会出现多种可能时使用
f.ALL_POSSIBLE如果想查找所有元素则可以设置返回值为List类型
@HowToUseLocators(androidAutomation = ALL_POSSIBLE)
@AndroidFindBy(id = "com.kikijie:id/live_bottom_shot")
@AndroidFindBy(id = "com.kikijie:id/btn_snapshot")
public List<WebElement> snapshotBtn;
g.使用场景:例如我们有广告弹窗,升级弹窗等等弹窗时,会影响我们的测试流程,这个时候可以使用ALL_POSSIBLE返回List<WebElement>所有元素依次关闭。
![](https://img.haomeiwen.com/i1909684/6312ea4cf71ecc4f.jpg)
网友评论