EarlGrey - 如何检查屏幕上是否显示多个对象

2024-02-27

The EarlGrey文档says https://github.com/google/EarlGrey/blob/master/docs/api.md#earlgrey-matchers that

You must narrow down the selection until it can uniquely identify a single UI element

我的 UI 上有三个 UIView,我需要检查使用的可见性grey_sufficientlyVisible()断言。然而,除非我真的使用它们各自的可访问性标签等来挑选每一个,否则我无法匹配所有它们。有没有办法匹配视图的超集,或者我应该为每个视图创建单独的测试条件?


通过说匹配器必须能够唯一地标识一个元素,EarlGrey 使得做错误的事情变得更加困难。想象一下,当多个元素匹配时无意中选择了错误的元素并断言它是否可见,后来发现检查了错误的元素的可见性......哎呀!

无论如何,您想要完成的事情可以通过以下几种方式完成:

1)如果所有这些视图共享一个公共父视图,那么您可以编写一个在父视图上匹配的自定义匹配器,并编写一个迭代子视图的自定义断言,存储具有所需辅助功能标签的视图,然后运行每个单独的视图通过可见性匹配器查看。就像是:

for (UIView *view in matchedViews) {
  GREYAssertTrue([grey_sufficientlyVisible() matches:view],
                 @"View %@ is not visible", view);
}

2)或者,如果您不介意创建一个更复杂的技术来匹配多个视图,您可以创建一个可重用的函数,您可以执行类似于我在测试中所做的操作,该测试检查表视图是否具有五行带有辅助功能标签“Row 1”:

