web-dev-qa-db-ja.com

Xcode 7 UITestを使用して要素が表示されるかどうかをテストする

.hiddenプロパティに依存して要素が表示されるかどうかを確認したいのですが、新しいXcode 7 UIテストのものを使用してそれを行う有効な方法が見つかりません。

myelement.existsmyelement.hittableを試しましたが、期待どおりに機能しないようです。 hiddenプロパティと連動して動作すると思います。隠し要素は存在してはならず、ヒットできません...しかし、これは現在の動作ではありません(existsの動作は理解できますが、隠し要素はヒットできませんIMO)。

「隠された」プロパティ値を確認する別の方法はありますか?

29
MatterGoal

Xcode 7.1 Beta 3の時点で、UIテストは現在、要素の可視性の検証をサポートしていません。 Appleに必要な注意を向けるためにレーダーを提出することをお勧めします。

Xcode 7.1はこの問題を修正しました。 hittableは、要素が正しいかどうかを確認するようになりました。

29
Joe Masilotti

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

9
Ohmy

XCUIElement.hittableは私のために機能します(いくつかのUIButton要素の可視性をチェックしている特定のテストケースで)-それは正しい方法ではありませんが、

3
Andrew Z

次のコードはうまくいきました。テストの終了時に、次のようにコードを貼り付けることができます。

while ([app.staticTexts matchingIdentifier:@"accesibilityId"].count > 0) {
        sleep(1);
    }
2
alex1704

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

1
da-na

私の解決策は、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()
}
1
Randja