使用Java和expectit以交互方式进入启用模式

时间:2015-12-28 16:57:04

标签: java expect expectit

我正在对某些网络设备进行一些维护,我一直在使用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 个答案:

答案 0 :(得分:1)

你可以尝试ExpectIt#interact但它似乎在版本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("#"));
}

希望它有所帮助。