一、X5内核介绍

  X5内核是腾讯公司基于优秀开源 webkit 深度优化的浏览器渲染引擎,并且在2014年正式宣布开放给app开发者,所以现在可以在很多app上看到都是使用的X5内核实现Hybrid混合应用,包括微信、手机QQ、京东、新浪新闻、搜狐视频等等,包括现在炙手可热的微信小程序都是X5内核,之前都是使用google的webview,这里可以把X5内核理解为腾讯版本的webview。

  注意:由于 genymotion 模拟器是X86架构的,很多app安装不了,比如微信、QQ等(虽然说可以通过安装arm解释器来解决该问题,但是进行X5内核调试的话也会出现问题),建议使用真机来做。

  X5内核应用自动化的方式和 google webview 有非常多的差异,因为这里需要开启X5的debug调试模式。

二、开启X5的调试模式

微信版本在7.0以下,需要在聊天窗口输入:

http://debugx5.qq.com

针对微信版本在7.0+,微信有对H5开关做了调整,需要在聊天窗口输入如下:

http://debugmm.qq.com/?forcex5=true  (优先使用,无效时使用方法二)
http://debugx5.qq.com

点击“确定”后即可生效

三、微信小程序入口

  微信在新版中对小程序调试入口加上了限制:在微信主窗口下来打开小程序,利用工具是检测不到小程序对应的url入口的,解决方案:

  • 在 微信->发现->搜一搜 中搜索小程序,即可发现在inspect工具中可以将对应 url 显示出来
  • 注意:如果右上角关闭了小程序之后,一定要记得从后台清理下对应的小程序进程(关闭之后小程序还在后台运行),再次点击重启小程序

四、更新 chromedriver 版本

  启动appium时,需要指定chromedriver.exe的目录,使用appium默认目录下的会报错,在切换到小程序webview时,会去匹配chrome内核所应对chromedriver驱动的版本。在切换完成之后,打印所有的窗口时,会使用x5内核的版本,所以指定一个非默认目录下面的chromedriver.exe(X5内核对应的版本),此问题就不会出现 。

desired_caps["chromedriverExecutableDir"] =r'G:\\ChromeDrivers'

  上面的启动参数稳定性稍差,建议使用如下启动会话配置:

desired_caps['chromedriverExecutable'] = r'G:\ChromeVersionManagement\chromedriver66\chromedriver.exe'

五、找到web页面所属进程

  微信/QQ有很多进程,我们要确定当前web页面是位于哪个进程中,使用adb命令:

  • adb shell dumpsys activity top | findstr ACTIVITY
  • adb shell ps 进程号

由此我们可以确认当前微信的页面运行在 com.tencent.mm:tools 中

六、配置启动会话参数

1.增加X5内核应用自动化配置

desired_caps["recreateChromeDriverSessions"] = True

2.定制化启动webview

  使用ChromeOptions来定制启动选项,因为在appium中切换context识别webview的时候,把com.tencent.mm:tools的webview识别成了com.tencent.mm的webview,因此为了避免这个问题,加上androidProcess: com.tencent.mm:tools

desired_caps["chromeOptions"] = {"androidProcess":"com.tencent.mm:tools"}

七、web窗口切换

  在第五步和第三步来看,进程不像前面普通的Hybrid混合应用的webview只有一个,这里每次会生成很多个webview,但是真正匹配的只有一个,这里进行窗口切换的时候就需要用到循环遍历的操作:

print("=================进入web自动化环节===============================")
#打印当前所有的窗口
hs = driver.window_handles
print("当前所有的窗口为:", hs)
# print("当前所在的窗口为:",driver.current_window_handle)
# 小程序的页面切换:需要遍历所有的handles,切换到元素所在的handle
for handle in hs:
driver.switch_to.window(handle)
print("切换到窗口:",handle)
time.sleep(3)
#print(driver.page_source)
if driver.page_source.find("Python") != -1:
break

