我正在使用 Subliminal 来测试一个应用程序。一个屏幕使用带有项目行的 UITableView。我希望 Subliminal 能够找到特定行的详细披露按钮,然后调用“点击”方法。
我遇到的问题是详细的披露按钮不是通过这样的简单调用返回的:
NSString *label=@"More info, row label";
SLElement *e=[SLElement elementWithAccessibilityLabel:label];
SLAssertTrueWithTimeout([e isValidAndVisible],5.0f,@"Not visible");
[e tap]; //fails assertion above
假设“行标签”对应于 UITableViewCell 的标签对象中的标题。
这没有通过“isValidAndVisible”检查。
我已经通过使用辅助功能检查器确认标签标题是正确的,并且还通过在 iPad 上聆听实际的 VoiceOver 语音读取它。所以这个按钮确实是可以访问的。
我在这里缺少一些简单的东西吗?有没有更好的方法让 Subliminal 选择 UITableViewCell 的显示图标?我不能仅仅依靠点击此处的行,我需要专门测试点击披露图标。
谢谢!
编辑:为@JeffreyWear 添加了这个
我已经输出了您请求的跟踪输出的相关区域。抱歉,我是新手,所以我不确定如何创建一个测试用例供您检查/使用,这将是通用的。
<UITableView: 0xd268e00; frame = (0 75; 768 894); label = 'Empty list
<UITableViewCellAccessibilityElement: 0xbd0a290; frame = (0 75; 768 44)>
<UITableTextAccessibilityElement: 0x1292f620; frame = (0 75; 711 44); label = 'Document. PURHWE'; traits = (Static Text); accessibilityElement = YES>
<UIAccessibilityElementMockView: 0x1293c060; frame = (711 86; 42 22); label = 'More info, Document. PURHWE'; accessibilityElement = YES>
所以我运行来获得这个控制的实际代码是这样的:
SLElement *btn=[SLElement elementWithAccessibilityIdentifier:@"More Info, Document. PURHWE"];
[btn logElement];
SLAssertTrueWithTimeout([btn isValidAndVisible], 5.0f, @"Not visible.");
logElement 的输出:
Unexpected exception occurred ***SLUIAElementInvalidException*** for reason: Element '<SLElement description:"More info, Document. PURHWE">' does not exist.
我认为您可以在日志跟踪中看到该元素确实存在,并且被标记为可访问。
<UIAccessibilityElementMockView: 0x1293c060; frame = (711 86; 42 22); label = 'More info, Document. PURHWE'; accessibilityElement = YES>
我应该注意到,作为一般可访问性改进的一部分,我们在标签中添加了“文档”一词,因为列表可以显示许多不同类型的对象,视障用户会知道这个特定的行代表一个文档(而不是一个“文件夹”等...)
解析度
我使用了不正确的方法来获取对象。我错误地使用了“elementWithAccessibilityIdentifier”而不是“elementWithAccessibilityLabel”。