我在测试中遇到了一个关于开关的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。
如果更新版本不是一个选项,你可以使用一些变通方法--例如检查颜色而不是数值。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 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"])
}
}