UIAutomation如何确定是否UIAElement.isVisible()

时间:2012-01-13 15:31:35

标签: ios ios-simulator ios-ui-automation

我有一个具有以下结构的视图:

GrandView
-Parent View1
-Parent View2
--Child View1
--Child View2

子视图几乎占据Parent View2的所有边界,但边缘周围仍有一些空间。如果单击边缘,我可以使用辅助功能检查器在模拟器中选择Parent View2。如果我使用的话,我也可以在UIAutomation中点按Parent View2

tapWithOptions({tapOffset:{x:0.15, y:0.95}});

但是,我对isVisible()的来电始终返回0。我希望如果我可以点击元素,或者使用辅助功能检查器选择它,它应该返回1

UIAutomation如何确定UIAElement是否可见?

2 个答案:

答案 0 :(得分:0)

如果是UIView,则应该驱动hidden属性。如果它不是一个视图,而且它是一个容器,它应该由accessibilityElementsHidden驱动。

一般情况下,您不希望将此用于UIAutomation。相反,无论你打算在视图上做什么 - 在这种情况下,点击() - 继续前进并执行它,如果超时则让系统抛出错误。通常,这是您希望在脚本中遵循的模型,而不是先测试某些内容是否可用。正弦UIAutomation是DOM编写UIAccessibility信息的脚本,当动画视图转换之类的事情发生时,事情就会失去同步。有时脚本执行速度比UI动画更快,有时相反! waitForInvalid可能是解决方案的捷径。

Alex Vollmer的用于UIAutomation的tuneup.js库使得编写测试变得更加容易,并且易于扩展。 https://github.com/alexvollmer/tuneup_js

答案 1 :(得分:0)

您对元素执行的每个操作都有一个超时。这在Apple文档中并不明显,但如果你看一下:setTimeout,它会告诉我们:

  

超时值为对象解析建立宽限期。如果表示UI元素的对象在宽限期内变为可用,则尝试根据仪器保留的信息实例化该对象。

setTimeout本身只是更改默认值(就像push和pop一样)。你真正想要做的是在视图上执行操作,如果它永远不可用,则超时失败(默认超时为5秒)。
WWDC 2010会话“使用仪器自动进行用户界面测试”进入这一点,它可以在ADC WWDC 2010页面上找到,包括视频和幻灯片。在您的情况下,您需要在视图上执行tap()。如果由于某种原因,该视图在5秒内无法用于UIAutomation,您应该会看到异常。
通过执行以下操作来尝试更改超时:

var oldTimeout = target.timeout(); target.pushTimeout(10);

在代码之前

target.popTimeout(oldTimeout);

后。