Derzeit ich ein wenig mit dem Unit-Test Framework habe Schwierigkeiten ...TouchUtils und ActivityInstrumentationTestCase2 Benutzerereignis Einheit Testfall nicht funktioniert
was ich
- zu tun versuche, brauche ich 2 zu simulieren klickt auf den Bildschirm (100,100) und (400,400) mit einer kleinen Zeitdifferenz.
- Ich muss ein longPressClick auf dem Bildschirm simulieren Lassen Sie uns sagen (200, 200)
- Nach Benutzer klicken Sie auf den nativen Code ausgeführt wird und führt Pixel-Manipulation auf Bitmap.
- Dieser Test zur Analyse der Laufzeit-Performance des Systems wird für mehr Paar-Sätze von Punkten laufen
hier, wo ich
- I und touchUtils bin mit activityInstrumentationTestCase2 steckte Für den Benutzer klicken Sie auf Ereignisse.
- TouchUtils.longClickView (InstrumentationTestCase Test, View v) funktioniert gut; Ich bin in der Lage, das lange dringende Ereignis zu erkennen, aber der Test wird beendet, noch bevor die Berechnung/Darstellung in meinem UI-Thread abgeschlossen ist. Wie kann ich den Test in diesem Fall beenden?
- Wie simuliere ich 2/3 Benutzerklicks @ bestimmten Ort auf dem Bildschirm? Ursache TouchUtils.clickView (InstrumentationTestCase-Test, Ansicht v) würde nur den Benutzerklick in der Mitte des Bildschirms simulieren ... Wie man es richtig macht?
Dies sind die Dinge, die ich versucht habe und scheint mir fehlt heraus etwas:
- TouchUtils.longClickView (InstrumentationTestCase Test, Blick v) funktioniert gut ... für longClickView zu schaffen .. Auch ich konnte longClickView() an bestimmten Bildschirm-Speicherort durch Einführung der Zeitverzögerung zwischen ACTION_DOWN und ACTION_UP-Ereignis .. siehe Anhang
- Ich war in der Lage zu erreichen das Benutzer klick Ereignis an bestimmten Bildschirm-Speicherort, aber ich konfrontiert ein seltsames Thema .. Wenn ich die Motio versetze nEvent (100,100) aus dem Testfall .. Das Framework würde immer "-76" in das Y-Ereignis einfügen .. nicht sicher, warum es diese Abweichung gab ... Ich arbeitete um das Problem herum, indem ich 76 zu meinen Eingabedaten hinzufügte (100.176) für die Zeit zu sein .. hatte jemand ein ähnliches Problem?
- Sogar scheint mit diesem Ansatz Timing ist sehr kritisch .. als Wenn ich mehr Verzögerung zwischen ACTION_DOWN und ACTION_UP platzieren, wird das Ereignis als longClickPress erkannt ... und wenn ich ein wenig weniger ... den "zweiten" einzigen Klick Veranstaltungen (ACTION_DOWN + ACTION_UP) werden als DoubleTapEvent erkannt ..
Was die richtige Timing Kombination für ACTION_UP und ACTION_DOWN .. für eine einzelne Benutzer klicken Ereignissimulation sein sollte .. ????????
@Test
public void testClick(){
List<Points> pointSequence = new ArrayList<Points>();
Log.d(TAG, "FirClick Start Timing : " + SystemClock.uptimeMillis());
pointSequence.add(new Points(100f,176f));
pointSequence.add(new Points(100f,176f));
singleClickSimulation(pointSequence,false);
}
private void singleClickSimulation(List<Points> pointSequence, Boolean addDelay) {
long downTime = SystemClock.uptimeMillis();
long eventTime = SystemClock.uptimeMillis();
// NOTE : If I do not place this then the event is detected as doubleTap.
eventTime += 100;
Instrumentation inst = getInstrumentation();
MotionEvent event = MotionEvent.obtain(downTime, eventTime, MotionEvent.ACTION_DOWN, pointSequence.get(0).getX(), pointSequence.get(0).getY(), 0);
inst.sendPointerSync(event);
//eventTime = SystemClock.uptimeMillis();
pointSequence.remove(0);
//This delay I have added just to test; whether there is enough time for pixel manipulation or not, actually it would be used only at the end of the run of all the test cases for single user click
if(addDelay){
eventTime = SystemClock.uptimeMillis() + 3000;
}
eventTime += 25;
event = MotionEvent.obtain(downTime, eventTime, MotionEvent.ACTION_UP, pointSequence.get(0).getX(), pointSequence.get(0).getY(), 0);
inst.sendPointerSync(event);
pointSequence.remove(0);
}
Wie führen Sie das Doppeltipp-Ereignis durch? – Blackbelt