【发布时间】:2015-12-25 15:06:36
【问题描述】:
在我的测试中,我有一个带有预先存在文本的文本字段。我想删除内容并输入一个新字符串。
let textField = app.textFields
textField.tap()
// delete "Old value"
textField.typeText("New value")
当使用硬件键盘删除字符串时,我什么也没生成录音。在用软件键盘做同样的事情后,我得到了:
let key = app.keys["Usuń"] // Polish name for the key
key.tap()
key.tap()
... // x times
或
app.keys["Usuń"].pressForDuration(1.5)
我担心我的测试依赖于语言,所以我为我支持的语言创建了类似的东西:
extension XCUIElementQuery {
var deleteKey: XCUIElement {
get {
// Polish name for the key
if self["Usuń"].exists {
return self["Usuń"]
} else {
return self["Delete"]
}
}
}
}
代码看起来更好:
app.keys.deleteKey.pressForDuration(1.5)
但它非常脆弱。从模拟器退出后,Toggle software keyboard 被重置,我的测试失败了。我的解决方案不适用于 CI 测试。如何解决这个问题以使其更普遍?
【问题讨论】:
-
我无法重现您遇到的故障。我添加了相同的扩展,将模拟器的语言切换为波兰语,并验证“Usún”键正在被点击。重新启动/重置模拟器似乎对
Toggle software keyboard设置没有任何影响。文本视图中是否还有其他内容可以隐藏/关闭键盘? -
也许在重启系统后我得到了
Toggle software keyboard重置。这不是模拟器的默认设置(我不知道这是否可以更改)。在您可以从测试(或测试方案)级别修复语言和软件键盘设置之前,这种或其他我的方法都不可靠。 -
我自己的评论给了我一个想法,我在 Scheme > Options > Application Language 中找到了语言设置。键盘问题仍未解决。
-
不错!这能解决故障吗?
-
修复了仅本地化删除键名问题。
标签: swift uitextfield xcode7 uikeyboard xcode-ui-testing