ios - UIAutomation isValid() 立即替代方案

标签 ios integration-testing ui-automation ios-ui-automation

我正在使用 UIAutomation 为 iOS 应用程序编写集成测试。

作为测试套件的一部分,我集成了一个重置​​功能,只要点击左侧 UINavigationBar 项(只要该项存在),该功能就会将应用程序返回到主菜单。

这是用于执行此操作的代码(用tuneup.js编写):

function reset (app) {
    // While we have a left button on the nav bar, tap it.
    // This effectively resets our app

    while(app.mainWindow().navigationBars()[0].leftButton().isValid()) {
        app.mainWindow().navigationBars()[0].leftButton().tap();
    }
}

它达到了它的目的。

但是,isValid() 会等待几秒钟,以防无法立即找到对象。因此,集成测试运行得非常慢,因为每次我们在重置后点击主菜单时,isValid() 都会等待一段时间,看看是否会出现左侧的 UINavigationBar 项目。

是否有替代函数或替代实现可以让我在没有强制超时的情况下确定元素是否存在?

最佳答案

您可以将默认超时覆盖为 0:

UIATarget.localTarget().pushTimeout(timeoutInSeconds);

但是,在 0 超时的 while 循环中检查验证似乎不是一个好主意。

function reset (app) {
    // While we have a left button on the nav bar, tap it.
    // This effectively resets our app

    UIATarget.localTarget().pushTimeout(0);
    if (app.mainWindow().navigationBars()[0].leftButton().isValid()) {
        app.mainWindow().navigationBars()[0].leftButton().tap();
    }
    UIATarget.localTarget().popTimeout();
}

关于ios - UIAutomation isValid() 立即替代方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18682603/

相关文章:

java - Intellij IDEA 看不到测试(java.lang.Exception : No tests found in class)

testing - Cypress 测试不打开 Powerapps 页面

java - 使用 selenium java webdriver 从下拉列表中选择一个值

ios - iOS上的Twitter-如何授予发布推文的权限?

ios - 使用UserDefaults来存储不同用户的数据

ios - 修复或避免默认第三方库中的内存泄漏

ios - 开发时在 CloudKit 中测试 CKErrorUserDeletedZone

java - 使用 Netty 在 Resteasy 测试中注入(inject)上下文数据

spring - 当我已经有集成测试时,我应该为 CRUD 操作编写单元测试吗?

ios - 如何使用 UIAutomation 在 Web View 中的文本字段中输入文本