美文网首页
Appium中PageObject注解查找元素

Appium中PageObject注解查找元素

作者: yangzai | 来源:发表于2017-12-28 20:30 被阅读486次

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>所有元素依次关闭。

QQ图片20180129192831.jpg

相关文章

网友评论

      本文标题:Appium中PageObject注解查找元素

      本文链接:https://www.haomeiwen.com/subject/vmivgxtx.html