Xcode 7 UI测试失败并显示“等待键事件完成超时”

时间:2015-11-30 22:31:14

标签: ios-simulator automated-tests xcode-ui-testing build-server

我和我的团队一直在设置Jenkins服务器,以便在我们用作构建服务器的Mac Mini上自动运行单元和ui测试。 Mac Mini没有连接外围设备,我们可以访问它的唯一方法是远程登录。

当我使用Mac内置的屏幕共享应用程序远程登录计算机时,使用iOS模拟器可以正常运行测试。但是,如果我在测试运行时关闭了远程连接,那么在尝试键入时(包括所有其他测试/ ui测试通过飞行颜色),涉及键入文本的ui测试将失败,并出现以下错误:

  

断言失败:等待键事件完成超时

当Jenkins自动为我们运行测试时,这显然会导致一些问题,因为我们并不总是希望远程登录到计算机。

我觉得这与模拟器的软件键盘有关,但我不明白为什么会出现问题。为了软件键盘存在或者某些这样的事情,mac是否需要连接某种显示输出?将显示器连接到机器(即使它没有真正使用)会导致测试通过吗?为什么会这样呢?

4 个答案:

答案 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)