iOS UIATarget检测在tap()之后加载UIViewController的时间?

时间:2012-09-14 21:29:29

标签: ios ios-ui-automation

我正在为我的iOS应用程序编写自动化测试,我正在尝试弄清楚当视图控制器完全加载并在屏幕上时如何在javascript脚本中检测到...

所以现在例如脚本点击一个按钮:

target.frontMostApp().mainWindow().buttons()["loginButton"].tap();

然后,一旦应用程序登录(可能需要几秒钟或更短时间),我需要按另一个按钮。

现在,我通过简单地延迟来实现它的工作:

target.delay(3);

但我希望能够检测下一个视图控制器的加载时间,以便我知道我可以访问刚刚加载的新屏幕上的元素。

有什么建议吗?

3 个答案:

答案 0 :(得分:2)

有一些方法可以实现这一目标:

  1. 调整库

    https://github.com/alexvollmer/tuneup_js

    我真的建议你查看一下。他们有一些有用的包装函数来编写更高级的测试。编写了一些方法来扩展UIAElement类。他们有waitUntilVisible()方法。

    但是元素本身可能是零。它不是可见性的问题,但它还没有出现在屏幕上。

  2. UIATargetInstance.pushTimeout(delay)UIATargetInstance.popTimeout()

    Apple文档说:

      

    在这种情况下提供一些灵活性并让你更精细   控制时间,UI自动化提供超时时间,a   它将反复尝试执行的时间段   失败前的指定行动。如果操作在期间完成   超时期限,该行代码返回,您的脚本可以   继续。如果在超时期间没有完成操作,则   抛出异常。默认超时时间为五秒,但是   你的脚本可以随时改变它。

    您也可以使用UIATarget.delay(delay);函数,但这会延迟下一个语句的执行,而不是等待查找元素。在UIAutomation决定无法找到元素之前,setTimeout(delay)也可用于全局设置超时。

    Apple的指南解释了对框架的更多理解。 http://developer.apple.com/library/IOS/#documentation/DeveloperTools/Conceptual/InstrumentsUserGuide/UsingtheAutomationInstrument/UsingtheAutomationInstrument.html

答案 1 :(得分:1)

在大多数情况下,只需识别特定于下一个视图控制器的元素即可。然而,元素的描述必须是新UI独有的东西。

即。 target.frontmostApp().mainWindo().navigationBar()["My Next View"];

脚本应该延迟,直到可以识别元素或达到超时(请参阅pushTimeout popTimout)。

在某些情况下,可能需要指定元素是可见的。

.withValueForKey(1, "isVisible")

也可以使用waitForInvalid执行相反操作(等待上一个UI中的某些内容消失)。

答案 2 :(得分:0)

搜索调整库here

请参阅函数waitUntilVisible。您可以包含其他文件以支持其中的功能。 希望它有所帮助。