对于UI测试,我想执行一个swipeRight-gesture来进一步访问按钮。我想要滑动的元素位于屏幕的底部。我通过以下方式访问它:
element.staticTexts["TEST TEXT"].swipeRight()
执行测试时,滑动距离不够远。它不会触发元素完全向右滑动并显示我想要点击的其他按钮。
我感觉swipeRight()
抓住静态文本的中间并执行手势。
是否有可能将元素更多地向左移动,使其向右滑动更多?
感谢您的任何建议!
答案 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
扩展名,用于长时滑动。