【问题标题】:iOS UI Test to adjust picker value on SwiftUI appiOS UI 测试以调整 SwiftUI 应用程序上的选择器值
【发布时间】:2021-05-23 15:16:34
【问题描述】:

我正在尝试实现一个 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

【问题讨论】:

    标签: ios swift swiftui xctest picker


    【解决方案1】:

    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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-14
      • 1970-01-01
      • 2011-07-16
      • 2018-01-24
      • 2015-09-24
      • 1970-01-01
      • 1970-01-01
      • 2023-03-04
      相关资源
      最近更新 更多