私は、Espresso がUiAutomator のように限界までクリックできることを知っています。(x 座標と y 座標) ドキュメントを読みましたが、見つからないようです。どんな助けでも大歓迎です。ありがとう
編集このリンク
を見つけましたが、使用方法の例はありません。これに関する私の主な関心事は、それまたは使用方法です。UiController
私は、Espresso がUiAutomator のように限界までクリックできることを知っています。(x 座標と y 座標) ドキュメントを読みましたが、見つからないようです。どんな助けでも大歓迎です。ありがとう
編集このリンク
を見つけましたが、使用方法の例はありません。これに関する私の主な関心事は、それまたは使用方法です。UiController
Espresso には がありGeneralClickAction
、これは ViewActions click()
、doubleClick()
、およびの基本的な実装ですlongClick()
。
のGeneralClickAction
コンストラクターは、CoordinatesProvider
2 番目の引数として a を取ります。したがって、基本的な考え方はViewAction
、カスタムを提供する静的ゲッターを作成することCoordinatesProvider
です。このようなもの:
public static ViewAction clickXY(final int x, final int y){
return new GeneralClickAction(
Tap.SINGLE,
new CoordinatesProvider() {
@Override
public float[] calculateCoordinates(View view) {
final int[] screenPos = new int[2];
view.getLocationOnScreen(screenPos);
final float screenX = screenPos[0] + x;
final float screenY = screenPos[1] + y;
float[] coordinates = {screenX, screenY};
return coordinates;
}
},
Press.FINGER);
}
Espresso に関する一般的なアドバイス: ドキュメント (事実上何もない) を探す代わりに、ソース コードを調べてください。Espresso はオープン ソースであり、ソース コード自体は非常に高品質です。
@haffaxの答えは素晴らしく、うまく機能します。
ただし、画面ごとに変化する可能性のあるビューの特定の部分をクリックする場合は、dp 値でさえすべての画面で安定していない可能性があるため、パーセント (または比率) に基づいてクリックすると便利な場合があります。だから、私はそれに簡単な変更を加えました:
public static ViewAction clickPercent(final float pctX, final float pctY){
return new GeneralClickAction(
Tap.SINGLE,
new CoordinatesProvider() {
@Override
public float[] calculateCoordinates(View view) {
final int[] screenPos = new int[2];
view.getLocationOnScreen(screenPos);
int w = view.getWidth();
int h = view.getHeight();
float x = w * pctX;
float y = h * pctY;
final float screenX = screenPos[0] + x;
final float screenY = screenPos[1] + y;
float[] coordinates = {screenX, screenY};
return coordinates;
}
},
Press.FINGER);
}
他の人が利益を得ることができるように、ここで共有すると思いました。