【问题标题】:How to programmatically edit iPhone accessibility settings during unit test?如何在单元测试期间以编程方式编辑 iPhone 可访问性设置?
【发布时间】:2019-03-25 10:31:19
【问题描述】:

我的应用程序支持动态字体。当用户在设置中更改字体大小 (Settings > General > Accessibility > Larger Text) 并跳转回应用程序时,应更新每个标签。

通过重写UILabel的函数实现

override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
    super.traitCollectionDidChange(previousTraitCollection)
    guard previousTraitCollection?.preferredContentSizeCategory != traitCollection.preferredContentSizeCategory else { return }

    let metrics: UIFontMetrics = UIFontMetrics(
        forTextStyle: UIFont.TextStyle.body
    )
    font = metrics.scaledFont(for: font)
}

现在我需要测试其他视图是否对标签的动态特性做出正确反应。

具体来说,我想进行以下单元测试:

  1. 创建带有标签的视图
  2. 获取视图大小
  3. 将系统字体改大
  4. 获取视图大小
  5. 比较大小是否改变
func testDynamicFont() {

    let v: MyView = MyView()
    let oldSize: CGSize = v.intrinsicContentSize
    ??? What to do here? ???
    let newSize: CGSize = v.intrinsicContentSize
    XCTAssertNotEqual(
        oldSize, 
        newSize, 
        "Size of view should adjust to new environment"
    )
}

【问题讨论】:

  • 下面的答案能解决你的问题吗?
  • 是的。谢谢你:)

标签: ios swift unit-testing


【解决方案1】:

您可以使用以下代码增加系统字体大小。

    let settings = XCUIApplication(bundleIdentifier: "com.apple.Preferences")
    settings.launch()
    settings.tables.staticTexts["General"].tap()
    settings.tables.staticTexts["Accessibility"].tap()
    settings.tables.staticTexts["Larger Text"].tap()
    settings.sliders.element.adjust(toNormalizedSliderPosition: 0.7) // Increase as you need

要返回您自己的应用,

let yourapp = XCUIApplication(bundleIdentifier: "com.xxx.yourappbundleid")
yourapp.activate()

在 iPhone(真实设备)、iOS 12.1.4 中测试

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-12
    • 2016-12-11
    • 1970-01-01
    • 2019-05-11
    • 1970-01-01
    • 2013-12-30
    • 2010-12-10
    相关资源
    最近更新 更多