在XCode 9中面临xcode-ui测试的问题

时间:2017-11-13 15:56:44

标签: ios xcode ios-ui-automation swift3.2

在XCode 8和swift 3.2中开发的ios-app的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().

但是这段代码也没有用。那我怎么解决这个问题呢?

由于

1 个答案:

答案 0 :(得分: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)

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