我有一些UI测试涉及NSTextView
中的文本操作。我目前通过以下方式设置XCUIElement:
let sqlTextViewTextView = sqlWindow.textViews["SQL text view"]
这样可以正常工作,但在其中一个测试中,输入了一堆文本,然后一次删除一个字符。
sqlTextViewTextView.typeText(substring)
// Delete backwards until we are clear
while(true)
{
let targetString:String = sqlTextViewTextView.value as! String
if(0 == targetString.characters.count)
{
break;
} // End of we have no targetString
sqlTextViewTextView.typeKey(XCUIKeyboardKeyDelete, modifierFlags:.None)
} // End of we have text entered
这最终会变得极其缓慢,因为每次调用sqlTextViewTextView
都会评估查询以查找元素。
有没有一种方法可以“缓存”元素,以便在这个紧密循环中跳过查询它?
测试代码(可能编写得不好)Swift 2.我没有将问题标记为这样,因为它不是一个快速的具体问题。
答案 0 :(得分:1)
通过层次结构的查询应该非常接近瞬时。测试的运行时更有可能受到UI测试应用程序的逻辑的影响,即等待目标应用程序每次执行操作时都会空闲(在这种情况下,每次点击XCUIKeyboardKeyDelete时)。
您可以通过计算循环元素来隔离它;如果查询本身需要大量时间,我会感到惊讶,但如果确实如此,您能告诉我们您的应用程序的视图层次结构是什么样的吗?如果您有大量的视图元素,它可以加快查询以使用更具体的选择器集,而不是拖网整个层次结构。