【问题标题】:XCTest How to tap on Url (Link) inside UITextview?XCTest 如何在 UITextview 中点击 Url(链接)?
【发布时间】:2017-05-12 06:13:19
【问题描述】:

我在源代码中添加了accessibilityIdentifier。 并且做到了:

let privacypolicyurl = app.tables.textViews["privacyPolicy"]
privacypolicyurl.tap()

还有一种方式:

let privacypolicyurl =
    app.tables.textViews.containing(.link,identifier:"privacy Policy").element
privacypolicyurl.tap()

然后尝试使用 po app.links 进行调试 看看这个:

链接 0x618000173140:特征:8589934594,{{261.7,592.3},{74.7,17.5}},标签:“隐私政策” }

所以,我想出了

let cooridnate = 
  app.tables.textViews["privacyPolicy"].coordinate(withNormalizedOffset: CGVector(dx: 261.7, dy: 592.3))
cooridnate.tap()

不幸的是,这些都不适合我。请帮忙弄清楚。

【问题讨论】:

    标签: xcode8 xctest ios-ui-automation


    【解决方案1】:

    您应该直接从 textView 访问链接

    let textView = app.textViews["privacyPolicyTextView"]
    textView.links["Privacy Policy"].tap()
    

    【讨论】:

      【解决方案2】:

      UITextViews 中的链接有以下奇怪的行为:

      • link.tap() 在“合成事件”期间提供错误
      • link.coordinate() 返回零值
      • link.accessibilityFrame() 返回零值

      但是我们可以使用链接元素的框架来访问链接。 您可以使用以下扩展:

      import XCTest
      
      extension XCUIElement {
      
        public func tapFrameCenter() {
            let frameCenterCoordinate = self.frameCenter()
            frameCenterCoordinate.tap()
        }
      
        func frameCenter() -> XCUICoordinate {
            let centerX = self.frame.midX
            let centerY = self.frame.midY
      
            let normalizedCoordinate = XCUIApplication().coordinate(withNormalizedOffset: CGVector(dx: 0, dy: 0))
            let frameCenterCoordinate = normalizedCoordinate.withOffset(CGVector(dx: centerX, dy: centerY))
      
            return frameCenterCoordinate
        }
      }
      

      【讨论】:

        【解决方案3】:

        从调试输出的外观来看,您无需指定链接包含在哪些视图中就可以了 - 链接可能不在您认为它所在的视图中。这样做应该没问题:

        app.links["Privacy Policy"].tap()
        

        我看到您对坐​​标的想法,但您可能希望先获取元素的坐标对象,然后在XCUICoordinate 上使用withOffset 方法,因为这需要一个具有绝对值的向量。 coordinateWithNormalizedOffset 采用具有相对值的向量,因此在您的示例中,您将尝试点击元素原点右侧 261 倍元素宽度的点。

        【讨论】:

        • 这些是屏幕坐标还是视图坐标?你能帮我举个例子吗?
        • 绝对值是屏幕坐标。屏幕左上角是原点 (0, 0)。
        猜你喜欢
        • 1970-01-01
        • 2011-02-02
        • 2016-03-29
        • 2015-09-11
        • 2017-08-17
        • 2015-09-16
        • 2014-04-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多