ios - 并行执行 Xcode 10 UI 测试时禁用模拟器的连接硬件键盘设置

标签 ios xcode simulator xcode-ui-testing xcode10

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

在运行脚本中 from this StackOverflow answer ,我正在注入(inject)一个 plist 键“ConnectHardwareKeyboard”,其值为 false 以禁用启动模拟器时默认启用的硬件键盘连接: Hardware -> Keyboard -> Connect Hardware Keyboard

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

这导致我的 UI 测试失败,因为当我在文本字段中键入测试后试图关闭键盘时键盘丢失。

我查看了 StackOverflow 和 Apple Developer 论坛上的许多帖子,试图解决这个问题,但没有找到任何结果。这对其他人来说一定是个问题……有没有人遇到同样的问题和/或找到解决方案?

最佳答案

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

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

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)")
        }
    }
}

这让我可以在整个测试过程中使用 XCUIApplication.keyboardReadyCheck,如果打开硬件键盘,这将导致立即失败。

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

关于ios - 并行执行 Xcode 10 UI 测试时禁用模拟器的连接硬件键盘设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53229209/

相关文章:

iphone - 在 iOS 中存储日常数据

Xcode IB 愚蠢警告

iphone - iOS 7 模拟器 vs 真正的 iPhone 无法解释的差异

ios - 使用 UIBezierPath 沿弧线移动 Sprite

ios - 适用于 iOS 应用程序的 Rails api?

iphone - CTFontRef 存在问题

xcode - 从 Xcode 中的 OSX 模拟器删除应用程序

R中的随机样本

ios - SSL Socket 连接 iOS

android - 动画人脸图像 - 使用变形?