作为我的UI测试的一部分,我正在生成一个随机字符串作为我的对象的标题.问题是当通过键盘输入此标题时(使用XCUIElement.typeText()),iOS有时会接受自动建议的值.
例如,我可能希望它键入一个自动生成的“calg”字符串,但自动更正将改为选择“calf”.当我稍后尝试使用断言查找此值时,它不存在并且未正确地失败.
解决方法
我不相信您可以通过UI测试目标中的代码关闭自动更正.
但是,您可以从生产代码中为单个文本视图关闭它.为确保在运行和发布应用程序时自动更正仍然有效,一种解决方案是将UITextField子类化并打开环境变量.
首先设置UI Test以在XCUIApplication上设置launchEnvironment属性.
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 } } }