当我在启用并行执行的情况下运行UI测试时,会创建一个现有模拟器的多个副本(例如-iPad Air 2)来运行不同的测试套件。
在运行脚本from this stackoverflow answer中,我将注入一个值为false的plist键“ ConnectHardwareKeyboard”,以禁用在启动模拟器时默认启用的硬件键盘连接: Hardware -> Keyboard -> Connect Hardware Keyboard
此脚本将正确设置现有模拟器(iPad Air 2)的值,但是当并行执行测试时,将创建iPad Air 2的多个副本,并且副本的副本不是原始副本的副本。设备。克隆的设备列表中根本没有设置任何标志,但是“硬件”->“键盘”->“连接硬件键盘”显示为选中状态。
这导致我的UI测试失败,因为在将test输入到textField中后尝试关闭键盘时,键盘丢失了。
我浏览了stackoverflow和Apple开发者论坛上的许多帖子,以尝试解决此问题,但没有发现任何问题。对于其他人来说这肯定是个问题...外面有没有人遇到过同样的问题和/或找到了解决方案?
答案 0 :(得分: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)")
}
}
}
这使我可以在整个测试过程中撒上XCUIApplication.keyboardReadyCheck
,如果打开了硬件键盘,则会立即导致失败。
这不是一个很好的解决方案,但是它比观看整个套件的运行情况和在无法找到的愚蠢事物上超时并以“目标未命中”或“找不到元素”进行报告的速度要快得多,我得去弄清楚发生了什么。