为什么UIAElement的孩子不等于自己?

时间:2012-08-23 22:32:56

标签: ios xcode instruments ios-ui-automation

我注意到UIAutomation脚本中有一些奇怪的行为,我曾经写过一段时间我没有跑过。我的断言失败了;在做了一些挖掘之后,我看到在迭代UIAElement的.elements()时,子元素看起来并不等于它们自己。

这在过去对我有用,但至少在XCode 4.3.2中似乎被打破了

重新制作:

  1. 创建单一视图应用
  2. 在视图中抛出一些元素,在元素上设置辅助功能标签,以便UIAutomation选择它们
  3. 在UIAutomation中运行以下脚本:

    var elements = UIATarget.localTarget().frontMostApp().mainWindow().elements();
    for (var i = 0; i < elements.length; i++) {
      var el1 = elements[i];
      var el2 = elements[i];
      var equals = (el1 == el2);
      UIALogger.logMessage(el1.label() + " is equal to " + el2.label() + " ? " + equals);
    }
    
  4. 看到el1el2似乎没有引用相同的对象。
  5. 我不确定这是否是预期的行为,尽管这对我来说似乎很不对劲。如果有人有任何见解,我会很感激。

3 个答案:

答案 0 :(得分:0)

不确定这是否有帮助,但您可以尝试使用===运算符来比较对象吗?

答案 1 :(得分:0)

这实际上是UIAutomation软件中的已知错误。我提出的解决方法是基于元素的所有可用属性进行测试。这是一个真正的痛苦。

 var el1 = ELEMENT_1;

 var el1x = el1.rect().origin.x;
 var el1y = el1.rect().origin.y;
 var el1w = el1.rect().size.width;
 var el1h = el1.rect().size.height;
 var el1n = el1.name();

 var el2 = ELEMENT_2;

 var el2x = el2.rect().origin.x;
 var el2y = el2.rect().origin.y;
 var el2w = el2.rect().size.width;
 var el2h = el2.rect().size.height;
 var el2n = el2.name();

 if(el1x == el2x && el1y == el2y &&
      el1w == el2w && el1h == el2h &&
      el1n == el2n)
 {
      // Elements are equal
      return true;
 }

答案 2 :(得分:0)

看一下tuneup.js(http://www.tuneupjs.org/)。这个库使iOS UIAutomation更加愉快。它做的一件事是扩展UIAElements的功能,使用调整代码中的上述行

var equals = (el1.equals(el2));