gpt4 book ai didi

ios - UIACollectionView 单元格与 visibleCells

转载 作者:可可西里 更新时间:2023-11-01 04:44:27 26 4
gpt4 key购买 nike

我正在尝试在 xcode 4.5 中使用自动化编写测试脚本。

我有一个 UICollectionView,我想点击一些当前不可见的单元格。

Per documentation ,我应该期望 cells 返回 Collection View 中的所有 单元格,而 visibleCells 只返回当前可见的单元格。

相反,我看到的是单元格仅返回当前可见的单元格,并且调用 visibleCells 会停止 'undefined' 上的脚本不是函数(评估 'collection.visibleCells()')

var target = UIATarget.localTarget();
var collection = target.frontMostApp().mainWindow().collectionViews()[0];

UIALogger.logMessage("Looking in collection: " + collection);
UIALogger.logMessage("Cells: " + collection.cells() + " length " + collection.cells().length);
UIALogger.logMessage("Visible cells: " + collection.visibleCells());

上面的代码返回正确的UICollectionView,第二行日志打印:

Cells: [object UIAElementArray] length 12

尽管我在 Collection View 中有 100 个项目,并且第三行日志使脚本崩溃。

这是文档/UIACollectionView 错误吗?

有什么想法可以告诉自动化滚动直到它看到名为“我的单元格”的单元格吗?我试过使用 someCell.scrollToVisible,但我需要让单元格来执行此操作,但我没有,因为我无法从单元格中获取它。

EDIT:

正如 Jonathan 所建议的那样,我已经实现了一个 scroll-till-found 函数。它有点特定于实现,因此您可能需要调整 isCellWithName。我还想添加一个中断,以防我们在 while 循环中找不到所需的单元格,如果有人有想法,请随时编辑它。

function isCellWithName(cell, name) {
return (cell.staticTexts()[0].name() == name);
}

function getCellWithName(array, name) {
for (var i = 0; i < array.length; i++) {
if (isCellWithName(array[i], name)) {
return array[i];
}
}
return false;
}

function scrollToName(collection, name) {
var found = getCellWithName(collection.cells(), name);
while (found === false) {
collection.dragInsideWithOptions({startOffset:{x:0.2, y:0.99}, endOffset:{x:0.2, y:0},duration:1.0});
found = getCellWithName(collection.cells(), name);
}
return found;
}

最佳答案

文档显然不正确。 UIACollectionView 上没有visibleCells() 方法。我通过遍历所有 Collection View 元素属性并打印出它们的名称来解决这个问题:

var target = UIATarget.localTarget();
var window = target.frontMostApp().mainWindow();
var collectionView = window.collectionViews()[0];
for (var i in collectionView) {
UIALogger.logMessage(i);
}

另一方面, TableView 元素使用 cells() 方法列出所有单元格。我想知道他们是否选择不这样做是因为 Collection View 的性质要复杂得多。如果您有很多元素,实际获取所有 Collection View 单元格、构建它们的表示和框架并返回元素可能会非常昂贵。这就是 UI Automation 在询问所有单元格的 TableView 时所做的事情。为了获得元素表示,它们都必须被实例化和计算。

但是,为了回答您更大的问题,如何滚动到特定的单元格。你能一直用滑动手势将它滚动到 View 中吗?这不是最方便的方法,我们被滚动到带有表格 View 的不可见元素的能力所“宠坏”了。但从用户行为测试的角度来看,滑动一定数量是用户无论如何都必须做的。测试的结构能否反射(reflect)这一点,它是否能满足您的需求?

关于ios - UIACollectionView 单元格与 visibleCells,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13789905/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com