【问题标题】:Why are UIAElement's children not equal to themselves?为什么 UIAElement 的孩子不等于自己?
【发布时间】:2012-08-19 12:25:41
【问题描述】:

我注意到我不久前编写的 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 似乎没有引用同一个对象。

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

【问题讨论】:

标签: ios xcode instruments ios-ui-automation


【解决方案1】:

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

【讨论】:

  • 很遗憾,这不起作用.. 如果对象不是同一类型,== 应该强制执行,这实际上是比=== 更弱的检查。
【解决方案2】:

这实际上是 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;
 }

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

    • 既然我contributed这个特殊的函数是tuneup.js,我应该指出它也可以在Illuminator的Extensions.js中使用。
    猜你喜欢
    • 2021-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-24
    • 2010-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多