Appium Appium-处理系统弹窗

王小喜 · 2018年06月06日 · 最后由 lvshunnian 回复于 2022年04月06日 · 9704 次阅读

前言:
最近在搞 appium 自动化,iOS 的系统弹窗是大家都会遇到的,本文来总结处理这种弹窗的用法。


环境
MacOS:10.13.4
Appium-desktop:1.6.1
Xcode:9.3.1


一、使用 switch_to.alert 处理弹窗

#所有弹窗默认允许
self.driver.switch_to.alert.accept()

首先推荐这种方式,几乎不会失败。解决这个问题之后,作者默默的高兴了一中午。


二、使用 App Inspector 定位弹窗元素

#弹窗中允许按键,查看该元素的xpath。

xpath为://XCUIElementTypeApplication[1]/XCUIElementTypeWindow[6]/XCUIElementTypeOther[2]/XCUIElementTypeAlert[1]/XCUIElementTypeOther[1]

self.driver.find_element_by_xpath(locator).click()

这种情况有时候会识别不到元素,从而失败,导致自动化用例无法继续运行,建议使用第一种方法。


三、错误方法:'autoAcceptAlerts': True
Appium 更新后,改为使用 XCUITest 后,该参数:autoAcceptAlerts 已经废弃,官网已经详细说明,请大家及时更新信息,不要被这个问题所困扰。


以上,对你有帮助的话,请点赞吧~~

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 16 条回复 时间 点赞

switch_to.alert 使用的时候,每次启动都会判断一下,没有就报错,如果不能 reset app,怎么办

你好,这个方法放在哪一个步骤呢,我放在了测试用例中,可是出现弹窗的时候没有处理呢

John 回复

亲,你把这个方法放在哪一步骤了呢?

HUI 回复

setup 里

John 回复

那你可以写一个判断语句,先判断有没有弹窗,在执行 switch_to.alert

HUI 回复

我就是放在测试用例里面的~先判断是否有弹窗,然后在执行 switch_to.alert

收藏,也有相同场景要处理弹窗

codeskyblue 给 Appium 用户看的 ATX 指南 (Android 篇) 中提及了此贴 06月30日 22:41
John 回复

我也想问的是这个问题,你们解决了吗

yajunzheng 回复

switch_to.alert 可以用,但是这个方法每次都会触发,没有弹框会报错,所以你需要每次都判断弹框

John 回复

是这样子的,我加了判断还没有完全实现,您判断的依据是根据 name ?还是什么来进行的判断,可以参考下吗

yajunzheng 回复

很遗憾,我这无法定位到权限弹窗。。😂

yajunzheng 回复

我是根据权限弹窗的内容来判断是否有弹窗

王小喜 回复

我 IOS 真机权限弹窗跟主界面好像不在一个界面是的,跟安卓的不一样,安卓的我就可以进行处理,不知道是什么原因,我也想安内容来进行定位,如果包含有允许、而且是 type==XCUIElementTypeButton 就进行点击

yajunzheng 回复

try except 异常处理就不会报错了

阿凯 ATX 学习 (二)-Atx Weditor 中提及了此贴 05月11日 09:45

我试了下 appium 1.8.1 版本的, macos ,python 的 client.
结果很意外 ,获取 driver 的这一步, 也就是 driver = webdriver.Remote(server_url, desired_caps), 在有弹窗的时候【我这边的弹窗是推送的弹窗,这个是会在 app 启动的同时自动弹出】是不会执行的,会一直等到 wda timeout 后才会再次重启 wda【时间默认是 4 分钟】,不知道有没有人遇到同样的情况。

不知道大家现在怎么处理 ios 的系统弹窗,我现在无论是用 appium 或者 wda,都没办法处理系统弹窗,例如连接蓝牙时
就算点击弹窗上的坐标,也会出错,非弹窗部分则不会

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