怎样用数据库做网站,手机版网站建设开发,国外网页网站,常德农科院网站iOS App 测试环境升级#xff0c;遇到的问题以及解决方法 Mac 实体机升级到 Sonima 14.5 Xcode 升级到 15.3 问题1#xff1a; Xcode 编译 WebDriverAgent 失败
尝试下载 最新版本的WDA 源码编译#xff0c;可以编译成功。 问题2#xff1a;具体坐标直接点击的代码都会报错…iOS App 测试环境升级遇到的问题以及解决方法 Mac 实体机升级到 Sonima 14.5 Xcode 升级到 15.3 问题1 Xcode 编译 WebDriverAgent 失败
尝试下载 最新版本的WDA 源码编译可以编译成功。 问题2具体坐标直接点击的代码都会报错。
向开源项目报了这个问题过了10分钟就得到回复https://github.com/appium/appium/issues/20218 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(xx, yy, count1).perform()
from selenium.webdriver import ActionChains
from selenium.webdriver.common.actions import interaction
from selenium.webdriver.common.actions.mouse_button import MouseButton
from selenium.webdriver.common.actions.action_builder import ActionBuilder
from selenium.webdriver.common.actions.pointer_input import PointerInputpointer PointerInput(kindinteraction.POINTER_TOUCH, namefinger1)
actions ActionBuilder(self.driver, mousepointer)
actions.pointer_action.move_to_location(x, y)
actions.pointer_action.pointer_down()
actions.pointer_action.pointer_up()
actions.perform()pointer PointerInput(kindinteraction.POINTER_TOUCH, namefinger1)
actions ActionBuilder(self.driver, mousepointer)
actions.pointer_action.move_to_location(start_x, start_y)
actions.pointer_action.pointer_down()
actions.pointer_action.pause(duration)
actions.pointer_action.move_to_location(end_x, end_y)
actions.pointer_action.pointer_up()
actions.perform()actions ActionChains(self.driver)
actions.w3c_actions.devices []
pointer_input0 actions.w3c_actions.add_pointer_input(touch, finger0)
pointer_input0.create_pointer_move(xx, yy)
pointer_input0.create_pointer_down()
pointer_input0.create_pause(0.5)
pointer_input0.create_pointer_move(xx1, yy1)
pointer_input0.create_pointer_up(MouseButton.LEFT)
pointer_input1 actions.w3c_actions.add_pointer_input(touch, finger1)
pointer_input1.create_pointer_move(xx, yy)
pointer_input1.create_pointer_down()
pointer_input1.create_pause(0.5)
pointer_input1.create_pointer_move(xx2, yy2)
pointer_input1.create_pointer_up(MouseButton.LEFT)
actions.perform()pointer PointerInput(kindinteraction.POINTER_TOUCH, namefinger1)
actions ActionBuilder(self.driver, mousepointer)
for index, point in enumerate(coordinate_list):x, y pointif index 0:# Long press on the first pointactions.pointer_action.move_to_location(xx, yy)actions.pointer_action.pointer_down().pause(0.5)else:# Move to subsequent pointsactions.pointer_action.move_to_location(xx, yy).pause(0.5)
actions.pointer_action.pointer_up()
actions.perform()不再支持像 find_element_by_accessibility_id、find_element_by_name 这类的接口而是使用 find_element(MobileBy.ACCESSIBILITY_ID, locator)、find_element(By.NAME, locator)
# WebDriverWait(self.driver, timeouttime_out, poll_frequency0.5, ignored_exceptionsNone).until(lambda x: x.find_element_by_accessibility_id(locator))WebDriverWait(self.driver, timeouttime_out, poll_frequency0.5, ignored_exceptionsNone).until(lambda x: x.find_element(MobileBy.ACCESSIBILITY_ID, locator))处理系统弹框
def handle_system_alert(self, buttonContinue):try:WebDriverWait(self.driver, 10).until(ec.alert_is_present())self.driver.execute_script(mobile: alert, {action: accept, buttonLabel: f{button}})return Trueexcept Exception as e:print(fNo alert present: {e})return False