我正在为我的iOS应用程序编写自动化测试,我正在尝试弄清楚当视图控制器完全加载并在屏幕上时如何在javascript脚本中检测到...
所以现在例如脚本点击一个按钮:
target.frontMostApp().mainWindow().buttons()["loginButton"].tap();
然后,一旦应用程序登录(可能需要几秒钟或更短时间),我需要按另一个按钮。
现在,我通过简单地延迟来实现它的工作:
target.delay(3);
但我希望能够检测下一个视图控制器的加载时间,以便我知道我可以访问刚刚加载的新屏幕上的元素。
有什么建议吗?
答案 0 :(得分:2)
有一些方法可以实现这一目标:
调整库
https://github.com/alexvollmer/tuneup_js
我真的建议你查看一下。他们有一些有用的包装函数来编写更高级的测试。编写了一些方法来扩展UIAElement
类。他们有waitUntilVisible()
方法。
但是元素本身可能是零。它不是可见性的问题,但它还没有出现在屏幕上。
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。您可以包含其他文件以支持其中的功能。 希望它有所帮助。