iOS 平台自动化测试升级
iOS App 测试环境升级,遇到的问题以及解决方法
Mac 实体机升级到 Sonima 14.5
Xcode 升级到 15.3
问题1: WebDriverAgent 编译失败
尝试下载 最新版本的WDA 源码编译,可以编译成功。
问题2:具体坐标直接点击的代码都会报错。
向 appium 开源项目报了这个问题,过了10分钟就得到回复
Please use W3C Actions instead.
Also, we do not support Appium 1 anymore - please upgrade to Appium 2.
于是升级相关配置和修改所有涉及到的代码,使用 W3C Action 替换原来的 MultiAction、TouchAction。
问题3:升级 Appium 从 1.2.0 升级到 2.9,执行报错,unexpected keyword argument ‘desired_capabilites’

排查,搜到一个解决方法 https://github.com/appium/python-client/issues/878
该问题已经在 2.10 以上版本修复,于是再更新 Appium 到 2.11.1
问题4:系统弹框元素无法被识别到

之前也有这个问题,但是可以通过 driver.page_source 来定位到,现在升级后不行。
解决:不直接点击元素,而是使用脚本语句处理
driver.execute_script('mobile: alert',{'action': 'accept', 'buttonLabel': “Continue”}
问题5:登录google页面元素无法获取
之前偶尔也会遇到这个问题,但是重启模拟器、在Xcode重新编译WDA、重启Appium后,就可以定位到登录页面元素,这次升级后却不行。

重新安装了 Appium Server GUI 1.22.1版本(之前用的是 Appium 1.21.0-1),发现只要启动了Appium Server GUI 客户端后,不需要再通过 Xcode 编译出 WDA 到模拟器中,直接运行代码启动webdriver,模拟器中会自动生成 WDA,此时 Editor app 也能启动起来。
虽然现在不用自己去编译WDA 了,但是进入 Appium Server GUI 1.22.1 安装路径下的 /Applications/Appium\ Server\ GUI.app/Contents/Resources/app/node_modules/appium/node_modules/appium-webdriveragent,打开 WebDriverAgent.xcodeproj 来编译 WDA 会报错,无法生成WDA,但用 github 上的 WebDriverAgent-8.7.2 包来编译,是没问题的。
所以,现在使用 Appium Server GUI 1.22.1版本时,要么不自己去编译WDA,要么要用最新的包来编译 WDA,才能正常运行代码。
部分修改代码
点击坐标的方式改变,使用 PointerInput 和 ActionBuilder,不再支持 TouchAction(self.driver).tap(x=x, y=y, count=1).perform()
1 | from selenium.webdriver import ActionChains |
1 | pointer = PointerInput(kind=interaction.POINTER_TOUCH, name='finger1') |
1 | pointer = PointerInput(kind=interaction.POINTER_TOUCH, name='finger1') |
1 | actions = ActionChains(self.driver) |
1 | pointer = PointerInput(kind=interaction.POINTER_TOUCH, name='finger1') |
不再支持像 find_element_by_accessibility_id、find_element_by_name 这类的接口,而是使用 find_element(MobileBy.ACCESSIBILITY_ID, locator)、find_element(By.NAME, locator)
1 | # WebDriverWait(self.driver, timeout=time_out, poll_frequency=0.5, ignored_exceptions=None).until(lambda x: x.find_element_by_accessibility_id(locator)) |
处理系统弹框
1 | def handle_system_alert(self, button='Continue'): |