环境配置可以参考:https://github.com/openatx/uiautomator2
1.启动夜神模拟器
不要开启各种安全卫士,不然夜神模拟器会莫名其妙的卡在99%处。将夜神模拟器改成手机版,一般默认是平板。
2.在cmd下输入:adb devices查看已连接设备。
正常情况下,会有如下输出,如果没有,测试下adb有没有加入到环境变量,在cmd里输入adb,或者adb version,是否报错。
3.在cmd下输入:python -m weditor
它会自动在浏览器打开一个窗口
Weditor旁边默认是Android,如果不是,改回Android,往右填写的是ip地址和端口号,如果是模拟器,就填写第二步adb devices输出的那个地址和端口。点一下连接,如连接成功,旁边会显示稻穗。灰色框里会出现夜神的界面。如果灰色框内手机界面是黑屏,可以在模拟器里打开强制渲染,然后reload下Weditor;如果还不行,重启夜神模拟器;如果还不行,执行下图框内动作。关于黑屏的以上不分先后,可循环多次执行。在渲染开启后如果黑屏消失,可以关了渲染。(下图来自:github)
4.pycharm进场
首先看下是否连接:
有信息输出,说明连接成功了。
5.获取app名称
上图右侧这些键值对都可以使用,这里先使用最简单的位置信息,将下面的位置代码复制一下并执行也可以使用xpath
(d.xpath("//android.widget.TextView[@text='考研帮']").click())
import uiautomator2 as u2
d = u2.connect('127.0.0.1:62001')
d.click(0.482, 0.532)
print(d.info)
将会看到考研帮APP已经启动了
在weditor里reload一下,让两者同步
然后定位下“跳过”的键值对,备用。
现在代码进行到跳过这一步了,代码如下:
import uiautomator2 as u2
d = u2.connect('127.0.0.1:62001')
d.click(0.482, 0.532)
d(resourceId="com.tal.kaoyan:id/tv_skip").click()
在模拟器里将应用的数据清除下就可以执行上面的代码了
6.执行登录
和上面类似,定位用户名,密码,登录按钮,执行代码就好。在执行之前先清理下应用数据,或者在代码里面加判断。
代码如下:
# -*- coding: utf-8 -*-
# @AuThor : frank_lee
import uiautomator2 as u2
d = u2.connect('127.0.0.1:62001')
# d.click(0.482, 0.532)
d.xpath("//android.widget.TextView[@text='考研帮']").click()
d(resourceId="com.tal.kaoyan:id/tv_skip").click()
d(resourceId="com.tal.kaoyan:id/login_email_edittext").send_keys("starrymusic")
d(resourceId="com.tal.kaoyan:id/login_password_edittext").send_keys("我是密码")
d(resourceId="com.tal.kaoyan:id/login_login_btn").click()
对于这种跳出的对我们无用的信息,我们需要跳过或叉掉,叉掉前需要加以判断,有没有出现这些元素,如果没出现而执行了该动作势必会报错。
类比上述步骤,可以使用代码执行登录,并滑动“休闲空间”某个神奇的板块
代码如下:
# -*- coding: utf-8 -*-
# @AuThor : frank_lee
import uiautomator2 as u2
import time
# 连接模拟器
d = u2.connect('127.0.0.1:62001')
# 打开考研帮
try:
if d.xpath("//android.widget.TextView[@text='考研帮']").wait(3):
d.xpath("//android.widget.TextView[@text='考研帮']").click()
time.sleep(2)
except:
pass
# 点击跳过页面
try:
if d(resourceId="com.tal.kaoyan:id/tv_skip").wait(3):
d(resourceId="com.tal.kaoyan:id/tv_skip").click()
except:
pass
try:
# 实现登录
if d(resourceId="com.tal.kaoyan:id/login_email_edittext").wait(2):
d(resourceId="com.tal.kaoyan:id/login_email_edittext").send_keys("starrymusic")
d(resourceId="com.tal.kaoyan:id/login_password_edittext").send_keys("我是密码")
time.sleep(1)
d(resourceId="com.tal.kaoyan:id/login_login_btn").click()
time.sleep(2)
except:
pass
try:
# 下线通知
if d(resourceId="com.tal.kaoyan:id/tip_commit").wait(3):
d(resourceId="com.tal.kaoyan:id/tip_commit").click()
time.sleep(2)
# 发现新版本
if d(resourceId="com.tal.kaoyan:id/view_wemedia_cacel").wait(3):
d(resourceId="com.tal.kaoyan:id/view_wemedia_cacel").click()
time.sleep(2)
# 隐私条款
if d(resourceId="com.tal.kaoyan:id/tv_agree").wait(3):
d(resourceId="com.tal.kaoyan:id/tv_agree").click()
time.sleep(3)
# 下线通知
if d(resourceId="com.tal.kaoyan:id/tip_commit").wait(3):
d(resourceId="com.tal.kaoyan:id/tip_commit").click()
time.sleep(2)
except:
pass
try:
# 点击下面社区板块
if d(resourceId="com.tal.kaoyan:id/mainactivity_button_forum").wait(3):
d(resourceId="com.tal.kaoyan:id/mainactivity_button_forum").click()
time.sleep(0.5)
d(resourceId="com.tal.kaoyan:id/mainactivity_button_forum").click()
time.sleep(1)
# 上面为什么执行两次,规避弹出页
# 点击更多板块
if d(resourceId="com.tal.kaoyan:id/mainactivity_button_forum").wait(3):
d(resourceId="com.tal.kaoyan:id/hotthread_recommend_moreforum").click()
time.sleep(1)
# 点击休闲空间
if d(resourceId="com.tal.kaoyan:id/more_forum_title", text=u"休闲空间").wait(3):
d(resourceId="com.tal.kaoyan:id/more_forum_title", text=u"休闲空间").click()
time.sleep(2)
d(scrollable=True).scroll.to(text="玫瑰初相遇")
# 点击'玫瑰初相遇'板块
if d.xpath("//android.widget.TextView[@text='玫瑰初相遇']").wait(3):
d.xpath("//android.widget.TextView[@text='玫瑰初相遇']").click()
time.sleep(3)
# 执行滑动动作,滑动20次
i = 0
while i < 10:
d(scrollable=True).scroll.toEnd(steps=50)
time.sleep(2)
d(scrollable=True).scroll.toEnd(steps=50)
time.sleep(2)
i += 1
except:
pass
网友评论