XCTest typeText 无法将键盘切换到另一种语言

XCTest typeText cant switch keyboard to another language

喂! 我在 iOS 上使用 uitests 并使用 typeText 方法将字符串输入文本字段。该应用程序是多语言的,因此测试用例涉及以不同语言输入字符串。但是,对于当前键盘语言以外的字符串,该方法失败(无法切换键盘语言输入该字符串,虽然模拟器有该语言的键盘)。 我已经一个星期没能解决这个问题了。我没有找到为 typeText 切换键盘语言或以其他方式解决问题的方法。 请帮忙!

UPD(醉猎豹):

我将此方法用作 XCUIElement 扩展:

    func clearAndTypeText(_ text: String) {
                let typedText = self.value as? String
                focusIfNeeded()
                if typedText != nil {
                    let deleteText = String(repeating: XCUIKeyboardKey.delete.rawValue, count: typedText!.count)
                    typeText(deleteText)
                }
                typeText(text)
            }

firstTextField.clearAndTypeText("English12345") // Result - "English12345"
secontTextField.clearAndTypeText("文本123") // Chinese as example. Result -> "123" 
// This will take a very long time to print.

如果我设法手动将键盘语言(在 运行 测试时)从英文切换为中文,文本将被打印出来。否则,只有数字

无论当前键盘语言如何,typeText() 都应该起作用。我刚刚测试过用保加利亚语(西里尔文)和中文输入文本没有问题。

  1. 由于您的应用程序是多语言的,因此您应该确保找到与当前应用程序语言相对应的元素(如果不使用可访问性标识符)。
  2. 还要确保该元素具有键盘焦点 - 在尝试 typeText() 之前对其使用 tap() 以防万一。
  3. 确保如果 运行 在模拟器上 I/O > Keyboard > Connect hardware keyboard 被禁用
  4. 正如 Mike Collins 在评论中建议的那样,您可以像这样使用粘贴板(仅在模拟器上!):
UIPasteboard.general.string = "teststring"
textElement.doubleTap()
app.menuItems["Paste"].tap()

请注意,这不适用于真实设备。