前言

环境准备:

python 3.6

appium 1.7以上版本

微信6.6.6

微信里面webview 57.0

电脑上chrome版本 66.0

appium-chromedriver路径下chromedriver 2.28

开启微信debug模式

1.以微信为例,webview的版本号可以用chrome浏览器查看到,由于微信用的是x5内核,跟其他app不太一样,这里需要先开启微信的debug模式

开启微信debug模式:在微信聊天界面输入:debugx5.qq.com,如何勾选"打开TBS内核Inspector调试功能


2.查看微信里面webview版本,直接在电脑chrome浏览器输入:chrome://inspect/#devices

再打开微信的公众号页面,刷新浏览器页面,就会出现webview版本号57.0


ChromeOptions

1.在appium中context的切换时,识别webview的时候, 把com.tencent.mm:tools的webview识别成com.tencent.mm的webview. 从而导致context切换失败。

所有这里必须加上这个参数ChromeOptions,这个是关键。

'chromeOptions': {'androidProcess': 'com.tencent.mm:tools'}

2.appium1.7以后的版本支持Uiautomator2了,为了保险一点,最好加上这个,用Uiautomator2执行

'automationName': 'Uiautomator2'

from appium import webdriver

import time

# 作者:上海-悠悠

desired_caps = {

'platformName': 'Android',

'platformVersion': '7.0',

'deviceName': 'A5RNW18316011440',

'appPackage': 'com.tencent.mm',

'appActivity': '.ui.LauncherUI',

'automationName': 'Uiautomator2',

'unicodeKeyboard': True,

'resetKeyboard': True,

'noReset': True,

'chromeOptions': {'androidProcess': 'com.tencent.mm:tools'}

}

操作公众号

1.操作步骤如下

点微信首页搜索按钮

输入yoyoketang内容搜索

点开公众号

点公众号菜单-精品分类


2.代码实现


切换webview

# 切换到webview

time.sleep(2)

print(driver.contexts)

driver.switch_to.context('WEBVIEW_com.tencent.mm:tools')

打印结果:

['NATIVE_APP', 'WEBVIEW_com.tencent.mm:tools']

参考代码:

from appium import webdriver

import time

# 作者:上海-悠悠

desired_caps = {

'platformName': 'Android',

'platformVersion': '7.0',

'deviceName': 'A5RNW18316011440',

'appPackage': 'com.tencent.mm',

'appActivity': '.ui.LauncherUI',

'automationName': 'Uiautomator2',

'unicodeKeyboard': True,

'resetKeyboard': True,

'noReset': True,

'chromeOptions': {'androidProcess': 'com.tencent.mm:tools'}

}

driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)

driver.implicitly_wait(10)

# 作者:上海-悠悠

# 点微信首页搜索按钮

driver.find_element_by_accessibility_id("搜索").click()

# 输入内容搜索

time.sleep(3)

driver.find_element_by_id('com.tencent.mm:id/hx').send_keys("yoyoketang")

# 点开公众号

time.sleep(3)

driver.find_element_by_id('com.tencent.mm:id/l7').click()

# 点公众号菜单-精品分类

time.sleep(3)

driver.find_elements_by_id('com.tencent.mm:id/aaq')[0].click()

# 切换到webview

time.sleep(2)

print(driver.contexts)

driver.switch_to.context('WEBVIEW_com.tencent.mm:tools')

# 点webview上元素 目前有个问题会报找不到元素

driver.find_element_by_xpath(".//*[@id='namespace_1']/div[1]/div/div[2]").click()

time.sleep(2)

driver.quit()

appium+python自动化42-微信公众号

前言 本篇介绍如何在微信公众号上自动化测试,以操作我的个人公众号:yoyoketang为例,没关注的,先微信关注了,再跟着操作 环境准备: python 3.6 appium 1.7以上版本 微信6. ...

appium+python自动化43-微信公众号webview操作

前言 上一篇已经解决切换到微信公众号的webview上了,但是定位webview上元素的时候一直提示找不到,打印page_source也找不到页面上的元素,这个问题困扰了一整天,还好最后找到了原因, ...

python爬取微信公众号

爬取策略 1.需要安装python selenium模块包,通过selenium中的webdriver驱动浏览器获取Cookie的方法.来达到登录的效果 pip3 install selenium c ...

