天天看点

appium源码分析(十一)-getSize,getLocation

摘要

为什么需要将这两个放到一块儿来讲呢,因为他们两实际上都是依靠UiAutomator的Bounds属性值的,并且如果说我需要获取到元素的中点坐标的话,我就需要依赖这两个方法才能够解决

正文

好的 我们先来看看geiSize吧,从字面的意思就是获取到它的大小,即元素的宽高了。

public AndroidCommandResult execute(final AndroidCommand command)
      throws JSONException {

    if (command.isElementCommand()) {
      // Only makes sense on an element
      final JSONObject res = new JSONObject();
      try {
        final AndroidElement el = command.getElement();
        final Rect rect = el.getBounds();
        res.put("width", rect.width());
        res.put("height", rect.height());
      } catch (final UiObjectNotFoundException e) {
        return new AndroidCommandResult(WDStatus.NO_SUCH_ELEMENT,
            e.getMessage());
      } catch (final Exception e) { // handle NullPointerException
        return getErrorResult("Unknown error");
      }
      return getSuccessResult(res);
    } else {
      return getErrorResult("Unable to get text without an element.");
    }
  }
           

现在看这些代码实际上都很简单了,还是一样 获取到AndroidElement的元素

再来获取到bounds。这个是Rect的类型。再来分别将其的长宽分别放到一个JsonObject对象里面。将该对象返回

下来看看getLocation

public AndroidCommandResult execute(final AndroidCommand command)
      throws JSONException {
    if (!command.isElementCommand()) {
      return getErrorResult("Unable to get location without an element.");
    }

    try {
      final JSONObject res = new JSONObject();
      final AndroidElement el = command.getElement();
      final Rect bounds = el.getBounds();
      res.put("x", bounds.left);
      res.put("y", bounds.top);
      return getSuccessResult(res);
    } catch (final Exception e) {
      return new AndroidCommandResult(WDStatus.NO_SUCH_ELEMENT, e.getMessage());
    }
  }
           

这里是将Bounds的坐顶点的X坐标以及Y坐标分别赋值到JsonObject的x,y上

所以如果说你想要获取到某个元素在屏幕的中点坐标的话,你就需要这两个方法的帮助了。

element = self.find_element(loc)
 startX = int(element.location['x'])
 startY = int(element.location['y'])

 endX = int(element.size['width'])+startX
 endY = int(element.size['height'])+startY

 centerX = (startX+endX)/
 centerY = (startY+endY)/
           

以上就能够获取到元素中点的坐标了。

继续阅读