我和我的团队一直在设置Jenkins服务器,以便在我们用作构建服务器的Mac Mini上自动运行单元和ui测试。 Mac Mini没有连接外围设备,我们可以访问它的唯一方法是远程登录。
当我使用Mac内置的屏幕共享应用程序远程登录计算机时,使用iOS模拟器可以正常运行测试。但是,如果我在测试运行时关闭了远程连接,那么在尝试键入时(包括所有其他测试/ ui测试通过飞行颜色),涉及键入文本的ui测试将失败,并出现以下错误:
断言失败:等待键事件完成超时
当Jenkins自动为我们运行测试时,这显然会导致一些问题,因为我们并不总是希望远程登录到计算机。
我觉得这与模拟器的软件键盘有关,但我不明白为什么会出现问题。为了软件键盘存在或者某些这样的事情,mac是否需要连接某种显示输出?将显示器连接到机器(即使它没有真正使用)会导致测试通过吗?为什么会这样呢?
答案 0 :(得分:5)
可以通过在模拟器设置中关闭连接的硬件键盘来解决此问题。
您可能还想尝试一下 UI Testing Failure - Neither element nor any descendant has keyboard focus on TextView
答案 1 :(得分:1)
在呈现CNContactViewController
实例之后,Xcode 10仍然存在相同的问题。
避免编写需要调用CNContactViewController`实例的情况。
或者有一种解决方法:
app.keys["1"].tap()
app.keys["2"].tap()
app.keys["3"].tap()
答案 2 :(得分:0)
我正在使用xcode 8.2.1并在ios 9.3版本上运行测试。一个简单的黑客是在点击文本框之后和键入之前添加睡眠2-5秒。虽然,这不是一个永久的解决方案。
另一种可靠的解决方案
在运行测试之前,取消选择设置中的所有键盘首选项。
dispatcher.BeginInvoke(new InvokeDelegate(ActionOffering));
答案 3 :(得分:0)
您可以将其粘贴到TextField上,例如:
extension XCUIApplication {
// The following is a workaround for inputting text in the
//simulator when the keyboard is hidden
func setText(_ text: String, on element: XCUIElement?) {
if let element = element {
UIPasteboard.general.string = text
element.doubleTap()
self.menuItems["Select All"].tap()
self.menuItems["Paste"].tap()
}
}
}
运行方式:
self.app?.setText("Lo", on: self.app?.textFields.firstMatch)