Kullanıcı arayüzü öğeleriyle etkileşim kurmanın üç ana yolu vardır:
- Bulucular, herhangi bir öğeyi (veya düğüm) bir veya daha fazla öğeyi anlamları ağacı) kullanır.
- İddialar, öğelerin var olduğunu veya belirli özelliklere sahip olduğunu doğrulamak için kullanılır.
- İşlemler, simüle edilmiş kullanıcı etkinliklerini öğelere ekler. Örneğin, başka hareketler de var.
Bu API'lerin bazıları, bir veya daha fazla yönergeyi belirtmek için SemanticsMatcher
öğesini kabul eder
düğümlerini tıklayın.
Bulduğunuz
Sırasıyla bir veya birden fazla düğüm seçmek için onNode
ve onAllNodes
kullanabilirsiniz. Ancak en yaygın aramalar için onNodeWithText
ve onNodeWithContentDescription
gibi kolay arama araçlarını da kullanabilirsiniz. Tam listeye göz atabilirsiniz:
Test ile ilgili yardımcı kısa bilgiler oluşturun.
Tek bir düğüm seçin
composeTestRule.onNode(<<SemanticsMatcher>>, useUnmergedTree = false): SemanticsNodeInteraction
// Example
composeTestRule
.onNode(hasText("Button")) // Equivalent to onNodeWithText("Button")
Birden çok düğüm seçin
composeTestRule
.onAllNodes(<<SemanticsMatcher>>): SemanticsNodeInteractionCollection
// Example
composeTestRule
.onAllNodes(hasText("Button")) // Equivalent to onAllNodesWithText("Button")
Birleştirilmemiş ağaç
Bazı düğümler alt öğelerinin anlamsal bilgilerini birleştirir. Örneğin, düğme, metin öğesi etiketlerini birleştirir:
MyButton {
Text("Hello")
Text("World")
}
Bir testte, printToLog()
işlevini kullanarak anlam ağacını gösterin:
composeTestRule.onRoot().printToLog("TAG")
Bu kod aşağıdaki çıkışı yazdırır:
Node #1 at (...)px
|-Node #2 at (...)px
Role = 'Button'
Text = '[Hello, World]'
Actions = [OnClick, GetTextLayoutResult]
MergeDescendants = 'true'
Birleştirilen ağacın bir düğümünü eşlemeniz gerekiyorsa
useUnmergedTree
- true
:
composeTestRule.onRoot(useUnmergedTree = true).printToLog("TAG")
Bu kod aşağıdaki çıkışı yazdırır:
Node #1 at (...)px
|-Node #2 at (...)px
OnClick = '...'
MergeDescendants = 'true'
|-Node #3 at (...)px
| Text = '[Hello]'
|-Node #5 at (83.0, 86.0, 191.0, 135.0)px
Text = '[World]'
useUnmergedTree
parametresi tüm bulucularda kullanılabilir. Örneğin, burada
onNodeWithText
bulucuda kullanılıyor.
composeTestRule
.onNodeWithText("World", useUnmergedTree = true).assertIsDisplayed()
İddialar
SemanticsNodeInteraction
üzerinde assert()
yöntemini çağırarak onayları kontrol edin
bulan kişi tarafından bir veya daha fazla eşleştiriciyle döndürüldü:
// Single matcher:
composeTestRule
.onNode(matcher)
.assert(hasText("Button")) // hasText is a SemanticsMatcher
// Multiple matchers can use and / or
composeTestRule
.onNode(matcher).assert(hasText("Button") or hasText("Button2"))
En yaygın iddialar için şu gibi kolaylık işlevlerini de kullanabilirsiniz:
assertExists
, assertIsDisplayed
ve assertTextEquals
.
Tam listeye Test Etme ile ilgili yardımcı kısa bilgiler bölümünden göz atabilirsiniz.
Ayrıca, bir düğüm koleksiyonundaki iddiaları kontrol etmek için işlevler de vardır:
// Check number of matched nodes
composeTestRule
.onAllNodesWithContentDescription("Beatle").assertCountEquals(4)
// At least one matches
composeTestRule
.onAllNodesWithContentDescription("Beatle").assertAny(hasTestTag("Drummer"))
// All of them match
composeTestRule
.onAllNodesWithContentDescription("Beatle").assertAll(hasClickAction())
İşlemler
Bir düğüme işlem eklemek için perform…()
işlevini çağırın:
composeTestRule.onNode(...).performClick()
İşlemlere örnek olarak şunları verebiliriz:
performClick(),
performSemanticsAction(key),
performKeyPress(keyEvent),
performGesture { swipeLeft() }
Oluşturma Testi ile ilgili ipuçlarını inceleyerek listenin tamamına göz atabilirsiniz.
Eşleştirenler
Compose'unuzu test etmek için çeşitli eşleştiriciler kullanılabilir girin.
Hiyerarşik eşleştiriciler
Hiyerarşik eşleştiriciler, anlam ağacında yukarı veya aşağı gidip yukarı veya aşağı tüketilmesine eşleştirmeye karar verdi.
fun hasParent(matcher: SemanticsMatcher): SemanticsMatcher
fun hasAnySibling(matcher: SemanticsMatcher): SemanticsMatcher
fun hasAnyAncestor(matcher: SemanticsMatcher): SemanticsMatcher
fun hasAnyDescendant(matcher: SemanticsMatcher): SemanticsMatcher
Bu eşleştiricilerin kullanımına ilişkin bazı örnekleri aşağıda bulabilirsiniz:
composeTestRule.onNode(hasParent(hasText("Button")))
.assertIsDisplayed()
Seçiciler
Test oluşturmanın alternatif bir yolu, bazı testleri daha okunaklı hale getirebilecek seçiciler kullanmaktır.
composeTestRule.onNode(hasTestTag("Players"))
.onChildren()
.filter(hasClickAction())
.assertCountEquals(4)
.onFirst()
.assert(hasText("John"))
Tam listeye Test Etme ile ilgili yardımcı kısa bilgiler bölümünden göz atabilirsiniz.
Ek Kaynaklar
- Android'de uygulamaları test etme: Ana Android test açılış sayfası, testin temelleri ve teknikleri hakkında daha geniş bir bakış açısı sunar.
- Testin temelleri: Android uygulamasını test etmenin temel kavramları hakkında daha fazla bilgi edinin.
- Yerel testler: Bazı testler yapabilirsiniz yerel olarak ve kendi iş istasyonunuzda.
- Araçla testler: Araçla testler de çalıştırmak iyi bir uygulamadır. Yani doğrudan cihazda çalıştırılan testler.
- Sürekli entegrasyon: Sürekli entegrasyon, testlerinizi dağıtım ardışık düzeninize entegre etmenize olanak tanır.
- Farklı ekran boyutlarını test edin: birçok cihaz kullanıyorsanız farklı ekranları test etmeniz gerekir. seçin.
- Espresso: Görüntü tabanlı kullanıcı arayüzleri için tasarlanmış olsa da Espresso bilgisi, Oluşturma testi ile ilgili bazı yönler için yine de faydalı olabilir.