- Testing Accessibility
- Testing UI Performance
- Test Recorder
- Testing UI for Multiple Application
- Testing Intents
- Testing Asynchronous Operations
- Testing WebView
- Testing AdapterView
- View Actions
- View Assertions
- Custom View Matchers
- View Matchers
- Architecture
- Overview of JUnit
- Running Tests In Android Studio
- Setup Instructions
- Introduction
- Espresso Testing - Home
Espresso Testing Resources
Selected Reading
- Who is Who
- Computer Glossary
- HR Interview Questions
- Effective Resume Writing
- Questions and Answers
- UPSC IAS Exams Notes
Espresso Testing Framework - View Matchers
埃斯普洛框架提供了许多观点匹配者。 校对的目的是利用Id、文本和儿童观点的可用性等不同观点的属性。 每个配对人都符合该意见的特定属性,并适用于特定类型的观点。 例如,withId 匹配器:Id 观点的财产适用于所有观点,而与Text对等相对应的是该观点的Text财产,只适用于TextView。
在本章中,让我们学习由压缩测试框架提供的不同配对器,并学习建造的Hamcrest图书馆。
Hamcrest Library
Hamcrest提供一个简单的功能assertThat,并收集对应器,以维护任何物体。 assertThat> 有三个论点:
努力(检验说明,任择)
目的(实际)
计算机(预期)
让我们举一个简单的例子来检验一个清单物体是否具有预期价值。
import static org.hamcrest.Matchers.hasItem; import static org.hamcrest.MatcherAssert.assertThat; @Test pubpc void pst_hasValue() { ArrayList<String> pst = new ArrayList<String>(); pst.add("John"); assertThat("Is pst has John?", pst, hasItem("John")); }
这里,hasItem 回归者,核对实际清单是否指明了该项目的价值。
Hamcrest有许多内装配对器,还有创建新配对器的备选办法。 用于压缩测试框架的重要内在配对器如下:
anything - always matchers
逻辑匹配器
Text based matchers
containsString - 用于测试实际投入是否含有具体指示。
endsWith - 用于测试实际投入是否以具体指示开始。
startsWith - 用于测试实际投入是否以具体指示结束。
Number based matchers
greater Than - 用于测试实际投入是否大于预期数量。
greater ThanOrEqual To - 用于测试实际投入是否大于或等于预期数量。
lessThanOrEqual To - 用于测试实际投入是否少于预期数量。
Object based matchers
instance 在中,用于测试实际投入是否属于预期类别。
is − Sugar or short cut for equalTo
Matchers
Espresso提供意见一致和看法的“意见”方法。 它接受观点对手和回归观点的反对,以便与相应的观点相互作用。 经常使用的观点匹配者名单如下:
withId()
withId(接受关于类型理由的论点,该论点提到了这一观点。 它交还了一名配对员,该配对者使用该意见。 样本代码如下:
onView(withId(R.id.testView))
withText()
<>Text(>接受关于string的论证,该论点提及该观点的文本财产的价值。 它交还了一名配对人,与使用该意见的案文价值的看法相匹配。 它只适用于TextView。 样本代码如下:
onView(withText("Hello World!"))
withContentDescription()
withContentDescription(> 接受“string”的说法,该论点提及该观点的内容描述财产的价值。 它交还了一名配对人,使用对意见的描述与观点相符。 样本代码如下:
onView(withContentDescription("blah"))
我们还可以通过案文价值的资源,而不是案文本身。
onView(withContentDescription(R.id.res_id_blah))
hasContentDescription()
hasContentDescription() 没有任何论点。 它交还了一名配对人,这与任何内容描述的观点一致。 样本代码如下:
onView(allOf(withId(R.id.my_view_id), hasContentDescription()))
withTagKey()
<>TagKey()接受“string”类论点,该论点提及该观点的关键。 它交还了一台配对机,与使用其标签钥匙的看法相匹配。 样本代码如下:
onView(withTagKey("blah"))
我们还可以通过tag子的资源,而不是标签本身。
onView(withTagKey(R.id.res_id_blah))
withTagValue()
<>TagValue()接受类型论点 Match子和lt子;论点提到该观点的标签价值。 它交还了一台配对机,使用其标签价值对观点进行对比。 样本代码如下:
onView(withTagValue(is((Object) "blah")))
这里,is是Hamcrest配对器。
withClassName()
withClassName(>take a case of打字机<String> 论点提及该观点的类别名称价值。 它交还了一名配对员,该配对者使用其类别名称与观点相符。 样本代码如下:
onView(withClassName(endsWith("EditText")))
这里,endsWith是Hamcrest配对器和返回匹配器;String>
withHint()
<withHint(>接受“Mater<”类论点;String>论点提及该观点的 hint价值。 它交还了一名配对员,该配对者采用该观点。 样本代码如下:
onView(withClassName(endsWith("Enter name")))
withInputType()
with InputType()接受关于int的论证,该论点提到了意见的输入类型。 它交还了一台配对机,该配对器使用其投入类型与意见相符。 样本代码如下:
onView(withInputType(TYPE_CLASS_DATETIME))
这里,TYPE_CLASS_DATETIME/i>是指edit观看支持日期和时间。
withResourceName()
<>ResourceName(>接受“匹配”类型的论点;String>论点提及该观点的类别名称价值。 它交还了一名配对人,使用该观点的资源名称与意见相符。 样本代码如下:
onView(withResourceName(endsWith("res_name")))
它还接受直截了当的论点。 样本代码如下:
onView(withResourceName("my_res_name"))
withAlpha()
<withAlpha(接受关于float的论证,该论点提及该观点的字母数值。 它交还了一台配对机,与使用该观点的甲型数值的观点相吻合。 样本代码如下:
onView(withAlpha(0.8))
withEffectiveVisibipty()
with EffectiveVisibipty(> 接受“ViewMatchers.Visibipty
onView(withEffectiveVisibipty(withEffectiveVisibipty.INVISIBLE))
withSpinnerText()
withSpinnerText() 接受“匹配”一词的论点;String>这一论点提到了Spinner目前选定的观点的价值。 它交还了一台配对机,该配对机根据自己选定的物品的价值对等。 样本代码如下:
onView(withSpinnerText(endsWith("USA")))
它接受扼杀理由或资源。 样本代码如下:
onView(withResourceName("USA")) onView(withResourceName(R.string.res_usa))
withSubstring()
with SubString ( is similar to withText() 除此以外,还有助于测试该观点案文价值的分数。
onView(withSubString("Hello"))
hasLinks()
hasLinks( 它没有论点,它回去了一位对口人,这符合有联系的观点。 该条只适用于案文。 样本代码如下:
onView(allOf(withSubString("Hello"), hasLinks()))
这里,allOf是Hamcrest配对器。 allOf 回归配对器,与配对器的过继器相匹配,并用于对观点进行对比,并检查该观点在文本价值上是否有关联。
hasTextColor()
hasTextColor() 接受单一类型的争辩,而论点则指肤色的资源。 它交还了一张配对机,根据彩色对TextView。 它只适用于TextView。 样本代码如下:
onView(allOf(withSubString("Hello"), hasTextColor(R.color.Red)))
hasElppsizedText()
hasElppizeText() 没有任何论点。 它交还了一名配对员,与有长篇文字和短片(头10. 最后)或剪辑(第一......)的案文相匹配。 样本代码如下:
onView(allOf(withId(R.id.my_text_view_id), hasElppsizedText()))
hasMultipneText()
<hasMultipneText(>) 没有任何理由。 它交还了一台配对机,与具有任何多行文字的文本相匹配。 样本代码如下:
onView(allOf(withId(R.id.my_test_view_id), hasMultipneText()))
hasBackground()
hasBackground() 接受单一类型的争辩,其论点指的是背景资源的来源。 它交还了一名配对员,这符合根据其背景资源提出的意见。 样本代码如下:
onView(allOf(withId("image"), hasBackground(R.drawable.your_drawable)))
hasErrorText()
<hasErrorText(>)接受“匹配”的论据;String>这一论点提及该观点的错误(EditText)说明价值。 它交还了一名配对员,该配对者使用错误表述的观点。 这只适用于EditText。 样本代码如下:
onView(allOf(withId(R.id.editText_name), hasErrorText(is("name is required"))))
它还接受直截了当的论点。 样本代码如下:
onView(allOf(withId(R.id.editText_name), hasErrorText("name is required")))
hasImeAction()
<>hasImeAction()接受“Mater<”类论点;Integer>这一论点提到该观点支持了投入方法。 它回收了一台配对器,该配对器使用支持的意见。 这只适用于EditText。 样本代码如下:
onView(allOf(withId(R.id.editText_name), hasImeAction(is(EditorInfo.IME_ACTION_GO))))
页: 1 正在采用投入方法选择。 <>hasImeAction()也接受有关愤怒的论点。 样本代码如下:
onView(allOf(withId(R.id.editText_name), hasImeAction(EditorInfo.IME_ACTION_GO)))
supportsInputMethods()
supportsInputMethods() 没有任何论点。 它交还了一台配对机,如果它支持投入方法,则与这一观点相匹配。 样本代码如下:
onView(allOf(withId(R.id.editText_name), supportsInputMethods()))
isRoot()
isRoot( 没有任何论点。 它回归了一种与根基相匹配的对比。 样本代码如下:
onView(allOf(withId(R.id.my_root_id), isRoot()))
isDisplayed()
isDisplayed(> 没有任何论点。 它交还了一名配对员,这符合目前展示的观点。 样本代码如下:
onView(allOf(withId(R.id.my_view_id), isDisplayed()))
isDisplayingAtLeast()
isDisplayingAtLeast()接受单一类型词句。 它交还了一名配对员,这符合目前至少显示特定百分比的观点。 样本代码如下:
onView(allOf(withId(R.id.my_view_id), isDisplayingAtLeast(75)))
isCompletelyDisplayed()
isCompletelyDismeted()。 没有任何论点。 它交还了一名配对员,这符合目前完全在屏幕上展示的观点。 样本代码如下:
onView(allOf(withId(R.id.my_view_id), isCompletelyDisplayed()))
isEnabled()
sEnabled( 没有任何论点。 它交还了一名配对员,这符合人们的看法。 样本代码如下:
onView(allOf(withId(R.id.my_view_id), isEnabled()))
isFocusable()
Focusable() 没有任何论点。 它交还了一名配对员,这符合有重点选择的观点。 样本代码如下:
onView(allOf(withId(R.id.my_view_id), isFocusable()))
hasFocus()
<hasFocus()无任何理由。 它交还了一名配对员,这符合目前重点讨论的观点。 样本代码如下:
onView(allOf(withId(R.id.my_view_id), hasFocus()))
isCpckable()
isCpckable() 没有任何论点。 它交还了一名配对员,这符合点击选择的看法。 样本代码如下:
onView(allOf(withId(R.id.my_view_id), isCpckable()))
isSelected()
www.un.org/Depts/DGACM/index_french.htm 没有任何论点。 它交还了一名配对员,这符合目前选定的观点。 样本代码如下:
onView(allOf(withId(R.id.my_view_id), isSelected()))
isChecked()
isChecked() 没有任何论点。 它交还了一台配对机,与ChildButton(或其子类)类的观点相匹配,并处于检查状态。 样本代码如下:
onView(allOf(withId(R.id.my_view_id), isChecked()))
isNotChecked()
s NotChecked()刚刚对面。 样本代码如下:
onView(allOf(withId(R.id.my_view_id), isNotChecked()))
isJavascriptEnabled()
isJavascriptEnabled() 没有任何论点。 它交还了一名配对员,与正在评估 Java本的网上意见相匹配。 样本代码如下:
onView(allOf(withId(R.id.my_webview_id), isJavascriptEnabled()))
withParent()
withParent ( 接受一则“匹配”;“意见”; 论点提到了一种观点。 它交还了一名配对人,这符合特定观点即家长的观点。 样本代码如下:
onView(allOf(withId(R.id.childView), withParent(withId(R.id.parentView))))
hasSibpng()
<hasSibpng(>接受一则“Mater>”类;View< 论点提到了一种观点。 它交还了一名配对员,这符合其切身的看法。 样本代码如下:
onView(hasSibpng(withId(R.id.sibpngView)))
withChild()
withChild()接受一则“匹配”和“意见”的论点; 论点提到了一种观点。 它交还了一名配对员,这符合儿童的意见。 样本代码如下:
onView(allOf(withId(R.id.parentView), withChild(withId(R.id.childView))))
hasChildCount()
hasChildCount()。 接受一种类型的论据。 论点提到儿童的意见。 它交还了一名对口人员,这种看法与论点中具体阐明的完全相同。 样本代码如下:
onView(hasChildCount(4))
hasMinimumChildCount()
hasMinimumChildCount()接受一种类型的内乱论点。 论点提到儿童的意见。 它交还了一名配对员,这符合至少有论据中具体列明的儿童观点数量的观点。 样本代码如下:
onView(hasMinimumChildCount(4))
hasDescendant()
hasDescendant()。 接受一则“匹配”;“意见”; 论点提到了一种观点。 它回归了一种对口,与过去的观点一致,即认为是观点等级的后代。 样本代码如下:
onView(hasDescendant(withId(R.id.descendantView)))
isDescendantOfA()
isDescendantOfA()接受一则“搭配”类;View> 论点提到了一种观点。 它回馈了一种对口,这种看法与过去的观点一致,是观点等级的常识之一。 样本代码如下:
onView(allOf(withId(R.id.myView), isDescendantOfA(withId(R.id.parentView))))Advertisements