iPhone UIAutomation:无法找到tableview

时间:2016-01-14 07:17:13

标签: ios ios-ui-automation xcode-instruments

我有一个视图层次结构如下:

-UIScrollView
--UITableView
---UIView

项目中的所有代码都是:

- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.

UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:self.view.bounds];
[self.view addSubview:scrollView];

UITableView *tableView = [[UITableView alloc] initWithFrame:scrollView.bounds];
tableView.delegate = self;
tableView.dataSource = self;
[scrollView addSubview:tableView];

UIView *tableSubView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, tableView.bounds.size.width, 20)];
[tableView addSubview:tableSubView];
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return 3;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *idForCell = @"id";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:idForCell];
if (!cell) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:idForCell];
}
cell.textLabel.text = [NSString stringWithFormat:@"%@",@(indexPath.row)];
return cell;
}

我在自动化中的js代码是:

var target = UIATarget.localTarget();
target.delay(2);
target.logElementTree();

最后我用仪器检查跟踪日志中的元素树显示,结果是:

-UIATarget
--UIAApplication
---UIAWindow
----UIAScrollView
-----UIATableView
------UIATableCell
------UIATableCell
------UIATableCell

但是我无法找到tableSubView元素,有人能告诉我原因吗?TKS非常多!

2 个答案:

答案 0 :(得分:0)

尝试更改行

[tableView addSubview:tableSubView];

[tableView.superview addSubview:tableSubView];

答案 1 :(得分:0)

有时,UIAutomation with Instruments有点棘手。在致电target.logElementTree();之前,您可以尝试多种方法:

  • 将scrollToVisible()设为tableView

    target.mainWindow().scrollViews()[0].tableViews()[0].scrollToVisible();

  • 将辅助功能标签添加到表子视图中。在您的代码中:

    UIView *tableSubView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, tableView.bounds.size.width, 20)]; tableSubView.accessibilityLabel = @"tableSubview";

你可以将两者结合起来。我希望这会对你有帮助!