XCUITest 使用 adjustToPickerWheelValue: && viewForRow: 委托断言结果
XCUITest using adjustToPickerWheelValue: && viewForRow: delegate results in assertion
我 运行 遇到这样一种情况,在没有生成断言的情况下,我无法让包含 UIPickerView 的视图控制器的 XCUITest 工作。导致断言的问题显然是 XCUITest 使用的辅助功能将虚假的“1 of n”附加到每个选择器值。
像这一行一样简单的东西会在测试期间断言
[app.pickers.pickerWheels.element adjustToPickerWheelValue:@"ANYVALUE"];
事实证明这是 Xcode 的一个已知错误,并且有一个开放的雷达 Cannot use UI Testing to adjust pickerView which uses a view-based delegate
这正是我的问题,因为我使用 viewForRow: 委托以便在选择器值中使用属性字符串。替代方法是使用 titleForRow: 委托,不会出现问题。
我曾尝试通过手动设置辅助功能信息来解决此问题,但无济于事。
而且我不能考虑使用 titleForRow: 委托,因为我的客户对属性文本有要求。
然而,作为另一个客户要求,还需要为所有视图提供完整的 XCUITests,这是一个难题。
有哪些可行的解决方法?
这是Xcode中的一个已知错误,现在已经打开了一段时间,至少可以追溯到2015年Apple Developer Forum Post
显然没有修复。
我满足所有客户要求的解决方案是创建一个名为 "Testing" 的额外构建配置,它是从 "Debug" 复制而来的,这样我就可以定义一个新的预处理器宏 XCUITEST。然后编辑测试下的方案以使用这个新的构建配置,而不是 DEBUG 或 RELEASE。
通过这一更改,我可以合并用于 XC 测试的委托,同时保留满足客户端应用程序要求的委托,如下所示:
#ifndef XCUITEST // for release or debug we use this method as we want attributed text strings
- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view {
// blah blah
}
#endif
#ifdef XCUITEST // for testing we have to use this method so XCUITests will work with adjustToPickerWheelValue:
- (UIView *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {
// blah blah
}
#endif
我 运行 遇到这样一种情况,在没有生成断言的情况下,我无法让包含 UIPickerView 的视图控制器的 XCUITest 工作。导致断言的问题显然是 XCUITest 使用的辅助功能将虚假的“1 of n”附加到每个选择器值。
像这一行一样简单的东西会在测试期间断言
[app.pickers.pickerWheels.element adjustToPickerWheelValue:@"ANYVALUE"];
事实证明这是 Xcode 的一个已知错误,并且有一个开放的雷达 Cannot use UI Testing to adjust pickerView which uses a view-based delegate
这正是我的问题,因为我使用 viewForRow: 委托以便在选择器值中使用属性字符串。替代方法是使用 titleForRow: 委托,不会出现问题。
我曾尝试通过手动设置辅助功能信息来解决此问题,但无济于事。
而且我不能考虑使用 titleForRow: 委托,因为我的客户对属性文本有要求。
然而,作为另一个客户要求,还需要为所有视图提供完整的 XCUITests,这是一个难题。
有哪些可行的解决方法?
这是Xcode中的一个已知错误,现在已经打开了一段时间,至少可以追溯到2015年Apple Developer Forum Post
显然没有修复。
我满足所有客户要求的解决方案是创建一个名为 "Testing" 的额外构建配置,它是从 "Debug" 复制而来的,这样我就可以定义一个新的预处理器宏 XCUITEST。然后编辑测试下的方案以使用这个新的构建配置,而不是 DEBUG 或 RELEASE。
通过这一更改,我可以合并用于 XC 测试的委托,同时保留满足客户端应用程序要求的委托,如下所示:
#ifndef XCUITEST // for release or debug we use this method as we want attributed text strings
- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view {
// blah blah
}
#endif
#ifdef XCUITEST // for testing we have to use this method so XCUITests will work with adjustToPickerWheelValue:
- (UIView *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {
// blah blah
}
#endif