xcode 4.5의 자동화를 사용하여 테스트 스크립트를 작성하려고합니다.UIACollectionView 셀과 visibleCells
저는 UICollectionView
이며 현재 보이지 않는 셀을 클릭하고 싶습니다.
Per documentation, 나는 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
, 두 번째 로그 행 인쇄 반환의 스크립트 중지 :
Cells: [object UIAElementArray] length 12
컬렉션보기에는 100 개의 항목이 있지만 세 번째 로그 라인 충돌 스크립트가 있습니다.
문서/UIACollectionView 버그입니까?
아이디어 "내 셀"이라는 이름의 셀이 나타날 때까지 자동화를 스크롤하는 방법은 무엇입니까? someCell.scrollToVisible
을 사용해 보았습니다.하지만 셀을 가져야합니다. 셀에서 가져올 수 없기 때문에 셀을 사용해야합니다.
편집 : 조나단에 의해 제안
나는 스크롤까지 발견 된 기능을 구현했습니다. 구현 방법은 조금 다르므로 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;
}
감사 : 나는 트릭을 할 것 같다 TuneUp의 uiautomation-ext.js에 대한 확장 등을 썼다. 훌륭하게 작동합니다. – phatmann