Xcode 11 中的 UITesting 期间尝试滚动 MapView
Attempting to scroll a MapView during UITesting in Xcode 11
简单地说,我希望有一个自动化测试作为我的 UI 测试套件的一部分,可以滚动地图。我不关心位置,我只需要将它从原来的位置移开即可。
为什么?
两个原因:
- 一旦用户与地图交互,UI 就会更新。我希望验证这些更改
- 虽然我可以在设备上轻松验证这一点,但我还想通过 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
元素设置正确并且包含预期信息。
我还可以确认我使用的坐标落在屏幕上地图的范围内。为了以防万一,我还测试了各种其他值。
我不关心它是如何移动的,或者它移动到哪里。我只需要复制一个用户将地图移动 1 点。
coordinate(withNormalizedOffset:)
的工作方式有点不同。 Vektor 乘以对象的大小。
来自 Apple 的文档:
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.
这意味着如果您想开始拖动地图的中心然后稍微拖动地图,您必须像这样使用它:
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.width
和 0.5 * map.frame.height
,将结束坐标设为 0.6 * map.frame.width
和 0.6 * map.frame.height
当您 运行 使用此 UITest 时,您会看到它会拖动地图。
根据您的参数,它会将起始坐标放在 200 * map.frame.width
和 200 * map.frame.height
处,这在屏幕之外,因此不会发生拖动。
简单地说,我希望有一个自动化测试作为我的 UI 测试套件的一部分,可以滚动地图。我不关心位置,我只需要将它从原来的位置移开即可。
为什么?
两个原因:
- 一旦用户与地图交互,UI 就会更新。我希望验证这些更改
- 虽然我可以在设备上轻松验证这一点,但我还想通过 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
元素设置正确并且包含预期信息。
我还可以确认我使用的坐标落在屏幕上地图的范围内。为了以防万一,我还测试了各种其他值。
我不关心它是如何移动的,或者它移动到哪里。我只需要复制一个用户将地图移动 1 点。
coordinate(withNormalizedOffset:)
的工作方式有点不同。 Vektor 乘以对象的大小。
来自 Apple 的文档:
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.
这意味着如果您想开始拖动地图的中心然后稍微拖动地图,您必须像这样使用它:
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.width
和 0.5 * map.frame.height
,将结束坐标设为 0.6 * map.frame.width
和 0.6 * map.frame.height
当您 运行 使用此 UITest 时,您会看到它会拖动地图。
根据您的参数,它会将起始坐标放在 200 * map.frame.width
和 200 * map.frame.height
处,这在屏幕之外,因此不会发生拖动。