appium +python 做 app 自动化的时候 在对应不同的手机可能弹窗的权限获取弹窗口该怎么处理,因为有的手机会弹 有的手机不会弹,该怎么去判断处理(就是一套代码能在大部分手机上跑起来,不会因为弹窗的问题而报错)
强行判断啊 一般也就启动的时候,会弹出吧。 检查呗,把权限的 ui 检查放到最后。
怎么写?
我自己之前用的方式是在可能出现的地方使用 if 要不 try 也是可以的
在 try 里面直接写点击弹窗的类,找不到的话就不管。不过,根据不同手机弹出的对话框不一致需要做大量的兼容工作,我现在公司 android 手机 6.0 系统这种弹窗超多,光是适配这些手机的代码就一两千行。
LZ 说的是哪个端?IOS 是有自带的方法:
desired_capabilities={
'app': app,
'platformName': 'iOS',
'deviceName': 'iPhone 6',
'autoAcceptAlerts': 'true',
})
'autoAcceptAlerts': 'true',这句话就是自动接收系统权限的方法。如果是安卓,就等弹出之后捕获元素丢到 try 里面去处理吧
@wyb199026 我设置了'autoAcceptAlerts': 'true',但启动 app 后,没看到权限弹层被处理的过程,弹层还一直在,这是什么回事?
[Appium] Creating new XCUITestDriver session
[Appium] Capabilities:
[Appium] deviceName: 'iPhone 6'
[Appium] app-package: 'com.app'
[Appium] udid: '7d8f31325252013456b7cec687ff2a09b5c702a0'
[Appium] autoAcceptAlerts: 'true'
[Appium] automationName: 'XCUITest'
[Appium] version: '10.2'
[Appium] device: 'iOS'
[Appium] platformName: 'iOS'
[Appium] bundleId: 'com.app'
[debug] [XCUITest] XCUITestDriver version: 2.8.0
[BaseDriver] Capability 'autoAcceptAlerts' changed from string to boolean. This may cause unexpected behavior
[BaseDriver] The following capabilities were provided, but are not recognized by appium: app-package, version, device.
[XCUITest] The capabilities 'autoAcceptAlerts' and 'autoDismissAlerts' do not work for XCUITest-based tests. Please adjust your alert handling accordingly.
[XCUITest] The capabilities 'autoAcceptAlerts' and 'autoDismissAlerts' do not work for XCUITest-based tests. Please adjust your alert handling accordingly.
看样子可能是 Appium 版本不一致,导致使用的 IOS 测试工具不一致,你是最新的版本吗?我的 Appium 版本是 1.4 的,我测试是 OK 的。
@wyb199026 我的是 1.6.3,我也看到文章说到,旧版本是可以使用 autoDismissAlerts 的
@u1449648501 1.6 之后这个参数不好用了,那有什么好办法?
新版 appium
time.sleep(5)
context.driver.switch_to.alert.accept()
先使用 driver.switch_to_alert() 跳转到弹窗,然后定位弹窗上面的元素进行点击操作。
JAVA Appium 中,我试了下面两种方式,方式一报错未生效,方法二生效可用。供各位参考
selectDriver.driver.switchTo().alert().accept();
// 自动处理应用首次启动系统授权
UIBean systemPopUpBox = new UIBean(by.NAME, "始终允许", "系统授权弹框");
while (appiumUtil.isElementExist(systemPopUpBox)) {
try {
appiumUtil.clickBean(systemPopUpBox);
} catch (Exception e) {
logger.error("自动点击应用app授权出错!" + e.getMessage());
}
}
用 aapt d permissions xxx.apk, 来查询包名和权限。
然后用 python 或者 java 执行:adb shell pm grant 包名 权限, 来赋予权限。
有具体操作吗?
采纳了你等答案,解决了问题。另外我在 android 环境下,appium 启动的 app,权限被强制置空,用 adb shell pm grant 命令可避开界面操作赋予权限。
你好,尝试使用了你说的 adb shell pm grant 命令,但是授权 Android 应用却不能生效。 实际 cmd 中也没有报错。 我试了 am 去启动应用却能成功,证明环境啥的都应该是没问题的。 就是不知道为什么不能授权成功····· 求指教···
你好,UIBean 这个类,是不是只在 Struts 里面才有的呀??我用的是 Appium+Java+Android,是不是没法用你说的第二个方法了?求解释