【问题标题】:"Neither element nor any descendant has keyboard focus" when running XCTestCase in a real iPhone在真正的 iPhone 中运行 XCTestCase 时,“元素和任何后代都没有键盘焦点”
【发布时间】:2019-01-15 05:46:52
【问题描述】:

我正在尝试运行一个 UI 测试用例,其中存在两个输入字段。以下是我的代码

let usernameTextField = app.webViews.otherElements["Identity Server"].textFields["Username"]
let passwordField = app.webViews.otherElements["Identity Server"].secureTextFields["Password"]

_ = usernameTextField.waitForExistence(timeout: 8)

usernameTextField.tap()
usernameTextField.typeText("TEST")  // Breakpoint line

app.typeText("\n")

passwordField.tap()
passwordField.typeText("test")

当我正常运行测试用例时,它会因问题标题中给出的错误而失败。但是,如果我在注释行中添加断点,它将运行而不会出现任何错误。

我尝试在断点行之后分别使用以下代码sn-ps。

sleep(8)
_ = passwordField.waitForExistence(timeout: 8)

但这些都不起作用。至于更多信息,这是一个 Auth 流程场景,其中这些输入字段位于 Web 视图中。

【问题讨论】:

标签: iphone xcode-ui-testing swift4.1 xctestcase


【解决方案1】:

在您发送到用户名文本字段的字符串末尾发送\n

usernameTextField.typeText("TEST\n")

【讨论】:

    【解决方案2】:

    我决定回答自己而不是结束这个问题。我会告诉我的代码出了什么问题。我犯的主要错误是 continueAfterFailure 设置为 true。因此,错误行中显示的错误不是实际的错误抛出行。

    所以解决办法是,

    continueAfterFailure = false
    

    usernameTextField.tap()
    sleep(2)
    usernameTextField.typeText("TEST")
    

    在输入文本之前,键盘出现在 Web 视图中之前应该有一小段等待时间。

    【讨论】:

    • 有趣的是,我在 Xcode 10 Beta 6 和模拟器上遇到了同样的问题。那里的键盘没有出现,typeText 失败。在 iPhone 5s(iOS 12 Beta)上,它确实可以在没有 sleep 的情况下工作。您在哪个设备/操作系统上进行测试?在我所有其他装有 iOS 11 的设备/模拟器上,它可以在没有 sleep 的情况下工作。
    猜你喜欢
    • 2017-01-19
    • 2015-12-12
    • 2015-11-18
    • 2017-12-17
    • 2016-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-22
    相关资源
    最近更新 更多