运行 UI 测试时,Fastlane 扫描“无法合成事件”,适用于 Xcode

Posted

技术标签:

【中文标题】运行 UI 测试时,Fastlane 扫描“无法合成事件”,适用于 Xcode【英文标题】:Fastlane Scan "Failed to synthesize event" when running UI Tests, works from Xcode 【发布时间】:2020-05-25 09:51:31 【问题描述】:

我的 Swift 项目(ios 应用程序,Swift 5)有一些 UI 测试,在从 Xcode 运行它们时可以工作;但是,当我使用 fastlane scan 运行它们时,它们总是在涉及输入文本字段的每个测试中同时失败,我不知道为什么。

失败来自于填写 UITextField,然后尝试点击下一个并填写。

例子:

app.textFields[“identifierOne”].tap()
app.textFields[“identifierOne”].typeText(“Text to Type”)

app.textFields[“identifierTwo”].tap()
app.textFields[“identifierTwo”].typeText(“Text to Type”)

这会导致:

无法合成事件:元素和任何后代都没有键盘焦点。事件调度快照:TextField,标签:'identifierTwo',placeholderValue:'Some'Value''

正如我之前提到的,这适用于从 Xcode 运行完全相同的测试。我对此一无所知,非常感谢任何帮助。

【问题讨论】:

这能回答你的问题吗? Xcode UI Testing Error keyboard 【参考方案1】:

所以我最终想通了。测试运行良好。

但我的扫描调用中有disable_slide_to_type: true,这似乎导致了一些奇怪的行为。

在尝试输入之前,我还添加了以下内容:

extension XCUIElement 
    var isFocused: Bool 
        let isFocused = (self.value(forKey: "hasKeyboardFocus") as? Bool) ?? false
        return isFocused
    


if textField.isFocused == false 
    textField.tap()

而且它现在似乎 100% 的时间都在工作。

【讨论】:

以上是关于运行 UI 测试时,Fastlane 扫描“无法合成事件”,适用于 Xcode的主要内容,如果未能解决你的问题,请参考以下文章

iOS Swift UI Tests (XCUITests) 稳定性问题 - fastlane scan

防止 fastlane 扫描隐藏模拟器

带有fastlane的Xcode 9.1没有无头运行

如何通过 fastlane 在 Firebase 测试实验室中运行 XCUItest?

iOS - 如何在 fastlane 快照中传递构建参数

由于应用重启,XCUITest 需要运行两次才能成功