专栏文章 QAUi-公开类 OP 概要介绍 (二)

Then · 2018年11月14日 · 1966 次阅读

系列介绍

QAUi 系列阅读指南

OP 类概要

OP 类 (operation) 主要包含各种查找元素/操作设备等方法,是最常用的类,没有之一.
iOS 与 Android 的 OP 类大致相同,但部分也有区别,详细查看方法注释!

主要方法介绍

由于版本持续更新,以下方法可能会存在变化,请以当前框架方法注释为准

查找元素

/**
 * 查找元素
 * Android自动区分xpath/text/id/classname(以#开头则以accessibilityid查找);
 * iOS自动区分name/xpath/NsPredicate;
 * NsPredicate:BETWEEN,CONTAINS,BEGINSWITH,ENDSWITH,LIKE,MATCHES,AND,OR
 * 
 * @param text
 * @return
 */
BaseElement findElement(String text);
//PS
OP.findElement(首页).click();
  • 该方法用来查找元素,能够自动区分 text 所属类别

查找元素,返回 org.openqa.selenium.By

/**
 * 查找元素By
 * Android自动区分xpath/text/id/classname(以#开头则以accessibilityid查找);
 * iOS自动区分name/xpath/NsPredicate;
 * NsPredicate:BETWEEN,CONTAINS,BEGINSWITH,ENDSWITH,LIKE,MATCHES,AND,OR
 * 
 * @param text
 * @return
 */
By MobileBy(String text);
//PS
OP.findElement(OP.MobileBy(首页)).click();
  • 该方法用来生成 By 对象,用于其它无法自动区分类别的查找方法等

设置脚本分辨率

/**
 * 设置当前脚本运行的设备高与宽;
 * 在不同尺寸的设备运行时,会自动调整脚本中的坐标点;
 * iOS为point,Android为像素点;
 * 
 * @param width 设备宽
 * @param hight 设备高
 */
void setScreenSize(int width, int hight);
//PS
OP.setScreenSize(720, 1080);
/**
 * 取消下一次的自适应坐标
 * 
 * @return
 */
<T> T cancelAutoMultiple();
//PS
OP.cancelAutoMultiple().tap(100,100);//本次不自适应坐标
  • 用于自适应坐标,设置后,OP.tap 等按坐标点击的方法将按设备分辨率自适应调整.
  • 取消自适应坐标,只对之后的一次自适应调整生效.

等待时间

    /**
     * 休眠 单位秒(不精确,近似时间)
     * 
     * @param second
     */
    void sleep(int second);
/**
     * 系统休眠.最大时长为设置的capabilityMap中的newCommandTimeout时间减去30秒.
     * 
     * @param millisecond 毫秒
     */
    public void sysSleep(long millisecond){};

权限处理

/**
 * 处理单个或连续权限提示(当前按钮含有关键字时点击)
 * iOS当含有{ "以后", "稍后" }时进行点击,如果不含则默认点击弹出框右边按钮
 * @return 是否处理过权限提示
 */
boolean HandlePermission();

异常监听器

/**
     * 注册Ui异常监听器
     */
    void registerUiWatcher(String name, UiWatcher uiWatcher);
    //PS
            OP.registerUiWatcher("权限处理", new UiWatcher() {

            @Override
            public boolean checkForCondition() {
                // TODO Auto-generated method stub
                if (OP.findOneOfElements(1, OP.MobileBy(广告弹窗_关闭1), OP.MobileBy(广告弹窗_下拉关闭), OP.MobileBy(广告弹窗_关闭),
                        OP.MobileBy("点击任意位置唤醒"), OP.MobileBy("我知道了"), OP.MobileBy(提交错误信息)).click())
                    return true;
                if (OP.HandlePermission())
                    return true;
                return false;
            }
        });

    /**
     * 取消下一次查找的异常监听器及警告日志
     * 
     * @return
     */
    <T> T cancelUiWathcher();
    //PS
    OP.cancelUiWathcher().findElement(首页).click();//当第一次查找"首页"元素没有找到时,将运行registerUiWatcher()中的步骤进行处理异常,处理完后会再进行一次查找"首页元素",如果查找到则进行点击,如果未找到则显示警告

