iOS:如何Assert一个单元格被选中在最佳?

vojdkbi0  于 12个月前  发布在  iOS
关注(0)|答案(4)|浏览(92)

我有以下层次结构:ViewController -> TableView -> TableViewCell -> CollectionView -> CollectionViewCell -> UIImage
在tableViewCell上,collectionView内部有4个单元格。每个细胞都有一个独特的标签。
当用户点击collectionViewCell时,单元格将被选中,并且UIImageView也将突出显示。在这种情况下,这意味着那里有一个不同的图像。我启用了UIImageView上的可访问性,并将traits设置为button和image,以尝试访问这些XCUIElementType
我还没有能够作出任何最明智的工作,因为它总是告诉我,有多个结果的UIImageView,即使细胞的图像视图是在有一个唯一的标识符。
如何声明单元格已被选中?
使用record函数,我得到:let whatIsYourFilingStatusCellsQuery = XCUIApplication().tables.cells.containingType(.StaticText, identifier:"Single").childrenMatchingType(.Image).matchingIdentifier("btn_unselected").tap()

o4tp2gmn

o4tp2gmn1#

@Che有正确的想法。
didSelectItemAtIndexPath:中,我这样做:

cell.accessibilityIdentifier = @"isSelected";

然后,在测试文件中:

XCTAssertEqualObjects(randomCellToTap.value, @"isSelected");

我也将在didDeselect...中执行相反的操作,

5hcedyr0

5hcedyr02#

将选择状态添加到accessibilityTraits,如下所示:

cell.accessibilityTraits = [.button, .selected]

然后在 * 最后 * 你可以检查是否cell.isSelected状态,这也将减少编程 * 语音 * 状态的复杂性。
其他解决方案将需要您手动实现语音状态。

ma8fv8wu

ma8fv8wu3#

如果SwiftUI:

VStack {
    ZStack {
        Circle()
            .fill(Color.blue)
            .frame(width: 30, height: 30)
        if index == selectedIndex {
            Image(decorative: "ic_check")
        }
    }
    Text("ブルー")
}
.onTapGesture {
    selectedIndex = index
}
.accessibilityAddTraits(index == selectedIndex ? [.isSelected, .isButton] : .isButton)

甚至你可以合并孩子。

HStack {
    Image("ic_comment", label: Text("コメント数"))
    Text("10")
}
.accessibilityElement(children: .combine)
.accessibilityIdentifier("your id")
.accessibilityAddTraits(index == selectedIndex ? [.isSelected, .isButton] : [.isButton] )

我从here找到的

vu8f3i0k

vu8f3i0k4#

我真的没有什么好的解决办法。但是我看到只有一种方法可以Assert单元格被选中。在选择单元格时设置一些属性。例如,accessibilityIdentifier将具有唯一的id,accessibilityValue将具有您需要的任何信息(“selected=true”或“selected”)
您有权访问这些属性的UPD:

相关问题