script_wework.py 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657
  1. import random
  2. import threading
  3. import time
  4. import uiautomator2 as u2
  5. from func.check_device import retry, reboot_device
  6. from task.task_dict import script_status
  7. from tools import loggerKit
  8. # 4.1.3(21966)
  9. # 编辑群名称
  10. def wework_edit(device_serial, keyword, content):
  11. # 连接设备
  12. device = u2.connect(device_serial)
  13. device.healthcheck()
  14. device.screen_on()
  15. device.unlock()
  16. device.debug = False
  17. # 重启企业微信
  18. device.app_stop("com.tencent.wework")
  19. device.app_start("com.tencent.wework")
  20. # 打开搜索框
  21. device.xpath('//*[@resource-id="com.tencent.wework:id/l76"]').click()
  22. # 输入搜索文案
  23. device.xpath('//*[@resource-id="com.tencent.wework:id/jfi"]').set_text(keyword)
  24. # 点击搜索所得的第一个
  25. device.xpath('//*[@resource-id="com.tencent.wework:id/ge2"]').click()
  26. # 点击编辑群按钮
  27. device.xpath('//*[@resource-id="com.tencent.wework:id/l6w"]').click()
  28. # 点击群名称
  29. device.xpath('//*[@resource-id="com.tencent.wework:id/bze"]').click()
  30. # 文案设置
  31. device.xpath('//*[@resource-id="com.tencent.wework:id/egb"]').set_text(content)
  32. # 编辑提交
  33. device.xpath('//*[@resource-id="com.tencent.wework:id/l73"]').click()
  34. # 创建字典来保存锁对象
  35. lock_dict = {}
  36. sleep_time = 0.5
  37. def random_add_subtract(number):
  38. operation = random.choice(['add'])
  39. if operation == 'add':
  40. number += random.choice([0.1, 0.2])
  41. elif operation == 'subtract':
  42. number += random.choice([0.1, 0.2])
  43. return number
  44. # 消息回复
  45. def wework_reply(device_serial, keyword, content):
  46. status = script_status(1, 0, '', '')
  47. # 连接设备
  48. device = u2.connect(device_serial)
  49. device.healthcheck()
  50. device.screen_on()
  51. device.unlock()
  52. device.debug = False
  53. time.sleep(random_add_subtract(sleep_time))
  54. # 打开搜索框
  55. loggerKit.info('thread[{0}=>{1}], 设备号: {2}, 打开搜索框', threading.current_thread().name, threading.get_ident(),
  56. device_serial)
  57. start_time1 = time.time()
  58. if device.xpath('//*[@resource-id="com.tencent.wework:id/l76"]').exists:
  59. device.xpath('//*[@resource-id="com.tencent.wework:id/l76"]').click()
  60. else:
  61. return retry(lambda: device.xpath('//*[@resource-id="com.tencent.wework:id/l76"]').click(), device_serial,
  62. "搜索按钮元素未获取到")
  63. end_time1 = time.time()
  64. loggerKit.info("thread[{0}=>{1}], 设备号:{2}, 打开搜索框==>>执行时长:{3}", threading.current_thread().name,
  65. threading.get_ident(), device_serial, end_time1 - start_time1)
  66. time.sleep(random_add_subtract(sleep_time))
  67. # 输入搜索文案
  68. loggerKit.info('thread[{0}=>{1}], 输入搜索文案:{2}, 设备号:{3}', threading.current_thread().name,
  69. threading.get_ident(),
  70. keyword, device_serial)
  71. start_time2 = time.time()
  72. if device.xpath('//*[@resource-id="com.tencent.wework:id/jfi"]').exists:
  73. device.xpath('//*[@resource-id="com.tencent.wework:id/jfi"]').set_text(keyword)
  74. else:
  75. return retry(lambda: device.xpath('//*[@resource-id="com.tencent.wework:id/jfi"]').set_text(keyword),
  76. device_serial,
  77. "搜索框元素未获取到")
  78. end_time2 = time.time()
  79. loggerKit.info("thread[{0}=>{1}], 设备号:{2}, 输入搜索文案==>>执行时长:{3}", threading.current_thread().name,
  80. threading.get_ident(), device_serial, end_time2 - start_time2)
  81. time.sleep(random_add_subtract(sleep_time))
  82. loggerKit.info('thread[{0}=>{1}], 点击搜索所得的第一个', threading.current_thread().name, threading.get_ident())
  83. start_time3 = time.time()
  84. time.sleep(1)
  85. if device.xpath('//*[@resource-id="com.tencent.wework:id/kzx"]').exists:
  86. device.xpath('//*[@resource-id="com.tencent.wework:id/ge2"]').click()
  87. else:
  88. return retry(lambda: device.xpath('//*[@resource-id="com.tencent.wework:id/ge2"]').click(), device_serial,
  89. "搜索不到群聊")
  90. end_time3 = time.time()
  91. loggerKit.info("thread[{0}=>{1}], 设备号:{2}, 点击搜索所得的第一个==>>执行时长:{3}",
  92. threading.current_thread().name,
  93. threading.get_ident(), device_serial, end_time3 - start_time3)
  94. time.sleep(random_add_subtract(sleep_time))
  95. # 编辑框
  96. loggerKit.info('thread[{0}=>{1}], 设备号:{2}, 输入编辑框文本', threading.current_thread().name,
  97. threading.get_ident(), device_serial)
  98. start_time4 = time.time()
  99. if device.xpath('//*[@resource-id="com.tencent.wework:id/gsj"]').exists:
  100. device.xpath('//*[@resource-id="com.tencent.wework:id/gsj"]').click()
  101. else:
  102. return retry(lambda: device.xpath('//*[@resource-id="com.tencent.wework:id/gsj"]').click(), device_serial,
  103. "编辑框元素未获取到")
  104. end_time4 = time.time()
  105. loggerKit.info("thread[{0}=>{1}], 设备号:{2}, 编辑框==>>执行时长:{3}", threading.current_thread().name,
  106. threading.get_ident(), device_serial, end_time4 - start_time4)
  107. time.sleep(random_add_subtract(sleep_time))
  108. # 内容赋值
  109. text = content.replace("<br/>", "\n")
  110. # 直接输出替换后的字符串
  111. loggerKit.info('替换后的字符串:{0}', text)
  112. # 内容赋值
  113. device.xpath('//*[@resource-id="com.tencent.wework:id/gsj"]').set_text(text)
  114. # 发送
  115. loggerKit.info('thread[{0}=>{1}], 设备号:{2}, 发送文案', threading.current_thread().name, threading.get_ident(),
  116. device_serial)
  117. start_time5 = time.time()
  118. if device.xpath('//*[@resource-id="com.tencent.wework:id/gsf"]').exists:
  119. device.xpath('//*[@resource-id="com.tencent.wework:id/gsf"]').click()
  120. else:
  121. return retry(lambda: device.xpath('//*[@resource-id="com.tencent.wework:id/gsf"]').click(), device_serial,
  122. "发送按钮元素未获取到")
  123. end_time5 = time.time()
  124. loggerKit.info("thread[{0}=>{1}], 设备号:{2}, 发送==>>执行时长:{3}", threading.current_thread().name,
  125. threading.get_ident(), device_serial, end_time5 - start_time5)
  126. time.sleep(random_add_subtract(sleep_time))
  127. # 退出会话
  128. loggerKit.info('thread[{0}=>{1}], 设备号:{2}, 退出会话', threading.current_thread().name, threading.get_ident(),
  129. device_serial)
  130. time.sleep(random_add_subtract(sleep_time))
  131. start_time6 = time.time()
  132. device.xpath('//*[@resource-id="com.tencent.wework:id/l67"]').click()
  133. end_time6 = time.time()
  134. loggerKit.info("thread[{0}=>{1}], 设备号:{2}, 退出会话==>>执行时长:{3}", threading.current_thread().name,
  135. threading.get_ident(),
  136. device_serial, end_time6 - start_time6)
  137. # 退出搜索
  138. loggerKit.info('thread[{0}=>{1}], 设备号:{2}, 退出搜索', threading.current_thread().name, threading.get_ident(),
  139. device_serial)
  140. time.sleep(random_add_subtract(sleep_time))
  141. start_time7 = time.time()
  142. device.xpath('//*[@resource-id="com.tencent.wework:id/l67"]').click()
  143. end_time7 = time.time()
  144. loggerKit.info("thread[{0}=>{1}], 设备号:{2}, 退出搜索==>>执行时长:{3}", threading.current_thread().name,
  145. threading.get_ident(),
  146. device_serial, end_time7 - start_time7)
  147. return status
  148. # 指定人消息回复
  149. def wework_appoint_reply(device_serial, keyword, username, content):
  150. # 连接设备
  151. device = u2.connect(device_serial)
  152. status = script_status(1, 0, '', '')
  153. # 打开搜索框
  154. loggerKit.info('thread[{0}=>{1}], 设备号: {2}, 打开搜索框', threading.current_thread().name, threading.get_ident(),
  155. device_serial)
  156. if device.xpath('//*[@resource-id="com.tencent.wework:id/l76"]').exists:
  157. device.xpath('//*[@resource-id="com.tencent.wework:id/l76"]').click()
  158. else:
  159. status = script_status(0, 500, '搜索按钮元素未获取到', '')
  160. reboot_device(device_serial, '搜索按钮元素未获取到')
  161. return status
  162. time.sleep(random_add_subtract(sleep_time))
  163. # 输入搜索文案
  164. loggerKit.info('thread[{0}=>{1}], 输入搜索文案:{2}, 设备号:{3}', threading.current_thread().name,
  165. threading.get_ident(),
  166. keyword, device_serial)
  167. if device.xpath('//*[@resource-id="com.tencent.wework:id/jfi"]').exists:
  168. device.xpath('//*[@resource-id="com.tencent.wework:id/jfi"]').set_text(keyword)
  169. else:
  170. status = script_status(0, 500, '搜索框元素未获取到', '')
  171. reboot_device(device_serial, '搜索框元素未获取到')
  172. return status
  173. time.sleep(1)
  174. # 点击搜索所得的第一个
  175. if device.xpath('//*[@resource-id="com.tencent.wework:id/kzx"]').exists:
  176. device.xpath('//*[@resource-id="com.tencent.wework:id/ge2"]').click()
  177. else:
  178. status = script_status(0, 500, '搜索不到群聊', '')
  179. reboot_device(device_serial, '搜索不到群聊')
  180. return status
  181. time.sleep(random_add_subtract(sleep_time))
  182. # 编辑框
  183. loggerKit.info('thread[{0}=>{1}], 设备号:{2}, 输入编辑框文本', threading.current_thread().name,
  184. threading.get_ident(),
  185. device_serial)
  186. if device.xpath('//*[@resource-id="com.tencent.wework:id/gsj"]').exists:
  187. device.xpath('//*[@resource-id="com.tencent.wework:id/gsj"]').click()
  188. # 内容赋值
  189. edit = device.xpath('//*[@resource-id="com.tencent.wework:id/gsj"]')
  190. edit.set_text("@")
  191. time.sleep(random_add_subtract(sleep_time))
  192. if device.xpath('//*[@resource-id="com.tencent.wework:id/dae"]').exists:
  193. time.sleep(random_add_subtract(sleep_time))
  194. # 搜索框赋值 @出指定人
  195. device.xpath('//*[@resource-id="com.tencent.wework:id/dae"]').set_text(username)
  196. # 因网络原因 部分随机等待时间可能会对程序有影响
  197. time.sleep(random_add_subtract(sleep_time))
  198. # 获取到搜索出的第一个人
  199. if device.xpath('//*[@resource-id="com.tencent.wework:id/itp"]/android.view.ViewGroup[1]').exists:
  200. device.xpath('//*[@resource-id="com.tencent.wework:id/itp"]/android.view.ViewGroup[1]').click()
  201. else:
  202. status = script_status(0, 500, '@不到指定人', '')
  203. reboot_device(device_serial, '@不到指定人')
  204. return status
  205. # 内容赋值
  206. # 使用 replace() 方法将字符串中的 <br/> 替换成 \n
  207. text = content.replace("<br/>", "\n")
  208. edit.set_text(text + "\n" + edit.text)
  209. else:
  210. status = script_status(0, 500, '@指定人元素未获取到', '')
  211. reboot_device(device_serial, '@指定人元素未获取到')
  212. return status
  213. else:
  214. status = script_status(0, 500, '编辑框元素未获取到', '')
  215. reboot_device(device_serial, '编辑框元素未获取到')
  216. return status
  217. # 发送
  218. loggerKit.info('thread[{0}=>{1}], 设备号:{2}, 发送文案', threading.current_thread().name, threading.get_ident(),
  219. device_serial)
  220. if device.xpath('//*[@resource-id="com.tencent.wework:id/gsf"]').exists:
  221. device.xpath('//*[@resource-id="com.tencent.wework:id/gsf"]').click()
  222. else:
  223. status = script_status(0, 500, '发送按钮元素未获取到', '')
  224. reboot_device(device_serial, '发送按钮元素未获取到')
  225. return status
  226. # 退出会话
  227. device.xpath('//*[@resource-id="com.tencent.wework:id/l67"]').click()
  228. # 退出搜索
  229. if device.xpath('//*[@resource-id="com.tencent.wework:id/l67"]').exists:
  230. device.xpath('//*[@resource-id="com.tencent.wework:id/l67"]').click()
  231. return status
  232. # 企微群消息回复+h5 转发操作
  233. def wework_reply_h5(device_serial, keyword, content, material_id):
  234. status = wework_reply(device_serial, keyword, content)
  235. if status.execute_status == 0:
  236. return status
  237. status = wework_h5(device_serial, keyword, material_id)
  238. return status
  239. # 企微指定人群消息回复 +h5 转发操作
  240. def wework_appoint_reply_h5(device_serial, keyword, username, content, material_id):
  241. status = wework_appoint_reply(device_serial, keyword, username, content)
  242. if status.execute_status == 0:
  243. return status
  244. status = wework_h5(device_serial, keyword, material_id)
  245. return status
  246. # 企微群消息回复+h5 转发操作
  247. def wework_reply_mini(device_serial, keyword, content, material_id):
  248. status = wework_reply(device_serial, keyword, content)
  249. if status.execute_status == 0:
  250. return status
  251. status = wework_mini(device_serial, keyword, material_id)
  252. return status
  253. # 企微指定人群消息回复 +h5 转发操作
  254. def wework_appoint_reply_mini(device_serial, keyword, username, content, material_id):
  255. status = wework_appoint_reply(device_serial, keyword, username, content)
  256. if status.execute_status == 0:
  257. return status
  258. status = wework_mini(device_serial, keyword, material_id)
  259. return status
  260. # 企微群转发h5 操作
  261. def wework_h5(device_serial, keyword, material_id):
  262. status = script_status(1, 0, '', '')
  263. # 设备连接
  264. d = u2.connect(device_serial)
  265. # 搜索
  266. d.xpath('//*[@resource-id="com.tencent.wework:id/l76"]').click_exists()
  267. # 关键词
  268. d.xpath('//*[@resource-id="com.tencent.wework:id/jfi"]').click_exists()
  269. d(focused=True).set_text("qa-机器人素材")
  270. # 点击
  271. d.xpath(
  272. '//*[@resource-id="com.tencent.wework:id/jh1"]/android.widget.RelativeLayout[2]/android.widget.RelativeLayout[1]/android.widget.RelativeLayout['
  273. '1]/android.widget.RelativeLayout[1]').click_exists()
  274. # 加载等待
  275. time.sleep(5)
  276. # 点解编辑按钮
  277. d.click(0.402, 0.18)
  278. # 设置url
  279. d.send_keys(material_id)
  280. # 点击h5跳转
  281. d.click(0.563, 0.262)
  282. # 进行转发操作
  283. d.xpath('//*[@resource-id="com.tencent.wework:id/l6t"]').click()
  284. d.xpath('//*[@text="转发"]').click()
  285. # 搜索转发人
  286. d.xpath('//*[@resource-id="com.tencent.wework:id/l71"]').click()
  287. # 搜索框赋值
  288. d.xpath('//*[@resource-id="com.tencent.wework:id/jfi"]').set_text(keyword)
  289. time.sleep(1)
  290. # 点击第一个联系人
  291. d.xpath(
  292. '//*[@resource-id="com.tencent.wework:id/c6f"]/android.widget.RelativeLayout[2]').click()
  293. # 点击发送按钮
  294. d.xpath('//*[@resource-id="com.tencent.wework:id/ck0"]').click()
  295. # 退出
  296. d.xpath('//*[@resource-id="com.tencent.wework:id/l67"]').click()
  297. # 返回首页
  298. d.xpath('//*[@resource-id="com.tencent.wework:id/l67"]').click()
  299. return status
  300. # 企微群转发h5 操作
  301. def wework_mini(device_serial, keyword, material_id):
  302. status = script_status(1, 0, '', '')
  303. # 设备连接
  304. d = u2.connect(device_serial)
  305. # 搜索
  306. d.xpath('//*[@resource-id="com.tencent.wework:id/l76"]').click_exists()
  307. # 关键词
  308. d.xpath('//*[@resource-id="com.tencent.wework:id/jfi"]').click_exists()
  309. d(focused=True).set_text("qa-机器人素材")
  310. # 点击
  311. d.xpath(
  312. '//*[@resource-id="com.tencent.wework:id/jh1"]/android.widget.RelativeLayout['
  313. '2]/android.widget.RelativeLayout[1]/android.widget.RelativeLayout['
  314. '1]/android.widget.RelativeLayout[1]').click_exists()
  315. # 加载等待
  316. time.sleep(5)
  317. # 点解编辑按钮
  318. d.click(0.402, 0.18)
  319. # 设置url
  320. d.send_keys(material_id)
  321. # 点击小程序跳转
  322. d.click(0.563, 0.334)
  323. # 进行转发操作
  324. d.xpath('//*[@content-desc="更多"]').click()
  325. time.sleep(2)
  326. # 进入小程序前可能会有加载时间
  327. if d.xpath('//*[@text="转发"]').exists:
  328. d.xpath('//*[@text="转发"]').click()
  329. else:
  330. status = script_status(0, 500, '无法打开小程序' + material_id, '')
  331. return status
  332. # 搜索转发人
  333. d.xpath('//*[@resource-id="com.tencent.wework:id/l71"]').click()
  334. # 搜索框赋值
  335. d.xpath('//*[@resource-id="com.tencent.wework:id/jfi"]').set_text(keyword)
  336. time.sleep(1)
  337. # 点击第一个联系人
  338. d.xpath(
  339. '//*[@resource-id="com.tencent.wework:id/c6f"]/android.widget.RelativeLayout[2]').click()
  340. # 点击发送按钮
  341. d.xpath('//*[@resource-id="com.tencent.wework:id/ck0"]').click()
  342. # 退出
  343. d.xpath('//*[@resource-id="com.tencent.wework:id/l67"]').click()
  344. # 返回首页
  345. d.xpath('//*[@resource-id="com.tencent.wework:id/l67"]').click()
  346. return status
  347. # 训练营
  348. def wework_camp(device_serial, keyword):
  349. # 连接设备
  350. device = u2.connect(device_serial)
  351. device.healthcheck()
  352. device.screen_on()
  353. device.unlock()
  354. device.debug = False
  355. # 重启企业微信
  356. device.app_stop("com.tencent.wework")
  357. device.app_start("com.tencent.wework")
  358. # 打开搜索框
  359. device.xpath('//*[@resource-id="com.tencent.wework:id/l76"]').click()
  360. # 输入搜索文案
  361. device.xpath('//*[@resource-id="com.tencent.wework:id/jfi"]').set_text(keyword)
  362. # 点击搜索所得的第一个
  363. device.xpath('//*[@resource-id="com.tencent.wework:id/ge2"]').click()
  364. while 1:
  365. # 如果有训练营按钮 点击进入
  366. if device.xpath('//*[@text="成长营"]').exists:
  367. device.xpath('//*[@text="成长营"]').click_exists(10)
  368. # 缓冲五秒
  369. time.sleep(5)
  370. # h5页面无法获取到对应的xpath元素 进行坐标点击
  371. device.click(0.168, 0.152)
  372. time.sleep(2)
  373. # 发送按钮点击
  374. device.xpath('//*[@resource-id="com.tencent.wework:id/ck0"]').click()
  375. break
  376. # 如果有添加xpath 进入添加工具栏页面
  377. if device.xpath('//*[@resource-id="com.tencent.wework:id/ham"]').exists:
  378. device.xpath('//*[@resource-id="com.tencent.wework:id/ham"]').click()
  379. break
  380. # 向右滑动继续获取
  381. parent_view = device.xpath('//*[@resource-id="com.tencent.wework:id/fbf"]')
  382. parent_view.swipe("left")
  383. def invite_demo(device_serial, key_word, user_name, content):
  384. # 编辑群页面最多展示的群人数
  385. max_count = 20
  386. add_people_xpath = '//*[@resource-id="com.tencent.wework:id/edb"]/android.widget.LinearLayout[{}]/android.widget.ImageView[1]'
  387. # 设备连接
  388. device = u2.connect(device_serial)
  389. # 重启企业微信
  390. device.app_stop("com.tencent.wework")
  391. device.app_start("com.tencent.wework")
  392. # 打开搜索框
  393. device.xpath('//*[@resource-id="com.tencent.wework:id/l76"]').click()
  394. # 输入搜索文案
  395. device.xpath('//*[@resource-id="com.tencent.wework:id/jfi"]').set_text(key_word)
  396. # 点击搜索所得的第一个
  397. device.xpath('//*[@resource-id="com.tencent.wework:id/ge2"]').click()
  398. # 点击编辑群按钮
  399. device.xpath('//*[@resource-id="com.tencent.wework:id/l6w"]').click()
  400. # 获取群人数
  401. people_count = device.xpath('//*[@resource-id="com.tencent.wework:id/eb_"]').get_text()
  402. # 获取到群人数
  403. people_count = int(people_count.replace("人", ""))
  404. if people_count >= max_count:
  405. people_count = max_count
  406. else:
  407. people_count = people_count + 1
  408. add_people_xpath = add_people_xpath.format(people_count)
  409. # 进入选择联系人页面
  410. device.xpath(add_people_xpath).click()
  411. # 选择企业通讯录
  412. device.xpath('//*[@text="企业通讯录"]').click()
  413. # 点击搜索按钮
  414. device.xpath(
  415. '//*[@resource-id="com.tencent.wework:id/jlj"]/android.widget.RelativeLayout[1]/android.widget.RelativeLayout[1]/android.widget.LinearLayout[2]/android.widget.RelativeLayout[1]/android.widget.TextView[1]').click()
  416. # 搜索需添加人员
  417. device.xpath('//*[@resource-id="com.tencent.wework:id/jfi"]').set_text(user_name)
  418. # 选中第一个匹配人员
  419. device.xpath(
  420. '//*[@resource-id="com.tencent.wework:id/jlj"]/android.widget.RelativeLayout[1]/android.widget.ListView[1]/android.widget.RelativeLayout[2]/android.widget.RelativeLayout[1]/android.widget.RelativeLayout[1]/android.widget.FrameLayout[2]').click()
  421. # 确定添加人员
  422. if device.xpath('//*[@resource-id="com.tencent.wework:id/jlf"]').exists:
  423. # 如果有确认按钮 确保该群中之前没有该用户
  424. device.xpath('//*[@resource-id="com.tencent.wework:id/jlf"]').click()
  425. device.xpath('//*[@resource-id="com.tencent.wework:id/l67"]').click()
  426. else:
  427. # 如果没有确认按钮 确保该群众已经有了该用户
  428. device.xpath('//*[@resource-id="com.tencent.wework:id/l67"]').click()
  429. device.xpath('//*[@resource-id="com.tencent.wework:id/l67"]').click()
  430. device.xpath('//*[@resource-id="com.tencent.wework:id/l67"]').click()
  431. device.xpath('//*[@resource-id="com.tencent.wework:id/l67"]').click()
  432. # 编辑框
  433. device.xpath('//*[@resource-id="com.tencent.wework:id/gsj"]').click()
  434. # 内容赋值
  435. device.xpath('//*[@resource-id="com.tencent.wework:id/gsj"]').set_text(content)
  436. # 发送
  437. device.xpath('//*[@resource-id="com.tencent.wework:id/gsf"]').click()
  438. # 点击编辑群按钮
  439. device.xpath('//*[@resource-id="com.tencent.wework:id/l6w"]').click()
  440. # 退出群聊
  441. while 1:
  442. if device.xpath('//*[@resource-id="com.tencent.wework:id/jtt"]').exists:
  443. device.xpath('//*[@resource-id="com.tencent.wework:id/jtt"]').click()
  444. break
  445. else:
  446. device.swipe_ext('up', scale=1)
  447. # 确定退出群聊
  448. device.xpath('//*[@resource-id="com.tencent.wework:id/b42"]').click()
  449. def create_group(device_serial, robot_name, customer_name, group_name, content):
  450. # 设备连接
  451. device = u2.connect(device_serial)
  452. # 打开添加按钮
  453. device.xpath('//*[@resource-id="com.tencent.wework:id/l6w"]').click()
  454. # 点击发起群聊按钮
  455. device.xpath('//*[@text="发起群聊"]').click()
  456. # 点击搜索按钮 开始搜索人员
  457. device.xpath('//*[@resource-id="com.tencent.wework:id/l7b"]').click()
  458. # 输入机器人姓名
  459. device.xpath('//*[@resource-id="com.tencent.wework:id/jfi"]').set_text(robot_name)
  460. time.sleep(1)
  461. if device.xpath(
  462. '//*[@resource-id="com.tencent.wework:id/itp"]/android.widget.RelativeLayout[1]/android.widget.RelativeLayout[1]/android.widget.RelativeLayout[1]/android.widget.FrameLayout[1]/android.widget.ImageView[1]').exists:
  463. device.xpath(
  464. '//*[@resource-id="com.tencent.wework:id/itp"]/android.widget.RelativeLayout[1]/android.widget.RelativeLayout[1]/android.widget.RelativeLayout[1]/android.widget.FrameLayout[1]/android.widget.ImageView[1]').click()
  465. # 重置搜索框
  466. device.xpath('//*[@resource-id="com.tencent.wework:id/jfh"]').click()
  467. # 输入机器人姓名
  468. device.xpath('//*[@resource-id="com.tencent.wework:id/jfi"]').set_text(customer_name)
  469. time.sleep(1)
  470. # 输入客户名称
  471. if device.xpath('//*[@resource-id="com.tencent.wework:id/jk0"]').exists:
  472. device.xpath('//*[@resource-id="com.tencent.wework:id/jk0"]').click()
  473. # 点击确认按钮
  474. device.xpath('//*[@resource-id="com.tencent.wework:id/jjx"]').click()
  475. # 点击编辑群信息
  476. device.xpath('//*[@resource-id="com.tencent.wework:id/l6w"]').click()
  477. # 点击群聊名称
  478. device.xpath('//*[@text="群聊名称"]').click()
  479. # 设置群名称
  480. device.xpath('//*[@resource-id="com.tencent.wework:id/egb"]').set_text(group_name)
  481. # 确定修改
  482. device.xpath('//*[@resource-id="com.tencent.wework:id/l73"]').click()
  483. # 退出群编辑
  484. device.xpath('//*[@resource-id="com.tencent.wework:id/l67"]').click()
  485. # 编辑框
  486. device.xpath('//*[@resource-id="com.tencent.wework:id/gsj"]').click()
  487. # 内容赋值
  488. device.xpath('//*[@resource-id="com.tencent.wework:id/gsj"]').set_text(content)
  489. # 发送
  490. device.xpath('//*[@resource-id="com.tencent.wework:id/gsf"]').click()
  491. # 点击编辑群按钮
  492. device.xpath('//*[@resource-id="com.tencent.wework:id/l6w"]').click()
  493. # 退出群聊
  494. while 1:
  495. if device.xpath('//*[@resource-id="com.tencent.wework:id/jtt"]').exists:
  496. device.xpath('//*[@resource-id="com.tencent.wework:id/jtt"]').click()
  497. break
  498. else:
  499. device.swipe_ext('up', scale=1)
  500. # 确定退出群聊
  501. device.xpath('//*[@resource-id="com.tencent.wework:id/b42"]').click()