XCUITest ios 12开关元件值,是开了吗?

问题描述 投票:0回答:1

我在测试中遇到了一个关于开关的swift xcuitest的奇怪问题。我正在测试设置应用程序,以检查某些开关是否打开。我对swift相当陌生,但从我阅读的资源中,我发现我应该做一些类似下面的事情。

let mySwitch = settingsApp.switches["Block Pop-ups"]
XCTAssert(mySwitch.exists)
let isOn = (mySwitch.value as? String).map { $0 == "1" }
XCTAssert(isOn == true)

但是当我在ios12上测试模拟器时,我发现开关的值似乎总是为零,不管是开还是关,例如下面的两个断言都是假的

XCTAssertFalse(isOn == true)
XCTAssertFalse(isOn == false)

我发现 这个 在苹果论坛上,但没有发布答案。有谁有解决这个问题的办法或变通方法吗?

我使用的是swift 5.1和xcode 11。

编辑:需要解决iOS 12的问题,我没有能力升级到13。

ios swift ios12 xcuitest swift5.1
1个回答
2
投票

如果更新版本不是一个选项,你可以使用一些变通方法--例如检查颜色而不是数值。https:/github.comdexpertssuitcase。)

import XCTest
import SUITCase

let app = XCUIApplication(bundleIdentifier: "com.apple.Preferences")

class Tests: XCTestCase {

    let mapsCell = app.cells["Maps"]
    let someSwitch = app.switches["Background App Refresh"]

    override func setUp() {
        app.launch()
    }

    func testSwitch() {
        let green = #colorLiteral(red: 0.737254902, green: 0.9411764706, blue: 0.7725490196, alpha: 1)
        let gray = #colorLiteral(red: 0.968627451, green: 0.968627451, blue: 0.968627451, alpha: 1)
        mapsCell.tap()
        if someSwitch.averageColorIs(green) {
            someSwitch.tap()
        }
        XCTAssert(someSwitch.averageColorIs(gray))
        someSwitch.tap()
        XCTAssert(someSwitch.averageColorIs(green))
    }
}

颜色扫盲在Xcode中看起来不错。enter image description here


0
投票

这段测试代码在Xcode 11.5 @ iOS 13.5上运行正常。似乎更新到最新的版本可以解决这个问题。

import XCTest
import XCTApps

let app = XCTApps.settings.app

class Tests: XCTestCase {

    let developerCell = app.cells["Developer"]
    let someSwitch = app.switches["Dark Appearance"]

    override func setUp() {
        app.launch()
    }

    func testSwitch() {
        developerCell.tap()
        let switchState1 = someSwitch.value as! String
        someSwitch.tap()
        let switchState2 = someSwitch.value as! String
        XCTAssertEqual([switchState1, switchState2].sorted(), ["0", "1"])
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.