我正在尝试构建一个selenium(Java)脚本,它通过RDP从本地计算机连接到虚拟机,我需要在连接到虚拟机后从虚拟机中的当前脚本运行一些命令。我面临的问题是本地机器的控制不会进入虚拟机,因为我无法在其中运行任何脚本或命令。请让我知道如何将控制从本地机器传递到虚拟机。要是更具体的是,我的本机中运行的selenium脚本能够在虚拟机中执行任何操作,该操作由在本地机器上运行的相同selenium脚本打开。
答案 0 :(得分:0)
如果你的VM是linux,你可以使用jcraft进行控制。
注意:您应该启用SSH并对VM中的22端口进行本地IP访问。
从maven central repo https://mvnrepository.com/artifact/com.jcraft/jsch
下载jcraftpublic class ssh {
/**
* JSch Example Tutorial
* Java SSH Connection Program
*/
@Test
public static void connection(String host,String user, String password, String command) {
try{
java.util.Properties config = new java.util.Properties();
config.put("StrictHostKeyChecking", "no");
JSch jsch = new JSch();
Session session=jsch.getSession(user, host, 22);
session.setPassword(password);
session.setConfig(config);
session.connect();
System.out.println("Connected");
Channel channel=session.openChannel("exec");
((ChannelExec)channel).setCommand(command);
channel.setInputStream(null);
((ChannelExec)channel).setErrStream(System.err);
InputStream in=channel.getInputStream();
channel.connect();
byte[] tmp=new byte[1024];
while(true){
while(in.available()>0){
int i=in.read(tmp, 0, 1024);
if(i<0)break;
System.out.print(new String(tmp, 0, i));
}
if(channel.isClosed()){
System.out.println("exit-status: "+channel.getExitStatus());
break;
}
try{Thread.sleep(1000);}catch(Exception ee){}
}
channel.run();
channel.disconnect();
session.disconnect();
System.out.println("DONE");
}catch(Exception e){
}
}
}
通过提供服务器的主机地址,用户名,密码以及要在其中执行的命令来连接您的虚拟机。
(实施例)
public class start{
static WebDriver driver;
public static void main(String[], args)
{
//connect your VM by using method from ssh class
ssh.connection("10.200.10.1", "userName", "password", "sudo service jenkins start");
//execute selenium command once application started
driver.findElement(By.xpath(".//*[@id='usr']")).sendKeys("Stack");
//execute another command inside VM
ssh.connection("10.200.10.1", "userName", "password", "cd /var/lib/jenkins/workspace && ls");
}
}
答案 1 :(得分:0)
可能无法实现。您的脚本可能会调用RDP协议来调用VM,但VM是它拥有内核和用户空间的独立实例。您运行的脚本将位于不同的内核和用户空间中。两者都不共享相同的内核和用户空间来访问空格之间的值。