Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Using onData with an overlaid View won't properly click on items #151

Open
GoogleCodeExporter opened this issue Jun 4, 2015 · 0 comments

Comments

@GoogleCodeExporter
Copy link

What steps will reproduce the problem?
1. Create an Activity with a ListView and something overlyaing that ListView
2. Use onData() to select an item which is not initially overlaid by the 
overlay.  

I've outlined some code below which illustrates the problem.

layout: 

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent" android:layout_height="match_parent">

    <ListView
        android:id="@android:id/list"
        android:layout_width="wrap_content"
        android:layout_height="match_parent" />

    <android.support.v7.widget.Toolbar
        android:layout_width="match_parent"
        android:layout_height="56dp"
        android:title="Hello world"
        android:layout_alignParentTop="true"
        android:background="@android:color/holo_red_dark"/>

</RelativeLayout>

Activity:

public class TestActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.test_layout);
        ListView list = (ListView) findViewById(android.R.id.list);
        View header = new View(this);
        // Probably not an exact conversion, but close enough.
        header.setMinimumHeight((int) (getResources().getDisplayMetrics().density * 56));
        list.addHeaderView(header);
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1,
                new String[] {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M"});
        list.setAdapter(adapter);
    }

}


@RunWith(AndroidJUnit4.class)
public class TestTest extends 
YelpJUnit4ActivityInstrumentationTestCase<TestActivity> {

    private
    public TestTest() {
        super(TestActivity.class);
    }

    @Test
    @MediumTest
    public void test_thatThisBreaks() throws JSONException, IOException {
        getActivity();
        onData(allOf(is(instanceOf(String.class)), is("A"))).perform(click());
        // Do some assertions based on what we'd expect from clicking "A"
    }
}

What is the expected output? What do you see instead?

What I'd expect to see in this case is that my item gets successfully selected.

What I see instead is that Espresso scrolls the desired view to the top of the 
list, below the Toolbar. Then it tries to click on the item.  This results in 
Espresso clicking on the Toolbar instead of the item itself. 

What version of the product are you using? On what operating system?

Espresso 2.1 on Mac OS X Mavericks.  Testing on Genymotion 2.3.0 emulators.

Please provide any additional information below.

There is a thread to discuss this issue on the android-test-kit discuss group: 
https://groups.google.com/forum/#!topic/android-test-kit-discuss/LugJjkxek3E

Original issue reported on code.google.com by ma...@yelp.com on 12 May 2015 at 4:08

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant