.hidden
プロパティに依存して要素が表示されるかどうかを確認したいのですが、新しいXcode 7 UIテストのものを使用してそれを行う有効な方法が見つかりません。
myelement.exists
とmyelement.hittable
を試しましたが、期待どおりに機能しないようです。 hidden
プロパティと連動して動作すると思います。隠し要素は存在してはならず、ヒットできません...しかし、これは現在の動作ではありません(exists
の動作は理解できますが、隠し要素はヒットできませんIMO)。
「隠された」プロパティ値を確認する別の方法はありますか?
Xcode 7.1 Beta 3の時点で、UIテストは現在、要素の可視性の検証をサポートしていません。 Appleに必要な注意を向けるためにレーダーを提出することをお勧めします。
Xcode 7.1はこの問題を修正しました。 hittable
は、要素が正しいかどうかを確認するようになりました。
1)Xcode 7.3でSwiftを使用してUIをテストしています。ラベルが非表示であるかどうかをテストするために.hittableと.existsの両方を使用し、両方とも機能します。どちらの方法でも結果と一致することを確認するために「false」。
静的テキストが「トラック情報」であるラベルがあり、アプリが最初にロードされたときに非表示に設定され、後でボタンを押してラベルを表示すると、ラベルが表示された後の結果が表示されます。
//テストは失敗します
let trackInfoLabel = app.staticTexts["Track info"]
XCTAssertEqual(trackInfoLabel.exists, true)
XCTAssertEqual(trackInfoLabel.hittable, true)
//テストに合格
XCTAssertEqual(trackInfoLabel.exists, false)
XCTAssertEqual(trackInfoLabel.hittable, false)
//テストに合格
let trackInfoLabel = app.staticTexts["Track Info"]
XCTAssertEqual(trackInfoLabel.exists, true)
XCTAssertEqual(trackInfoLabel.hittable, true)
//テストは失敗します
XCTAssertEqual(trackInfoLabel.exists, false)
XCTAssertEqual(trackInfoLabel.hittable, false)
ボタンを押してラベルを非表示にすると、すべての結果が逆になります。これにより、両方のプロパティ(ヒット可能および存在)がlabel.hidden設定で機能することが確認されます。
2)要素が隠されているかどうかを確認する別の方法は、element.frame.size.width == 0 ||です。 element.frame.size.height == 0
XCUIElement.hittableは私のために機能します(いくつかのUIButton要素の可視性をチェックしている特定のテストケースで)-それは正しい方法ではありませんが、
次のコードはうまくいきました。テストの終了時に、次のようにコードを貼り付けることができます。
while ([app.staticTexts matchingIdentifier:@"accesibilityId"].count > 0) {
sleep(1);
}
Hittableがボタンに対して常に機能するとは限らないことに同意します(Swift 2.0、XCode 7.2)
ボタンが表示されている場合はボタン間でのみ見つけることができ、ボタンが非表示の場合はstaticTextsでもタグを見つけることができることを発見しました!
XCTAssertFalse(app.buttons["Log out"].exists && app.staticTexts["Log out"].exists) // This button is visible (hidden = false)
XCTAssert(app.buttons["Log in"].exists && app.staticTexts["Log in"].exists) // This one is hidden
ハッキーですが、ボタンには機能します。 Appleは単に.hidden
または.visible
に沿って.hittable
および.exists
私の解決策は、accessibilityIdentifierを動的に追加することです
func someMethod() {
label.isHidden = true
label. accessibilityIdentifier = "isHidden"
}
func someOtherMethod {
label.isHidden = false
label. accessibilityIdentifier = "isVisible"
}
uITestでは、次のように使用できます
if app.staticTexts["MyLabel"].identifier == "isHidden" {
dosomething()
}