Ios XCUITest-无法合成事件:无法计算按钮的生命点
我想测试按钮的点击行为。执行button.tap()时,测试失败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() } 错误消息: 无法合成事件:无法计算按钮的生命点,标识符:“回复确定”
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()
}
}