uiautomator模拟过程中的问题
来源:5-4 通过U2实现滑动短视频-2

兰陵小生
2020-07-29
老师我在撰写的过程中遇到了以下的一些问题。
- object is not callable
- 我尝试修改了很多不同的button,都说not callable。这个是为什么?
- 有时候代码会在“滑动查看更多”这里反复华东, 当没有这个字的时候也会反复滑动。
- 32001 jsonrpc error, 这个有时候会出来,有时候不出来。
- 另外请问学了appium是不是就不需要用uiautomator2了是吗
最后我想真诚的真心的感谢您!我听了很多imooc的课程, 您的课程材料超级全,超级周到。 授课的内容也超级棒和广。感谢您!图片描述
2回答
-
第四个问题,尽量使用uiautomator2,appium太慢了,是我在18年到19年间课程中使用的工具,目前建议使用uiautomator2。
其他问题,我需要看到你的代码和使用场景。
012020-07-31 -
兰陵小生
提问者
2020-07-31
我在提交的另一个新问题,把代码写入。 您的回答很有帮助。 那我就不用去学appium
我把代码在这里也贴一下。
import uiautomator2 as u2
import time
#针对版本30元抖音版本
class Douyin(object):
# 在__init__方法里面连接设备
def __init__(self, serial="7030018020040748"):
self.d = u2.connect_usb(serial=serial)
self.start_app()
self.handle_watcher()
self.size = self.get_windowsize()
# 是用来获取一个初始时间
self.t0 = time.perf_counter()
def start_app(self):
"""启动app"""
self.d.app_start(package_name="com.ss.android.ugc.aweme")
def stop_app(self):
"""app退出逻辑"""
# 先关闭监视器
self.d.watcher.stop()
self.d.app_stop("com.ss.android.ugc.aweme")
self.d.app_clear("com.ss.android.ugc.aweme")
def stop_time(self):
"""停止时间"""
# 时间是秒
if time.perf_counter() - self.t0 > 50:
return True
def handle_watcher(self):
"""监视器"""
#好的/青少年包含
self.d.watcher.when('//*[@resource-id="com.ss.android.ugc.aweme:id/m7"]').click()
#通知权限
self.d.watcher.when('//*[@resource-id="com.ss.android.ugc.aweme:id/a4r"]').click()
#运行电话
self.d.watcher.when('//*[@resource-id="com.android.packageinstaller:id/permission_allow_button"]').click()
# 发现滑动查看更多
self.d.watcher.when('//*[@text="滑动查看更多"]').click()
# 添加一个监控器
self.d.watcher.when('//*[@text="快速进入TA的个人中心"]').click()
# 监控器写好之后,一定要记得启动
self.d.watcher.start(interval=1)
def get_windowsize(self):
"""获取窗口大小"""
return self.d.window_size()
def click_user(self):
self.d.click(0.409, 0.31)
self.d(resourceId="com.ss.android.ugc.aweme:id/et").click()
self.d.click(0.412, 0.488)
self.d(resourceId="com.ss.android.ugc.aweme:id/et").click()
self.d.click(0.425, 0.664)
self.d(resourceId="com.ss.android.ugc.aweme:id/et").click()
self.d.click(0.384, 0.841)
self.d(resourceId="com.ss.android.ugc.aweme:id/et").click()
if self.d(resourceId="com.ss.android.ugc.aweme:id/et").exists(timeout=20):
# and self.d(resourceId="com.ss.android.ugc.aweme:id/u0").exists:
# 进入正常的视频页面,开始滑动
x1 = int(self.size[0] * 0.462)
y1 = int(self.size[1] * 0.84)
y2 = int(self.size[1] * 0.166)
self.d.swipe(x1, y1, x1, y2)
def swipe_douyin(self):
"""滑动抖音视频和点击视频发布者头像的操作"""
# 来判断是否正常的进入到了视频页面
# 网络情况不好也包含在内了
if self.d(resourceId="com.ss.android.ugc.aweme:id/a05", text="发现").exists(timeout=20):
self.d(text="发现").click()
self.d.click(0.365, 0.084)
if self.d(resourceId="com.ss.android.ugc.aweme:id/et").exists(timeout=20):
self.d(resourceId="com.ss.android.ugc.aweme:id/gg").set_text("欧莱雅")
self.d(text="搜索").click()
if self.d(resourceId="com.ss.android.ugc.aweme:id/et").exists(timeout=20):
while True:
# 到规定的时间停止循环
if self.stop_time():
self.stop_app()
return
if d(resourceId="com.ss.android.ugc.aweme:id/et").exists(timeout=20):
self.click_user()
if __name__ == '__main__':
d = Douyin()
d.swipe_douyin()
00
相似问题