前提条件
进行微信webview相关测试,需要准备:
- 1.一台科学上网的电脑
- 2.装了微信的安卓机(或模拟器)
- python/appium环境安装配置好
打开微信调试功能
申明: 这个操作主要参考 文章 ,写的不详细的地方,可以参考原文章
-
打开微信,任意对话框输入:debugx5.qq.com
debugx5.png -
点击网址 -- 勾选【打开TBS内核Inspector调试功能】
TBS.png -
chrome inspect
打开一个微信公众号,以中国电信为例 (这边需要科学上网)
chrome .png
inspect.png
简单Demo
大致操作步骤:
- 打开微信
- 点击订阅号
- 点击中国电信
- 选择 厉害我的国
- 返回,关闭
# coding=utf-8
# author='Shichao-Dong'
# create time: 2018/7/3
from appium import webdriver
import time
desired_caps = {
'platformName': 'Android',
'platformVersion': '7.0',
'deviceName': 'WTKGY17811000030',
'appPackage': 'com.tencent.mm',
'appActivity': '.ui.LauncherUI',
'unicodeKeyboard': True,
'resetKeyboard': True,
'noReset': True,
'chromedriverExecutableDir':"D://chromedriver//2.20",
'chromeOptions': {'androidProcess': 'com.tencent.mm:tools'}
}
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
driver.implicitly_wait(10)
driver.save_screenshot('D://code//test/demo.png')
#进入订阅号
driver.find_elements_by_id("com.tencent.mm:id/apv")[3].click()
driver.find_elements_by_id("com.tencent.mm:id/apv")[0].click()
driver.find_elements_by_id("com.tencent.mm:id/aaq")[0].click()
driver.find_elements_by_class_name("android.widget.TextView")[0].click()
time.sleep(3)
#切换webview
print(driver.contexts)
driver.switch_to.context('WEBVIEW_com.tencent.mm:tools')
time.sleep(2)
handles = driver.window_handles
print len(handles)
try:
driver.switch_to_window(handles[1])
time.sleep(1)
driver.find_element_by_xpath('//*[@id="namespace_1"]/div[2]/div[1]/a[1]').click()
time.sleep(2)
print('定位成功')
except Exception :
print('切换之下一个handle')
print('开始截图')
driver.switch_to.context('NATIVE_APP')
driver.save_screenshot('D://code//test/lihai.png')
print('截图成功')
driver.find_element_by_id('com.tencent.mm:id/i2').click()
time.sleep(1)
driver.find_element_by_id('com.tencent.mm:id/hm').click()
driver.save_screenshot('D://code//test/dingyue.png')
driver.quit()
更多Demo可见我的Github
几个坑
1.chrome和chromedriver版本要对应好
根据chrome://inspect 上显示的chrome,下载对应的chromedriver
chromedriver下载地址
对应关系,请自行搜索
如上图,我的chrome版本为:53.0.2785.49
对应的chromedriver为 2.26
但是我chromedriver切换为2.26之后,报错
Original error: session not created exception: please close '' and try again
最终解决方案:将版本,将chromedriver版本将为2.20
解决方案,参考这篇文章
2.增加的参数说明
可以看到desired_caps中增加两个参数:
-
chromedriverExecutableDir
这个参数后面跟着对应的chromedriver地址
将一些需要的chromedriver下载到本地
chromedriver
按需切换所需的chromedriver
-
chromeOptions
chromeOptions一般用来定制启动选项,由于在appium中切换context识别webview的时候, 把com.tencent.mm:tools的webview识别成com.tencent.mm的webview.,所以为了避免这边问题,加上{'androidProcess': 'com.tencent.mm:tools'} -
noReset
这边一定要填 True ,要不然你和女朋友/男朋友的聊天记录,就全部被清空了,吼吼吼
3.切换webview之后无法定位元素
原因是进入webview后会存在多个handle,通过switch_to_window进行handle切换,然后进行元素定位
try:
driver.switch_to_window(handles[1])
time.sleep(1)
driver.find_element_by_xpath('//*[@id="namespace_1"]/div[2]/div[1]/a[1]').click()
time.sleep(2)
print('定位成功')
except Exception :
print('切换之下一个handle')
以上所有,欢迎交流学习,批评指正。
网友评论