Appium原始碼分析(四) swipe

2021-07-04 17:15:28 字數 2016 閱讀 8034

@override

public androidcommandresult execute(final androidcommand command)

throws jsonexception else

} catch (final uiobjectnotfoundexception e) catch (final invalidcoordinate***ception e) catch (final exception e)

logger.debug("swiping from " + absstartpos.tostring() + " to "

+ absendpos.tostring() + " with steps: " + steps.tostring());

final

boolean rv = device.swipe(absstartpos.x.intvalue(),

absstartpos.y.intvalue(), absendpos.x.intvalue(),

absendpos.y.intvalue(), steps);

if (!rv)

return getsuccessresult(rv);

}

swipe的**其實很少,但是引數實際上不太少,param引數中包括了swipe的起始座標以及結束座標,還有乙個步驟數,就是你從起始座標到結束座標需要滑動多少次。我們到uiautomator裡面去看看 這個如何根據傳入的step來進行滑動呢

public

boolean

swipe(int downx, int downy, int upx, int upy, int steps, boolean drag)

if (drag)

systemclock.sleep(regular_click_length);

ret &= touchup(upx, upy);

return(ret);

}

挺清楚的了,原來swipe到最後是呼叫了touchdwon以及touchup方法,通過結束的x/y座標減去開始的x/y座標,再除以乙個步驟數,就得到了每次swipe需要多長的距離了

再繼續前面swipe的分析獲取到傳入的引數以後,首先判斷這個命令是針對於元素的滑動還是針對於裝置的滑動

public

static point getabsoluteposition(final point point, final rect displayrect,

final point offsets, final

boolean shouldcheckbounds)

throws uiobjectnotfoundexception, invalidcoordinate***ception

return absoluteposition;

}

這裡是分別對x,y座標進行轉換,分別傳入元素的寬高以及左頂點座標 看看實際轉換的**

private

static

double

translatecoordinate(double pointcoord, double length, double offset) else

if (math.abs(pointcoord) > 0 && math.abs(pointcoord) < 1) else

return translatedcoord + offset;

}

下來我們再來看看針對於裝置的swipe又是怎麼樣的呢

public

static point getdeviceabspos(final point point)

throws uiobjectnotfoundexception, invalidcoordinate***ception

改變的地方就是之前傳參傳的是元素的矩陣的座標,而這次傳入的是裝置的寬高。其他沒有什麼區別了。

uC OS II原始碼分析(四)

核心結構 1,臨界區,os enter critical 和os exit critical 為了處理臨界區 必須關中斷,等處理完畢後,再開中斷。關中斷可以避免其他任務或中斷進入臨界區 uc os ii 定義了這兩個巨集來實現,但注意一條 呼叫 uc os ii 功能函式時,中斷應該總是開著的。1 ...

gSOAP 原始碼分析 四

gsoap 原始碼分析 四 2012 6 2 邵盛松 前言本文主要說明gsoap中對client的認證分析 gsoap中包含了http基本認證,ntlm認證等,還可以自定義soap heard實現認證等 一 http基本認證 client在向server傳送請求時提供以使用者名稱和口令形式的憑證 g...

uC OS II原始碼分析(四)

核心結構 1,臨界區,os enter critical 和os exit critical 為了處理臨界區 必須關中斷,等處理完畢後,再開中斷。關中斷可以避免其他任務或中斷進入臨界區 uc os ii 定義了這兩個巨集來實現,但注意一條 呼叫 uc os ii 功能函式時,中斷應該總是開著的。1 ...