Я пытаюсь проверить TextView
приложения, которое показывает price
перечисленных продуктов при поиске по категории.
Я использую Robotium для автоматизации.
Иерархия, когда я получаю текущее представление (solo.getCurrentViews(ListView.class)
), выглядит примерно так:
ListView
--> (0)FrameLayout
--> (1)RelativeLayout
--> (0)ImageView
--> (1)RelativeLayout
-->(0)ImageView
-->(1)TextView //id - name
-->(2)TextView //id - price
-->(3)TextView //id - other
--> (2)RelativeLayout
--> (0)ImageView
--> (1)RelativeLayout
-->(0)ImageView
-->(1)TextView //id - name
-->(2)TextView //id - price
-->(3)TextView //id - other
--> (3)RelativeLayout
--> (0)ImageView
--> (1)RelativeLayout
-->(0)ImageView
-->(1)TextView //id - name
-->(2)TextView //id - price
-->(3)TextView //id - other
--> (4)RelativeLayout
--> (0)ImageView
--> (1)RelativeLayout
-->(0)ImageView
-->(1)TextView //id - name
-->(2)TextView //id - price
-->(3)TextView //id - other
--> (5)RelativeLayout
--> (0)ImageView
--> (1)RelativeLayout
-->(0)ImageView
-->(1)TextView //id - name
-->(2)TextView //id - price
-->(3)TextView //id - other
Я мог придумать два способа узнать цену:
Пройдите через дочерние элементы списка и перейдите к цене через индекс. Как ниже код
int index = 1; ListView view = null; List<ListView> productList = solo.getCurrentViews(ListView.class); view = productList.get(0); for (int i = 1; i < view.getChildCount(); i++) { RelativeLayout relativeLayoutDetails = (RelativeLayout) view.getChildAt(index++); // get the first RelativeLayout RelativeLayout productDetails = (RelativeLayout) relativeLayoutDetails.getChildAt(2); //get the inner child RelativeLayout TextView productName = (TextView) productDetails.getChildAt(0); System.out.println("********" + productDetails.getChildCount()); TextView price = (TextView) productDetails.getChildAt(2); System.out.println(productName.getText().toString() + "---"+ price.getText().toString()); }
Проблема с этим кодом в том, что TextView price = (TextView) hotelDetails.getChildAt(2);
не дает мне price
, но дает мне other
TextView (не знаю почему). Также это работает только для текущих представлений. Я не могу прокрутить полный список и получить подробную информацию по каждому продукту.
Во-вторых, получить все
TextView
для текущих просмотров и отфильтровать их на основе идентификатораprice
. Что-то вроде ниже:ListView l = (ListView) solo.getView (android.R.id.list); int viewShown = l.getChildCount ();
int total = l.getCount(); int i; int index=1; if (hotelsShown != 0) { for (i = 0; i < total / viewShown; i++) { List<TextView> textViews = solo.getCurrentViews(TextView.class, l); //get all the text views //filter for price for(TextView priceView: textViews){ if(priceView.id equals "price-id") //get this TextView. } solo.scrollDown(); solo.sleep(500); }
Проблема, с которой я столкнулся с этим подходом, заключается в том, что я не знаю, как отфильтровать эти представления на основе ID
. Кроме того, при прокрутке пропускаются один или два продукта из текущих представлений, и я не могу это исправить.
Если бы кто-то мог что-то предложить по этому поводу, это было бы здорово.