Эспрессо соответствует выбранному тексту прядильщика
После ответа здесь я пытаюсь проверить, выбран ли определенный текст блесны. Вращение появляется в диалоге, поэтому я попытался:
onView(withId(R.id.package_spinner)).inRoot(isDialog()).check(matches(withSpinnerText(containsString("sachet"))));
Однако это не работает, и я получаю следующее сообщение об ошибке:
android.support.test.espresso.base.DefaultFailureHandler $ AssertionFailedWithCauseError: 'with text: строка, содержащая "sachet" ", не соответствует выбранному представлению. Ожидается: с текстом: строка, содержащая "sachet". Получено: "AppCompatSpinner{id=2131624039, res-name=package_spinner, видимость =VISIBLE, ширина =620, высота =75, has-focus=false, has-focusable=true, has-window-focus=true, is-clickable=true, is-enabled=true, is-focus =false, is-focusable=true, is-layout-запрашивается =false, is-selected=false, root-is-layout-required=false, has-input-connection=false, x=0.0, y=75.0, child-count=1}"
Означает ли "is-selected=false", что найденный им счетчик не выбран? Это выполняется на реальном устройстве (не на эмуляторе) с API 18. Во время запуска Espresso, а также при ручном тестировании счетчик правильно установлен на "sachet". Почему у эспрессо с этим проблемы?
Не уверен, что это актуально, но счетчик предназначен для объектов типа:
public class PackageType {
private int id;
private String name;
private final Context ctx;
public PackageType(Context context) { this.ctx=context; }
public PackageType(String name, Context context) {
super();
this.ctx = context;
setName(name);
}
// setters
public void setId(int i) { this.id = i; }
public void setName(String u) {
this.name = u;
}
// getters
public int getId() { return id; }
public String getName() { return name; }
}
и адаптер блесны выглядит так:
class SpinnerPackageTypeAdapter extends ArrayAdapter<PackageType> {
private final List<PackageType> packageTypes;
private final Context mContext;
public SpinnerPackageTypeAdapter(Context context, int resource, List<PackageType> packageTypes) {
super(context, resource, packageTypes);
this.mContext = context;
this.packageTypes = packageTypes;
}
public PackageType getItem(int position) { return packageTypes.get(position); }
public long getItemId(int position) { return position; }
// this is for the passive state of the spinner
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// use dynamically created TextView, but could reference custom layout
TextView label = new TextView(mContext);
label.setTextColor(Color.BLACK);
label.setTextSize(mContext.getResources().getDimension(R.dimen.list_row_font_size));
label.setGravity(Gravity.CENTER);
label.setText(getItem(position).getName());
return label;
}
// this is for the chooser dropped down spinner
@Override
public View getDropDownView(int position, View convertView, ViewGroup parent) {
TextView label = (TextView) View.inflate(mContext,R.layout.row_spinner,null);
label.setText(getItem(position).getName());
return label;
}
}
1 ответ
Я нашел проблему. В классе PackageType мне пришлось переопределить метод toString(), поскольку (конечно, возможны и другие версии, если в нем присутствует "имя"):
@Override
public String toString() {
return "PackageType [id=" + id + ", name=" + name + "]";
}