【问题标题】:Disable Connect Hardware Keyboard setting for Simulator when executing Xcode 10 UI Tests in parallel并行执行 Xcode 10 UI 测试时禁用模拟器的连接硬件键盘设置
【发布时间】:2019-04-13 05:29:34
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 找到解决方案了吗?
  • 有关于这个问题的消息吗? Xcode 11.4 仍然发生
  • 同样的问题。似乎很奇怪,没有一种明确的方法来编写测试,使它们完全不知道是否连接了硬件键盘。

标签: ios xcode simulator xcode-ui-testing xcode10


【解决方案1】:

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

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

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,如果硬件键盘打开,这将导致立即失败。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-14
    • 1970-01-01
    • 1970-01-01
    • 2015-03-14
    • 1970-01-01
    • 1970-01-01
    • 2016-03-10
    相关资源
    最近更新 更多