這里分享外網(wǎng)一篇文章,對Appium UiAutomator2 Server的工作原理作了很詳細(xì)的介紹
原貼: How Appium UIAutomator2 Server Works
簡單概括一下:
- appium-uiautomator2-server(https://github.com/appium/appium-uiautomator2-server) 是針對Google推出的 UIAutomator V2闻镶。在這之前,Appium通過appium-android-bootstrap實(shí)現(xiàn)與UIAutomator v1的交互
- UiAutomator2修復(fù)了v1中遇到的大多數(shù)問題陕赃,最重要的是實(shí)現(xiàn)了與Android系統(tǒng)更新的分離
ps. 我們都知道appium只有在uiautomator2下可以實(shí)現(xiàn)對toast的識別鼠锈,那是因?yàn)镚oogle新增了AccessibilityService服務(wù)岭粤,重寫該服務(wù)可以實(shí)現(xiàn)對Notification和Toast內(nèi)容的捕捉
appium-uiautomator2-server
- 通信模塊使用了Netty Server麸拄,較之bootstrap使用的ServerSocket壹无,Netty是一個(gè)高性能、異步驅(qū)動(dòng)的NIO框架感帅,占用內(nèi)存少,性能更好地淀。
運(yùn)行原理
- 客戶端通過傳遞desired capabilities給appium node server來創(chuàng)建一個(gè)session失球, appium server根據(jù)automationName去啟動(dòng)對應(yīng)的driver,默認(rèn)是android-driver帮毁。
- 若automationName設(shè)為UIAutomator2实苞,appium會(huì)調(diào)用appium-uiautomator2-driver,同時(shí)將uiautomator2 server的兩個(gè)apk安裝到測試設(shè)備上
- io.appium.uiautomator2.server.apk烈疚,執(zhí)行handlers
- io.appium.uiautomator2.server.test.apk黔牵,只有一個(gè)test,用于啟動(dòng)server
- AppiumServlet 爷肝,管理請求的路由猾浦,將driver發(fā)過來的請求轉(zhuǎn)發(fā)給對應(yīng)Handler.
- Handler陆错,調(diào)用UiAutomator V2去執(zhí)行指定操作,操作的結(jié)果經(jīng)AppiumResponse統(tǒng)一封裝
- AppiumResponse金赦,操作結(jié)果返回給appium-uiautomator2-driver音瓷,再將結(jié)果返給客戶端