ios - XCUI测试: Can't tap element on scrollview while views are stack on each other

标签 ios swift xctest xcuitest

示例项目

这是一个显示问题的示例项目。它是基于 Storyboard的,但构建界面的方法并不重要。这是UIViewControllerUIScrollView对于整个屏幕和 128 点高度 View ,位于此 UIScrollView 之上。 在 ScrollView 内有一个 UIView2000 pts高度和UIButton在中心。

<表类=“s-表”> <标题> 初始状态 轻滚动后 在 UIScrollView 的底部 <正文> Initial State After light scroll At the bottom of UIScrollView

链接在这里:https://github.com/JakubMazur/UITestsDemo

问题

  1. 我正在尝试使用 XCUITest 点击这个绿色按钮使用app.buttons["Tap Me!"].tap()
  2. XCUITest 从屏幕上的元素获取标识符,以确保整个 ScrollView 工作正常。
  3. 根据 Apple Developer Forum 上的一个帖子的回复由 Apple 框架工程师编写 我不应该手动滚动才能找到该按钮,是的,这部分是正确的。

screenshot of accepted replay from link pasted above

  • 执行 (1) 中的代码时发生的情况是按钮滚动到足以在屏幕上可见,但它仍然不可点击,因为其他(紫色 View )位于 UIScrollView 之上
  • image that shows the issue

    什么在起作用

    如果我运行这样编写的测试:

        func testThatDoWorkButItsSlow() {
            app.scrollViews.firstMatch.swipeUp()
            app.buttons[buttonLabel].tap()
        }
    

    向上滚动,然后寻找一个可以工作的按钮,但它很慢而且不准确,几乎无法使用。

    我不能做什么

    禁用userInteractions在紫色 View 上。在实际示例中,我仍然需要对此(紫色) View 进行触摸。

    问题

    1. 对于这种情况,有没有办法在 XCTest 中使用精确滚动?
    2. 或者有没有办法设置contentOffsettap()的操作相比,将scrollview设置为其他值将使该按钮在屏幕上更加居中?
    3. 或者有一种方法可以快速滚动到底部(没有动画),并且可能只向上移动每个元素?

    最佳答案

    我的建议是使用 XCUUICooperative.press(forDuration:thenDragTo:) 方法进行滚动。

    https://developer.apple.com/documentation/xctest/xcuicoordinate/1615003-press

    您可以为黄色 View 创建一个 XCUICooperative,然后将其稍微向上拖动以显示按钮并使其可点击。

    在大多数情况下,自动滚动应该可以工作,但在这种情况下似乎需要手动滚动/拖动。

    关于ios - XCUI测试: Can't tap element on scrollview while views are stack on each other,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74221274/

    相关文章:

    ios - 配置测试方案后无覆盖数据

    ios - 如何在 Swift 中对包含字符串的数组进行排序?

    ios - disableBackgroundDeliveryForType 是否删除对应的 HKObserverQuery?

    ios - 如何使用 XCUITest 测试 UIImageView 是否包含具有特定名称的图像?

    ios - 在 XCTest 用例中处理 CLLocationManager 授权请求

    ios - 创建类似 iOS 的设置屏幕

    ios - 使用 Alamofire 用 JSON 数组填充 UIPickerView 时遇到问题 | swift

    ios - Outlet 无法连接到 CollectionView 单元格中的重复内容

    ios - 使用容器 View 时无法隐藏选项卡栏

    ios - 在 NavBar 上使用 Back 后,RefreshControl 会导致 TableView 的第一个 Cell 出错