在UI测试中执行完全向左滑动操作?

时间:2018-07-31 20:18:58

标签: ios swift xctest xcode-ui-testing

我已经在表格视图中实现了前导和尾随滑动操作。现在,我正在尝试在XCTest UI测试中对其进行测试。

测试任一方向的常规滑动都很容易:

tableCell.swipeRight()
tableCell.swipeLeft()

使用其中之一会导致显示第一个操作按钮,然后我可以在该按钮上.tap()

但是,测试一次完整的刷卡却更具挑战性。我玩过this extensionHow do I swipe faster or more precisely?

我也曾与问题this answer中的Xcode7 ui testing: staticTexts[“XX”].swipeRight() swipes not far enough一起玩过。

这两种方法实际上都使用XCUIElement's coordinate(withNormalizedOffset:)方法从一个点滑动到另一点,类似于以下内容:

let startPoint = tableCell.coordinate(withNormalizedOffset: CGVector.zero)
let finishPoint = startPoint.withOffset(CGVector(dx:xOffsetValue, dy:yOffsetValue))
startPoint.press(forDuration: 0, thenDragTo: finishPoint)

我以扩展名结尾,该扩展名成功执行了向右完全滑动 -但对于向右滑动向左滑动似乎不正确

我的代码确实向左滑动,但是距离不够远。我尝试将dx:的硬编码数字从-300设置为300。元素宽度为414。我相信0是最左侧,而414是最右侧,因此我开始使用该尺寸作为参考。仍然没有喜悦。

如何获取此信息以向左完全滑动?

extension XCUIElement
{
    enum SwipeDirection {
        case left, right
    }

    func longSwipe(_ direction : SwipeDirection) {
        let elementLength = self.frame.size.width
        let centerPoint: CGFloat = elementLength / 2.0
        let halfCenterValue: CGFloat = centerPoint / 2.0

        let startOffset: CGVector
        let endOffset: CGVector
        switch direction {
        case .right:  // this one works perfectly!
            startOffset = CGVector.zero
            endOffset = CGVector(dx: centerPoint + halfCenterValue, dy: 0)
        }
        case .left:  // "There's the rub" as Hamlet might say...
            startOffset = CGVector(dx: centerPoint + halfCenterValue, dy: 0)
            endOffset = CGVector.zero

        let startPoint = self.coordinate(withNormalizedOffset: startOffset)
        let finishPoint = startPoint.withOffset(endOffset)
        startPoint.press(forDuration: 0, thenDragTo: finishPoint)
    }
}

1 个答案:

答案 0 :(得分:0)

知道了!

  • 首先,我不需要使用单元格的帧大小。 “标准化”部分意味着您可以使用从 0.0 1.0 的值表示元素尺寸的百分比。

  • 其次,玩弄尺寸时,我发现需要长滑动才能移动单元格宽度的60%左右才能激活该动作。

我得到的长滑动扩展名:

x = np.arange(100)
x[k]

array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 30, 31, 32, 33, 34, 35, 36,
       37, 38, 39, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 90, 91, 92, 93,
       94, 95, 96, 97, 98, 99])

注意:extension XCUIElement { enum SwipeDirection { case left, right } func longSwipe(_ direction : SwipeDirection) { let startOffset: CGVector let endOffset: CGVector switch direction { case .right: startOffset = CGVector.zero endOffset = CGVector(dx: 0.6, dy: 0.0) case .left: startOffset = CGVector(dx: 0.6, dy: 0.0) endOffset = CGVector.zero } let startPoint = self.coordinate(withNormalizedOffset: startOffset) let endPoint = self.coordinate(withNormalizedOffset: endOffset) startPoint.press(forDuration: 0, thenDragTo: endPoint) } } CGVector.zero的Swift别名