В частности, WriteRobot
/ WriteRobotImpl
. Кажется, он пишет вещи довольно медленно, и я бы хотел, чтобы он писал быстрее.
Редактировать
В ответ на комментарий MS я попытался это сделать (NB на данный момент у меня не было ' Выяснилось, что задействовано 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. По-прежнему безуспешно.