appium +python 做 app 自动化的时候 在对应不同的手机可能弹窗的权限获取弹窗口该怎么处理,因为有的手机会弹 有的手机不会弹,该怎么去判断处理(就是一套代码能在大部分手机上跑起来,不会因为弹窗的问题而报错)
在 try 里面直接写点击弹窗的类,找不到的话就不管。不过,根据不同手机弹出的对话框不一致需要做大量的兼容工作,我现在公司 android 手机 6.0 系统这种弹窗超多,光是适配这些手机的代码就一两千行。
LZ 说的是哪个端?IOS 是有自带的方法:
desired_capabilities={
'app': app,
'platformName': 'iOS',
'deviceName': 'iPhone 6',
'autoAcceptAlerts': 'true',
})
'autoAcceptAlerts': 'true',这句话就是自动接收系统权限的方法。如果是安卓,就等弹出之后捕获元素丢到 try 里面去处理吧
用 aapt d permissions xxx.apk, 来查询包名和权限。
然后用 python 或者 java 执行:adb shell pm grant 包名 权限, 来赋予权限。
强行判断啊 一般也就启动的时候,会弹出吧。 检查呗,把权限的 ui 检查放到最后。
新版 appium
time.sleep(5)
context.driver.switch_to.alert.accept()
你好,尝试使用了你说的 adb shell pm grant 命令,但是授权 Android 应用却不能生效。 实际 cmd 中也没有报错。 我试了 am 去启动应用却能成功,证明环境啥的都应该是没问题的。 就是不知道为什么不能授权成功····· 求指教···
你好,UIBean 这个类,是不是只在 Struts 里面才有的呀??我用的是 Appium+Java+Android,是不是没法用你说的第二个方法了?求解释
怎么写?
@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 的。
@u1449648501 1.6 之后这个参数不好用了,那有什么好办法?
@wyb199026 我的是 1.6.3,我也看到文章说到,旧版本是可以使用 autoDismissAlerts 的
我自己之前用的方式是在可能出现的地方使用 if 要不 try 也是可以的
先使用 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());
}
}
有具体操作吗?
采纳了你等答案,解决了问题。另外我在 android 环境下,appium 启动的 app,权限被强制置空,用 adb shell pm grant 命令可避开界面操作赋予权限。