摘要
為什麼需要将這兩個放到一塊兒來講呢,因為他們兩實際上都是依靠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)/
以上就能夠擷取到元素中點的坐标了。