ios - 尝试在 Xcode 11 中的 UITesting 期间滚动 MapView

标签 ios swift ios13 xcode-ui-testing

简单地说,我希望有一个自动化测试作为我的 UI 测试套件的一部分,可以滚动 map 。我不关心位置,我只需要把它从原来的位置移开。

为什么?

两个原因:

  1. 用户与 map 交互后,UI 就会更新。我希望验证这些更改
  2. 虽然我可以在设备上轻松验证这一点,但我还想通过 faSTLane 包含自动屏幕截图。通过执行测试使这成为可能

到目前为止我测试了什么?

我从相关问题中发现了以下内容并进行了测试,但没有成功:

let map = app.maps.element
let start = map.coordinate(withNormalizedOffset: CGVector(dx: 200,
                                                          dy: 200))
let end = map.coordinate(withNormalizedOffset: CGVector(dx: 250,
                                                        dy: 250))
start.press(forDuration: 0.01, thenDragTo: end)

我可以确认 map 元素已正确设置并包含预期信息。 我还可以确认我使用的坐标位于屏幕上 map 的范围内。为了以防万一,我还测试了各种其他值。

我不关心它是如何移动的,或者它被移动到哪里。我所需要的只是复制用户将 map 移动 1 点的情况。

最佳答案

coordinate(withNormalizedOffset:) 的工作方式有点不同。 Vektor 会乘以对象的大小。

来自苹果的文档:

The coordinate’s screen point is computed by adding normalizedOffset multiplied by the size of the element’s frame to the origin of the element’s frame.

这意味着,如果您想开始拖动 map 的中心,然后稍微拖动 map ,则必须像这样使用它:

let map = app.maps.element
let start = map.coordinate(withNormalizedOffset: CGVector(dx: 0.5, dy: 0.5))
let end = map.coordinate(withNormalizedOffset: CGVector(dx: 0.6, dy: 0.6))
start.press(forDuration: 0.01, thenDragTo: end)

这会将起始坐标放置在 0.5 * map.frame.width0.5 * map.frame.height 处,将结束坐标放置在 0.6 * map 处。 frame.width0.6 * map.frame.height

当您使用它运行 UITest 时,您会看到它拖动了 map 。

根据您的参数,它将起始坐标放置在 200 * map.frame.width200 * map.frame.height 处,位于屏幕之外,因此无需拖动发生。

关于ios - 尝试在 Xcode 11 中的 UITesting 期间滚动 MapView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58032955/

相关文章:

swift - 将远程帧缓冲区流式传输到 NSView

swift - 在 iOS 13 之后,在 pdf 上导航文本框不再工作 - 使用 PDFKIT 似乎是手势问题

ios - 从 Springboard 启动应用程序的显着延迟

ios - 如何在 iOS objective-c 中实现像 Feedly、insorts news app 这样的动画

ios - 如何在iOS上的音频缓冲区中跳过样本

swift - 默认情况下,常量未分配的可选值不会为零

ios - 在 TableViewCell 中设置纵横比的多个圆形 UIImageView 的自动布局

ios - 从初始化程序返回而不初始化所有存储的属性swift ios

swift - iOS 13 今日扩展中的标签颜色

statusbar - 如何防止 iOS 1 3's Dark Mode from changing the text color in my app' s 状态栏?