我想在我的swift测试项目中使用集成GTXLib(https://cocoapods.org/pods/GTXiLib),已经安装了pod并将其库挂钩代码从Objective-c转换为Swift,还修改了我的应用程序代码以生成一些代码辅助功能错误。但是不幸的是,我在试运行后从未失败。
现在,我正在尝试找出代码中的错误之处,以使GTXilib不会捕获任何错误。这是原始代码和转换后的代码。如果有人发现我的代码中的任何问题,也请与我们分享与之相关的经验。
// Include the GTXiLib umbrella header.
// Note that that is +setUp not -setUp
+ (void)setUp {
[super setUp];
// ... your other setup code (if any) comes here.
// Create an array of checks to be installed.
NSArray *checksToBeInstalled = @[
[GTXChecksCollection checkForAXLabelPresent]
];
// Install GTX on all tests in *this* test class.
[GTXiLib installOnTestSuite:[GTXTestSuite suiteWithAllTestsInClass:self]
checks:checksToBeInstalled
elementBlacklists:@[]];
}
override static func setUp() {
super.setUp()
//let checksToBeInstalled: [GTXChecking] = GTXChecksCollection.allGTXChecks()
let checksToBeInstalled: [GTXChecking] = [GTXChecksCollection.checkForAXLabelPresent()]
let tmp = GTXTestSuite.init(allTestsIn: ExampleTests.self)
GTXiLib.install(on: tmp ?? GTXTestSuite(), checks: checksToBeInstalled, elementBlacklists: [])
}
答案 0 :(得分:0)
我遇到了同样的问题,基本上我发生的事情是GTXiLib只能在与Host Application一起运行的XCTest上运行,而不能在XCUITest上运行。
答案 1 :(得分:0)
我也遇到了同样的问题。
缺少的链接是,在您的测试用例中,您必须创建视图并将其添加到 keyWindow(确保您的视图声望 >0)。
这是因为库使用 keyWindow 作为它的根对象,然后遍历它的子视图来运行检查。 https://github.com/google/GTXiLib/blob/d9161c0cefd07556cd97739fdc8862a2711bc1d3/Classes/GTXiLibCore.m#L159
func testBadButton() {
let button = UIButton()
button.frame = CGRect(x: 0, y: 0, width: 32, height: 32)
let keyWindow = UIApplication.shared.windows.filter {$0.isKeyWindow}.first
keyWindow?.addSubview(button)
}
将它添加到关键窗口后,我终于能够验证 GTXiLib 确实在做某事。这是这个测试给我的错误:
One or more elements FAILED the accessibility checks:
<UIButton: 0x7f97c043e390; frame = (0 0; 32 32); opaque = NO; layer = <CALayer: 0x600001e77780>>
+ Check "Accessibility label" failed, This element doesn’t have an accessibility label. All accessibility elements must have accessibility labels.
+ Check "Touch target size" failed, This element has a small touch target. All tappable elements must have a minimum touch target size of 44X44 points.
Element accessibilityFrame: 32x32.
Element frame: 32x32.
(NSInternalInconsistencyException)
我还建议做某种类型的窗口管理来支持这些测试。就我而言,我看到了一些可访问性失败,因为正在测试窗口中的其他对象,而这些对象并不是我感兴趣的视图。
最后一点:我最终集成了 GTXiLib 3.1,因为较新的版本依赖于需要导入 protobuf 的 c++。我们遇到了一个问题,protobuf 与 Carthage 不兼容。可能只是 Carthage 的问题,因为 Google 团队似乎在使用 Cocoapods。