0

具体的にはWriteRobot/ WriteRobotImpl. 書くのがかなり遅いようで、もっと速く書きたいと思っています。

編集
MSのコメントに応えて、私はこれを試しました(注:この時点では、それWriteRobotが関与していることはわかっていませんでしたTypeRobot):

setup(){
...
    setFinalStatic( org.testfx.robot.impl.TypeRobotImpl.class.getDeclaredField("SLEEP_AFTER_KEY_CODE_IN_MILLIS"), 5 );
}
...
static void setFinalStatic(Field field, Object newValue) throws Exception {
    field.setAccessible(true);
    Field modifiersField = Field.class.getDeclaredField("modifiers");
    modifiersField.setAccessible(true);
    modifiersField.setInt(field, field.getModifiers() & ~Modifier.FINAL);
    field.set(null, newValue);
}

残念ながら、1 ミリ秒に設定しても、タイピング速度に違いはないようです。

編集
Slaw のコメントに注意します。

Systemテストを実行する前にプロパティを設定しましたtestfx.robot.write_sleep。これは、WriteRobotImpl.java の上部にあるソース コード (以下を参照) から、影響がある可能性があることを確認できたにもかかわらず、効果がありませんでした。これを 500 ミリ秒に設定しても何の効果もありませんでした。なんらかの理由でプロパティがそこのコードに表示されていないと判断したため、デフォルトの 25 ミリ秒が設定されていました。

NB 考えられるその他の原因: そこのコードに従うと、WriteRobot.write常に が呼び出されWriteRobot.typeCharacterInScene、次に と がBaseRobot.typeKeyboard呼び出されるように見えますWaitForAsyncUtils.waitForFxEvents。後者は「難しい顧客」である可能性があります。押された各キーが「イベントを待つ」必要がある場合は、何もする必要がない可能性があります。

org.testfx.robot.impl.WriteRobotImpl.java の上部にある次の行がSystemプロパティを認識できない理由を解明しようとしています:

private static final int SLEEP_AFTER_CHARACTER_IN_MILLIS;

static {
    int writeSleep;
    try {
        writeSleep = Integer.getInteger("testfx.robot.write_sleep", 25);
    }
    catch (NumberFormatException e) {
        System.err.println("\"testfx.robot.write_sleep\" property must be a number but was: \"" +
                System.getProperty("testfx.robot.write_sleep") + "\".\nUsing default of \"25\" milliseconds.");
        e.printStackTrace();
        writeSleep = 25;
    }
    SLEEP_AFTER_CHARACTER_IN_MILLIS = writeSleep;
}

また、テストが実行される前にプロパティstatic{...}を設定する必要があるよりも早くコード ブロックが発生するのではないかと考えました。Systemこのプロパティをgradle.buildで設定してみました。まだ成功していません。

4

0 に答える 0