Appium iOS UI自动化之环境搭建(Xcode15,iOS17,真机)


前言

盼了好几年,公司终于让我开始着手UI自动化的事情了,然后配了两部iOS17.2.1的手机。然后我发现光是搭建环境这一步,就变得跟几年前书里学习的内容有点不一样了。所以把这段时间搭环境及如何实现用例的事情都写一下,希望能帮助到其他人。


一、准备Xcode

因为配备的iOS17.2.1的设备,所以必须使用xcode15及以上版本才能在设备中安装WebDriverAgent,而电脑系统必须在14及以上才能安装xcode15。而我的电脑是2017年产的,不支持升级到14的系统,所以目前Mac系统是13.6.6。我特地查询了一下支持xcode版本的mac系统
在这里插入图片描述
可以看到macOS13.6.6,最新可以安装Xcode15.2的版本,于是下载,安装。
下载链接中的xcode是xip结尾的压缩包,用xip命令解压到Applications文件夹里,就可以直接使用了。xip命令可以参照这篇文章 https://www.jianshu.com/p/0b372a4e18f2。

二、安装Appium

1.Appium1和Appium2

跟Appium1.x版本不一样的是,Appium2是用命令行的方式启动,所以如果想要查看元素,他们提供了一个专门的工具appium-inspector。
如果mac系统里安装的nodejs的话,那么执行命令即可安装Appium:

npm i --location=global appium

安装完毕之后输入命令启动Appium:

appium

在这里插入图片描述
如果看到以上信息,就说明Appium是安装成功了,截图中显示的plugins这些目前暂时是没有的,后续的文章会继续讲解怎么安装,以及有什么用。

2.安装appium-doctor

然后为了保证Appium的各种依赖也是齐全的,需要安装Appium doctor来检查依赖等:

npm install @appium/doctor --location=global

安装完毕之后执行doctor检查下安装情况:

appium-doctor --ios

在这里插入图片描述
只要基本需要的依赖安装好了,那么就可以使用Appium了,如果需要其他什么特殊功能,后面再来安装对应的依赖和插件就好。

3.安装Appium的driver

据说以前的版本,Appium是自带了driver的,但是2.5版本,要使用什么driver就必须自己安装,比如我们要操作iOS,需要安装XCUITest的driver:

appium driver install xcuitest

XCTest和XCUITest是苹果系统自己的UITest框架,Appium的原理是通过XCUITest的driver去驱动XCUITest,以实现自动化的目的,以后有空可以聊聊iOS的XCUITest如何写。

4.安装Appium-inspector

为了可以查看设备中元素,需要安装Appium-inspector,点击这里进入官网下载
安装完毕之后打开inspector,可以发现和以前Appium1.X版本的样子差不多:

蓝桥杯2015年的连连看题目并未直接提及于上述引用中,但可以通过分析历年比赛的特点以及连连看类问题的一般解法来推测可能的解决方案。 ### 历年连连看题目的特点 连连看类型的题目通常涉及在一个二维数组或者矩阵中找到符合条件的配对元素。这些条件一般包括数值相同、位置关系特定等约束。例如,在2024年的版本中,要求两格子中的整数相等且其行列差绝对值相等并大于零[^4]。 尽管具体到2015年的题目细节未被提供出来,但从以往的经验来看,解决这类问题的关键在于如何高效遍历整个数据结构以发现所有合法匹配项,并确保算法的时间复杂度适合给定的数据规模范围。 #### 可能适用的方法论 1. **双重循环枚举** 对于较小尺寸的情况(如n,m<=50),可以采用简单的双层嵌套循环方式逐一比较每一对可能构成有效连接的单元格组合。这种方法虽然直观易懂,但在面对较大输入时效率较低,可能导致时间超出限制[^2]。 2. **哈希表辅助计数** 当处理更大规模的数据集(n,m可达千级别)时,则应考虑利用空间换取速度策略—即创建额外存储结构比如字典或集合来记录已访问过的节点及其属性信息以便快速检索潜在候选对象从而减少不必要的重复运算次数提高整体性能表现[^3]。 以下是基于假设条件下的一种实现方案: ```python from collections import defaultdict def count_pairs(grid): n, m = len(grid), len(grid[0]) value_to_coords = defaultdict(list) result = 0 # Collect all coordinates by their values. for i in range(n): for j in range(m): value_to_coords[grid[i][j]].append((i,j)) # For each group of same-value cells... for coords_list in value_to_coords.values(): coord_set = set(coords_list) seen_diffs = {} for (x,y) in coords_list: key = tuple(sorted([abs(x-diff_x), abs(y-diff_y)])) if key not in seen_diffs: seen_diffs[key]=[] seen_diffs[key].extend([(diff_x+x,diff_y+y),(x-diff_x,y-diff_y)]) valid_count=sum(len(set(seen_diffs[k])&coord_set)//2*len(k)==k.count(k[0])for k,v in seen_diffs.items()) result +=valid_count return result *2 # Example usage with a small grid. example_grid=[[1,2],[2,1]] print(count_pairs(example_grid)) # Output should be according to problem statement rules. ``` 此代码片段展示了如何通过构建一个映射从每个唯一值指向它所在的所有坐标列表开始解决问题的过程。接着针对每一个这样的同质群组执行进一步操作计算最终结果乘以二因为AB和BA视为不同对[^1]。 ### 注意事项 实际参赛过程中还需要注意边界情况处理、异常检测等方面的内容以保证程序健壮性和鲁棒性。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值