做者:清菡
博客:oschina、云+社区、知乎等各大平台都有。git
搜一搜:若是历来没有搜索过,在这里点击一下它,历史记录是空的。可是若是曾经搜索过,那必定有历史记录。若是不是第一次点击它,用自动化脚本再次点击的话,不会让你输入进去,会报错。github
那就只能从历史记录中来选,因此点击一下后要等到历史记录中的信息出来。web
等待搜索框出现-点击搜索框以后呢,等待了 5 秒钟。time.sleep(5)
,等待历史记录中“必要商城”出来。shell
能够看到是历史记录没错,可是历史记录它是一个 WebView。小程序
这个 WebView 是微信这个程序的,不属于小程序,是属于微信这个应用的。因此这个东西不对外开放,你就没有办法知道“必要商城”对应的元素定位是什么。微信小程序
不知道怎么办?它又不是一个完整的元素,要在一个元素上点点点,只能用坐标,由于微信不给开 Debug 属性。微信
用坐标,经过 adb 命令执行点击操做,adb shell input tap 281 205
281 205 是坐标点。框架
若是有多个历史记录,坐标确定会变。本身的手机,保证历史记录对应的位置正确就行了。假设测试机也是本身操做,就是测试环境要保持独立。koa
固然想办法保证数据是一直都在的。微信中只要搜索过都是有历史记录的,并且日常使用的时候不会走这条途径,不会在这里搜一搜,直接在首页搜一搜就行了。编辑器
点击了必要商城以后,还不够。坐标能够取百分比,可是要注意百分比要控制好。进入必要商城后,这个地方仍然是个 WebView,我仍是没有权限,只能继续用坐标。
可是这个地方坐标范围就很大了,“必要商城-小程序”这一整块均可以点击,选一个中间的点,这里用比例算一下,应该仍是能够的。
大概预估一下,在多个机型中试一下,由于这个须要你不断测试,测试调整百分比基数的,确保你达到必定的成功率。点击进入小程序页面:
这个地方均可以识别,这个地方其实不属于微信了。只是经过微信的渠道来访问到这样的一个东西。相似于把这个小型 Web 网站系统嵌入到这个里面来了。
这里面的内容,在 Web 网页随便都能找到的。因此这个地方一进来以后就要切换,可是加载也须要时间。因此加载的时间要稍微等一等。
首页、个人、分类、购物车是能够做为 App 应用程序识别的。
能够保证首页、个人、分类、购物车出现,而后 sleep 5 秒钟,尽可能保证中间区域能够加载出来。
这里用到了 14 秒钟。10 秒也是能够的,由于这里比较慢。如今打印当前全部的上下文cons=driver.contexts
。打印出来后,要切换到 context,这个时候切换和以前的 WebView 是不同的。
列出来的 WebView 名字当中,有 2 个跟腾讯有关的,这个 toolsmp 是我选的,以前有com.tencent.mm:tool
。WebView 可能有 2-3 个,只要进入想要的WEBVIEW_com.tencent.mm:toolsmp
,这个是咱们在这里指定识别到的程序:
切进来以后,其实就是个小型的应用系统嵌在这里面来了。那它可能就不止一个窗口了。不像一个页面中那么简单,小程序就复杂一点。
可能不止一个窗口,因此在进来以后,不要着急,不要认为肉眼看到的,当前就在这个页面。
还须要你先获取当前的全部窗口句柄,要判断你要操做的元素是否在当前的页面当中。若是不在,那就得换一个,由于一个窗口句柄就表明一个页面。
因此获取了当前全部的窗口的句柄:hs=driver.window_handles
,拿到以后对它作了个遍历:
for handle in hs:
driver.switch_to.window(handle)
#首先切换到这个窗口当中,由于我不知道哪一个窗口包含了我要的元素,切换完成以后,我会判断一下
#当前这个窗口对应的页面的源码当中,有没有我要找的。好比窗口中有不少必要商城相关的,能够写必要商城相关的,各类文字均可以用,好比女装、美妆啊。
print("切换到窗口:",handle)
time.sleep(3)
#print(driver.page_source)
if driver.page_source.find("热门") !=-1:
break
若是能找到热门这个字,那我就认为当前是正在我操做的页面。而后就再也不进行后续遍历了,由于遍历的过程当中是至关于已经切进来了的,若是当前确实很符合条件,就再也不遍历也再也不切换到别的窗口,就在当前窗口。
肯定当前操做的窗口页面是什么以后,接下来的事就是找元素,操做元素。和 Web 自动化同样。注意:Chromedriver 要准备好。切换的时候要准备 Chromedriver。
除了这一种方式以外,还有一种方式。就是纯 Python 代码,不须要搞的这么复杂。
如今是经过 Appium,Python 也有一个 Uiautomator2 这样的一个第三方库,不须要经过 Appium,能够直接和安卓手机通讯。(这是国内某位大神写的,专门支持 Python 的)
地址:https://github.com/xiaocong/uiautomator
另一种微信小程序、公众号 H5 的自动化,就是在这个基础上作了个封装。这个叫作FAuto Test。
它是基于 Python,可是它有一个缺陷,目前只支持 Python2,尚未开放到 Python3。
腾讯本身作的开源的框架:https://github.com/Tencent/FAutoTest
能够试下上面官方文档中封装好的代码,能够下载个 2.7 的 Python 装下,2.7 和 3.4 并不冲突,装 2 个版本就行了。
可是环境变量,配置一个版本就能够了,不须要把 2.7 配上去,直接配 3.4。
环境变量运行的时候只识别一个。若是你配置了两个环境变量,只识别前一个,后面那个等于没有配置是同样的。
在写代码的时候能够选择用哪一个版原本写。环境变量配置经常使用的 3 点几的版本,2 点几不用配,直接使用就行了。
用 Appium 结合 Python 代码,问题比较多,比较尴尬。这个代码里进程名称比较固定,不太固定是真正在小程序里操做的是什么。
可是这个是 Web 自动化。Web 自动化怎么作就怎么作,重点是前面的一些固定的方式。