UI 测试 - isSelected 始终返回 false

2024-04-07

我们最近使用 Xcode 8.2.1 (8C1002) 将 Swift 2.3 项目更新为 Swift 3,现在大多数与 tableViews 和 isSelected 属性相关的 UI 测试都不起作用。即使选择了对象,它也始终返回 false(我们可以在 iOS 模拟器中看到它)。

有人遇到过类似的问题吗?在转换之前,我们的代码在 Swift 2.3 中可以正常工作。以下是我们检索 tableView 单元格的方法:

let cell = app.tables.cells.element(at: 4)

Note: app是一个XCUI应用程序。

这是我们检查是否被选中的方法:

XCTAssert(cell.isSelected)

另一个观察结果是我们确信该物体存在是因为waitForExpectations返回 true:

let existsPredicate = NSPredicate(format: "exists = 1")
expectation(for: existsPredicate, evaluatedWith: cell, handler: nil)
waitForExpectations(timeout: 20, handler: nil)

EDIT:为了更换isSelected,我尝试将 NSPredicate 与selected = 1isSelected = 1。没有一个起作用。我也尝试使用acessibilityValue基于其他问题的答案,但是事情并没有那么简单,因为有时我的表视图中的项目是以编程方式选择/取消选择的。此外,该方法涉及向应用程序添加测试代码,这不是一个好的做法。

赏金结束后编辑:由于没有人能找到该问题的解决方案,而且这显然是 Xcode 中的一个错误,因此我已向 Apple 提交了一份错误报告。当他们发布带有修复程序的 Xcode 版本时,我将在这里发表评论。

额外编辑:在我上次编辑后的一天,dzoanb 给出了一个实用的答案。


我做了一些测试和一些研究。您可以查看为此目的创建的应用程序>>这里。如果你能检查一下那就太好了(这需要一些工作)。还有 UI 测试来证明它有效。此外,还有两种选择,一种是普通的 XCTest,另一种是带有我与同事创建的许多助手的库 https://github.com/dzoanb/ensure-cell-selectionAutoMate https://github.com/PGSSoft/AutoMate。但这不是重点。

这是我发现的:

1) isSelected的财产XCUIElement依赖于取决于accessibilityTrait。在 XCTest 中选择的元素必须具有UIAccessibilityTraitSelected set.

2)我无法重现你的问题,但我能够控制isSelected财产。

3) 是的,它需要一些代码,但如果它对您很重要,应该可以与 VoiceOver 很好地配合。

所有必要的代码都在您的自定义中UITableViewCell子类。并使用重写UIAccessibilityElement accessibilityTraits财产。

private var traits: UIAccessibilityTraits = UIAccessibilityTraitNone

// MARK: UITableViewCell life cycle
override func awakeFromNib() {
    super.awakeFromNib()
    traits = super.accessibilityTraits
}

// MARK: UIAccessibilityElement
override var accessibilityTraits: UIAccessibilityTraits {
    get {
        if isSelected {
            return traits | UIAccessibilityTraitSelected
        }
        return traits
    }

    set {
        traits = newValue
    }
}

希望能帮助到你。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

