3

我注意到我不久前编写的 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. 看到这一点el1并且el2似乎没有引用同一个对象。

我不确定这是否是预期的行为,尽管这对我来说似乎很离谱。如果有人有任何见解,我将不胜感激。

4

3 回答 3

0

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

于 2012-11-09T09:59:30.117 回答
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;
 }
于 2014-07-14T14:19:35.503 回答
0

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

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

于 2014-10-03T18:17:56.823 回答