from appiumwebdriverextensionsandroidnativekey import AndroidKey
应用的搜索功能,搜索键在软键盘上的。使用Enter键来代替搜索键。
Enter键 : keyevent:66
Back键:4
Home键:3
按键 *** 作:
driverpress_keycode(AndroidKeyENTER)
启动参数当中关于输入法:
unicodeKeyboard=True
输入法的 *** 作(输入中文时):
1、获取当前设备可用的输入法:
driveravailable_ime_engines
2、获取当前正在使用的输入法:
driveractive_ime_engine
3、切换为其它输入法:
driveractivate_ime_engine(输入法名,可以从1中获取到)
4、输入完成,想要收起键盘:
driverhide_keyboard()
5、键盘是否显示:
driveris_keyboard_shown()
输入法切换的场景:
1、用send_keys输入中文,但是在app的页面当中,并没有显示出输入的内容。
需要切换到,中文输入法。
系列文章:
基于Appium实现深度UI遍历工具
基于Appium实现深度UI遍历工具(二)
分享了需求,功能设计,流程,工具选择。那么这次来分享下。整体的框架模块以及开发需要的类包。
第一、整体模块
对功能有了一些设计,接下来,就是对于整体模块的拆分。再去分享实际项目的工程搭建。
1config
配置模块,针对UI遍历中,所有的配置相关的文件进行管理。
2case模块
case相关,我们这里把UI遍历作为一个case 来实现。可以创建一个uicrawlerpy,控制遍历相关的。
3common包
里面处理通用的功能,adb封装,log封装,webdriver封装,xpath封装,通用配置的封装,测试报告模块等。
4testlog
处理里面所有的log,包括脚本的过程的中log,设备执行logcat相关的日志。方便后续的日志分析和问题的定位。
5testreport
存储测试报告的模块。
6runpy
执行模块。主要的入口。
第二、开发需要类包
第三方依赖包
1PyYAML
解析配置文件
2selenium
用做隐形等待,查找元素
3lxml
页面的UI解析,用于分析解决xpath,所有的定位的方式,都采用xpath的来进行定位。
4opencv-python
文件解析
5Pillow
处理,我们在做点击 *** 作的时候,去记录下点击的位置。
6logbook
log日志处理,记录测试日志
7Appium-Python-Client
appium的python库。这里会做一些简单的封装。
python自身的库
1random
随机模块,处理一些随机的,在文本输入的时候,我们去随机地选取一些配置的文件
2platform
获取一些系统
3os
文件处理
4difflib
文本对比
5datetime
时间处理
6shutil
文件处理的高级模块
7hashlib
用于产生一个固定的字符串,其实是一个加密的模块。
大概列举了一些用到的库,在后面的代码编写的过程中,如果遇到需要使用其他类库,还会增加。
1界面
在appium 主界面host 上输入127001 然后点击start server 即可开启appium
2点击Advanced 选项
3appium server 界面
点击放大镜可以开启会话,开启会话页面详情。
adbName: 设备名称。appium 可以通过此属性找到对应的设备进行通讯。
获取方式: adb devices
appPackage: 应用包名。通过此属性,appium 得知需要和哪个app 进行通讯。
获取方式: adb shell dumpsys activity | 'mFocusedActivity'
appActivity: 应用的入口activity,通过属性,可以开启app。在sdk--build tools 目录下找到aaptexe 工具,执行aapt dump badging apk 对应的路径信息。这里只截取了部分。供参考撒。
注意!: apk的后缀必须是apk,我用exe 试了是获取不到的;apk 的路径下不能有中文。
platformName: 平台名,android 的话就是Android ;ios 的话就是IOS
noReset: 不重置应用数据。如果noRest = false,appium 执行的时候会将应用的数据清除;反之,noReset = true, 则appium 执行的时候不会清除数据。不加该字段默认值为false。
所有的字段修改完成之后,点击save 进行保存 *** 作。
我们之前一直都是使用 UI Automator Viewer 来查看选择元素的,如果你们愿意的话还可以用 Appium desktop 里面自带的一个查看元素的工具叫 Inspector 。打开这个查看元素工具首先要确保 Appium Server 要运行起来。然后点击这个按钮。
点击之后,打开是这个页面。
这个工具也可以用来查看界面,但是它查看界面有点麻烦的地方是什么呢?需要我们手动创建一个 session ,其实也就是一个客户端,和 appium server 连接。需要在 Desired Capabilities 里面填入一些参数。其实就是设定这些信息。
把这些填写进去:
填写之后,我们可以点击 Save as 保存一下方便下次使用。
保存之后可以去 Saved Capability Sets (1) 里面查看。
选择我们保存的信息,然后点击 StartSession 。
这里就启动起来了。
比如我们想查看 发现 ,我们就点它。
这两种元素各有优缺点, Inspector 感觉没有 UI Automator Viewer 稳定,界面也没有 UI Automator Viewer 清晰,第一次用的时候比较麻烦需要填写参数。总体上还不错。 如果我们手机切换了界面,比如进入了 我的 界面可以点击
刷新按钮刷新,有的人会说这个跟 UI Automator Viewer 一样吗,其实它还有一个模式的选择,假如说你选择了 Tap By Coordinates 模式。
这个时候你就不需要在手机上点了,直接在界面上点,就进入到了一个 *** 作的模式,这个时候再去 *** 作某个元素,就不用在手机上点了,这个时候界面就会自动刷新了。这是它一个优点,它还有一个优点就是元素的 id 就是 resource-id 它直接标注在树上。
这样有什么好处?我们找元素的时候我们经常要干的事情是什么?就是如果这个元素本身没有 id 或者他的 id 重复,那我就找上层节点有没有 id 的,上层节点有没有 id 在原来的 UI Automator Viewer 找的时候比较麻烦,需要一层层往上找,一个个点一个个的去看。 inspector 特别好的地方是, 如果元素有 id , 直接就在树的节点里面添加了,不用一个个点过去看。它还有一个最大的好处是什么呢?比如这个 id 怎么判断有没有重复呢,在 UI Automator Viewer 没什么特别好的方法,需要导出来。但是在 inspector 里面就有这个好处,它可以把你 id 的表达式拿来判断,举个例子,我们点击 发现 发现它是有 id 的。
因为现在我们也不知道它是不是唯一的,先把它拷贝下来。然后点击 Search for element 按钮。
只后d出这个窗口,我们是根据 id 去找所以 Locator Strategy: 选择 id ,然后输入拷贝的内容之后点击 Search 。
就会发现这里面有 6 个同样的 id 。所以就不是唯一的。
同样的也可以根据 XPath 去找。自己可以试一下这样可以节省不少的时间。
如果是这种情况,就考虑其他的定位方法了,肯定有一种能够解决的。
有这几种方法,也可以用:
一、
如果xpath一样,id不一样的话,可以通过找id(viewer当中的resource-id),
selfdriverfind_element_by_id("comchanjetcspcustomer:id/workrecord_add_content")send_keys(contextfield)
二、
如果一定要用xpath,看看viewer当中@index是不是有一个是0,有一个是1,一般来说不会重;如果真的重了,通过text可者其他的不一致的项,再试试
selfdriverfind_element_by_xpath("//androidwidgetTextView[contains(@text,'报价')]")
除了这些,还有以下的找元素的方式,换一换,总有一个能行的
selfdriverfind_element_by_class_name('androidwidgetImageView')click()
selfdriverfind_element_by_name("新增工作记录")click()
“
appium是一个开源的移动端自动化测试框架,可以测试原生的、混合的以及移动端的web项目,appium是跨平台的,可以运行在osx、windows以及linux桌面系统上,用来测试ios、android应用
”
Selenium
2004年,Thoughtworks的员工Jason Huggins编写了一个名为JavaScriptTestRunner的测试工具
后来多人修改架构为独立服务模式,开发并推出了Selenium RC和Selenium-IDE
“
Selenium是一个用于Web应用程序测试的工具,Selenium测试直接运行在浏览器中,就像真正的用户在 *** 作一样
”
这个工具的主要功能包括:
测试与浏览器的兼容性
测试你的应用程序看是否能够很好的工作在不同浏览器和 *** 作系统之上
测试系统功能
创建回归测试检验软件功能和用户需求
“
框架底层使用JavaScript模拟真实用户对浏览器进行 *** 作
”
1x版本的Selenium需要启动一个Server,将 *** 作Web元素的API调用转化为一段段Javascript,然后在浏览器中注入这段Javascript
但是这样会有缺点
速度慢
依赖于浏览器对注入的Javascript的正确解释
于是有了2x版本的Selenium版本
2x版本的Selenium整合了webdriver和原来的Selenium,把多个浏览器原生的API封装成一套更加面向对象的Selenium webdriver API
这样做的好处是速度提高,且调用的稳定性交给了浏览器
2x的Selenium也可以叫Webdriver
Appium
为什么讲appium前,提到selenium呢?
Appium是基于webdriver协议添加了对移动设备自动化api扩展而成的,这样做的好处是避免重复造轮子
appium的框架是什么样的?
appium使用client-server架构,appium-client以脚本的形式,支持多种语言
appium-server需要安装appium-server程序,用来监听端口上来自appium-client的命令
“
appium-server已经很久没更新过版本了, 目前可以用appium-desktop代替
”
UiAutomator是谷歌推出的一款用Java编写的UI测试框架,可以使用UiAutomator框架提供的API来对安卓系统进行一系列的自动化测试 *** 作
Bootstrap是Appium在初始化的时推送到Android手机上的一个UiAutomator测试脚本,该脚本的唯一一个测试方法所做的事情是在手机端开启一个SocketServer(通信模块),用来监听Appium从PC端过来的命令发送给UiAutomator来执行处理
工作原理
“
appium-server启动并监听在某个端口,接收测试脚本发来的命令请求,再将请求发送给中间件Bootstrapjar, 中间件Bootstrapjar会把appium的命令转换成UiAutomator的命令 ,发送给UiAutomator,UiAutomator对android系统进行 *** 作
”
安装
更多内容,在 汽车网络诊断通信 上可以看到
1查看iso设备udid:
终端输入: idevice_id -l
2查看应用的bundleID:
安装ideviceinstaller
终端输入: brew install ideviceinstaller
ideviceinstaller -l
抖音对指定用用户的所有视频抓取策略
方案1:接口参数有加密,需脱壳app进行反编译破解加密参数。(难度较大,不容易实现)
方案2:使用appium自动化框架配合mitmdump中间人代理截取手机发送的数据包,从而获取数据。(容易实现,且不容易被识别反爬)
综上所述我选用的实现方案是方案2
二、可能需要的资源
Android模拟器或者真机
长期有效代理
三、实现原理流程图
三、具体实现过程
1、首先利用fiddler抓包工具分析抖音app的主页滑动的请求接口
2、设置手机或者模拟器的代理为本机ip和端口 8888(fiddler监控端口)
3、手机点到监测账号主页动态页面,(因为动态页面的数据跟作品是相对应的,而所有 作品的接口反爬比较严格,所以采用动态接口)手动向下滑动触发请求数据接口(后 期可通过appium实现自动化 *** 作)
4、对抖音app数据请求接口进行抓包分析
5、找到具体接口之后编写mitmproxy监控脚本准备拦截请求和解析入库的 *** 作
5、设置模拟器或者手机的代理为本机ip和自定义的端口 9090(mitmproxy监控此端口)
6、运行mitmproxy监控脚本监控手机 9090 端口发出的请求
7 手动滑动抖音app视频动态页刷新请求会看到数据已经被截获了(可利用appium 自动化实现滑动)
以上就是关于appium-按键 *** 作(AndroidKey)+输入法全部的内容,包括:appium-按键 *** 作(AndroidKey)+输入法、基于Appium实现深度UI遍历工具(三)、appium desktop 使用简介等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)