UI 测试 - isSelected 始终返回 false 的相关文章

  • SwiftUI:发送电子邮件

    在正常情况下UIViewController在 Swift 中 我使用此代码发送邮件 let mailComposeViewController configuredMailComposeViewController mailCompose
  • 将 UIToolBar 添加到所有键盘(swift)

    我正在尝试以尽可能少的重复次数将自定义 UIToolBar 添加到我的所有键盘中 我目前的做法要求我将代码添加到所有 viewDidLoads 中 并将每个文本字段的委托分配给我正在使用的 viewController 我尝试创建自己的 U
  • 如何为 iPhone 6+、6 和 5 指定不同尺寸?

    我想让 iPhone 6 6 和 5 上的视图看起来几乎相同 在附图中 我的意思是 例如 取消 按钮在 iPhone 5 中距离屏幕左边缘应为 30 像素 在 6 中为 35 像素 在 6 中为 45 像素 其他元素也类似 如何为每种类型设
  • 在 iOS 应用程序中拨打电话

    我有一些代码尝试在应用程序中进行调用 但它似乎不起作用 UIApplication myApp UIApplication sharedApplication NSString theCall NSString stringWithForm
  • Swift:设置协议的可选属性

    如何设置协议的可选属性 例如 UITextInputTraits 有许多可选的读 写属性 当我尝试以下操作时 出现编译错误 无法分配给 textInputTraits 中的 keyboardType func initializeTextI
  • 为什么选择选择器选项后我的 SwiftUI 页面标题会发生变化?

    struct SettingsView View let settings Setting Setting name Aperture Increments options 1 3 1 2 1 Setting name Shutter Sp
  • $0 和 $1 在 Swift 闭包中意味着什么?

    let sortedNumbers numbers sort 0 gt 1 print sortedNumbers 谁能解释一下什么 0 and 1在斯威夫特中意味着什么 另一个样本 array forEach actions append
  • 将类型传递给通用 Swift 扩展,或者理想情况下推断它

    说你有 class Fancy UIView 你想找到所有兄弟姐妹Fancy意见 没问题 https stackoverflow com q 37232743 294884 for v UIView in superview subview
  • Swift:长按手势识别器 - 检测轻击和长按

    我想连接一个动作 如果手势是点击 它会以特定的方式为对象设置动画 但如果按下持续时间超过 0 5 秒 它会执行其他操作 现在 我刚刚连接了动画 我不知道如何区分长按和点击 如何访问新闻持续时间以实现上述目的 IBAction func ta
  • iOS 7 tabBar 横线,如何去掉?

    Apple 在 iOS 7 中的 tabBar 上添加了一条细线 该线应该在 tabBar 和 UI 之间起到阴影或淡入淡出的作用 由于我使用的是定制的 tabBar 这条线非常令人恼火 你如何删除它 请告诉我这是可能的 否则我需要重新设计
  • 未知异常和崩溃

    当我尝试快速滚动表格视图或从远程重新加载数据时 我的应用程序崩溃了 当我先进行远程获取然后滚动表格视图时 一切似乎都工作正常 我不知道下面的崩溃日志意味着什么 它只是有时工作正常 有时崩溃 Incident Identifier 710A1
  • 在 iOS 上使用 RNCryptor 异步解密大文件

    我需要在 iOS 上使用 RNCryptor 异步解密一个大文件 以便显示进度条 我在任何地方都找不到示例 因此尝试了我猜对的方法 但是 我想出的方法不起作用 解密器的处理程序从未被调用 并且线程在发送所有数据后因 EXC BAD ADDR
  • CATextLayer 上 iOS 6 中不需要的垂直填充

    背景 我在 iOS 5 中开始了我的项目 并构建了一个带有图层的漂亮按钮 我在按钮上添加了一个 textLayer 并使用以下代码将其居中 float textLayerVerticlePadding self bounds size he
  • GLKit的GLKMatrix“列专业”如何?

    前提A 当谈论线性存储器中的 列主 矩阵时 列被一个接一个地指定 使得存储器中的前 4 个条目对应于矩阵中的第一列 另一方面 行主 矩阵被理解为依次指定行 以便内存中的前 4 个条目指定矩阵的第一行 A GLKMatrix4看起来像这样 u
  • 如何在 Swift 2.0 中使用 stringByAddingPercentEncodingWithAllowedCharacters() 作为 URL

    我在 Swift 1 2 中使用过这个 let urlwithPercentEscapes myurlstring stringByAddingPercentEscapesUsingEncoding NSUTF8StringEncoding
  • 有没有办法在 onclick 触发时禁用 iPad/iPhone 上的闪烁/闪烁?

    所以我有一个有 onclick 事件的区域 在常规浏览器上单击时 它不会显示任何视觉变化 但在 iPad iPhone 上单击时 它会闪烁 闪烁 有什么办法可以阻止它在 iPad iPhone 上执行此操作吗 这是一个与我正在做的类似的示例
  • UIViewController 内的 UIsearchController 使用自动布局

    有没有人成功实施过UIViewController其中包含两个UISearchController searchBar and a UItableView使用自动布局来布局所有内容 我正在尝试实现类似的目标1密码 https itunes
  • 在 Object 子类及其自己的子类上实现ignoreProperties()

    我是领域新手 我正在使用继承自 Object 的基类以及该基类的自定义子类创建模型 我的模型要求基类通过覆盖静态来声明一些属性被忽略ignoredProperties 方法 当尝试在某些基类子类上重写该方法时 我收到一个 Swift 编译器
  • Fitbit oauth2 公共 API 停止工作。给出错误 - 抱歉,这不是你..是我们

    几个月前 我准备了一个关于 Fitbit oauth2 公共 API 的演示 其中我使用特定用户登录并获取他的活动 一切正常 但最近 我打开演示并尝试使用同一用户登录 但它没有登录并反复出现此错误 我尝试更改在 Fitbit 上注册的演示应
  • 如何在 UITableView 的 switch 语句中创建变量?

    我正在构建一个包含三个部分的 tableView 我已经完成了前两个工作 但最后一个有点阻力 我的问题似乎涉及尝试在 switch 语句中声明变量 实际上是嵌套的 switch 语句 据我所知 这不是一个好主意 但在这种情况下 这似乎是唯一