- (void)testThereAreThreeViewsWithRow1AsAccessibilityLabel {
  NSMutableArray *evaluatedElements = [[NSMutableArray alloc] init];
  __block bool considerForEvaluation = NO;
  MatchesBlock matchesBlock = ^BOOL(UIView *view) {
    if (considerForEvaluation) {
      if (![evaluatedElements containsObject:view]) {
        [evaluatedElements addObject:view];
        considerForEvaluation = NO;
        return YES;
      }
    }
    return NO;
  };
  DescribeToBlock describeToBlock = ^void(id<GREYDescription> description) {
    [description appendText:@"not in matched list"];
  };
  id<GREYMatcher> notAlreadyEvaluatedListMatcher =
      [GREYElementMatcherBlock matcherWithMatchesBlock:matchesBlock
                                      descriptionBlock:describeToBlock];
  id<GREYMatcher> viewMatcher =
      grey_allOf(grey_accessibilityLabel(@"Row 1"), notAlreadyEvaluatedListMatcher, nil);
  for (int i = 0; i < 5; i++) {
    considerForEvaluation = YES;
    [[EarlGrey selectElementWithMatcher:viewMatcher] assertWithMatcher:grey_sufficientlyVisible()];
  }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

EarlGrey - 如何检查屏幕上是否显示多个对象 的相关文章

  • xCode 7.1 中警报的 UITesting

    我正在 xCode 7 1 中编写 UITests 并且在测试警报时遇到问题 在我的情况下允许通知 创建测试时 xCode 会写入以下代码 app alerts U201cAppName U201d Would Like to Send Y
  • GIDSignIn 在提示前指定范围

    我在 iOS 上升级到 GoogleSignIn 6 0 但找不到在登录时指定登录范围的方法 我只能看到一个名为 addScopes 的 API 我可以在基本登录后指定范围 但这会导致两个单独的登录提示 这很奇怪 之前 我们可以简单地指定登
  • 如何区分iphone4和iphone 3

    我正在尝试使用 cocos2d 引擎为 iphone 构建游戏 我想知道如何区分用户使用的是 iphone 4 还是 iphone 3 因为我想为 iphone4 加载高分辨率图形 为 iphone 3 加载低分辨率图形 我知道我是否在以下
  • Xcode 找不到我的静态库!

    这是链接器错误 i686 apple darwin10 gcc 4 2 1 Users william Documents SettingsLibrary build Debug iphonesimulator libSettingsLib
  • 如何获取 ios 日期数组中的所有星期日

    我只想要一个数组 它以 NSDate 的形式包含一年中的所有星期一 但速度很快 我在 Objective c 中使用以下代码 但不知道如何在 swift 中使用它 NSDate pickerDate NSDate date NSLog pi
  • Swift - 停止 avaudioplayer

    我正在尝试将音板构建到应用程序中 并找到了一种使用标签来控制播放声音的有效方法 不过 我现在正在尝试集成一个可以与 stop 方法上的AVAudioPlayer但是我当前的代码出现错误 EXC BAD ACCESS 这就是我现在正在使用的
  • 如何在pop UIViewController中删除UIParallaxDimmingView?

    我有一个UIViewController vc1这是在之后推送的UIViewController vc2 Both vc1 and vc2具有透明背景 问题 当我尝试弹出时vc2使用交互式弹出手势 从边缘平移 在我看来堆栈显得很神秘UIPa
  • 如何编写自己的CasperJS模块?

    例如 我有一个经常需要执行的步骤 例如在某些测试之前用户登录 如何为 CasperJS 编写可重用的代码块 他们的扩展 CasperJS 的文档只为一个文件编写 Thanks 这是一个简单的方法 如果不熟悉 CoffeeScript 请在
  • 使用 Swift 3 和 Realm 同步 Apple Watch 和 iPhone

    我需要从 Apple Watch 和 iPhone 显示和修改我的数据结构 数据库 我目前正在使用一个简单的领域结构 其中有一个对象 A 和一个可以容纳大量 A 的对象 B 因此 在 iPhone 上 用户可以创建 B 并添加 A 当然还可
  • 在 iOS 中,http 204 响应返回空白页面,有办法阻止这种情况吗?

    以前可能有人问过这个问题 但我似乎找不到解决方案 所以如果是这种情况 我深表歉意 我正在开发一个使用express的简单节点应用程序 其中一个帖子路由返回 http 204 并发送它 下面是我的代码 router post id funct
  • 检查 UITableViewCell 是否完全可见

    如何检查 UITableViewCell 在屏幕上是否完全可见 不被选项卡或导航栏切断 我可以使用以下代码获取可见单元格 NSArray indexes tableView indexPathsForVisibleRows 但我想排除屏幕中
  • 如何截断 UITableView Cell TextLabel 中的文本,使其不隐藏 DetailTextLabel?

    我有一份电话费率清单 textLabel是国家 地区并且detailTextLabel是我必须显示的速率 对于某些字符串 textLabel太长并且detailTextLabel变得隐藏 是否有一个设置可以自动调整文本 如果太长了 这是一个
  • 在 iOS 上不显示数字键盘

    根据苹果的文档 http developer apple com library safari documentation AppleApplications Reference SafariHTMLRef Articles InputTy
  • iPad应用程序必须支持横向和纵向吗?

    iPad 应用程序是否必须支持纵向和横向才能被 App Store 接受 编辑 我的应用程序是一个商业应用程序 销售亚马逊等产品 您必须至少支持一种方向的两种类型 纵向和纵向颠倒和 或横向左 右 会尽快拉起链接 http developer
  • 子视图的子层与更高的子视图重叠

    我有一个问题 我正在创建一个UIView这是从方法返回的 这部分很好 但我注意到 当我将子层添加到其中一个子视图时 这些层与子层添加的层次结构中较高的子视图 textView 和 imageView 重叠到testViewCopy出现在这些
  • 沙盒测试帐户反复询问 iOS 应用内购买的密码

    我用 Swift 语言开发了一个应用程序 我添加了应用内购买来删除广告 我还创建了一个沙箱帐户来测试 但后来我忘记了这个账户的信息 我不确定信息 密码输入屏幕仍然以闪烁的屏幕显示方式显示 即使我重置设备并重新加载它 也没有任何好处 实际上一
  • 永远不会在 ios 的 google API 中获取上传数据进度

    我在我的应用程序中使用 Google Drive API 从我的应用程序上传文件 到目前为止 我成功了 并找到了上传所有类型文件的良好结果 我跟着谷歌示例 https developers google com drive examples
  • 有没有办法在 VSCode 中保存时运行 go 测试,并将其输出到终端?

    现在我有几个项目在VSCode中运行 运行起来相当繁琐go test每次我编写新代码时 我宁愿立即看看我是否破坏了某些东西 我知道在 Javascript 中我可以在每次保存文件时运行测试 并将输出发送到终端 现在我正在使用 保存时运行 h
  • 如何让应用更新以吸引人的屏幕形式提供给用户? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我最近在使用 Make My Trip 应用程序 我发现每当我启动应用程序时都会出现一个非常有吸引力的应用程序更新弹出屏幕 它说要更新应用程
  • 从基元创建自定义形状

    我正在尝试通过组合原始形状来创建自定义物理形状 目标是创建一个圆形立方体 合适的方法似乎是初始化 形状 变换 我在这里找到的https developer apple com library prerelease ios documenta

随机推荐