作为UI测试的一部分,我生成一个随机字符串作为对象的标题。问题是,当这个标题通过键盘输入(使用XCUIElement.typeText())时,iOS有时会接受自动建议的值。例如,我可能希望它键入自动生成的字符串“calg”,但自动更正将选择“calf”代替。当我稍后尝试使用Assert查找此值时,它不存在,并且错误地失败。有没有一种方法可以告诉UI测试他们不应该使用自动更正,或者有没有一种变通方法可以使用?
XCUIElement.typeText()
0pizxfdo1#
除非您需要自动建议任何测试场景,否则您是否尝试在设备/模拟器设置中关闭自动校正。设置-〉通用-〉键盘-〉自动校正
xlpyo6sf2#
我不相信你可以通过UI测试目标的代码关闭自动校正。但是,您可以从产品代码中为单个文本视图关闭它。为了确保在运行和发布应用程序时自动校正仍然打开,一种解决方案是子类化UITextField并打开环境变量。首先设置您的UI测试以设置XCUIApplication上的launchEnvironment属性。
UITextField
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 } } }
nwnhqdif3#
下面是我在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()
3条答案
按热度按时间0pizxfdo1#
除非您需要自动建议任何测试场景,否则您是否尝试在设备/模拟器设置中关闭自动校正。
设置-〉通用-〉键盘-〉自动校正
xlpyo6sf2#
我不相信你可以通过UI测试目标的代码关闭自动校正。
但是,您可以从产品代码中为单个文本视图关闭它。为了确保在运行和发布应用程序时自动校正仍然打开,一种解决方案是子类化
UITextField
并打开环境变量。首先设置您的UI测试以设置
XCUIApplication
上的launchEnvironment
属性。然后子类化(并使用)
UITextField
在进程的环境字典中查找该值。如果已设置,请关闭自动校正。如果没有,就打电话给管理员。nwnhqdif3#
下面是我在UI测试中禁用它的方法