Python+Tornado开发微信公众号

本文已同步到专业技术网站 www.sufaith.com, 该网站专注于前后端开发技术与经验分享, 包含Web开发.Nodejs.Python.Linux.IT资讯等板块. 本教程针对的是已掌握Pyt ...

使用Python爬取微信公众号文章并保存为PDF文件(解决图片不显示的问题)

前言 第一次写博客,主要内容是爬取微信公众号的文章,将文章以PDF格式保存在本地. 爬取微信公众号文章(使用wechatsogou) 1.安装 pip install wechatsogou --up ...

Python——WeRobot(微信公众号开发)

模板消息接口 ''' 使用规则 1.所有服务号都可以在功能->添加功能插件处看到申请模板消息功能的入口,但只有认证后的服务号才可以申请模板消息的使用权限并获得该权限: 2.需要选择公众账号服务所 ...

Python爬取微信公众号素材库

这是我的之前写的代码,今天发布到博客园上,说不定以后需要用. 开始: #coding:utf-8 import werobot import pymongo   class Gongzhonghao( ...

python之微信公众号开发(基本配置和校验)

前言 最近有微信公众号开发的业务,以前没有用python做过微信公众号开发,记录一下自己的学习和开发历程,共勉! 公众号类型 订阅号 普通订阅号 认证订阅号 服务号 普通服务号 认证服务号 服务方式 ...

微信公众号的开发 Senparc.Weixin.dll使用

项目需要,做个微信公众号,之前从未做过,前期挺懵的,再次记录一下,一切困难都是纸老虎(哈哈) 服务号是公司申请的微信公共账号,订阅号是个人申请的.建议开发者自己申请一个测试账号,方便使用,但是测试账号 ...

随机推荐

centos配置163源

1.参考Centos镜像帮助 (1.1)备份原始repo shell> sudo mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/Ce ...

HDU ACM 1050 Moving Tables

Problem Description The famous ACM (Advanced Computer Maker) Company has rented a floor of a buildin ...

IBM Cognos 10 启动报错

报错信息: 15:35:02, 'LogService', 'StartService', 'Success'. 15:35:03, CAF input validation enabled. 15: ...

前序 中序 后序 遍历 递归 非递归算法 java实现

前序遍历 非递归 public void preordernorec(TreeNode root){ //System.out.println("先序遍历(非递归):"); //用 ...

设计模式的征途—5.原型(Prototype)模式

相信大多数的人都看过,对孙悟空拔毛变出小猴子的故事情节应该都很熟悉.孙悟空可以用猴毛根据自己的形象复制出很多跟自己一模一样的小猴兵出来,其实在设计模式中也有一个类似的模式,我们可 ...

servlet中的字符编码过滤器的使用

一:简介 Servlet过滤器是客户端和目标资源的中间层组件,主要是用于拦截客户端的请求和响应信息.如当web容器收到一条客户端发来的请求 web容器判断该请求是否与过滤器相关联,如果相关联就交给过滤 ...

RE: Javascript分页处理

背景: 调用PHP后端给的接口,以实现分页的功能.由于我是没造轮子的能力,所以翻了不少技术博客,经过整合才算完成整个分页功能.从一番查阅中,不难看出大概分为两种不同的分页: 一种是纯前端的,就是在一次 ...

Java内存模型与Java线程实现原理

硬件的效率与一致性 基于高速缓存的存储交互很好的解决了处理器和内存的速度矛盾,但是也为计算机系统带来了更高的复杂度,因为引入了一个新问题:缓存一致性. 在多处理器系统中,每个处理器都有自己的高速缓存, ...

BZOJ 2594: [Wc2006]水管局长数据加强版 [LCT kruskal]

2594: [Wc2006]水管局长数据加强版 Time Limit: 25 Sec  Memory Limit: 128 MBSubmit: 2917  Solved: 918[Submit][St ...

【正睿oi省选十连测】第一场

四小时写了两个暴力??自闭 [原来这就是神仙们的分量Orz rank 56/75 可以说是无比垃圾了 下周目标:进步十名?[大雾 T1 题意:有n个点的图 点有点权Ai 也有点权Bi = A_1 + ...