使用Appium进行微信公众号自动化测试

    在微信公众号/小程序页面的时候,使用uiautomatorviewer.bat并不能定位到页面中的元素,而是一整大块的一个元素包含在里面。实质上,微信公众号中的页面不是Android原生的视图,而是嵌套在原生视图中的一个webview,所以要进行微信公众号的自动化测试则需要特殊处理,

  1. 微信中打开调试模式:在微信中打开debugx5.qq.com并勾选信息页面的打开TBS内核Inspector调试功能选项
  2. 查看Android的webview视图版本:手机链接电脑后在电脑Chrome打开页面chrome://inspect/#devices查看Android的Chrome内核版本
  3. 下载与该版本相对应的ChromeDriver.exe替换掉Appium目录下的ChromeDriver.exe,路径:C:\Users\miduo\AppData\Local\Programs\appium-desktop\resources\app\node_modules\appium\node_modules\appium-chromedriver\chromedriver\win\请根据个人安装情况找到文件并替换。
  4. 代码调整:
    实例化Remote时需要添加一个配置:'chromeOptions': {'androidProcess': 'com.tencent.mm:tools'}
desired_caps = {
    'platformName': 'Android',
    'fastReset': 'false',
    'deviceName': "391dda45",
    'appPackage': 'com.tencent.mm',
    'appActivity': '.ui.LauncherUI',
    'fullReset': 'false',
    'unicodeKeyboard': 'True',
    'resetKeyboard': 'True',
    "noReset": True,
    "fullReset": False,
    "fastReset": False,
    'chromeOptions': {
        'androidProcess': 'com.tencent.mm:tools'
      }  #  这句很重要   'chromeOptions': {'androidProcess': 'com.tencent.mm:tools'} 
}
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)

…… # 进入微信公众号页面的操作

# 点击链接进入微信公众号之后,需要切换上下文(webview),如果不能理解,则可以把他看成Iframe
print(driver.contexts)  #打印查看当前页面有多少webview
driver.switch_to.context("WEBVIEW_com.tencent.mm:tools") # 切换
# 如果切换后存在多个handle,则需要判断当前handle对不对,不对的话需要切换到正确的句柄
while True:
    if PageElement("a", "tag").entity(a.driver, True):
        break
    else:
        a.driver.switch_to.window(a.driver.window_handles[-1])
print(driver.page_source)  #打印html页面源代码
# 切换后实质上就是Selenium使用操作公众号了(本质就是一个Html),
# 当然如果需要跳回到App中操作,则driver.switch_to.context("NATIVE")切换会默认的视图进行操作。
  1. 微信公众号元素定位,因为使用uiautomatorviewer.bat工具无法定位到微信公众号的页面元素,要进行微信公众号的元素定位,有几种方案:
  • 手机链接电脑后在电脑Chrome打开页面chrome://inspect/#devices并选择公众号的webview点击下方inspect链接,但第一次使用会链接到谷歌,所以需要翻墙才能正常使用
  • 找开发拿页面源文件进行定位。
  • 如果开发无法提供源文件,则使用driver.page_source将源代码在本地生成html文件本地打开。

你可能感兴趣的:(使用Appium进行微信公众号自动化测试)