Ios XCUITest-无法合成事件:无法计算按钮的生命点

Ios XCUITest-无法合成事件:无法计算按钮的生命点,ios,xcuitest,Ios,Xcuitest,我想测试按钮的点击行为。执行button.tap()时,测试失败 XCTContext.runActivity(named: "Validate reply click") { (activity) in let button = App.buttons.matching(identifier: "Reply-ok").firstMatch button.tap() } 错误消息: 无法合成事件:无法计算按钮的生命点,标识符:“回复确定”

我想测试按钮的点击行为。执行button.tap()时,测试失败

XCTContext.runActivity(named: "Validate reply click") { (activity) in
    let button = App.buttons.matching(identifier: "Reply-ok").firstMatch
    button.tap()
}
错误消息: 无法合成事件:无法计算按钮的生命点,标识符:“回复确定”,标签:“回复1:确定”。:可访问性错误kAXErrorInvalidUIElement来自AXUIElementCopyMultipleAttributeValues,适用于2062、2021、2123

尝试过的解决方案:

  • 把水龙头换成强制水龙头
  • 检查按钮是否存在或可点击

  • 两种解决方案都不起作用,我仍然会遇到同样的错误。你知道为什么会出现错误以及如何解决吗?

    你的
    forceTapeElement
    的问题是,在某些情况下,你会在第4行出现错误,因为
    isHittable
    可能会失败

    尝试使用此扩展名

    扩展XUIElement{
    func tapUnhittable(){
    runActivity(命名为:“按坐标点击\(self)”{in
    坐标(使用规格化偏移:CGVector(dx:0.0,dy:0.0)).tap()
    }
    }
    }
    
    为什么即使按钮存在且可点击,我们也需要使用坐标?尽可能使用默认的
    tap()
    方法。当您遇到一些问题时,请使用
    点击unhittable()
    ,并检查VoiceOver和VoiceControl用户是否仍然可以使用它。当您在问题中使用
    forceTapeElement()
    时,您可能会错过某些按钮无法用于默认点击的时刻。
        func forceTapElement(element: XCUIElement) {
            msleep(milliSeconds: 1000)
    
            if self.isHittable {
                self.tap()
            }
            else {
                let coordinate: XCUICoordinate = self.coordinate(withNormalizedOffset: CGVector(dx: 0, dy: 0)).withOffset(CGVector(dx: element.frame.origin.x, dy: element.frame.origin.y))
                coordinate.tap()
            }
        }
    
    XCTContext.runActivity(named: "Validate reply click") { (activity) in
        let button = App.buttons.matching(identifier: "Reply-ok").firstMatch
        if button.exists, button.isHittable {
            button.tap()
        }
    }