我有一個帶有多個可點擊跨度的textview。我希望能夠測試點擊這些跨度。如何使用espresso點擊clickablespan?
我嘗試設置一個自定義ViewAction,它將在TextView中找到clickablespans,然後將其文本與所需文本進行匹配,然後單擊該文本的xy座標。但是,似乎添加到TextView的跨度不是ClickableSpan類型,而是添加跨度的片段。
因此,我無法區分鏈接跨度。有一個更好的方法嗎?
添加跨度:
Util.addClickableSpan(spannableString, string, linkedString, new ClickableSpan() {
@Override
public void onClick(View textView) {}
});
tvAcceptTc.setText(spannableString);
tvAcceptTc.setMovementMethod(LinkMovementMethod.getInstance());
實用方法:
public static void addClickableSpan(SpannableString spannableString,
String text,
String subText,
ClickableSpan clickableSpan) {
int start = text.indexOf(subText);
int end = text.indexOf(subText) + subText.length();
int flags = Spanned.SPAN_EXCLUSIVE_EXCLUSIVE;
spannableString.setSpan(clickableSpan, start, end, flags);
}
定義ViewAction這一:
@Override
public void perform(UiController uiController, View view) {
uiController.loopMainThreadUntilIdle();
if (view instanceof TextView) {
TextView textView = (TextView) view;
Layout textViewLayout = textView.getLayout();
SpannableString fullSpannable = new SpannableString(textView.getText());
Object[] spans = fullSpannable.getSpans(0, fullSpannable.length(), Object.class);
ClickableSpan span = null;
for (Object object : spans) {
if (object instanceof BaseFragment) {
ClickableSpan foundSpan = (ClickableSpan)object;
int spanStart = fullSpannable.getSpanStart(foundSpan);
int spanEnd = fullSpannable.getSpanEnd(foundSpan);
if (fullSpannable.subSequence(spanStart, spanEnd).equals(aSubstring)) {
//Found the correct span!
span = foundSpan;
}
}
} ... go on to click the xy-coordinates
你如何添加跨度?你嘗試調用'TextUtils#dumpSpans'嗎? – pskink
我添加了添加跨度的代碼。它實際上現在工作,如果我刪除instanceof檢查和鑄造,但它會找到文本的任何跨度,而不是隻有一個ClickableSpan。我查看了調試器中的跨度,它們都不是ClickableSpan類型,而是來自添加跨度的片段。 –
查看'getSpans'的最後一個參數 – pskink