H5混合应用之X5内核的更多相关文章

  1. android 腾讯x5内核 浏览器

    1.浏览器内核: 主流浏览器内核介绍(前端开发值得了解的浏览器内核历史) 浏览器内核历史介绍: 在android 4.4之前,浏览器用的还是webkit 在android 4.4之后,google就抛 ...

  2. QQ浏览器X5内核问题汇总

    原文:http://itindex.net/detail/53391-qq-浏览器-x5 常常被人问及微信中使用的X5内核的问题,其实我也不是很清楚,只知道它是基于android 4.2的webkit ...

  3. 转{QQ浏览器X5内核问题汇总}

    转自https://www.qianduan.net/qqliu-lan-qi-x5nei-he-wen-ti-hui-zong/ 常常被人问及微信中使用的X5内核的问题,其实我也不是很清楚,只知道它 ...

  4. 微信、QQ浏览器X5内核问题汇总

    一. 资料汇总 1.前端H5调起QQ浏览器的总结:http://km.oa.com/group/22486/articles/show/210189?kmref=search 2.Android We ...

  5. H5+混合移动app应用开发——开篇

    前言 经过2个多月的艰苦奋斗,app的第一个版本已经快完工了,期间遇到了太多的坑,作为一个喜欢分享的人,我当然不会吝啬分享这爬坑历程.不要问我有多坑,我会告诉你很多,很多..... 过去一直从事.ne ...

  6. X5内核浏览器,video兼容

    使用vue-video-player在移动端微信内置浏览器打开,点击视频自动全屏问题. 参考官方 API 是 H5 同层浏览器的原因,可通过设置video属性来处理. <video-player ...

  7. H5+混合移动app

    H5+混合移动app 前言 经过2个多月的艰苦奋斗,app的第一个版本已经快完工了,期间遇到了太多的坑,作为一个喜欢分享的人,我当然不会吝啬分享这爬坑历程.不要问我有多坑,我会告诉你很多,很多.... ...

  8. Chrome DevTools调试微信X5内核页面

    起因:公司最近在做一个双十一的H5宣传页面,大概需求就是模拟微信视频来电,接通视频后弹出某某明星的视频巴拉巴拉@#%!!!~.看到需求我的第一反应是So easy,正当我码代码码的开心的时候,难题他来 ...

  9. X5内核浏览器video自动全屏解决办法-canvas

    最近在做手机端上面播放视频的项目,但是在安卓上面,video的播放是脱离页面,置于最顶层的,所以带来了很多问题,为了解决这个问题,查看了多方资料,写了下面简单的demo,方便以后使用. 下面就是运用c ...

随机推荐

  1. 企业级堡垒机 jumpserver

    环境准备 系统:CentOS 7 IP:192.168.10.101 关闭selinux 和防火墙 # CentOS $ setenforce # 可以设置配置文件永久关闭 $ systemctl s ...

  2. 安装Linux操作系统,学习Linux基础

    第一项:安装Linux系统 遇到的问题: 1.操作过程中遇到权限不足的情况. 解决过程:通过百度后发现可以使用sudo,或chmod命令解决. 2.在以上过程中对chmod命令的用法产生疑惑. 解决过 ...

  3. bootstrap-select使用过程中的一些问题

    这里总结一下上次使用bootstrap-select的过程中遇到的一些问题.至于bootstrap-select的具体使用方法这里就不介绍了,网上有很多例子. 地址: 官方插件地址:https://d ...

  4. vue-router之前端路由的学习总结

    什么是路由 路由就是通过互联网把信息从源地址传输到目的地的活动 --维基百科 举例路由器: 路由器提供了两种机制:路由和转送 路由是决定数据包从来源到目的地的路径 转送将输入端的数据转移到合适的输出端 ...

  5. 2019年全国高校计算机能力挑战赛初赛C++语言解答

    1; 题目一 16.电商促销某种商品时,希望通过打折鼓励消费者组团消费.已知,团队消费金额=该团的人数和*商品单价.打折规则如下:当组团消费者数量不满50人时,商品消费金额没有折扣:消费者数量大于等于 ...

  6. ETCD:词汇表

    原文地址:词汇表 本文档定义了etcd文档,命令行和源代码中使用的各种术语. Alarm 每当集群需要操作员干预以保持可靠性时,etcd服务器都会发出警报. Authentication 身份验证管理 ...

  7. JavaScript -- 筑基

    本片博客记录了我JavaScript筑基阶段的学习内容,JavaScript不是Java,但是我下意识的把它和java对比学习,有些地方比较有趣,有些地方从java角度看,简直匪夷所思,不过现在总体感 ...

  8. 1025 PAT Ranking 双重排序

    Programming Ability Test (PAT) is organized by the College of Computer Science and Technology of Zhe ...

  9. Git - Git本地仓库与GitHub远程仓库关联

    前言 Git本地仓库与GitHub仓库的关联逻辑如下 创建Key 在本地仓库下,新建Key文件夹,然后打开Key文件夹,单击鼠标右键,选择Git Bash Here. 输入命令:ssh-keygen ...

  10. 企业架构如何实施的简介(TOGAF深度好文)

    本文来自企业架构学院: BangEA:如何实施企业架构? IT不仅是开展业务的手段,而且正在迅速演变为业务,IT绩效会直接影响企业的盈利能力,但很多企业并没有适时或充分的让IT组织参与业务的规划和决策 ...