【问题标题】:How tap by x and y coordinates iOS?如何通过 x 和 y 坐标点击 iOS?
【发布时间】:2022-01-07 17:07:58
【问题描述】:

对于 Android 世界,我们可以通过以下方式点击任何位置:

val device = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation())
device.click(x, y)

上面的 xy 可以从 Pixelmator 获得,例如:

例如,键a的坐标应该是x=100y=1800(来自Pixelmator的标尺)。

根据tapCoordinate,我们可能会在iOS中做类似的事情:

func tapCoordinate(at xCoordinate: Double, and yCoordinate: Double) {
    let normalized = app.coordinate(withNormalizedOffset: CGVector(dx: 0, dy: 0))
    let coordinate = normalized.withOffset(CGVector(dx: xCoordinate, dy: yCoordinate))
    coordinate.tap()
}

但它没有按预期工作,我想知道我们是否可以点击全局屏幕的xy 的一些点?

【问题讨论】:

  • 当我点击tapCoordinate 的链接时,我看到它位于关于编写 UI 测试的线程中。因此,我收集到您正在尝试实现一个 UI 测试帮助器功能,该功能可让您将点击驱动到特定的屏幕位置。您应该编辑您的问题以说明这一点。不要让你的读者猜测你想要做什么。
  • 我注意到的一件事是您似乎在使用 pixel 坐标。你不应该那样做。 Apple 使用点(72 英寸)作为其坐标系。带有视网膜显示器的设备每个点可能有 2 或 3 个像素。您需要计算出您的测试设备每点的像素数,并将像素坐标除以该值以获得以点为单位的坐标,并使用这些点值而不是像素值。

标签: ios swift xctest


【解决方案1】:

你的问题没有多大意义。函数debugDescription() 从各种数据类型生成一个字符串,适合记录到控制台。 iOS 不会“根据 debugDescription 计算坐标”。

您没有告诉我们您正在记录什么。您应该编辑您的问题,告诉我们您正在记录什么,显示捕获该值的代码,并显示记录它的打印语句。

根据输出的格式,您似乎正在记录一个矩形(CGRect 数据类型。)

CGRect 的形式为 (origin, size),其中 originCGPoint,size 是 CGSize

听起来tapCoordinate 是给你矩形的中心,这将是:

x = rect.origin.x + size.width/2
y = rect.origin.y + size.width/2

这给了

x = 23+41/2 = 43.5
y = 573+49/2 = 597.5

假设您的 x 值是一个错字,应该是 33,这与您在问题中给出的值非常接近。

【讨论】:

    猜你喜欢
    • 2016-07-29
    • 1970-01-01
    • 1970-01-01
    • 2019-12-16
    • 1970-01-01
    • 2014-12-02
    • 2022-11-13
    • 1970-01-01
    • 2013-10-13
    相关资源
    最近更新 更多