クローンしてエミュレータなどでandroidTestを実行してみてください。
なぜ?
EspressoのViewActions.click()
は内部でGeneralClickAction
を使ってクリックアクションを作っている。GeneralClickAction
を生成する際にいくつか引数を渡す必要があるのだが、この中でクリックする位置を決めているのは2個目の引数であるCoordinatesProvider
クラスのオブジェクトである。click()ではその実装であるGeneralLocation
enumクラスのGeneralLocation.VISIBLE_CENTER
が渡されている。
この実装の中ではView.getLocationOnScreen()
で得た対象のViewの左上の座標に、Viewの幅と高さの半分の値をそれぞれXとY座標に足して返している。ここで問題なのは、View.getLocationOnScreen()
で取得できる座標はもともとのViewの左上の座標に回転変形のマッピング計算を施したものであること。例えば、もともとのViewの中心を軸にして右に30度回転しているとすれば、返ってくる値も右上方向にずれることになる。そこを起点にして元々のViewの幅と高さの半分をそれぞれXとYに足しても、回転後のViewの中心にはならない。正方形のViewであれば、45度以上回転するとViewの外側に出てしまう。
サンプル実装のリポジトリではView.getGlobalVisibleRect()
を使って、回転したViewを内包するRectを取得してその中心座標を返すCoordinatesProvider
を実装し、GeneralClickAction
に渡している。これによって一応クリックできるようになっている。