swift - UITest比较期望中元素的值
问题描述
我目前正在尝试确定活动指示器何时打开或关闭。我意识到,打开时,它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 分支。
任何人都可以看到我在期望中访问时做错了value
什么吗?element
提前感谢您的帮助。
解决方案
假设您已经启动了您的应用程序并正确设置了活动指示器的可访问性标识符(您似乎已经完成了),您的代码不起作用的原因是它value
是一个字符串,而不是一个整数。
用以下内容替换您的谓词将使您的代码工作:
let predicate = NSPredicate(format: "value == \"0\"")
推荐阅读
- ibm-watson - 从 Windows 10 64 位安装 Watson Studio Desktop 后出现问题
- c++ - 如何使用 C++ 命名空间进行阻塞
- unity3d - 如何拥有具有重力且不受玩家推动的可拾取能力?
- c# - 如何更改 SSIS 包的临时目录,使其不使用 C 驱动器(而不是 C:\windows\temp 使用 E 驱动器或其他东西)
- pvlib - PVLIB:读取 tmy.py 上的 tmy3 文件时如何修复值错误?
- javascript - “TypeError:无法读取未定义的属性'$emit'” - VueJS
- java - 使用 InputStreamReader 从 Socket 接收 utf-8 字符串?
- c# - 重写 IComparer 以使用 lambda 表达式
- javascript - 使用从数据库传递的 id 将文件上传链接到表中的按钮
- laravel-5 - 如何在 Laravel 5.7 中使用三元运算符在 Brade 上的 {{}} 内呈现 HTML?