天天看點

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)/
           

以上就能夠擷取到元素中點的坐标了。

繼續閱讀