index.uts 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230
  1. import {
  2. callUniMethod,
  3. CallUniMethodParams,
  4. captureScreenshot,
  5. CaptureScreenshotParams,
  6. getPageStack,
  7. getCurrentPage,
  8. GetCurrentPageParams
  9. // @ts-ignore
  10. } from './apis/App/index.uts'
  11. import {
  12. GetDataParams as PageGetDataParams,
  13. getData as pageGetData,
  14. SetDataParams as PageSetDataParams,
  15. setData as pageSetData,
  16. CallMethodParams,
  17. callMethod as pageCallMethod,
  18. GetElementParams as PageGetElementParams,
  19. getElement as pageGetElement,
  20. getElements as pageGetElements,
  21. GetWindowPropertiesParams,
  22. getWindowProperties,
  23. // @ts-ignore
  24. } from './apis/Page.uts'
  25. // @ts-ignore
  26. import { socketEmitter, SocketEmitterParams } from './apis/App/Socket.uts'
  27. import {
  28. GetElementParams as ElementGetElementParams,
  29. getElement as elementGetElement,
  30. getElements as elementGetElements,
  31. GetDOMPropertiesParams,
  32. getDOMProperties,
  33. GetPropertiesParams,
  34. getProperties,
  35. CallFunctionParams as ElementCallFunctionParams,
  36. callFunction as elementCallFunction,
  37. TapParams,
  38. tap,
  39. CallMethodParams as ElementCallMethodParams,
  40. callMethod as elementCallMethod,
  41. GetDataParams as ElementGetDataParams,
  42. getData as elementGetData,
  43. SetDataParams as ElementSetDataParams,
  44. setData as elementSetData,
  45. GetOffsetParams,
  46. getOffset,
  47. LongpressParams,
  48. longpress,
  49. HandleTouchEventParams,
  50. handleTouchEvent,
  51. GetAttributesParams,
  52. getAttributes,
  53. GetStylesParams,
  54. getStyles,
  55. TriggerEventParams,
  56. triggerEvent
  57. // @ts-ignore
  58. } from './apis/Element.uts'
  59. // @ts-ignore
  60. let socketTask: SocketTask | null = null
  61. const wsEndpoint = process.env.UNI_AUTOMATOR_WS_ENDPOINT
  62. export function send(data: any) {
  63. // @ts-ignore
  64. socketTask?.send({ data: JSON.stringify(data) } as SendSocketMessageOptions)
  65. }
  66. export type Callback = (result: any | null, error: any | null) => void
  67. type Msg = {
  68. id: string,
  69. method: string,
  70. params: any
  71. }
  72. export function onMessage(msg: string) {
  73. // @ts-ignore
  74. const json = JSON.parse<Msg>(msg)!
  75. const method = json.method
  76. if ((method == 'ping')) {
  77. send('pong')
  78. return
  79. }
  80. const params = JSON.stringify(json.params)
  81. const res = { id: json.id }
  82. try {
  83. const callback = (result?: any | null, error?: any | null) => {
  84. res['result'] = result
  85. res['error'] = error
  86. send(res)
  87. }
  88. if (method.startsWith('App.')) {
  89. switch (method) {
  90. case 'App.callUniMethod':
  91. // @ts-ignore
  92. callUniMethod(JSON.parse<CallUniMethodParams>(params)!, callback)
  93. break
  94. case 'App.captureScreenshot':
  95. // @ts-ignore
  96. captureScreenshot(JSON.parse<CaptureScreenshotParams>(params)!, callback)
  97. break
  98. case 'App.getPageStack':
  99. getPageStack(callback)
  100. break
  101. case 'App.getCurrentPage':
  102. getCurrentPage({ callback } as GetCurrentPageParams)
  103. break
  104. case 'App.socketEmitter':
  105. // @ts-ignore
  106. socketEmitter(JSON.parse<SocketEmitterParams>(params)!, callback)
  107. break
  108. }
  109. } else if (method.startsWith('Page.')) {
  110. switch (method) {
  111. case 'Page.getData':
  112. // @ts-ignore
  113. pageGetData(JSON.parse<PageGetDataParams>(params)!, callback)
  114. break
  115. case 'Page.setData':
  116. // @ts-ignore
  117. pageSetData(JSON.parse<PageSetDataParams>(params)!, callback)
  118. break
  119. case 'Page.callMethod':
  120. // @ts-ignore
  121. pageCallMethod(JSON.parse<CallMethodParams>(params)!, callback)
  122. break
  123. case 'Page.getElement':
  124. // @ts-ignore
  125. pageGetElement(JSON.parse<PageGetElementParams>(params)!, callback)
  126. break
  127. case 'Page.getElements':
  128. // @ts-ignore
  129. pageGetElements(JSON.parse<PageGetElementParams>(params)!, callback)
  130. break
  131. case 'Page.getWindowProperties':
  132. // @ts-ignore
  133. getWindowProperties(JSON.parse<GetWindowPropertiesParams>(params)!, callback)
  134. break
  135. }
  136. } else if (method.startsWith('Element.')) {
  137. switch (method) {
  138. case 'Element.getElement':
  139. // @ts-ignore
  140. elementGetElement(JSON.parse<ElementGetElementParams>(params)!, callback)
  141. break
  142. case 'Element.getElements':
  143. // @ts-ignore
  144. elementGetElements(JSON.parse<ElementGetElementParams>(params)!, callback)
  145. break
  146. case 'Element.getDOMProperties':
  147. // @ts-ignore
  148. getDOMProperties(JSON.parse<GetDOMPropertiesParams>(params)!, callback)
  149. break
  150. case 'Element.getProperties':
  151. // @ts-ignore
  152. getProperties(JSON.parse<GetPropertiesParams>(params)!, callback)
  153. break
  154. case 'Element.callFunction':
  155. // @ts-ignore
  156. elementCallFunction(JSON.parse<ElementCallFunctionParams>(params)!, callback)
  157. break
  158. case 'Element.tap':
  159. // @ts-ignore
  160. tap(JSON.parse<TapParams>(params)!, callback)
  161. break
  162. case 'Element.callMethod':
  163. // @ts-ignore
  164. elementCallMethod(JSON.parse<ElementCallMethodParams>(params)!, callback)
  165. break
  166. case 'Element.getData':
  167. // @ts-ignore
  168. elementGetData(JSON.parse<ElementGetDataParams>(params)!, callback)
  169. break
  170. case 'Element.setData':
  171. // @ts-ignore
  172. elementSetData(JSON.parse<ElementSetDataParams>(params)!, callback)
  173. break
  174. case 'Element.getOffset':
  175. // @ts-ignore
  176. getOffset(JSON.parse<GetOffsetParams>(params)!, callback)
  177. break
  178. case 'Element.longpress':
  179. // @ts-ignore
  180. longpress(JSON.parse<LongpressParams>(params)!, callback)
  181. break
  182. case 'Element.touchstart':
  183. case 'Element.touchmove':
  184. case 'Element.touchend':
  185. // @ts-ignore
  186. handleTouchEvent(JSON.parse<HandleTouchEventParams>(params)!, method.split('.')[1], callback)
  187. break
  188. case 'Element.getAttributes':
  189. // @ts-ignore
  190. getAttributes(JSON.parse<GetAttributesParams>(params)!, callback)
  191. break
  192. case 'Element.getStyles':
  193. // @ts-ignore
  194. getStyles(JSON.parse<GetStylesParams>(params)!, callback)
  195. break
  196. case 'Element.triggerEvent':
  197. // @ts-ignore
  198. triggerEvent(JSON.parse<TriggerEventParams>(params)!, callback)
  199. break
  200. }
  201. }
  202. } catch (error) {
  203. res['error'] = { message: error.stackTraceToString() }
  204. send(res)
  205. }
  206. }
  207. export function initAutomator() {
  208. // @ts-ignore
  209. socketTask = uni.connectSocket({
  210. url: wsEndpoint
  211. });
  212. socketTask!.onMessage((res) => {
  213. onMessage(res.data as string)
  214. })
  215. socketTask!.onOpen((_) => {
  216. console.warn("automator.onOpen")
  217. })
  218. socketTask!.onError((err) => {
  219. console.warn(`automator.onError: ${JSON.stringify(err)}`);
  220. })
  221. socketTask!.onClose((_) => {
  222. console.warn("automator.onClose");
  223. })
  224. }