ios UI测试-未找到与类型匹配的后代的匹配项...正在记录生成的代码

rbpvctlc  于 2023-03-05  发布在  iOS
关注(0)|答案(2)|浏览(95)

我收到错误
No matches found for Find: Descendants matching type NavigationBar from input {( Application, 0x60400019b790, pid: 20515, label: '<appname>' )}
但是代码是由XCUITest的记录函数生成的,所以我不明白为什么它找不到导航栏。我添加了一个名为dashboardNavBar的本地化字符串accessibilityIdentifier,尝试使用它来查找导航栏,但是我在查询它时遇到了问题。我使用的当前代码是:

func testLoginLogout() {
    let app = XCUIApplication()
    //login credentials and other code that takes me to dashboard of app
    app.navigationBars["Dashboard"].children(matching: .button).element(boundBy: 2).tap()
    app.sheets["Do you want to Logout ?"].buttons["OK"].tap()
}

app.navigationBars...行是抛出上面错误的行。我希望有人能告诉我为什么它无法定位这个导航栏或任何问题,以及我如何才能修复它或使用accessibilityIdentifier解决它。谢谢。

zed5wv10

zed5wv101#

我知道这可能是一个变通方法,而不是一个真实的的解决方案,但当我遇到这个问题时,我所做的是添加一个检查,如果元素存在,并尝试运行同一操作两次。当您在此操作后进行segue时,元素应该不存在,第二次尝试调用将不会执行。例如:

func testLoginLogout() {
            let app = XCUIApplication()
            if (app.navigationBars["Dashboard"].children(matching: .button).element(boundBy: 2).exists) {
                app.navigationBars["Dashboard"].children(matching: .button).element(boundBy: 2).tap()
            }
// and if you will call it again the element should not exists, otherwise it will be called again

            if (app.navigationBars["Dashboard"].children(matching: .button).element(boundBy: 2).exists) {
                app.navigationBars["Dashboard"].children(matching: .button).element(boundBy: 2).tap()
            }

            if (app.sheets["Do you want to Logout ?"].buttons["OK"].exists) {
                app.sheets["Do you want to Logout ?"].buttons["OK"].tap()
            }
        }
ee7vknir

ee7vknir2#

我在我的终端上有类似的问题,日志中的错误“***未找到与输入按钮类型匹配的后代的匹配项..***”
通过实现isScreenLoaded()函数(带有超时)解决了此问题,如下例所示:

func isLoaded() {
    XCTAssertEqual(app?.staticTexts["Some screen text goes here.."].waitForExistence(timeout: 5), true)
  }
  func testMyScreen() {
    app = ApplicationManager.shared.launchApplication(launchEnvironment: ["screenName": "myScreen"])
    isLoaded()
    if let keyboard = app?.keyboards.firstMatch {
      verifyScreen(without: keyboard, identifier: "MyScreen",
             perPixelTolerance: 0.05,
             overallTolerance: 0.002)
    }
  }

相关问题