index.uts 6.6 KB

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