Appium 求教:iOS 做 UI 自动化获取 TableView 会多次触发列表 loadmore 请求

蔡伟琪 · 2018年03月16日 · 最后由 阿三 回复于 2019年08月29日 · 1690 次阅读

不只是 macaca 的 XCTestWD、appium 的 WDA,用 XCode 自带的 Accessibility Inspector 查看 TableView 都会有问题
部分代码如下:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
        //.......
    if (indexPath.row == resultList.count - 1) {
        [self loadMore];
    }
}

可以看到正常情况下滑动列表,翻看到列表倒数第二条信息时会触发 loadmore 请求下一页。如果请求一次返回 10 条数据即 resultList.count=10,那么我们需要向上滑动直到第九条信息曝光即 indexPath.row=9 才会满足条件触发加载更多的请求。
然而在编写 UI 自动化过程中发现,当我们定位元素时实际上是会去获取目标控件的 superview 跟所有子节点,定位这个 tableview 的时候 tableview 下 10 个 cell 也已经拿到了,这就导致满足了 indexPath.row == resultList.count 这个条件从而触发列表请求更多数据,这时新下发的 10 条数据我们又可以立马获取到,导致又触发下一次 loadmore 请求。。如此反复导致列表元素过多自动化用例定位元素时卡顿超时。

尝试修改成 willDisplayCell 也没能解决

- (void)tableView:(UITableView *)tableView willDisplayCell:(nonnull UITableViewCell *)cell forRowAtIndexPath:(nonnull NSIndexPath *)indexPath
{
        //.......
}
共收到 5 条回复 时间 点赞
ltyd5788 回复

解决了,非常感谢😃

请问怎么解决的,我也碰到同问题。没有找到你已解决的 WDA 源码位置

阿三 回复

这是待测 App 工程源码,不是 WDA 源码

ltyd5788 回复

哦就是要改 iOS 应用源代码,那改成什么样,能贴源码吗

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