我已经在表格视图中实现了前导和尾随滑动操作。现在,我正在尝试在XCTest UI测试中对其进行测试。
测试任一方向的常规滑动都很容易:
tableCell.swipeRight()
tableCell.swipeLeft()
使用其中之一会导致显示第一个操作按钮,然后我可以在该按钮上.tap()
。
但是,测试一次完整的刷卡却更具挑战性。我玩过this extension的How 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)
}
}
答案 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别名