3

在 XCode 8 和 swift 3.2 中开发的 ios 应用程序的 UI 测试。

升级 XCode 到 9 后处理 ScrollViews、collectionViews 面临的问题

我可以点击并访问 Buttons、StaticTexts、TextFields 元素。但我无法点击或访问 XCode9 和 Swift 3.2 上的 collectionviews、scrollviews、tableviews 元素。

假设在以前的 XCode 版本(即 XCode 8.3)中,我使用代码app.collectionViews.collectionViews.cells.images.element(boundBy: 0).tap()
点击主页(collectionViews)。但是这段代码在 XCode 9 中不起作用。

我尝试使用 uitest 录制功能获取确切的元素。通过使用录音,我得到了代码 -

app.collectionViews.otherElements.containing(.textField, identifier:"StoryboardTitleTextField").children(matching: .collectionView).element.tap().

但是这段代码也不起作用。那么我该如何解决呢?

谢谢

4

1 回答 1

2

最近,在将我的项目(Swift 3.2)升级到 XCode 9 后,我也遇到了类似的问题。

问题是

 app.collectionViews.collectionViews.cells.images.element(boundBy: 0).isHittable is returning false. 

这就是为什么默认的tap()方法不适用于分层元素的原因。

我刚刚做了以下程序,效果很好。

第 1 步:创建一个扩展,如下所示

extension XCUIElement {
func tryClick() {
    if self.isHittable {
        self.tap()
    }
    else {
        let coordinate: XCUICoordinate = self.coordinate(withNormalizedOffset: CGVector(dx:0.5, dy:0.5))
        coordinate.doubleTap()
        //coordinate.press(forDuration: 0.5)
    }
  }
}

第 2 步:使用上面创建的实例方法单击元素,而不是使用直接的 tap() 方法。

app.collectionViews.collectionViews.cells.images.element(boundBy: 0).tryClick()

注意:尝试使用

CGVector(dx:0.5, dy:0.5) or CGVector(dx:0.0, dy:0.0)

希望它能解决你的问题。它对我来说就像一个魅力。

于 2017-11-27T14:02:22.740 回答