【问题标题】:Is there any way to check element exists in XCTest other than .exists function?除了 .exists 函数之外,还有什么方法可以检查 XCTest 中是否存在元素?
【发布时间】:2016-01-03 10:30:13
【问题描述】:

目前,我正在使用 XCTest iOS 框架并使用 .exists 函数来检查元素是否存在。想知道是否有任何其他方法可以检查 UI 上元素的存在,因为 .exists 出现问题。测试在第一次运行时成功,但在第二次运行时失败,因为脚本单击 UI 上不存在的元素可能是因为第一次在应用程序中加载的元素保持隐藏但存在。

请告诉我任何检查当前屏幕元素存在的功能。

【问题讨论】:

  • 如果那个元素不存在,你不应该检查它吗?听起来就像只是更改断言的登录名。

标签: ios swift xctest xcode7-beta6


【解决方案1】:

我也在寻找一种方法来等待元素出现,而不是使用 sleep 方法。有时 UI 元素需要更长的时间来加载,但这并不意味着它最终不会出现。此时您可以检查使用 .exists

有一个 XCUIApplication 类参考,不是由苹果托管,而是在 OBJ-C 中: http://masilotti.com/xctest-documentation/index.html

更新:我想我从这个链接Delay/Wait in a test case of Xcode UI testing找到了解决方案

使用 NSPredicate 类对我有用。

    let welcomePage = app.staticTexts["Landing Page"]
    let existsPredicate = NSPredicate(format: "exists == 1")

    expectationForPredicate(existsPredicate, evaluatedWithObject: LandingPageLoad, handler: nil)
    waitForExpectationsWithTimeout(5, handler: nil)
  • 首先为您等待的值或对象创建一个常量
  • 使用 NSPredicate 类创建另一个常量来比较 对象
  • 然后将expectationForPredicate方法与vars一起使用
  • 最后给处理程序一个超时上限

【讨论】:

    【解决方案2】:

    我参考了这个答案,这个 XCUIElementQuery 函数可以处理未创建元素的情况:

     open func matching(identifier: String) -> XCUIElementQuery
    

    参考: Testing if an element is visible with XCode 7 UITest

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-25
      • 2018-01-01
      • 2016-05-07
      • 2017-10-22
      • 2011-01-17
      相关资源
      最近更新 更多