使用Android Espresso自动化断言随机数

时间:2016-09-11 06:40:10

标签: android automated-tests android-espresso

我想断言是否存在使用Espresso的字符串。

字符串包含固定部分和随机数,例如:FR#133,133是随机数。我怎么能断言呢?

  • 可以是任何数字
  • 如果号码不存在,则测试失败

我尝试了以下代码执行固定字符串FR#133检查。

ViewInteraction textView = onView(
            allOf(withText("FR#133"),
                    childAtPosition(
                            allOf(withId(R.id.toolbar_farmdetail),
                                    childAtPosition(
                                            IsInstanceOf.<View>instanceOf(android.widget.LinearLayout.class),
                                            0)),
                            1),
                    isDisplayed()));
    textView.check(matches(withText("FR#133")));

2 个答案:

答案 0 :(得分:2)

我认为你应该检查这个HamcrestMatchersregexp(正则表达式)。

根据第一个,有许多字符串匹配器,如startsWith(charSequence)endsWith(charSequence)contains(charSequence),它与Espresso完美配合。

检查:http://hamcrest.org/JavaHamcrest/javadoc/1.3/org/hamcrest/Matchers.html

示例:http://www.leveluplunch.com/java/examples/hamcrest-text-matchers-junit-testing/

教程:http://qathread.blogspot.com/2014/01/discovering-espresso-for-android.html

例如:textView.check(matches(withText(endsWith("133"))));

但是当你使用随机数时,最有趣的匹配器将是matchesPattern()

使用正则表达式检查您的字符串是否包含末尾带有数字的正确固定部分。

以下是如何处理它的示例:Regex: Check if string contains at least one digit

举个例子:

textView.check(matches(withText(matchesPattern("FR#133"))));

还要尝试将代码简化为:

textView.check(matchesPattern( “FR#133”));

希望它会有所帮助。

答案 1 :(得分:0)

Espresso + UIAutomator有助于解决Espresso独自无法解决的许多问题。

我的示例函数,用于创建UiObject并在其中声明文本。

public static boolean testNumberIDExists(String startString, UiDevice mDevice)
{
    String text="";
    UiObject uio=  mDevice.findObject(new UiSelector().textStartsWith(startString));
    try {
        text= uio.getText();
    } catch (UiObjectNotFoundException e) {
        e.printStackTrace();
        return false;
    }

    return Character.isDigit(text.charAt(text.length()-1));

}