是否可以使用我自己的方法扩展UIAElementArray?

时间:2012-04-25 13:23:09

标签: javascript iphone ios ui-automation ios-ui-automation

我执行以下操作:

function extend(destination, source) {
  for (var property in source) {
    destination[property] = source[property];
  }
  return destination;
};

extend( UIAElementArray.prototype, 
{
       each: function(f) 
       {
        for (i = 0; i < this.length; i++) 
        {
          f(i, this[i]);
        }
       },

       findFirst: function(f) 
       {
         for (i = 0; i < this.length; i++) 
         {
           if (f(this[i])) return this[i];
         }
         return null;
       },

       findLast: function(f) 
       {
         for (i = this.length - 1; i >= 0; i--) 
         {
          if (f(this[i])) return this[i];
         }
         return null;
       }
} );

但是当我尝试在对象上使用“each”函数时,我从mainWindow.tableViews()[0] .cells()获取,“[object UIAElementNil]不是函数”发生。为什么我添加到UIAElementArray.prototype的每个属性都设置为[object UIAElementNil]?这样的事情发生了,当我在真实设备上运行UIAutomation测试时,在模拟器上它出乎意料地工作了。

2 个答案:

答案 0 :(得分:1)

绝对可以扩展UIAElementArray(不是,顺便说一句,目标-c)。 tuneup.js使用您在上面使用的相同方法并且工作正常,并且我使用相同的方法来扩展UIAElementArray。我不能说你为什么你的脚本报告你正在击中UIAElementNil,但你对UIAElementArray的扩展似乎是正确的。

这里的真正问题可能是“为什么这会在模拟器上运行,而不是在设备上运行?”。设备是否运行iOS 5或更高版本?我已经看到iOS 4.3设备在使用5记录或写入的脚本时运行良好(大部分),但我也看到更复杂的脚本在4.3设备上变得不稳定。

答案 1 :(得分:-3)

在Objective-C中,您可以扩展任何类,并使用类别将自定义方法添加到它们。