Интерактивный вход в режим включения с Java и ожидаем
Я выполняю техническое обслуживание некоторых сетевых устройств и использую Expectit для навигации по меню. Однако я добился успеха только тогда, когда устройства предоставляют ожидаемые мной подсказки. Например, некоторые устройства уже находятся в режиме включения, когда я вхожу в систему, но некоторые нет.
Я хотел бы сделать эквивалент:
Expect expect = new ExpectBuilder()
.withOutput(channel.getOutputStream())
.withInputs(channel.getInputStream(), channel.getExtInputStream())
.withEchoOutput(wholeBuffer)
.withEchoInput(wholeBuffer)
.withExceptionOnFailure()
.build();
channel.connect();
if (expect.expect(contains(">")) {
expect.sendLine("enable");
expect.expect("assword:");
expect.sendLine(password);
}
expect.expect(contains("#"));
но я знаю, что это неправильно и не работает. Было бы желательно получить некоторую помощь в реализации реакции на определенную подсказку и другую реакцию на другие подсказки. Спасибо!
1 ответ
Вы можете попробовать ExpectIt# взаимодействовать, но, похоже, он не работает в версии 0.8.0, поэтому попробуйте последнюю версию 0.8.1.
Без interact
Вы можете использовать anyOf
сопоставлять и иметь логику, основанную на условии отдельных результатов. Это в основном как interact
работает. Вот пример:
MultiResult multiResult = expect.expect(anyOf(contains(">"), contains("#")));
if (multiResult.getResults().get(0).isSuccessful()) {
expect.sendLine("enable");
expect.expect(contains("assword:"));
expect.sendLine(password);
} else if (multiResult.getResults().get(1).isSuccessful()) {
expect.expect(contains("#"));
}
Надеюсь, поможет.