首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Xcode UITests挖掘特定点

如何使用Xcode UITests挖掘特定点
EN

Stack Overflow用户
提问于 2016-03-29 13:02:51
回答 4查看 21.6K关注 0票数 29

我想使用快车道快照的Xcode UI测试来制作Cordova应用程序的截图。基本上,由于我的整个应用程序只是一个web视图,所有的Xcode UI测试助手方法都变得无关紧要,我只想点击特定的点,例如tap(x: 10, y: 10)应该在{10px; 10px}点处生成一个点击。

这可能很简单,但我想不出怎么做。

谢谢。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-03-29 14:39:20

您可以使用API接口点击一个特定的点。不幸的是,你不能仅仅说“点击10,10”引用一个像素坐标。您将需要创建与实际视图的相对偏移量的坐标。

我们可以使用上述的web视图与相对坐标进行交互。

代码语言:javascript
复制
let app = XCUIApplication()
let webView = app.webViews.element
let coordinate = webView.coordinateWithNormalizedOffset(CGVector(dx: 10, dy: 10))
coordinate.tap()

请注意,您是否尝试过直接与web视图交互?我在使用app.links["Link title"].tap()app.staticTexts["A different link title"].tap()时取得了很大的成功。这里有一个演示应用程序,我把它放在一起演示如何与web视图交互。

Update:正如Michal .在注释中指出的那样,您现在可以直接点击一个坐标,而不必担心偏移量的规范化。

代码语言:javascript
复制
let normalized = webView.coordinate(withNormalizedOffset: CGVector(dx: 0, dy: 0))
let coordinate = normalized.withOffset(CGVector(dx: 10, dy: 10))
coordinate.tap()

注意,我将0,0传递给归一化向量,然后将实际点10,10传递给第二次调用。

票数 45
EN

Stack Overflow用户

发布于 2017-03-24 21:47:38

@joe离开Joe Masilotti的方法再远一点,我把我的extension放在了一个中,并给全球和当地的params提供了介词短语。

代码语言:javascript
复制
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()
}

通过给全局提供一个可识别的名称,我可以很容易地理解实例,例如:

代码语言:javascript
复制
tapCoordinate(at x: 100, and y: 200)
票数 23
EN

Stack Overflow用户

发布于 2020-03-02 18:06:42

我找到了激光的答案,可以很好地使用Xcode 11,但我做了一些调整,以便很容易地将它集成到我的测试中。

代码语言:javascript
复制
extension XCUIApplication {
    func tapCoordinate(at point: CGPoint) {
        let normalized = coordinate(withNormalizedOffset: .zero)
        let offset = CGVector(dx: point.x, dy: point.y)
        let coordinate = normalized.withOffset(offset)
        coordinate.tap()
    }
}

现在,当我需要点击一个给定的位置时,我只需提供一个CGPoint并对我的XCUIApplication调用它,如下所示:

代码语言:javascript
复制
let point = CGPoint(x: xCoord, y: yCoord)
app.tapCoordinate(at: point)
票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36285090

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档