как скрыть клавиатуру в приложении swift во время тестирования интерфейса

<p>я только начал с тестирования пользовательского интерфейса в xcode 7 и столкнулся с этой проблемой:</p><p>мне нужно ввести текст в текстовое поле и затем нажать кнопку. к сожалению, эта кнопка скрыта за клавиатурой, которая появилась при вводе текста в текстовое поле. xcode пытается прокрутить, чтобы сделать его видимым, но мой вид не прокручивается, поэтому он терпит неудачу.</p><p>мое текущее решение таково:</p><pre><code>let textfield = app.textfields["placeholder"] textfield.tap() textfield.typetext("my text") app.childrenmatchingtype(.window).elementboundbyindex(0).tap() // hide keyboard app.buttons["hidden button"].tap() </code></pre><p>я могу сделать это, потому что мой viewcontroller перехватывает прикосновения:</p><pre><code>override func touchesbegan(touches: set<uitouch>, withevent event: uievent?) { view.endediting(false) super.touchesbegan(touches, withevent: event) } </code></pre><p>я не очень доволен своим решением, есть ли другой способ, как скрыть клавиатуру во время тестирования пользовательского интерфейса?</p>

<p>если вы настроили свои текстовые поля для отставки firstresponder (через <code>textfield.resignfirstresponder()</code> или <code>self.view.endediting(true)</code>) в методе делегата <code>textfieldshouldreturn()</code>, тогда</p><pre><code>textfield.typetext("\n") </code></pre><p>сделаю это.</p>

<p>основываясь на вопросе к <a href="http://masilotti.com/ui-testing-xcode-7/">блогу джо</a> , у меня есть проблема, из-за которой после нескольких запусков на симуляторе клавиатурам не удается спрятаться, используя этот фрагмент кода:</p><pre><code>xcuiapplication().keyboard.buttons["hide keyboard"] </code></pre><p>итак, я изменил его на: (спасибо джо)</p><pre><code>xcuiapplication().keyboard.buttons["hide keyboard"] let firstkey = xcuiapplication().keys.elementboundbyindex(0) if firstkey.exists { app.typetext("\n") } </code></pre><p>здесь я пытаюсь определить, остается ли клавиатура открытой после нажатия кнопки «скрыть», если она включена, я набираю «\ n», что в моем случае тоже закрывает клавиатуру.</p><p>это также бывает сложно, потому что иногда симулятор теряет фокус ввода с клавиатуры, и это может привести к неудаче теста, но по моему опыту частота неудач ниже, чем у других подходов, которые я использовал.</p><p>я надеюсь, что это может помочь.</p>

<pre><code>xcuiapplication().toolbars.buttons["done"].tap() </code></pre>

<p>я всегда использую это, чтобы программно скрыть клавиатуру в swift uitesting:</p><pre><code>xcuiapplication().keyboards.buttons["hide keyboard"].tap() </code></pre>

<p>ответ на ваш вопрос заключается не в тестовом коде, а в коде приложения. если пользователь не может ввести текст, используя экранную программную клавиатуру, а затем нажать на кнопку, необходимо либо выполнить тест, чтобы закрыть клавиатуру (как пользователь должен будет, чтобы нажать на кнопку), либо сделать прокрутку вида прокручиваемой. ,.</p>

<p>с swift 4.2 вы можете сделать это сейчас с помощью следующего фрагмента:</p><pre><code>let app = xcuiapplication() if app.keys.element(boundby: 0).exists { app.typetext("\n") } </code></pre>

<p>просто убедитесь, что клавиатура выключена в симуляторе перед запуском тестов.</p><p>оборудование-> клавиатура-> подключить аппаратную клавиатуру.</p><p>затем введите текст с помощью доски вставки</p><pre><code>textfield.tap() uipasteboard.generalpasteboard().string = "some text" textfield.doubletap() app.menuitems["paste"].tap() </code></pre>