我想使用Xcode UI Test来帮助我自动测试我的应用。
我的视图层次结构如:UITableView-> TableHeaderView->我的自定义视图 - >设置按钮。
我想用accessibilityIdentifier查询我的按钮,我在我的viewController中设置它,并使用模拟器的辅助功能检查器检查它,并使用我的真实设备和语音检查按钮是可访问性。
但是使用我的代码,它无法建立:
app.tables.buttons["settingBtn"].tap()
为什么我的设置按钮是可访问性但是Xcode无法记录它并且我自己的代码找不到设置按钮?
有人可以给我一些使用UIElementQuery以正确方式访问我的按钮的提示吗?
---编辑---
在自定义视图中:
@implementation HeaderView
- (void)awakeFromNib {
[super awakeFromNib];
[self initAccessibility];
}
- (BOOL)isAccessibilityElement {
return NO;
}
- (NSArray *)accessibilityElements {
return @[self.settingButton];
}
- (NSInteger)accessibilityElementCount {
return [[self accessibilityElements] count];
}
- (NSInteger)indexOfAccessibilityElement:(id)element {
return [[self accessibilityElements] indexOfObject:element];
}
- (void)initAccessibility {
self.settingButton.isAccessibilityElement = YES;
self.settingButton.accessibilityIdentifier = @"settingBtn";
self.settingButton.accessibilityLabel = @"settingBtn";
}
- (IBAction)clickSettingButton:(id)sender {
if ([self.delegate respondsToSelector:@selector(clickSettingButton)]) {
[self.delegate clickSettingButton];
}
}
@end
viewController中的:
- (void)initHeaderView {
self.headerView = [[[NSBundle mainBundle] loadNibNamed:NSStringFromClass([HeaderView class]) owner:self options:nil] firstObject];
self.headerView.delegate = self;
[self.headerView.backgroundImageView sd_setImageWithURL:[NSURL URLWithString:kURLString]];
[self.headerView setFrame:CGRectMake(0, 0, SCREENWIDTH, (SCREENWIDTH * 9 / 16))];
self.headerViewHeight = self.headerView.bounds.size.height;
[self.tableView addSubview:self.headerView];
self.tableView.contentInset = UIEdgeInsetsMake(self.headerViewHeight, 0, 0, 0);
self.tableView.contentOffset = CGPointMake(0, -self.headerViewHeight + kNavigationBarHeight);
}
UI测试代码中的:
class PopupDialogUITests: XCTestCase {
override func setUp() {
super.setUp()
continueAfterFailure = false
XCUIApplication().launch()
}
override func tearDown() {
super.tearDown()
}
func testExample() {
let app = XCUIApplication()
app.tables.buttons["SettingBtn"].tap()
}
}
答案 0 :(得分:1)
我知道自从你提出这个问题以来已经过了一个多月,但我注意到你仍然没有解决你的问题。您使用的是大写' S'在您的字符串的开头指定测试中的辅助功能标识符时,它应该是小写的。
- (void)initAccessibility {
self.settingButton.isAccessibilityElement = YES;
self.settingButton.accessibilityIdentifier = @"settingBtn";
self.settingButton.accessibilityLabel = @"settingBtn";
}
app.tables.buttons["SettingBtn"].tap()