如何在自动化代码中完成任何UI渲染

时间:2013-05-02 14:03:20

标签: iphone xcode testing ui-automation

我想知道按钮是否在主窗口UI上呈现。此按钮呈现取决于服务器响应结果(以Objective C编写)。如果服务器响应完美,它将完全呈现(可见),否则它不存在(不可见)。每当它变得可见时,我总是点击它以进行下一步。

我写了代码

UIATarget.localTarget().pushTimeout(200);
   //My code
UIATarget.localTarget().popTimeout();

通过上面的代码,我必须等到200秒,但我担心的是我想等待,但无论何时屏幕上的对象,我都不想让我忙于等待模式。

我如何在自动化中编写代码?

由于

2 个答案:

答案 0 :(得分:0)

好的,这可能会让你知道如何跟进:

对于您的视图实现 accessibilityValue 方法,该方法返回 JSON 格式化的值:

- (NSString *)accessibilityValue
{
    return [NSString stringWithFormat:
            @"{'MyButtonisVisible':%@}", 
            self.MyButton.isHidden ? @"false" : @"true"];
}

然后你可以通过测试javascript访问它:

var thisproperty = eval("(" + element.value() + ")");

if (thisproperty.MyButtonisVisible) {
    UIATarget.localTarget().tap({"x":100, "y":100});
}

希望有所帮助。

答案 1 :(得分:0)

如果在启用按钮时使名称不同,则可以执行以下操作:

var awesomeButton = target.frontMostApp().mainWindow().buttons()[0];
UIATarget.localTarget().pushTimeout(200);
awesomeButton.withName("My Awesome Button");
if (awesomeButton.isVisible()) {
    UIALogger.logError("Error no awesome button!");
}
UIATarget.localTarget().popTimeout();        

withName将重复测试名称,一旦名称匹配或达到超时,控件将返回到您的脚本。

根据Apple的文档

<强> withName : 测试元素的name属性是否具有给定的字符串值。如果匹配失败,则重试测试,直到当前超时到期。

超时期限: 如果操作在超时期间完成,则返回该行代码,您的脚本可以继续。如果在超时期间未完成操作,则会引发异常。

https://developer.apple.com/library/etc/redirect/xcode/ios/e808aa/documentation/DeveloperTools/Conceptual/InstrumentsUserGuide/UsingtheAutomationInstrument/UsingtheAutomationInstrument.html#//apple_ref/doc/uid/TP40004652-CH20