作为我的UI测试的一部分,我正在生成一个随机字符串作为我的对象的标题。问题是当通过键盘输入此标题时(使用XCUIElement.typeText()
),iOS有时会接受自动建议的值。
例如,我可能希望它键入自动生成的“calg”字符串,但自动更正将改为选择“calf”。当我稍后尝试使用断言查找此值时,它不存在并且未正确地失败。
有没有办法告诉UI测试他们不应该使用自动更正,还是有可以使用的解决方法?
答案 0 :(得分:5)
我不相信您可以通过UI测试目标中的代码关闭自动更正。
但是,您可以从生产代码中为单个文本视图关闭它。为了确保在运行和发布应用程序时自动更正仍然存在,一个解决方案是子类UITextField
并打开环境变量。
首先设置您的UI测试,以便在launchEnvironment
上设置XCUIApplication
属性。
class UITests: XCTestCase {
let app = XCUIApplication()
override func setUp() {
super.setUp()
continueAfterFailure = false
app.launchEnvironment = ["AutoCorrection": "Disabled"]
app.launch()
}
func testAutoCorrection() {
app.textFields.element.tap()
// type your text
}
}
然后继承(并使用)UITextField
以在流程的环境字典中查找此值。如果已设置,请关闭自动更正功能。如果没有,请直接打电话给超级。
class TestableTextField: UITextField {
override var autocorrectionType: UITextAutocorrectionType {
get {
if NSProcessInfo.processInfo().environment["AutoCorrection"] == "Disabled" {
return UITextAutocorrectionType.No
} else {
return super.autocorrectionType
}
}
set {
super.autocorrectionType = newValue
}
}
}
答案 1 :(得分:4)
除非您需要针对任何测试场景进行自动建议,否则您是否尝试在设备/模拟器设置中关闭自动更正。
设置>一般 - >键盘 - >自动改正
答案 2 :(得分:0)
以下是我在UI测试中禁用它的方法
app.textFields.element(boundBy: 0).tap()
let keyboards = app.keyboards.count
XCTAssert(keyboards > 0, "You need enable the keyboard in the simulator.")
app.buttons["Next keyboard"].press(forDuration: 2.1)
let predictiveOn = app.switches["Predictive"].value as! String == "1"
if predictiveOn {
app.switches["Predictive"].tap()
} else {
app.buttons["Next keyboard"].tap()
}
app.buttons["Next keyboard"].press(forDuration: 2.1)
let predictiveOff = app.switches["Predictive"].value as! String == "0"
XCTAssert(predictiveOff, "Predictive mode is not disabled")
app.buttons["Next keyboard"].tap()