gpt4 book ai didi

ios - XC UITesting 因查找 UIElements 而闪烁

转载 作者:行者123 更新时间:2023-11-29 00:11:41 27 4
gpt4 key购买 nike

如果用户需要在登录后重新验证,我会运行一段代码。在 UI 测试期间,有时会显示此弹出窗口,因此我会检查它是否存在

if (XCUIApplication().staticText["authLabel"].exists) {
completeAuthDialog()
}

当它在本地运行时,一切正常,完成并且框架发现元素没有问题。但是,当 CI 上的夜间作业运行时,它第一次失败,但一旦设置为重建相同的构建,测试就会通过。 authLabel 是 UILabel 的可访问性标识符(顺便说一句),所以我一直在试图找出导致闪烁的原因。

昨天我花时间研究了这个问题,似乎框架有时找不到元素?我使用了可访问性检查器来确保我在它看到的同时进行查询。

我什至扩展了 if 检查 4 或 5 个额外的 || 以检查弹出框内的任何元素。所有元素都具有可访问性标识符,我还使用了记录功能来确保它传回我正在使用的相同元素“名称”。

我有点卡住了,我不知道还有什么可以尝试/可能会导致这个问题。最糟糕的是,它运行了几个月,但现在似乎每天晚上都会失败,正如我所说,当测试在 xcode 内部运行时,它们会很好地通过。这可能是从命令行构建的问题吗?

最佳答案

当您的测试在不同的机器上执行时通常会变慢,这个问题似乎在 CI 机器上尤为普遍,因为它们往往动力不足。

如果您只是对现有元素进行一次检查,则测试只有一个时间点才能正确执行,如果应用呈现该元素的速度很慢,则测试将失败。

您可以使用服务员在几秒钟内检查几次,以确保在继续之前给应用足够的时间来显示身份验证对话框,从而避免出现不稳定的测试。

let authElement = XCUIApplication().staticText["authLabel"]
let existsPredicate = NSPredicate(format: "exists == true")
let expectation = XCTNSPredicateExpectation(predicate: existsPredicate, object: authElement)
let result = XCTWaiter().wait(for: [expectation], timeout: 5)
if (result == .completed) {
completeAuthDialog()
}

您可以调整超时以满足您的需要 - 如果 auth 对话框没有出现,较长的超时将导致测试等待更长时间才能继续,但如果机器速度较慢,则会给对话框更多的时间来显示.尝试一下,看看使用不同超时优化的测试有多不稳定。

关于ios - XC UITesting 因查找 UIElements 而闪烁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46367466/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com