【问题标题】:UI Automation "could not be tapped because the element is not visible" iOSUI 自动化“无法点击,因为该元素不可见”iOS
【发布时间】:2013-09-24 18:17:56
【问题描述】:

这让我发疯了,如果有人可以提供帮助,我将不胜感激...... 我正在尝试编写一个 ui 自动化脚本来测试应用程序。有一个特定的集合视图,其中单元格是通过首先加载视图从 nib 生成的......

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

    [self.categoryCollectionView registerNib:[UINib nibWithNibName:@"HomeCategoryCell"    bundle:nil] forCellWithReuseIdentifier:@"HomeCategoryCell"];
    [self.formsCollectionView registerNib:[UINib nibWithNibName:@"HomeFormCell" bundle:nil] forCellWithReuseIdentifier:@"HomeFormCell"];
    [self.existingFormsCollectionView registerNib:[UINib nibWithNibName:@"HomeExistingFormCell" bundle:nil] forCellWithReuseIdentifier:@"HomeExistingFormCell"];

    [self setupFormCategories];
}

然后是设置表单方法...

- (void)setupFormCategories
{
    categories = [[NSMutableArray alloc] init];
    FormCategory *cat = [[FormCategory alloc] init];
    cat.categoryTitle = @"All Forms";
    cat.iconFileName = @"CategoryIcon.png";
    cat.relatedForms = @[@"Form Type 1", @"Form Type 2"];
    [categories addObject:cat];

    cat = [[FormCategory alloc] init];
    cat.categoryTitle = @"Customer Forms";
    cat.iconFileName = @"CategoryIcon.png";
    cat.relatedForms = @[@"Form Type 1", @"Form Type 2"];
    [categories addObject:cat];

    cat = [[FormCategory alloc] init];
    cat.categoryTitle = @"Client Forms";
    cat.iconFileName = @"CategoryIcon.png";
    cat.relatedForms = @[@"Form Type 1", @"Form Type 2"];
    [categories addObject:cat];

    cat = [[FormCategory alloc] init];
    cat.categoryTitle = @"User Forms";
    cat.iconFileName = @"CategoryIcon.png";
    cat.relatedForms = @[@"Form Type 1", @"Form Type 2"];
    [categories addObject:cat];

    brandNewForms = nil;
}

我尝试了几种选择其中一种形式的方法,(包括 categoryTitle 和相关的形式...

target.frontMostApp().mainWindow().collectionViews()[0].cells()["User Forms"].tap();

以及 firstWithPredicate 等...但是我总是得到相同的响应....

脚本抛出未捕获的 JavaScript 错误:target.frontMostApp().mainWindow().collectionViews()[0].cells()["User Forms"] 无法点击,因为该元素在第 64 行不可见wip.js

如果我记录元素树,它可以查看所有元素类型并返回完整的元素树。如果我通过 Instruments 记录用户交互,它会识别元素,并生成这个 javascript...

target.frontMostApp().mainWindow().collectionViews()[0].cells()["User Forms"].tap();

无论我做什么,我都无法让它工作。我已经尝试通过界面构建​​器更改可访问性设置,确保它是子视图没有任何可访问性设置,但是我无法让它工作。我也无法理解为什么它会识别 logElementTree 中的元素并记录,但在运行时却不能...

任何想法...如果这是问题,我可以如何修改目标 C 代码的任何建议...?我试过玩 cat.accessibilityLabel= @"User Forms";但我是 Objective C 的新手,我真的不知道自己在做什么......

xCode 5 / iOS7 模拟器...但我也尝试过 xCode 4.6.3 / iOS6.1....

【问题讨论】:

    标签: ios user-interface automation automated-tests


    【解决方案1】:

    根据您对问题的描述,听起来您要点击的单元格在视图层次结构中,但实际上它只是在屏幕上不可见。

    也许您必须先滚动才能使其可见。此外,看起来您有不同类别的项目。也许您必须在该单元格可见之前在您的应用中选择正确的类别。

    【讨论】:

    • 您好,感谢您的回复。它们都水平显示在屏幕顶部。我认为滚动到它不会有帮助,它也不会让我选择顶级类别或子类别(我已经通过点击 co-orindates 进行了测试,但它不会让我选择任何类别,它说它们都不可见....
    • 也许您视图中的某些内容需要一些时间才能加载。尝试在有问题的点击之前在脚本中添加延迟,看看是否有任何改变。
    • 嗨,我刚刚又试了一次,增加了 20 秒的延迟。它仍然不起作用,无论如何我认为这不是问题,因为我做了一个 Tune_JS 断言检查以确保元素都在此之前,并且通过了,尽管当我询问脚本时出于某种原因点击其中一个,它说它们不可见....我很难过....
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-15
    • 1970-01-01
    • 2016-03-26
    • 2017-10-15
    • 1970-01-01
    相关资源
    最近更新 更多