【问题标题】:Is there a simpler API for descending the accessibility object hierarchy?是否有更简单的 API 用于降低可访问性对象层次结构?
【发布时间】:2014-12-12 03:20:21
【问题描述】:

我正在考虑使用 Accessibility API 来自动化一些 UI 任务,但我发现编写代码来降低可访问性对象层次结构需要大量代码,并且如果我忘记调用 CFRelease( )。例如,下面是我为查找可访问性对象的 AXSplitGroup 子对象而编写的代码:

//AXError axErr;
//CFTypeRef typeRef;

AXUIElementRef axSplitGroup = NULL;
{
    CFIndex objectChildrenCount;
    axErr = AXUIElementGetAttributeValueCount(axObject, kAXChildrenAttribute, &objectChildrenCount);
    assert(kAXErrorSuccess == axErr);
    CFArrayRef objectChildren;
    axErr = AXUIElementCopyAttributeValues(axObject, kAXChildrenAttribute, 0, objectChildrenCount, &objectChildren);
    assert(kAXErrorSuccess == axErr);
    assert(CFArrayGetCount(objectChildren) == objectChildrenCount);

    for (CFIndex i = 0; i < objectChildrenCount; ++i) {
        AXUIElementRef objectChild = CFArrayGetValueAtIndex(objectChildren, i);
        axErr = AXUIElementCopyAttributeValue(objectChild, kAXRoleAttribute, &typeRef);
        assert(kAXErrorSuccess == axErr);
        assert([(__bridge id)typeRef isKindOfClass:[NSString class]]);
        CFStringRef role = (CFStringRef)typeRef;
        if (kCFCompareEqualTo == CFStringCompare(role, kAXSplitGroupRole, 0)) {
            axSplitGroup = objectChild;
            i = objectChildrenCount - 1;
        }
        CFRelease(role);
    }
    CFRelease(objectChildren);

    assert(axSplitGroup);
}

最初我想知道(阅读:希望)Apple 提供了一个 API,它允许在可访问性对象层次结构上评估类似 XPath 的表达式以检索感兴趣的可访问性对象,但通过一些搜索,我不知道不认为这存在。

是否有其他标准 API 可用于迭代可访问性对象层次结构而无需太多代码?

【问题讨论】:

  • 有趣的想法。据我所知,最接近的是 Apple 的 JavaScript UIAutomation API。尽管如此,考虑到您正在寻找场外资源并且没有可以以问答形式回答的问题,我必须投赞成票。
  • 嗨@贾斯汀。因为还没有人提供答案,所以我认为可以将问题重述为更笼统。我认为您对使用 JavaScript UIAutomation API 的建议是对重述问题的一个很好的回答。如果您将评论转换为答案,我可以接受。
  • 完成。感谢您重温这个问题!

标签: objective-c accessibility uiaccessibility


【解决方案1】:

您最好的选择是采用 Apple 的 UI Automation,它允许您通过 InstrumentsJavaScript API 查询和与可访问性层次结构中的元素交互。这是界面自动化的首选技术。您将直接受益于您为采用UIAccessibility所做的任何工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-10
    • 1970-01-01
    • 2020-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多