我无法在使用iOS UI测试的屏幕上找到文本字段

我无法在使用iOS UI测试的屏幕上找到文本字段,ios,swift,xcode,xcode-ui-testing,Ios,Swift,Xcode,Xcode Ui Testing,我试图在Xcode中为我的iOS应用程序创建一个自动化的UI测试,但我遇到了这个问题。下面是正在测试的场景: 这是一个带有两个视图控制器的iOS故事板应用程序。初始视图控制器显示用户名文本字段、密码文本字段和登录按钮。点击“登录”按钮时,如果用户启用了双因素身份验证,则会按照在当前视图控制器上将其显示为模式的顺序显示另一个视图 这是我的密码: // application: XCUIApplication let username = application.textFields["Userna

我试图在Xcode中为我的iOS应用程序创建一个自动化的UI测试,但我遇到了这个问题。下面是正在测试的场景:

这是一个带有两个视图控制器的iOS故事板应用程序。初始视图控制器显示用户名文本字段、密码文本字段和登录按钮。点击“登录”按钮时,如果用户启用了双因素身份验证,则会按照在当前视图控制器上将其显示为模式的顺序显示另一个视图

这是我的密码:

// application: XCUIApplication
let username = application.textFields["Username"]
username.tap()
username.typeText("testuser")
let password = application.secureTextFields["Password"]
password.tap()
password.typeText("TWO-FACTOR-PASSWORD")
application.buttons["SignIn"].tap()
let authenticationCode = application.textFields["AuthenticationCode"]
authenticationCode.tap()
authenticationCode.typeText("12345")
我遇到的问题是,
authenticationCode.exists
始终为false,即使我在屏幕上看到它


有什么想法吗?

我没有看到任何代码显示“authenticationCode.exists”,所以你怎么知道它是“false”?另外,您如何知道您“在屏幕上看到它”-也就是说,您如何知道您在屏幕上看到的是
authenticationCode
?我在代码中设置了一个调试器断点,并计算了
authenticationCode.exists
,然后返回
false
。我还在早期的代码迭代中加入了期望(
expect(authenticationCode.exists).to(beTrue())
由于结果是错误的,它失败了。当我说我可以在屏幕上看到它时,我正在模拟器或手机上观看自动化直播。我可以看到点击登录按钮执行segue,我可以在屏幕上直观地看到文本字段,所以我知道它在那里。我还启用了模态视图和我可以访问它。我建议这不是你的对话框,而是一个系统对话框(类似于键盘,或者当你购买应用商店时的密码对话框)。您可以看到它,因为它在那里,但您无法通过应用程序的UI测试驱动的可访问性来访问它。这可能是原因吗?我不确定您所说的“这不是您的对话框,而是系统对话框”是什么意思。我在视图中为我的模态视图控制器启用了可访问性,并为其提供了一个标识符,我可以使用application.otherElements[“MyAuthenticationView”]访问该视图。如果你的建议是正确的,我会认为我无法做到这一点。但我仍然看不到该视图的子控件。不,我无法复制。我正在设置一个显示的视图控制器,其视图是一个类似警报的小对话框,我的UI测试能够记录点击该按钮,然后点击它。我没有o建议您做了一些没有告诉我们的错误。如果您能将问题简化为MCVE并发布它,那将是一件好事。我没有看到任何代码显示
authenticationCode.exists
,那么您如何知道它是
false
?另外,您如何知道“在屏幕上看到它”-也就是说,你怎么知道你在屏幕上看到的是
authenticationCode
?我在代码中设置了一个调试器断点,并对
authenticationCode.exists
进行了评估,结果返回
false
。我在代码的早期迭代中也加入了预期(
expect(authenticationCode.exists)),以(beTrue())
由于结果是错误的,它失败了。当我说我可以在屏幕上看到它时,我正在模拟器或手机上观看自动化直播。我可以看到点击登录按钮执行segue,我可以在屏幕上直观地看到文本字段,所以我知道它在那里。我还启用了模态视图和我可以访问它。我建议这不是你的对话框,而是一个系统对话框(类似于键盘,或者当你购买应用商店时的密码对话框)。您可以看到它,因为它在那里,但您无法通过应用程序的UI测试驱动的可访问性来访问它。这可能是原因吗?我不确定您所说的“这不是您的对话框,而是系统对话框”是什么意思。我在视图中为我的模态视图控制器启用了可访问性,并为其提供了一个标识符,我可以使用application.otherElements[“MyAuthenticationView”]访问该视图。如果你的建议是正确的,我会认为我无法做到这一点。但我仍然看不到该视图的子控件。不,我无法复制。我正在设置一个显示的视图控制器,其视图是一个类似警报的小对话框,我的UI测试能够记录点击该按钮,然后点击它。我没有o建议你做了一些你没有告诉我们的错误。如果你能将问题简化为MCVE并将其发布,那就太好了。