xcode4.5で自動化を使用してテストスクリプトを作成しようとしています。
があり、UICollectionView
現在表示されていないセルをクリックしたい。
ドキュメントによると、コレクションビューのすべてのセルを返し、現在表示されているセルのみcells
を返すことを期待する必要があります。visibleCells
代わりに、セルは現在表示されているセルのみを返し、visibleCellsを呼び出すとスクリプトが停止します。'undefined' is not a function (evaluating '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
の2番目のログ行を返します。
Cells: [object UIAElementArray] length 12
コレクションビューに100個のアイテムがあり、3番目のログ行でスクリプトがクラッシュします。
これはドキュメント/UIACollectionViewのバグですか?
「マイセル」という名前のセルが表示されるまでスクロールするように自動化に指示するにはどうすればよいですか?を使ってみましsomeCell.scrollToVisible
たが、それを行うにはセルが必要です。セルから取得できないため、使用しません。
編集:
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;
}