感觉Appium太垃圾了,于是顺手学了下Airtest
安装并解压
官网,有很显眼的下载按钮
下载完zip文件后进行解压
启动自带AirtestIDE.exe

不想登录的可以跳过

因为提前通过数据线连接了手机和电脑了,所以一进去就显示已经连接到手机设备了
当然启动完再用USB线连上也是没问题的

如果是之后插上手机的话,记得刷新

双击这个框,会开始连接,等待几秒出现手机界面,与真机是同步的


对于某些手机,例如小米,在第一次使用Airtest时,请注意手机上将会弹出提示,询问你是否允许安装App,此时需要点击允许按钮。
打开微信
# -*- encoding=utf8 -*-
__author__ = "lyy"
from airtest.core.api import *
auto_setup(__file__)
start_app("com.tencent.mm")

定位

选完android会弹出这玩意,点yes,手机上也同意安装该应用

点完上面那个小标志后,光标移到那个手机界面上,就有组件详情了


所以点击红点就写好了
poco(name="com.tencent.mm:id/kmv").click()
在pycharm中运行这段代码
安装相关依赖,东西有点多,要等一会
pip install pocoui -i https://pypi.tuna.tsinghua.edu.cn/simple
然后就可以直接把AirtestIDE里的代码直接粘贴过去了
但是代码运行起来又要下东西,能咋办,下呗。。。
成果
# -*- encoding=utf8 -*-
__author__ = "lyy"
from airtest.core.api import *
from poco.drivers.android.uiautomation import AndroidUiautomationPoco
import datetime
poco = AndroidUiautomationPoco(use_airtest_input=True, screenshot_each_action=False)
def response(text):
if text == "现在什么时候了":
return datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
elif text == "感觉Airtest怎么样":
return "只要安装exe就可以使用,很舒适,迁移到python上也只要pip装对应的包。速度也较快,但是IDE和接口的bug挺多,输入文本的API做的不太好,而且网上相关博客很少,社区不活跃"
elif text == "你这个脚本的效果是什么":
return "检测微信主页的可视范围内(不下滑时)的所有有未读信息的好友,判断他们的文本并进行回复"
elif text == "你是谁":
return "刘宇阳"
elif text == "为什么能回复自己发的消息":
return "因为左右两边的聊天框是同一类组件,区分起来有点麻烦;不区分也方便自己测试"
else:
return None
if __name__ == '__main__':
auto_setup(__file__)
# 启动微信
start_app("com.tencent.mm")
print("开始监听")
while True:
# 有带红点的未读新消息
if poco(name="com.tencent.mm:id/kmv").exists():
# 点击第一个红点
poco(name="com.tencent.mm:id/kmv").click()
# 查看聊天界面是否有消息
if poco(name="com.tencent.mm:id/b4b").exists():
# 获得最新消息
target_msg = poco(name="com.tencent.mm:id/b4b")[-1].get_text()
resp = response(target_msg)
if resp != None:
# 输入内容
poco(resourceId="com.tencent.mm:id/kii").click()
# 使用Airtest的专用输入法Yosemite
# 异常捕获解决第一次打开Yosemite输入法报错
try:
text(resp, enter=False)
except:
text(resp, enter=False)
# 点击发送
poco(resourceId="com.tencent.mm:id/b8k").click()
# 点击返回到主页
poco(resourceId="com.tencent.mm:id/yn").click()
很好奇,就使用rubyonrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提
我收到这个错误:RuntimeError(自动加载常量Apps时检测到循环依赖当我使用多线程时。下面是我的代码。为什么会这样?我尝试多线程的原因是因为我正在编写一个HTML抓取应用程序。对Nokogiri::HTML(open())的调用是一个同步阻塞调用,需要1秒才能返回,我有100,000多个页面要访问,所以我试图运行多个线程来解决这个问题。有更好的方法吗?classToolsController0)app.website=array.join(',')putsapp.websiteelseapp.website="NONE"endapp.saveapps=Apps.order("
我是Google云的新手,我正在尝试对其进行首次部署。我的第一个部署是RubyonRails项目。我基本上是在关注thisguideinthegoogleclouddocumentation.唯一的区别是我使用的是我自己的项目,而不是他们提供的“helloworld”项目。这是我的app.yaml文件runtime:customvm:trueentrypoint:bundleexecrackup-p8080-Eproductionconfig.ruresources:cpu:0.5memory_gb:1.3disk_size_gb:10当我转到我的项目目录并运行gcloudprevie
当我在我的Rails应用程序根目录中运行rakedoc:app时,API文档是使用/doc/README_FOR_APP作为主页生成的。我想向该文件添加.rdoc扩展名,以便它在GitHub上正确呈现。更好的是,我想将它移动到应用程序根目录(/README.rdoc)。有没有办法通过修改包含的rake/rdoctask任务在我的Rakefile中执行此操作?是否有某个地方可以查找可以修改的主页文件的名称?还是我必须编写一个新的Rake任务?额外的问题:Rails应用程序的两个单独文件/README和/doc/README_FOR_APP背后的逻辑是什么?为什么不只有一个?
其实做自媒体的成本并不高,入门只需要一部手机即可!在手机上找视频素材、使用手机剪辑视频、最后使用手机发布视频作品获得收益!方法并不难,今天这期内容就来给粉丝们分享一种小方法,每天稳定收益100-300,抓紧点赞收藏!1、找素材(1)使用手机拍摄自己喜欢的经典段落,使用程序把文案内容提取出来(2)也可以在豆瓣、知乎、微博等网站中找一些自己需要的文案素材(3)把文案进行润色修改,可以加入一些自己的观点(4)视频素材可以使用软件中自带的素材,也可以在素材网站中下载完整版的素材2、文案配音(1)把复制好的文案直接导入小程序中(2)调整音色、音调后一键合成音频即可(3)可以选择自己朗读配音,需要花一点时
我们目前正在为ROR3.2开发自定义cms引擎。在这个过程中,我们希望成为我们的rails应用程序中的一等公民的几个类类型起源,这意味着它们应该驻留在应用程序的app文件夹下,它是插件。目前我们有以下类型:数据源数据类型查看我在app文件夹下创建了多个目录来保存这些:应用/数据源应用/数据类型应用/View更多类型将随之而来,我有点担心应用程序文件夹被这么多目录污染。因此,我想将它们移动到一个子目录/模块中,该子目录/模块包含cms定义的所有类型。所有类都应位于MyCms命名空间内,目录布局应如下所示:应用程序/my_cms/data_source应用程序/my_cms/data_ty
运行bundleinstall后出现此错误:Gem::Package::FormatError:nometadatafoundin/Users/jeanosorio/.rvm/gems/ruby-1.9.3-p286/cache/libv8-3.11.8.13-x86_64-darwin-12.gemAnerroroccurredwhileinstallinglibv8(3.11.8.13),andBundlercannotcontinue.Makesurethat`geminstalllibv8-v'3.11.8.13'`succeedsbeforebundling.我试试gemin
我正在使用Postgres.app在OSX(10.8.3)上。我已经修改了我的PATH,以便应用程序的bin文件夹位于所有其他文件夹之前。Rammy:~phrogz$whichpg_config/Applications/Postgres.app/Contents/MacOS/bin/pg_config我已经安装了rvm并且可以毫无错误地安装pggem,但是当我需要它时我得到一个错误:Rammy:~phrogz$gem-v1.8.25Rammy:~phrogz$geminstallpgFetching:pg-0.15.1.gem(100%)Buildingnativeextension
前言一般来说,前端根据后台返回code码展示对应内容只需要在前台判断code值展示对应的内容即可,但要是匹配的code码比较多或者多个页面用到时,为了便于后期维护,后台就会使用字典表让前端匹配,下面我将在微信小程序中通过wxs的方法实现这个操作。为什么要使用wxs?{{method(a,b)}}可以看到,上述代码是一个调用方法传值的操作,在vue中很常见,多用于数据之间的转换,但由于微信小程序诸多限制的原因,你并不能优雅的这样操作,可能有人会说,为什么不用if判断实现呢?但是if判断的局限性在于如果存在数据量过大时,大量重复性操作和if判断会让你的代码显得异常冗余。wxswxs相当于是一个独立
项目介绍随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱小学生兴趣延时班预约小程序的设计与开发被用户普遍使用,为方便用户能够可以随时进行小学生兴趣延时班预约小程序的设计与开发的数据信息管理,特开发了小程序的设计与开发的管理系统。小学生兴趣延时班预约小程序的设计与开发的开发利用现有的成熟技术参考,以源代码为模板,分析功能调整与小学生兴趣延时班预约小程序的设计与开发的实际需求相结合,讨论了小学生兴趣延时班预约小程序的设计与开发的使用。开发环境开发说明:前端使用微信微信小程序开发工具:后端使用ssm:VU