【问题标题】:Issue facing for xcode-ui-testing in XCode 9XCode 9 中的 xcode-ui-testing 面临的问题
【发布时间】:2017-11-13 15:56:43
【问题描述】:

在 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().

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

谢谢

【问题讨论】:

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


    【解决方案1】:

    最近我在将我的项目(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)
    

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

    【讨论】:

    • 谢谢马哈茂德。你做得很好。它也为我工作。你能告诉我CGVector(dx:0.5, dy:0.5)在扩展方法中在这里做了什么吗?
    • @AliAzam 这是您要点击该元素的坐标 x , y 位置。请让我知道它是否解决了您的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-10
    • 2016-01-13
    相关资源
    最近更新 更多