随机推荐

  • 了解何时以及如何使用 Require.JS

    我刚刚开始使用 Require JS 并且不太清楚应该使用它的适当情况 以及在这些情况下使用它的正确方法 以下是我目前使用 Require JS 进行设置的方式 我有两个功能 functionA and functionB 这两个功能都需要
  • 如何创建包含下拉列表的 HTML 对话框?

    我想在特定类别下记录用户输入 为此 我希望用户从下拉列表中选择一个类别 并且还有另一个可以输入文本的文本单元格 我的目标是用特定条件填充下拉列表 然后将用户选择和附加文本字符串记录到变量中 然后将其写入电子表格中 编辑 我已经能够创建下拉列
  • C# .NET 3.5 GUI设计[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一些 C GUI 设计的编程指南 我来自 Java 阵营 在那里我可以愉快地手工编写 Swi
  • winforms 事件中未保留同步上下文

    我有以下 winforms 事件 public MainForm InitializeComponent new Form ShowDialog This causes the problem private async void Main
  • 在swift ios中多线程并行执行多个任务

    我知道队列的创建并且能够执行单个任务 但如何并行执行多个任务 并发队列 gt let concurrentQueue DispatchQueue label com some concurrentQueue attributes concu
  • 配置 Microsoft Application Insights 以监视 Windows 服务

    是否可以配置微软的应用洞察 http msdn microsoft com en us library dn481095 aspx监控 Windows 服务 我有一个在 Azure 中运行的 VM 其中托管了 Web 服务 我需要安装哪个版
  • 在 fxml 文件之间切换

    我在 swing 组件内使用 jfxPanel 创建了一个应用程序 我面临的问题是我无法更改 fxml 文件 当单击 fxml 的按钮时 我想处理该 fxml 并在那里加载另一个 fxml 文件 这就是我到目前为止所做的 public cl
  • Objective-C 类前缀 [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 您对命名 ObjC 类有何偏好 我有点不确定对此最合理的方法是什么 所以很高兴听到一些其他意见 Apple 建议为 cocoa 类添加前缀 因为
  • 在 jQuery 中,如何使用元素选中和取消选中所有复选框? [复制]

    这个问题在这里已经有答案了 我有以下代码 它使用通常位于复选框顶部的 LABEL 元素检查页面上的所有复选框 现在如何使用相同的 LABEL 元素取消选中所有框 jQuery document ready function var chec
  • Kibana4 监听端口 80 而不是端口 5601

    我在运行 RHEL7 的 Amazo EC2 实例上运行 elasticsearch 1 4 和 kibana4 Kibana4 作为独立进程运行 未部署在 nginx 等 Web 容器中 它正在侦听端口 5601 默认端口 我想让 kib
  • Android - 加载图像Url并在ImageView中显示

    我有这段代码来加载图像 服务器是安全的 我得到的答复是 200 这意味着可以 然后还要加载正确的网址 问题是当我运行我的应用程序时 图像不会被加载 try Bitmap bitmap null URL imageUrl new URL ur
  • C++ - 生成随机位集的有效方法,具有可配置的平均“1 与 0”比率

    我正在寻找一种高效的方法来生成随机数std bitset设定长度 我还希望能够影响1s 出现在结果中 因此如果概率值设置得足够低 则所有结果中只有一小部分会包含1 但仍然有可能 但不太可能 导致所有1s 它将用于计算量很大的应用程序 因此欢
  • 动态调用函数 - Python

    我有一个功能列表 例如 def filter bunnies pets def filter turtles pets def filter narwhals pets 有没有办法通过使用代表其名称的字符串来调用这些函数 e g filte
  • 如何更新 GridView / ListView 的每个元素上的 ProgressBar 状态?

    目前我有一个 GridView 每个元素都应该有一个单独的 ProgressBar 这些元素代表单独的下载 我想使用这些进度条显示下载的状态 但我应该如何更新它们呢 我的问题是 根据文档 以及我在 Google IO 视频中听到的内容 更新
  • 我应该实际使用哪个版本的 jQuery? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 所以几个月前 有一段时间我实际上并不需要 jQuery 来完成任何事情 并且几乎忘记了它 然后我醒了 所以 我前往http jquery
  • C++ 迭代模板 Map

    当我有一个包含模板映射和一个模板类const iterator声明如下代码typedef 如何迭代类外部映射的元素 例如 main 中以将它们打印在输出上 template
  • 删除小于X的数组元素

    我有数组 arr1 array 5 3 9 11 6 15 arr2 array 11 20 1 3 8 现在我需要循环遍历 arr1并找到小于的最大数X foreach arr1 as x need element that is MAX
  • 如何在 Laravel 中使用主密码登录用户?

    在 Laravel 中 我想使用主密码登录我的任何用户帐户 这是我在控制器中尝试过的 if Input get password master password email Input get email user User find em
  • 通过 YAML 发布管道运行 azure powershell 脚本

    我有正常且工作的发布管道 通过给定的某个部署组 该管道执行一些任务 复制脚本 执行该 powershell 脚本 在部署组中定义的目标计算机上 删除脚本 我知道 YAML 不支持部署组 但是 幸运的是我 到目前为止我的部署组只有一台机器 我
  • UI 测试 - isSelected 始终返回 false

    我们最近使用 Xcode 8 2 1 8C1002 将 Swift 2 3 项目更新为 Swift 3 现在大多数与 tableViews 和 isSelected 属性相关的 UI 测试都不起作用 即使选择了对象 它也始终返回 false