Kullanıcı arayüzü öğeleriyle etkileşimde bulunmanın üç temel yolu vardır:
- Bulucular, iddialarda bulunmak veya üzerinde işlem gerçekleştirmek için bir veya daha fazla öğe (ya da anlam ağacındaki düğümler) seçmenize olanak tanır.
- Onaylar, öğelerin mevcut olduğunu veya belirli özelliklere sahip olduğunu doğrulamak için kullanılır.
- İşlemler, öğelere tıklama veya diğer hareketler gibi simüle edilen kullanıcı etkinliklerini ekler.
Bu API'lerin bazıları, anlam ağacında bir veya daha fazla düğüme referans vermek için SemanticsMatcher
etiketini kabul eder.
Bulucular
onNode
ve onAllNodes
kullanarak sırasıyla bir veya daha fazla düğüm seçebilirsiniz ancak onNodeWithText
ve onNodeWithContentDescription
gibi en yaygın aramalar için kolay erişim aracı kullanabilirsiniz. Tam listeye göz atmak için Test Oluşturma ile ilgili yardımcı kısa bilgilere göz atabilirsiniz.
Tek bir düğüm seçin
composeTestRule.onNode(<<SemanticsMatcher>>, useUnmergedTree = false): SemanticsNodeInteraction
// Example
composeTestRule
.onNode(hasText("Button")) // Equivalent to onNodeWithText("Button")
Birden fazla düğüm seçin
composeTestRule
.onAllNodes(<<SemanticsMatcher>>): SemanticsNodeInteractionCollection
// Example
composeTestRule
.onAllNodes(hasText("Button")) // Equivalent to onAllNodesWithText("Button")
Birleştirilen ağaç
Bazı düğümler, alt öğelerinin anlamsal bilgilerini birleştirir. Örneğin, iki metin öğesi içeren bir düğme, metin öğesi etiketlerini birleştirir:
MyButton {
Text("Hello")
Text("World")
}
Bir testte, anlambilim ağacını göstermek için printToLog()
ifadesini kullanın:
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'
Ayrılmış ağacın düğümünü eşleştirmeniz gerekirse useUnmergedTree
değerini true
olarak ayarlayabilirsiniz:
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ır.
composeTestRule
.onNodeWithText("World", useUnmergedTree = true).assertIsDisplayed()
Onaylama
Bir veya daha fazla eşleştiriciye sahip bir bulucu tarafından döndürülen SemanticsNodeInteraction
üzerinde assert()
çağrısı yaparak onayları kontrol edin:
// 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"))
assertExists
, assertIsDisplayed
ve assertTextEquals
gibi en yaygın onaylamalar için kolaylık işlevlerini de kullanabilirsiniz.
Tam listeye göz atmak için Test Oluşturma ile ilgili yardımcı kısa bilgilere göz atabilirsiniz.
Bir düğüm koleksiyonundaki onayları kontrol etmek için de işlevler 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 bir perform…()
işlevini çağırın:
composeTestRule.onNode(...).performClick()
İşlemlere ilişkin bazı örnekleri aşağıda bulabilirsiniz:
performClick(),
performSemanticsAction(key),
performKeyPress(keyEvent),
performGesture { swipeLeft() }
Tam listeye göz atmak için Test Oluşturma ile ilgili yardımcı kısa bilgilere göz atabilirsiniz.
Eşleştiriciler
Oluşturma kodunuzu test etmek için çeşitli eşleştiriciler kullanılabilir.
Hiyerarşik eşleştiriciler
Hiyerarşik eşleştiriciler, anlam ağacında yukarı veya aşağı ilerleyip eşleme yapmanızı sağlar.
fun hasParent(matcher: SemanticsMatcher): SemanticsMatcher
fun hasAnySibling(matcher: SemanticsMatcher): SemanticsMatcher
fun hasAnyAncestor(matcher: SemanticsMatcher): SemanticsMatcher
fun hasAnyDescendant(matcher: SemanticsMatcher): SemanticsMatcher
Aşağıda, bu eşleştiricilerin kullanımına ilişkin bazı örnekler verilmiştir:
composeTestRule.onNode(hasParent(hasText("Button")))
.assertIsDisplayed()
Seçiciler
Test oluşturmanın alternatif bir yolu, bazı testleri daha okunabilir hale getirebilecek seçiciler kullanmaktır.
composeTestRule.onNode(hasTestTag("Players"))
.onChildren()
.filter(hasClickAction())
.assertCountEquals(4)
.onFirst()
.assert(hasText("John"))
Tam listeye göz atmak için Test Oluşturma ile ilgili yardımcı kısa bilgilere göz atabilirsiniz.
Ek Kaynaklar
- Android'de uygulamaları test etme: Ana Android testi açılış sayfası, testlerle ilgili temel bilgiler ve tekniklere dair daha kapsamlı bir bakış sunar.
- Testlerle ilgili temel bilgiler: Android uygulamalarını test etmenin ardındaki temel kavramlar hakkında daha fazla bilgi edinin.
- Yerel testler: Kendi iş istasyonunuzda yerel olarak bazı testler yapabilirsiniz.
- Araçlı testler: Araçlı testler de çalıştırmak iyi bir uygulamadır. Yani, doğrudan cihaz üzerinde yapı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: Kullanıcıların kullanımına sunulan çok sayıda cihaz arasından farklı ekran boyutlarını test etmeniz gerekir.
- Espresso: Görünüm tabanlı kullanıcı arayüzlerinde kullanılmak üzere tasarlanmış olsa da Espresso bilgisi, Oluşturma testinin bazı bölümlerinde yine de yararlı olabilir.