Appium [UiAutomator2] 修改 uiautomator2 server 源码修复无法获取 password 属性值的问题

bauul · 2017年08月17日 · 最后由 Crazyerick 回复于 2017年08月17日 · 1856 次阅读

缘由

uiautomator2 中 uiobject2 及 uiobject 对象均未提供获取 password 属性值的方法:isPassword

修复方法

修改 UiObject2Element

public boolean getBoolAttribute(final String attr)
        throws UiObjectNotFoundException, NoAttributeFoundException, UiAutomator2Exception {
    boolean res;
    if ("enabled".equals(attr)) {
        res = element.isEnabled();
    } else if ("checkable".equals(attr)) {
        res = element.isCheckable();
    } else if ("checked".equals(attr)) {
        res = element.isChecked();
    } else if ("clickable".equals(attr)) {
        res = element.isClickable();
    } else if ("focusable".equals(attr)) {
        res = element.isFocusable();
    } else if ("focused".equals(attr)) {
        res = element.isFocused();
    } else if ("longClickable".equals(attr)) {
        res = element.isLongClickable();
    } else if ("scrollable".equals(attr)) {
        res = element.isScrollable();
    } else if ("selected".equals(attr)) {
        res = element.isSelected();
    } else if ("displayed".equals(attr)) {
        res = invoke(method(UiObject2.class, "getAccessibilityNodeInfo"), element) != null ? true : false;
    } else if ("password".equals(attr)) { //新增password属性值获取代码
        res = AccessibilityNodeInfoGetter.fromUiObject(element).isPassword(); //通过源码提供的反射调用机制获取节点,再获取其属性
    }  else {
        throw new NoAttributeFoundException(attr);
    }
    return res;
}

重新打包即可

附言 2  ·  2017年08月27日

发了 pull request,现在已经被合到源码中去了,感谢@chenhengjie123

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 7 条回复 时间 点赞

Appium 里的 U2 修改吧?

恒温 回复

是啊,源码位置:
appium\node_modules\appium-uiautomator2-driver\node_modules\appium-uiautomator2-server\app\src

这个赞,可以提个 PR 了。

陈恒捷 回复

有人在 16 年就提了 BUG,居然还没解,也是醉了
https://github.com/appium/appium/issues/6281

bauul 回复

直接发个 pr 解决掉呗。估计 appium 的人忙不过来。

陈恒捷 回复

我也想呢,公司网络限制,GIT 进不来出不去,我更新了解决方案到那个 issue 下面并 @ 了作者和管理人员😀

一直都是反射拿的。

—— 来自 TesterHome 官方 安卓客户端

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册