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

时间:2016-05-11 09:38:06

标签: ios xcode xcode7 xcode-ui-testing ui-testing

对于UI测试,我想执行一个swipeRight-gesture来进一步访问按钮。我想要滑动的元素位于屏幕的底部。我通过以下方式访问它:

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

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

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

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

感谢您的任何建议!

2 个答案:

答案 0 :(得分:5)

尝试这种方法:

    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以达到您想要的效果。

答案 1 :(得分:0)

至少从Swift 4.1(Xcode 9.4.1)开始,所需的值代表元素宽度和高度的百分比- 0.0 1.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值表示拖动之前保持触摸的秒数。值越高,首次按下的时间越长。

我在此answer中发布了一个XCUIElement扩展名,用于长时滑动。