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() 都应该起作用。我刚刚测试过用保加利亚语(西里尔文)和中文输入文本没有问题。
- 由于您的应用程序是多语言的,因此您应该确保找到与当前应用程序语言相对应的元素(如果不使用可访问性标识符)。
- 还要确保该元素具有键盘焦点 - 在尝试 typeText() 之前对其使用 tap() 以防万一。
- 确保如果 运行 在模拟器上 I/O > Keyboard > Connect hardware keyboard 被禁用
- 正如 Mike Collins 在评论中建议的那样,您可以像这样使用粘贴板(仅在模拟器上!):
UIPasteboard.general.string = "teststring"
textElement.doubleTap()
app.menuItems["Paste"].tap()
请注意,这不适用于真实设备。
喂! 我在 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() 都应该起作用。我刚刚测试过用保加利亚语(西里尔文)和中文输入文本没有问题。
- 由于您的应用程序是多语言的,因此您应该确保找到与当前应用程序语言相对应的元素(如果不使用可访问性标识符)。
- 还要确保该元素具有键盘焦点 - 在尝试 typeText() 之前对其使用 tap() 以防万一。
- 确保如果 运行 在模拟器上 I/O > Keyboard > Connect hardware keyboard 被禁用
- 正如 Mike Collins 在评论中建议的那样,您可以像这样使用粘贴板(仅在模拟器上!):
UIPasteboard.general.string = "teststring"
textElement.doubleTap()
app.menuItems["Paste"].tap()
请注意,这不适用于真实设备。