并行执行Xcode 10 UI测试时,禁用模拟器的Connect Hardware Keyboard设置

vas*_*opa 8 xcode simulator ios xcode-ui-testing xcode10

当我在启用并行执行的情况下运行UI测试时,会创建一个现有模拟器的多个副本(例如iPad Air 2)来运行不同的测试套件。

这个stackoverflow答案的运行脚本中,我注入了一个plist项“ ConnectHardwareKeyboard”,其值为false,以禁用在启动模拟器时默认启用的硬件键盘连接: 硬件->键盘->连接硬件键盘

该脚本将为现有的模拟器(iPad Air 2)正确设置值,但是当并行执行测试时,将创建iPad Air 2的多个副本,并且副本的复制者不是原始设备的副本。克隆的设备列表中没有设置任何标志,但是硬件->键盘->连接硬件键盘显示为选中状态。

这导致我的UI测试失败,因为在将test输入到textField中后尝试关闭键盘时,键盘丢失了。

我浏览了stackoverflow和Apple开发人员论坛上的许多帖子,以尝试解决此问题,但没有发现任何东西。对于其他人来说这肯定是个问题...外面有没有人遇到过同样的问题和/或找到了解决方案?

小智 0

和你一样,我在互联网上搜索了这个问题的优雅解决方案,但还没有找到。

因此,与此同时,在比我聪明得多的人弄清楚这一点之前,我在整个测试中实施了以下内容:

import Foundation
import XCTest

extension XCUIApplication {

    //Hardware keyboard makes tests fail.  Reporting from these failures is ambiguous.  This function is intended to fix that issue (for now, until we figure out something better)
    public func keyboardReadyCheck() {
        if !self.keys["S"].waitForExistence(timeout: 3) {
            XCTFail("The software keyboard could not be found.  Use Xcode Simulator settings to turn off hardware keyboard (Keyboard shortcut COMMAND + SHIFT + K while simulator has focus)")
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这使我可以XCUIApplication.keyboardReadyCheck在整个测试中进行分散,如果硬件键盘打开,这将导致立即失败。

这不是一个很好的解决方案,但它比看着整个套件运行并在找不到它的愚蠢事情上超时并报告“目标不可命中”或“未找到元素”要快得多,然后我已经必须去弄清楚发生了什么事。