appium:FLAG_SECURE TakeScreenshotException: Failed to capture a screenshot. Does the current view have ‘secure’ flag set?
1、环境
- Appium Desktop 1.13.0
- android 真实设备 oppo A7 sdk 8.1.0
- android 模拟器 逍遥安卓 sdk 5.1.1
- 京东APP 8.0.2
2、问题由来
通过Appium自动登录京东。
desired_caps_xiaoyao = {
"platformName": "Android",
"deviceName": "vivo_X9Plus",
"appPackage": "com.jingdong.app.mall",
"appActivity": "com.jd.lib.login.LoginActivity",
"automationName": "uiautomator2"
}
发现无法获取登录页面(输入账户密码页面)。实际上模拟器已经加载该页面
图一:Appium一直处于加载
图二:逍遥模拟器已经加载完毕
图三:appium server 日志
3、Failed to capture a screenshot. Does the current view have ‘secure’ flag set?
Google了下 ,发现这个问题应该跟FLAG_SECURE 有关 。FLAG_SECURE是啥,大概跟安全有关,防止被截屏。
无意中看到类似问题详见-请点击。看起来从技术角度出发Appium开发者是有办法绕过FLAG_SECURE限制的(提问者appium server 1.12.1是可以的) , 但不知道最新版本1.13.0为什么无法绕过FLAG_SECURE(盗亦有道???)
4、怎么办
- 使用Appium desktop 的目的往往是录制脚本、获取 resource-id 的信息。这只是过程不是目的
- 直接通过程序获取被FLAG_SECURE限制页面的 app source 是否可行?
#Python api
driver=webdriver.Remote( server , desired_caps_xiaoyao )
source=driver.page_source
直接获取app source 是可以的 ,有可能看APP上有text而实际获取的app source中texe=’ '(比如京东登录页面有“用户名/邮箱/手机号” , 没有“请输入密码”),这个时候搜索"class=“android.widget.EditText”"(字面看就是可编辑) 。