2015-12-16 13 views
9

静的なテキスト要素の値をチェックし、数秒待ってから変更を確認するUIテストがあります。階層が更新されていないため、最初は機能しませんでした。私はログにこれを気付いた。アクセシビリティ階層のキャッシュをクリア/リフレッシュする方法はありますか?

使用、キャッシュされたアクセシビリティ階層は

のために私は単に/メニューや開口部にタップを追加するイベントが合成され、階層が更新されるように、それを閉じることでこれを回避するに置かれています。

しかし、キャッシュを直接クリアする方法や強制的に更新する方法があった方が良いでしょう。私はAPIで1つを見つけませんでした。何か不足していますか?

アイデア?

これは私がやっていることです。

XCTAssertEqual(app.staticTexts["myText"].label, "Expected 1") 
sleep(20) 
menu.tap() 
sleep(1) 
menu.tap() 
XCTAssertEqual(app.staticTexts["myText"].label, "Expected 2") 

私は、これはどちらかMYTEXT年代まで待ちます

let myText = app.staticTexts["myText"] 
let waitFor = NSPredicate(format: "label = 'Expected 2'") 
label.tap() 
self.expectationForPredicate(waitFor, evaluatedWithObject: myText, handler: nil) 
self.waitForExpectationsWithTimeout(2.0, handler: nil) 

...の線に沿って、それは

XCTAssertEqual(app.staticTexts["myText"].label, "Expected 1") 
sleep(20) 
app.elements.refresh() 
XCTAssertEqual(app.staticTexts["myText"].label, "Expected 2") 
+0

使用しているコードを含めることはできますか?あなたは 'expectationForPredicate'と' waitForExpectationsWithTimeout'を使って待っていますか? – Michael

+0

それは、私がここに来たのは同じような問題のためです。私は画面上のボタンを移動するmyButton.tap()をやっています。その後、おそらくmyButtonは別のボタンを参照しています。恐らくキャッシングマジック – Michael

+0

が上に追加されています。あなたの場合、私はあなたに反対の問題があると思います。イベントを合成するボタンをタップすると、ボタンをタップするとキャッシュがクリアされるように要素階層がリロードされます。 –

答えて

0

あなたはexpectationForPredicateを使用する必要があります行うことができるようにしたいのですがどのようなラベルが「Expected 2」、または2秒のタイムアウトに達している。アクセシビリティ階層の更新を強制するために

+0

ナビゲーションコントローラの移行がまだ完了していない間に、ナビゲーションバー(またはその子)の 'waitForExpectationsWithTimeout'を実行しようとすると、Xcode 8.0(iOS 10)以降、XCUIがクラッシュすることがよくあります。表示されたスクロールビューやボタンのような他のUI要素に対しては、最初に 'waitForExpectationsWithTimeout'を実行し、ナビゲーションバーには' XCUIElementQuery'を呼び出さなければなりません。 – Gary

8

、任意XCUIElementQueryためcountプロパティを要求:

// refresh 
_ = XCUIApplication().navigationBars.count 

// examine 
print(XCUIApplication().debugDescription) 

上記結果:「のマッチの取得番号:タイプNavigationBarに一致する子孫」と"com.myappのスナップショットアクセシビリティ階層"

+0

ありがとうございます。私はこのヘルパーを使いやすくしています(XCUIElementのカテゴリとして行われています)。 [[[XCUIApplication alloc] init] childrenMatchingType:XCUIElementTypeAny] count; –

0

私の場合は、Safari controllerを使用してFacebookのログインをテストしようとしているため、問題です。 Facebookがキャッシュ後にUIを更新したようです。

だから、ここhttps://stackoverflow.com/a/42222302/1418457

wait(for: 2) 
let _ = app.staticTexts.count 

wait機能を使用し、waitにビットを必要とするが、上記の回避策だけで、非常にサクサクです。より正確なアプローチは、特定の要素が現れるのを待つことです。https://stackoverflow.com/a/44279203/1418457

関連する問題