使用UIAutomation从文本字段中获取值

时间:2011-11-25 11:04:42

标签: ios ios-simulator ios-ui-automation

我正在尝试了解UIAutomation如何用于执行自动应用程序测试,因此我创建了一个可以从JavaScript界面​​驱动的温度转换器应用程序。这是UI:

enter image description here

顶部文本字段的“辅助功能”标签为“Celsius”,类似地,底部字段的“辅助功能”标签为“Fahrenheit”。我试图通过这个脚本来驱动它:

UIALogger.logStart("Test -40ºC == -40ºF");
var window = UIATarget.localTarget().frontMostApp().mainWindow();
var celsiusField = window.textFields()["Celsius"];
var fahrenheitField = window.textFields()["Fahrenheit"];
var convertButton = window.buttons()["Convert"];

celsiusField.setValue("-40");
convertButton.tap();
var fahrenheitValue = fahrenheitField.value();
if (fahrenheitValue == "-40.0") {
    UIALogger.logPass("-40C == -40F");
} else {
    UIALogger.logFail("-40C == " + fahrenheitValue + "F");
}

这会将摄氏度字段中的文本正确设置为“-40”,当点击该按钮时,应用程序会将华氏度字段中的文本更新为“-40.0”。但是,fahrenheitValue的值为“Fahrenheit”(文本字段的名称/标签),因此测试失败。我想知道这可能是一个时间问题,所以在点击后放一秒钟,这并没有改变行为。

是否可以从文本字段中取出文本并将其与预期值进行比较?

3 个答案:

答案 0 :(得分:5)

是否获得“华氏度”,因为这是可访问性标签,还是因为它是占位符文本?

看起来value()可能会返回占位符文本。一种解决方法是在用户开始输入后修改占位符值,将其设置为用户输入的文本,然后在删除时将其恢复为华氏度?我假设即使你调用setValue,它的行为与调用UITextField委托方法时的行为一样吗?

答案 1 :(得分:0)

您可以在视图中添加标签,更新并阅读。

答案 2 :(得分:0)

尝试连接Accessibility Inspector以显示您的应用中“看到”的UIAutomation。可能是因为您在应用中设置值的方式,它正在读取一些陈旧的值。

刷新值的一种方法是发送更新事件:

UIAccessibilityPostNotification(UIAccessibilityLayoutChangedNotification, nil);