Appium 解决微信公众号、小程序切换 webview 后无法定位元素的问题

如何切换webview进入小程序请参考https://testerhome.com/topics/12003

脚本思路:

进入webview后会存在多个handle同Web页签一样,获取所有的handle,然后在遍历所有的handle,通过switch_to_window进行handle切换,当某个handle可以定位到我们需要定位的元素时,然后我们就可以进行之后的自动化操作了!

  1. <code Courier New', monospace;line-height:18px;font-size:12px;color:rgb(68,68,68);border:none;">#coding=utf-8

  2. from appium import webdriver

  3. import time,os,re

  4. from appium.webdriver.common.touch_action import TouchAction

  5. desired_caps = {}

  6. desired_caps['platformName'] = 'Android'

  7. desired_caps['deviceName'] = 'Android001'

  8. desired_caps['unicodeKeyboard'] = True

  9. desired_caps["resetKeyboard"] = True

  10. desired_caps["newCommandTimeout"]=30

  11. desired_caps['fullReset'] = 'false'

  12. desired_caps['appPackage'] = 'com.tencent.mm'

  13. desired_caps['appActivity'] = 'com.tencent.mm.ui.LauncherUI'

  14. desired_caps['recreateChromeDriverSessions'] = True

  15. desired_caps['noReset'] = True

  16. desired_caps['newCommandTimeout'] = 10

  17. desired_caps['chromeOptions']={'androidProcess': 'com.tencent.mm:appbrand0'}

  18. driver = webdriver.Remote(command_executor = 'http://127.0.0.1:4723/wd/hub',desired_capabilities = desired_caps)

  19. time.sleep(2)

  20. time.sleep(1)

  21. driver.implicitly_wait(10)

  22. driver.find_element_by_name('发现').click()

  23. time.sleep(1)

  24. driver.swipe(100,1200,100,900)

  25. driver.find_element_by_name('小程序').click()

  26. driver.find_element_by_name('美团外卖').click()

  27. time.sleep(2)

  28. contexts = driver.contexts

  29. print contexts

  30. time.sleep(2)

  31. driver.switch_to.context('WEBVIEW_com.tencent.mm:appbrand0')

  32. print '切换成功'

  33. print driver.current_context

  34. all_handles = driver.window_handles

  35. print len(all_handles)

  36. for handle in all_handles:

  37. try:

  38. driver.switch_to_window(handle)

  39. print driver.page_source

  40. driver.find_element_by_css_selector('.filter-select.flex-center') #定位“筛选 ”按钮

  41. print '定位成功'

  42. break

  43. except Exception as e:

  44. print e

  45. driver.find_element_by_css_selector('.filter-select.flex-center').click()

  46. time.sleep(5)

  47. driver.quit()</code>

原本:https://blog.csdn.net/qq_35741999/article/details/79430077