Appium appium +python 怎么处理手机弹窗的权限获取 (有的手机有,有的手机没有需要一套代码去兼容)

无痕 · 2016年05月12日 · 最后由 Yang 回复于 2018年11月16日 · 3322 次阅读

appium +python 做 app 自动化的时候 在对应不同的手机可能弹窗的权限获取弹窗口该怎么处理,因为有的手机会弹 有的手机不会弹,该怎么去判断处理(就是一套代码能在大部分手机上跑起来,不会因为弹窗的问题而报错)

共收到 22 条回复 时间 点赞

在 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 检查放到最后。

simon 回复

1.6 之后这个参数就不好用了

新版 appium
time.sleep(5)
context.driver.switch_to.alert.accept()

assless 回复

你好,尝试使用了你说的 adb shell pm grant 命令,但是授权 Android 应用却不能生效。 实际 cmd 中也没有报错。 我试了 am 去启动应用却能成功,证明环境啥的都应该是没问题的。 就是不知道为什么不能授权成功····· 求指教···

KD 回复

你好,UIBean 这个类,是不是只在 Struts 里面才有的呀??我用的是 Appium+Java+Android,是不是没法用你说的第二个方法了?求解释

怎么写?

HengF丶 回复

self.driver.switch_to.alert.accept() 可以用 ,赞

@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.

simon 回复

[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 的

zhang 回复

权限这个是怎么看的,查出来一堆权限不知道看哪个,求指教?

16楼 已删除

我自己之前用的方式是在可能出现的地方使用 if 要不 try 也是可以的

先使用 driver.switch_to_alert() 跳转到弹窗,然后定位弹窗上面的元素进行点击操作。

Sutune 回复

这个可以处理系统弹框吗,比如允许获取 ** 权限

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());
    }
}

有具体操作吗?

assless 回复

采纳了你等答案,解决了问题。另外我在 android 环境下,appium 启动的 app,权限被强制置空,用 adb shell pm grant 命令可避开界面操作赋予权限。

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册