扩展操作 - 滑动

OP.EXTEND_SWIPE().xxx

向下/上/左/右翻页

/**
 * 向下/上/左/右翻页
 * 
 * @param times 执行次数
 */
void scrolldown(int times);
void scrollup(int times);
void scrollleft(int times);
void scrollright(int times);

滑动某个控件

/**
 * 滑动滑动条,适用于小距离移动
 * 
 * @param by
 * @param direction   常量UP/DOWN/LEFT/RIGHT
 * @param startadjust 开始端调整值,除去控件开始端的一段距离
 * @param addx        移动的距离增量
 * @param times       滑动次数
 * @return
 */
public boolean swipeSeekbar(By by, String direction, int startadjust, int addx, int times);
/**
 * 拖动滑动条
 * 
 * @param by
 * @param direction   常量UP/DOWN/LEFT/RIGHT
 * @param startadjust 开始端调整值,除去控件开始端的一段距离
 * @param endadjust   结束端调整值,除去控件结束端的一段距离
 * @param times       滑动几次
 * @return 是否找到控件
 */
public boolean dragSeekbar(By by, String direction, int startadjust, int endadjust, int times);
  • 如果方法为 UP,startadjust 则为向上滑动的那一端,endadjust 为向上滑动结束的那一端

拖动控件,查找元素

/**
 * 拖动控件查找控件内的目标元素
 * 如果元素位于非滑动范围(调整值内),则无效,将继续滑动查找符合滑动范围内的元素
 * @param by
 * @param targetby    目标
 * @param 滑动多少次
 * @param direction   常量UP/DOWN/LEFT/RIGHT
 * @param startadjust 开始端调整值,除去控件开始端的一段距离
 * @param endadjust   结束端调整值,除去控件结束端的一段距离
 */
public abstract <T> T dragSeekbarTo(By by, String direction, int startadjust, int endadjust, By targetby,
        int scrollnum);

拖动控件,查找滑动框中指定元素的 text 名称

/**
 * 拖动进度条,获取item的text,直到没有新的item,查找完后会反向拖动回到滑动框最初位置
 * 
 * @param by          滑动框
 * @param item        子项
 * @param startadjust 开始端调整值,除去控件开始端的一段距离
 * @param endadjust   结束端调整值,除去控件结束端的一段距离
 * @param direction   方向UP/DOWN/LEFT/RIGHT
 * @return
 */
public abstract List<String> dragSeekbarTogetItems(By by, String direction, By item, int startadjust,
        int endadjust);

控件对象 ElementAndroid/ElementIOS

  1. 使用 OP 查找到的元素,均以 ElementAndroid/ElementIOS 返回
  2. 该对象类似原生 Appium 的 AndroidElement/IOSElement
/**
 * 点击
 * 
 * @return
 */
public abstract boolean click();
/**
 * 获取元素位置信息
 * 
 * @return 0中心点坐标X,1中心点坐标Y,2矩形左上角坐标点X,3矩形左上角坐标点Y,4矩形宽度W,5矩形长度H (元素为空,则返回0)
 */
public int[] getPosition() {}
/**
 * 元素是否存在
 * 
 * @return boolean
 */
public abstract boolean exist();

XQOP-android

  • 根据当前 XML 自定义的一套控件体系
  • 主要用来点击动态页面等 (初始化 appium 时自动点击安装提示框框架用到了这个)
  • 获取当前 xml 并解析 (获取时无法与 appium 同时使用),得到界面元素坐标,adb 命令操作设备
OP.toXQOP().sleep(4000).setPage(OP.getPageSource());//等待4秒后使用appium获取x'm'l
OP.toXQOP().findElement(首页).click();
OP.toXQOP().getPage();//使用adb获取xml
OP.toXQOP().findElement(首页_按钮A).click();
OP.toXQOP().findElement(首页_按钮B).click();
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
暂无回复。
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册