缓存XCUIElement(提高对单个元素的多次调用的性能)

时间:2016-04-13 19:19:04

标签: xcode-ui-testing

我有一些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.我没有将问题标记为这样,因为它不是一个快速的具体问题。

1 个答案:

答案 0 :(得分:1)

通过层次结构的查询应该非常接近瞬时。测试的运行时更有可能受到UI测试应用程序的逻辑的影响,即等待目标应用程序每次执行操作时都会空闲(在这种情况下,每次点击XCUIKeyboardKeyDelete时)。

您可以通过计算循环元素来隔离它;如果查询本身需要大量时间,我会感到惊讶,但如果确实如此,您能告诉我们您的应用程序的视图层次结构是什么样的吗?如果您有大量的视图元素,它可以加快查询以使用更具体的选择器集,而不是拖网整个层次结构。