【问题标题】:XCUITests: Can't tap element on scrollview while views are stack on each otherXCUITests:视图相互堆叠时无法点击滚动视图上的元素
【发布时间】:2022-12-05 01:57:12
【问题描述】:

示例项目

这是一个显示问题的示例项目。它是基于故事板的,但是构建界面的方法并不重要。它是UIViewController,整个屏幕是UIScrollView,128 pts 高度视图位于UIScrollView 之上。 在滚动视图中有一个 UIView,中间有 2000 pts 高度和 UIButton

Initial State After light scroll At the bottom of UIScrollView

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

问题

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

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

    什么是工作

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

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

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

    我不能做什么

    在紫色视图中禁用 userInteractions。在实际示例中,我仍然需要触摸此(紫色)视图。

    问题

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

【问题讨论】:

    标签: ios swift xctest xcuitest


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2017-05-24
      • 1970-01-01
      • 1970-01-01
      • 2011-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-25
      相关资源
      最近更新 更多