【问题标题】:UITest compare value of element in expectationUITest比较期望中元素的值
【发布时间】:2019-03-14 03:00:04
【问题描述】:

我目前正在尝试确定活动指示器何时开启或关闭。我意识到,打开时,它的value 是 1,关闭时是 0。

我正在尝试检查 value 是 1 还是 0,如下所示:

let app = XCUIApplication()
let predicate = NSPredicate(format: "value == 0")
let expectation = expectation(
        for: predicate, 
        evaluatedWith: app.activityIndicators["activityId"],
        handler: nil)

if XCTWaiter().wait(for:[expectation], timeout: 20) == .completed {
    print ("Activity indicator is off")
} else {
    print ("Activity indicator is on")
}

当前的问题是总是会超时。每当我在if 处设置断点并在控制台中输入:

po app.activityIndicators["activityId"].value

结果是:

Optional<Any>
- some : 0

但是,在我让测试再次运行后,到了超时,走else分支。

在预期中访问elementvalue 时,谁能看到我做错了什么?

提前感谢您的帮助。

【问题讨论】:

  • 您是否启动过您的应用程序?这是您编写的唯一 UI 测试,还是您有其他可以工作的?
  • 每天约有 300 万人启动此应用程序,还有大约 20 个其他 UI 测试有效。到目前为止,我们只是通过等待来解决活动指示器,但我想让一些更优雅的东西。如果我可以问,为什么这个问题是相关的?
  • 我的意思是在测试中,您是否在与 UI 交互之前致电 app.launch()

标签: swift xctest uitest


【解决方案1】:

假设您已正确启动了您的应用正确设置了活动指示器的可访问性标识符(您似乎已经完成了),您的代码未正确设置的原因'不起作用的是value 是一个字符串,而不是一个整数

将您的谓词替换为以下内容将使您的代码正常工作:

let predicate = NSPredicate(format: "value == \"0\"")

【讨论】:

    最近更新 更多