2017-05-27 38 views
1

我遇到了一种情况,我无法为包含UIPickerView的视图控制器获取XCUITest而无需生成断言即可工作。导致断言的问题显然来自XCUITest使用的辅助功能附加到每个选择器值的假“1 of n”。XCUITest使用adjustToPickerWheelValue:&& viewForRow:委托结果声明

的东西,因为这一条线一样简单将测试

[app.pickers.pickerWheels.element adjustToPickerWheelValue:@"ANYVALUE"]; 

这原来是一个已知的错误和Xcode中断言,并有一个开放的雷达正是Cannot use UI Testing to adjust pickerView which uses a view-based delegate

这是我的问题因为我使用viewForRow:委托为了使用选择器值中的属性字符串。另一种方法是使用titleForRow:委托,不会出现问题。

我试图通过手动设置可访问性信息来解决此问题,但无济于事。

而我不能考虑使用titleForRow:委托,因为我的客户要求为属性文本。

还有一个难题,即为所有视图提供完整的XCUITests作为另一个客户需求。

有什么可行的解决方法吗?

回答

0

这是在Xcode一个已知的bug,并已开通了相当一段时间了,可以追溯到至少2015年这个Apple Developer Forum Post

没有锁定未来明显。

我的解决方案,以满足所有客户的需求是要创建一个名为“测试”额外生成配置,这是从“调试”复制,这样我就可以定义一个新的预处理宏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