iOS UI 测试以调整 SwiftUI 应用程序上的选择器值

标签 ios swift swiftui xctest picker

我正在尝试实现一个 UI 测试来调整样本选择器滚轮的选定值,如下所示:

import SwiftUI

struct ContentView: View {

var colors = ["Red", "Green", "Blue", "Yellow", "White", "Black", "Purple", "Cyan"]
@State private var selectedColor = "Red"

  var body: some View {
    VStack {
      Picker("Choose a color", selection: $selectedColor) {
        ForEach(colors, id: \.self) {
          Text($0)
        }
      }
      .accessibility(identifier: "picker")
      Text("You selected: \(selectedColor)")
    }
  }
}

界面测试

let picker = app!.pickers["picker"].pickerWheels.firstMatch
picker.adjust(toPickerWheelValue: "Purple")

但是,当使用函数 adjust(toPickerWheelValue: ) 时,滚轮只会按所需值的方向移动到列表中的下一个项目。在上面的 UI 测试示例中,结果是轮子移动到“绿色”。如果我再次调用该函数,滚轮将移动一步以选择“蓝色”等。为什么会这样?

使用:Xcode 12.4 和 iOS 14.4

最佳答案

adjust(toPickerWheelValue:) 的行为似乎有点违反直觉。您可以编写自己的函数来完成任务:

extension XCUIElement{
    
    func selectPicker(value: String, timeout: TimeInterval) {
        let pickerWheel = pickerWheels.firstMatch
        let row = pickerWheels[value]
        
        while !row.waitForExistence(timeout: timeout) {
            pickerWheel.adjust(toPickerWheelValue: value)
        }
    }
}

然后像这样使用它:

let picker = app.pickers["picker"]
picker.selectPicker(value: "Purple", timeout: 1)

关于iOS UI 测试以调整 SwiftUI 应用程序上的选择器值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66297762/

相关文章:

ios - 如何使用 SwiftUI 在另一个 View 中创建 View ?

iphone - 如何跨 View Controller 共享 UIView 和其他元素?

ios - 在两个嵌套子类中调用 super.viewDidLoad() 时,我遇到了 Swift 的无限循环

ios - xcode 使用 iOS 10 设备构建项目,但启动时崩溃 : Message from debugger: Terminated due to memory issue

ios - 添加核心数据项后以编程方式生成 View

ios - 乘以随机数并打印结果

ios - XCode 9...无法打开工作区,卡在“正在加载”上

ios - [ valueForUndefinedKey :]: this class is not key value coding-compliant for the key appointmentDate. '-swift

swift - 如何在 Swift 中逐点画线

ios - 将 Samplebuffer 快速保存到相机胶卷