Xcode7 ui 测试:staticTexts["XX"].swipeRight() 滑动不够远

Xcode7 ui testing: staticTexts["XX"].swipeRight() swipes not far enough

对于 UI 测试,我想执行向右滑动的手势以使更多按钮可访问。我要滑动的元素位于屏幕底部。我通过以下方式访问它:

element.staticTexts["TEST TEXT"].swipeRight()

执行测试时,滑动距离不够远。它不会触发元素完全向右滑动并显示我想要点击的更多按钮。

我的感觉是swipeRight()抓住静态文本的中间并执行手势。

是否有可能将元素向左移动更多,使其向右滑动更多?

感谢您的任何建议!

试试这个方法:

    let startPoint = element.staticTexts["TEST TEXT"].coordinateWithNormalizedOffset(CGVectorMake(0, 0)) // center of the element
    let finishPoint = startPoint.coordinateWithOffset(CGVectorMake(1000, 0))
    startPoint.pressForDuration(0, thenDragToCoordinate: finishPoint)

您可以调整1000达到您想要的效果。

至少从 Swift 4.1、Xcode 9.4.1 开始,您需要的值表示元素宽度和高度的百分比 - 0.01.0.

对于长滑动,您需要在元素上拖动大约 60%,如下所示:

// right long swipe - move your 'x' from 0.0 to 0.6
let startPoint = element.coordinate(withNormalizedOffset: CGVector(dx: 0.0, dy: 0.0))
let endPoint = element.coordinate(withNormalizedOffset: CGVector(dx: 0.6, dy: 0.0))
startPoint.press(forDuration: 0, thenDragTo: endPoint)

和:

// left long swipe - move your 'x' from 0.6 to 0.0
let startPoint = element.coordinate(withNormalizedOffset: CGVector(dx: 0.6, dy: 0.0))
let endPoint = element.coordinate(withNormalizedOffset: CGVector(dx: 0.0, dy: 0.0))
startPoint.press(forDuration: 0, thenDragTo: endPoint)

您可以将 dy 值设置为 0.5,例如,如果您想在元素的中心拖动。但是,请注意,您的 dy 值必须相同才能向右或向左滑动。如果您要将其转换为向上或向下滑动,则 dx 值需要相同,而 dy 值将适当更改。 (滑动需要沿直线移动。)

另请注意,forDuration 值表示拖动前按住触摸的秒数。值越大,初始按下的时间越长。

我在此 中发布了一个 XCUIElement 长滑动扩展。