【问题标题】:XCTest press and drag doesn't work when there's text underneath当下面有文字时,XCTest 按下并拖动不起作用
【发布时间】:2021-10-27 19:06:16
【问题描述】:

我正在尝试在 Xcode 中编写一个 UI 测试,用于在屏幕上拖动一个点。该测试已经运行了数周,但是一旦我将文本放在点的起始位置之后,UI 测试就不再能够拖动点(即使它在实际应用程序中完全可以拖动!)。我正在使用 SwiftUI 开发应用程序。为什么会这样?

代码:

func testShouldDragDot() throws {
    let endLocation = app.otherElements["endLocation"]
    let thankYouText = app.staticTexts["thankYouText"]
    let dot = app.otherElements["dot"]
    
    dot.press(forDuration: 1, thenDragTo: endLocation)

    XCTAssertEqual(thankYouText.label, "Thank You")
}

没有点后面的文字,它工作正常:

但是在点后面有文字,测试失败:

【问题讨论】:

  • 你的代码库是 SwiftUI 还是 UIKit?
  • 感谢您的提问 — 更新了我的帖子,说我使用 SwiftUI 开发应用程序。

标签: swift swiftui xctest xcode-ui-testing xcuitest


【解决方案1】:

您能否尝试手动更改每个元素的.zIndex,以确保它们在层次结构中正确。

还将waitForExistence 添加到点以确保布局已完全加载,然后尝试拖动。

【讨论】:

  • 很遗憾,这些技巧对我不起作用。
  • 如果你执行“po XCUIApplication()”,你会看到什么?
  • po XCUIApplication() 是什么意思?我已经在我的 XCTestCase 类的顶部声明了 let app = XCUIApplication()。您是指以某种方式改变它吗?
  • 在控制台中,打印应用的层次结构。您需要检查与之交互的元素是否存在。如果你已经有一个 app 变量,你可以执行“po app”。这应该可以帮助您检查所有标识符是否都存在等
  • 哦,我明白了——您的意思是在创建 XCUIApplication、运行测试之后设置断点,然后在遇到断点时在调试器中输入po app。我这样做了,看起来所有相关元素都在那里。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-09
  • 2022-12-05
  • 2014-10-11
相关资源
最近更新 更多