2015-10-27 12 views
17

テキストをテキストビューに入力する次のXCTest UIテストがあります。Xcodeボットでテキストをテキストビューに入力するとUIテストが失敗する

let textView = app.textViews.elementBoundByIndex(0) 
textView.tap() 
textView.typeText("Hello world") 

Xcodeのボットとして実行すると、それはtypeTextコールのために、次のエラーが表示されます。

アサーション:UIテストの失敗 - 失敗:タイムアウトしました私は、テストパス同じコンピュータ上のXcodeから手動で実行すると、興味深いことに

enter image description here

を完了するために、キーイベントを待っています。このテストは、Xcode 7.1/iOS 9.1にアップグレードする前にXcodeボットにも渡されました。問題の原因は何か?ここ

は、UIテストを持つ単離されたデモである: https://github.com/exchangegroup/UITestTextViewDemo

IOSの9.1シミュレータ、OS X 10.11.1(15B42)、Xcodeの7.1(7B91b)、OS Xサーバ5.0.15(15S4033)

Appleに報告しました。

+2

アップルはボット用のXC7.1/iOS 9.1アップデートで何かをねじ込みました。私たちのグリーンテストスイートは瞬時に赤に変わりました。このエラー、「スクリーンショットを待っているタイムアウト」または「シムを開始するタイムアウト」で失敗します。私は本当にXC7.2がこれを修正することを願っています。 –

+2

私は同じ問題を抱えています。私は "修正"しているとは思わないが、もう少し長く待つとテストが合格することがあることが分かった。私の特に問題は、内部の「コンテンツ編集可能」フィールドを持つWKWebViewですが、原則は同じです。 NSRunLoop.currentRunLoop()。runUntilDate(NSDate(timeIntervalSinceNow:3)) –

+0

何か新しい?私は実行ループ待機を発行します。私はxcode 7.3.1で同じ問題があります – emoleumassi

答えて

7

私のケースの解決策を見つけました。それがあなたにも役立つことを願っています。

私のsetUp()tearDown()(私が知っている余分なようです)で私はXCUIApplication().terminate()を入れました。これは、次のテストを実行する前にアプリが終了していることを確認しているようです。

override func setUp() { 
    XCUIApplication().terminate() 
    super.setUp() 
    continueAfterFailure = false 
    XCUIApplication().launch() 
} 
override func tearDown() { 
    super.tearDown() 
    XCUIApplication().terminate() 
} 

私はアップルにバグを提出しましたが、当分の間、これはあなたが見ていたエラーの周りに私を取得しています。希望が助けてくれる!

3

私はKonnorが提案したものが私のために働いていなかったので、私は別の解決策を見つけました:私はXcode BotでUITestを使用して多くの問題を抱えていましたが、一般的な症状は、ローカルマシンよりも、テストを実行するために使用された_xcsbuilddユーザーが何らかの方法で遅くなったと考えました。

私の解決方法は簡単です:_xcsbuilddユーザーを「通常の」ユーザーに昇格させるだけです。これには別の利点があります:もしあなたがそのユーザーとログインし、統合中にシミュレータで実行されたテストを見ることができれば、デバッグは簡単です!ここで

は、私はそれをやった方法です:

sudo dscl . -create /Users/_xcsbuildd UserShell /bin/bash 
sudo dscl . -create /Users/_xcsbuildd FirstName Xcode 
sudo dscl . -create /Users/_xcsbuildd LastName Server 
sudo dscl . -create /Users/_xcsbuildd FullName "Xcode Server" 
sudo dscl . -create /Users/_xcsbuildd PrimaryGroupID 20 

は、その後でパスワードを変更します。

sudo dscl . -passwd /Users/_xcsbuildd 

私はとにかくあなたがすべき、ユーザーが速いログインウィンドウに表示させることができませんでしたユーザー名 "_xcsbuildd"と選択したパスワードを入力できる "他のユーザー"を参照してください。

14

「ハードウェアキーボードを接続」がデフォルトで有効になっていると思います。メインユーザーのためにそれをオフにしても、_xcsbuilddユーザーは引き続きデフォルトを使用します。私もこの問題に遭遇した

if [ `defaults read com.apple.iphonesimulator ConnectHardwareKeyboard` -eq 1 ] 
then 
    defaults write com.apple.iphonesimulator ConnectHardwareKeyboard -bool false 
    killall "Simulator" 
fi 

enter image description here

+1

スクリプトは本当に便利です、私はいつも私のdevマシン上でテストを実行している間、ハードウェアキーボードを無効にすることを覚えておく必要があります。私はXcodeサーバー上でこの問題を経験したことはありませんが、期待どおりに動作することを確認すると便利です。 –

1

:私は次のスクリプトでのスキームに事前テストアクションを追加することによって、問題を解決することができました。私はSnapshot(fastlane)でスクリーンショットをキャプチャするためのUIテストを書いており、iPad Air & Proシミュレータで正常に動作します。しかし、iPad RetinaまたはiPad 2シミュレータでは、このエラーメッセージが表示されます。コマンドラインから実行するか、Xcodeから直接実行します。

私の場合の解決策は、typeText()ステートメントの間にいくつかのsleep()関数を追加してエラーが消えてしまうことでした。

:これはXcodeから手動で実行されるだけですが、コマンドラインではまだテストに失敗します。私は64ビットデバイスのすべてのシミュレータで動作することに気付きましたが、以前のデバイスでは動作しませんでした。

編集2https://stackoverflow.com/a/36334816/5334132を:私はこの回答で述べたように、代わりのiOS 9.3のiOSの9.0シミュレータを使用してこの問題を回避する方法を見つけました。これは、Xcodeの新しいバージョンで修正されるまで、良い回避策と思われます。

0

ハードウェアキーボードを接続する以外は、これらのことのどれも実際に私のために働いたことはありません。機能したのはで、Macのスクリーンセーバーをオフにして、システム設定でのスリープを表示していました。私の疑惑は、Macがロックされているか、描画するモニターがないときにシミュレータが異常に実行されることです。

これらの2つの設定をオフにしても、いくつかのランダムなUIテストの失敗が表示されます。ハードウェアモニタやスクリーン共有を接続することで、シミュレータがどこかのスクリーンに描画されるように見えるかもしれません。

0

私はxcode 8.2.1を使用しており、iOS 9.3バージョンでテストを実行しています。 1つの簡単なハックは、テキストボックスをタップしてからそれを入力する前に、2〜5秒間スリープ状態を追加することです。しかし、これは永続的な解決策ではありません。テストを実行する前に、設定ですべてのキーボードの好みの選択を解除

ANOTHER信頼性の高いソリューション

"KeyboardAllowPaddle": false, 
"KeyboardAssistant": false, 
"KeyboardAutocapitalization": false, 
"KeyboardAutocorrection": false, 
"KeyboardCapsLock": false, 
"KeyboardCheckSpelling": false, 
"KeyboardPeriodShortcut": false, 
"KeyboardPrediction": false, 
"KeyboardShowPredictionBar": false 
関連する問題