Java-Appium封装UiSelector

1.UiSelector 是uiautomator自动化测试中用来查找元素的对象,Appium支持使用UiSelector 选取对象,但是常见的写法是手写字符串比如"new UiSelector().text()",此类写法严重影响开发效率,所以针对此类问题,对UiSelector 进行了封装
2.源码

package com.automated.testing.common.utils.appium;

public interface ZLYUiCollection {
    String builder();
}
package com.automated.testing.common.utils.appium;

public interface ZLYUiSelector extends ZLYUiCollection {

    ZLYUiSelector text(String text);

    ZLYUiSelector textContains(String text);

    ZLYUiSelector textStartsWith(String textStartsWith);

    ZLYUiSelector textMatches(String textMatches);

    ZLYUiSelector description(String description);

    ZLYUiSelector className(String className);

    ZLYUiSelector resourceId(String resourceId);

    ZLYUiSelector classNameMatches(String regex);

    ZLYUiSelector descriptionMatches(String regex);

    ZLYUiSelector descriptionStartsWith(String desc);

    ZLYUiSelector descriptionContains(String desc);

    ZLYUiSelector resourceIdMatches(String regex);

    ZLYUiSelector index(int index);

    ZLYUiSelector instance(int instance);

    ZLYUiSelector enabled(boolean val);

    ZLYUiSelector focused(boolean val);

    ZLYUiSelector focusable(boolean val);

    ZLYUiSelector scrollable(boolean val);

    ZLYUiSelector selected(boolean val);

    ZLYUiSelector checked(boolean val);

    ZLYUiSelector clickable(boolean val);

    ZLYUiSelector checkable(boolean val);

    ZLYUiSelector longClickable(boolean val);

    ZLYUiSelector packageName(String name);

    ZLYUiSelector packageNameMatches(String regex);
}

package com.automated.testing.common.utils.appium;

public class ZLYUiSelectorImpl implements ZLYUiSelector {
    private final StringBuilder selectorBuilder;

    public ZLYUiSelectorImpl() {
        this.selectorBuilder = new StringBuilder("new UiSelector()");
    }

    public ZLYUiSelectorImpl(String presetConditions) {
        this.selectorBuilder = new StringBuilder(presetConditions);
    }

    @Override
    public ZLYUiSelector text(String text) {
        return builder("text", text);
    }


    private ZLYUiSelector builder(String text, Object desc) {
        this.selectorBuilder.append(".");
        this.selectorBuilder.append(text);
        this.selectorBuilder.append("(\"");
        this.selectorBuilder.append(desc);
        this.selectorBuilder.append("\")");
        return this;
    }

    public String builder() {
        return this.selectorBuilder.toString();
    }

    @Override
    public ZLYUiSelector textContains(String text) {
        return builder("textContains", text);
    }

    @Override
    public ZLYUiSelector textStartsWith(String textStartsWith) {
        return builder("textStartsWith", textStartsWith);
    }

    /**
     * 正则匹配textMatches
     *
     * @param textMatches 正则表达式
     * @return
     */
    @Override
    public ZLYUiSelector textMatches(String textMatches) {
        return builder("textMatches", textMatches);
    }


    @Override
    public ZLYUiSelector description(String description) {
        return builder("description", description);
    }

    @Override
    public ZLYUiSelector className(String className) {
        return builder("className", className);
    }

    @Override
    public ZLYUiSelector resourceId(String resourceId) {
        return builder("resourceId", resourceId);
    }

    @Override
    public ZLYUiSelector classNameMatches(String regex) {
        return builder("classNameMatches", regex);
    }


    @Override
    public ZLYUiSelector descriptionMatches(String regex) {
        return builder("descriptionMatches", regex);
    }

    @Override
    public ZLYUiSelector descriptionStartsWith(String desc) {
        return builder("descriptionStartsWith", desc);
    }

    @Override
    public ZLYUiSelector descriptionContains(String desc) {
        return builder("descriptionContains", desc);
    }


    @Override
    public ZLYUiSelector resourceIdMatches(String regex) {
        return builder("resourceIdMatches", regex);
    }

    @Override
    public ZLYUiSelector index(int index) {
        return builder("index", index);
    }

    @Override
    public ZLYUiSelector instance(int instance) {
        return builder("instance", instance);
    }

    @Override
    public ZLYUiSelector enabled(boolean val) {
        return builder("enabled", val);
    }

    @Override
    public ZLYUiSelector focused(boolean val) {
        return builder("focused", val);
    }

    @Override
    public ZLYUiSelector focusable(boolean val) {
        return builder("focusable", val);
    }

    @Override
    public ZLYUiSelector scrollable(boolean val) {
        return builder("scrollable", val);
    }

    @Override
    public ZLYUiSelector selected(boolean val) {
        return builder("selected", val);
    }

    @Override
    public ZLYUiSelector checked(boolean val) {
        return builder("checked", val);
    }

    @Override
    public ZLYUiSelector clickable(boolean val) {
        return builder("clickable", val);
    }

    @Override
    public ZLYUiSelector checkable(boolean val) {
        return builder("checkable", val);
    }

    @Override
    public ZLYUiSelector longClickable(boolean val) {
        return builder("longClickable", val);
    }

    @Override
    public ZLYUiSelector packageName(String name) {
        return builder("packageName", name);
    }

    @Override
    public ZLYUiSelector packageNameMatches(String regex) {
        return builder("packageNameMatches", regex);
    }

    @Override
    public String toString() {
        return this.builder();
    }
}

3.使用

  /**
     * 检查修改昵称
     */
    @Test(priority = 4, dependsOnMethods = "checkNoPhone")
    protected void checkNoPhoneUpdateName() {
        AppiumElementUtils.findWEMListText(this.getCAVView(), "昵称").click();
        this.driver.findElementByAndroidUIAutomator(new ZLYUiSelectorImpl().text("游客状态不能修改昵称").checked(false).builder());
        this.sleep();
        this.checkPersonalCenter();
    }

使用起来非常方便,不在需要手写字符串了

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Appium概述    appium 是一个自动化测试开源工具,支持 iOS, Android, Windows, Firefox OS平台上的原生应用, 纯web应用和混合应用。“移动原生应用”是指那些用iOS或者 Android SDK 写的应用(Application简称app)。“移动web应用”是指使用移动浏览器访问的应用(appium支持iOS上的Safari和Android上的 Chrome)。“混合应用”是指原生代码封装网页视图——原生代码和 web 内容交互。比如,像 Phonegap,可以帮助研发者使用网页技术开发应用,然    后用原生代码封装,这些就是混合应用。     更重要的是,appium是一个跨平台的工具:它允许测试人员在不同的平台(iOS,Android)使用同一套API来写自动化测试脚本,这样大大增加了iOS 和Android测试套件间代码的复用性。学习Tips    本系列课程所涵盖的内容,包括所有Appium APIs相关的讲解都是基于java语言,当然不需要测试学习者精通java语言,只需要稍微有些java基础就能轻松学习,比如,基本数据类型,循环控制结构,分支控制结构,java面向对象的概念等;    本系列课程的脚本案例编写是基于TestNG测试框架,测试项目使用Maven构建,课程内容中会对这些相关的基础知识点做简单介绍,没有基础的同学无需担心,为了尽可能得降低课程的学习难度,其他相关的工具用法只做简单介绍(够用为主)。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值