swift - 如何点击屏幕上不可见的 CollectionView 单元格内的按钮

标签 swift xcode swift3 uicollectionviewcell xcode-ui-testing

我正在使用 XCode 进行 UITest。我有多个 CollectionView 单元格。 当我在 collectionView 中执行计数时,它会显示一定的计数。 我可以访问前两个单元格,但以 3 的形式访问第三个单元格(取决于设备大小)。它说我在 3rd Cell 中寻找的特定按钮 exists

但是 isHittable 是 false。

有什么方法可以点击 3rd Cell 上的按钮。 我尝试使用在线提供的 forceTapElement() 扩展,但没有帮助。

使用的扩展名:

extension XCUIElement{
    func forceTapElement(){
        if self.isHittable{
            self.tap()
        }else{
            let coordinate: XCUICoordinate = self.coordinate(withNormalizedOffset: .zero)
            coordinate.tap()
        }
    }
}

尝试执行 swipeUp() 并访问按钮。它仍然显示 isHittablefalse

最佳答案

我发现的唯一方法是向上滑动直到 isHittabletrue

app.collectionViews.cells.staticTexts["TEST"].tap()
Thread.sleep(forTimeInterval: 3)

let collectionView = app.otherElements.collectionViews.element(boundBy: 0)
let testAds = collectionView.cells
let numberOfTestAds = testAds.count
if numberOfTestAds > 0 {
    let tester = collectionView.cells.element(boundBy: 2).buttons["ABC"]
    for _ in 0..<100 {
        guard !tester.isHittable else {
            break;
        }
        collectionView.swipeUp()
    }
}

请注意,swipeUp() 方法只会移动几个像素。如果您想使用更全面的方法,您可以获取 AutoMate图书馆并尝试swipe(to:untilVisible:times:avoid:from:) :

app.collectionViews.cells.staticTexts["TEST"].tap()
Thread.sleep(forTimeInterval: 3)

let collectionView = app.otherElements.collectionViews.element(boundBy: 0)
let testAds = collectionView.cells
let numberOfTestAds = testAds.count
if numberOfTestAds > 0 {
    let tester = collectionView.cells.element(boundBy: 2).buttons["ABC"]
    collectionView.swipe(to: .down, untilVisible: tester)
    // or swipe max 100 times in case 10 times is not enough
    // collectionView.swipe(to: .down, untilVisible: tester, times: 100)
}

关于swift - 如何点击屏幕上不可见的 CollectionView 单元格内的按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43806462/

相关文章:

ios - 快速:调用 willDisplay

具有不同主题的应用程序的 iOS 启动屏幕?

ios - 不兼容的整数到指针转换 "int"到 "id"的参数类型

ios - UIView.animate - Swift 3 - 完成

ios - Xcode 8 - 约束的变化在预览中没有生效

swift - 在 swift 中存储嵌套数据的最佳方法

ios - 创建新的 View Controller 后如何创建 View Controller 文件?

ios - 调用 Swift Xcode 7 中的 canEvaluatePolicy 额外参数 'error'

ios - 如何在 Xcode 中编写集成测试?

Swift 3 #selector 和类型名称