Mam widok tekstowy z wieloma klikalnymi rozpiętościami. Chcę móc przetestować kliknięcie tych przęseł.Jak kliknąć clickablespan za pomocą espresso?
Próbowałem skonfigurować niestandardową funkcję ViewAction, która znajdowałaby clickablespans w TextView, a następnie dopasowywała ich tekst do żądanego tekstu, a następnie kliknęła współrzędne xy tego tekstu. Wydaje się jednak, że zakresy dodane do TextView nie są typu ClickableSpan i zamiast tego są fragmentem, który dodał zakres.
Dlatego nie jestem w stanie rozróżnić rozpiętości linków. Czy jest lepszy sposób to zrobić?
dodanie przęsła: metoda
Util.addClickableSpan(spannableString, string, linkedString, new ClickableSpan() {
@Override
public void onClick(View textView) {}
});
tvAcceptTc.setText(spannableString);
tvAcceptTc.setMovementMethod(LinkMovementMethod.getInstance());
użytkowy:
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);
}
Definiowanie 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
jak dodać swoje przęsła? czy próbowałeś wywołać 'TextUtils # dumpSpans'? – pskink
Dodałem kod do dodawania przęseł. Działa to teraz, jeśli usunę zaznaczenie i wykonanie instancji, ale znajdzie się dowolny zakres z tekstem zamiast tylko ClickableSpan. Spojrzałem na rozpiętości w debuggerze i żaden z nich nie był typu ClickableSpan, ale zamiast tego był fragmentem, który dodał rozpiętości. –
zobacz ostatni parametr 'getSpans' – pskink