快速使用GTXiLib的正确方法是什么?

时间:2019-08-05 19:05:32

标签: ios objective-c swift

我想在我的swift测试项目中使用集成GTXLib(https://cocoapods.org/pods/GTXiLib),已经安装了pod并将其库挂钩代码从Objective-c转换为Swift,还修改了我的应用程序代码以生成一些代码辅助功能错误。但是不幸的是,我在试运行后从未失败。

现在,我正在尝试找出代码中的错误之处,以使GTXilib不会捕获任何错误。这是原始代码和转换后的代码。如果有人发现我的代码中的任何问题,也请与我们分享与之相关的经验。

Objective-C代码

// 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: [])
    }

2 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,基本上我发生的事情是GTXiLib只能在与Host Application一起运行的XCTest上运行,而不能在XCUITest上运行。

https://github.com/google/GTXiLib/issues/13

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