使用UIAutomation中的accessibilityIdentifier获取UIElement

时间:2014-08-08 13:58:35

标签: ios ios-ui-automation

我正在使用探查器和UIAutomation为我的iOS应用程序编写测试。

如何获取我在代码中为其指定了accessibilityIdentifier的UIElement?这是我的问题。我有一个在iPad和iPhone上运行的通用应用程序。这些设备上的视图不同。我有2个略有不同的Xib文件。在iPhone上我有包含UILabel的ScrollBar。在iPad上我有ScrollBar包含UIView包含UILabel。这些标签与同一IBOutlet联系。我已经为IBOutlet分配了accessibilityIdentifier。

如何使用accessibilityIdentifier从JavaScript获取我的标签?可以在iPad和iPhone上使用相同的代码吗?

这样的东西
var label = target.frontMostApp().mainWindow().elements()["myAccesibilityIdentifier"];
UIALogger.logMessage("Is label valid? " + label.isValid());

结果我得到了 标签有效吗?假

2 个答案:

答案 0 :(得分:1)

看一下Mechanic(https://github.com/jaykz52/mechanic)。您可以按名称访问元素,它将为您搜索视图层次结构。 e.g。

var label = $('#myAccesibilityIdentifier');

答案 1 :(得分:0)

在自动化代码中,您可以辨别运行的iPad与iPhone(示例)

if(target.model()=="iPhone" || target.model() == "iPhone Simulator")
{
    var phone = true;
    var pad   = false;
    var appName = app.name();
    UIALogger.logMessage("Testing device is: iPhone");
    UIALogger.logMessage("Logger says: " + target.model()); 
    UIALogger.logMessage("Application name: " + appName);
}   
else if(target.model() =="iPad" || target.model() == "iPad Simulator")
{   
    var phone = false;
    var pad   = true;
    var appName = app.name();
    UIALogger.logMessage("Testing device is: iPad");
    UIALogger.logMessage("Logger says: " + target.model());
    UIALogger.logMessage("Application name: " + appName);
}

根据我在示例中设置的变量phone / pad,您可以指示脚本如何找到您要查找的元素。

if(phone)
{
    //var label = Path to element (phone)
}
else if(pad)
{
    //var label = Path to element (pad)
}

我知道一起使用pad / phone是多余的,但我最初是为了安全,以防将来第三种类型混入iOS开发(以防万一))。