2017-07-31 32 views
1

我想建立一个硒(Java)脚本,它通过RDP从本地机器连接到虚拟机,并且需要在连接到虚拟机后从当前脚本运行一些命令。我面临的问题是,本地机器的控制不会进入虚拟机,因为我无法在其中运行任何脚本或命令。请让我知道如何将控制权从本地机器传递到虚拟机。要成为更具体的是,我的本地机器上运行的selenium脚本能够在虚拟机中执行任何操作,该虚拟机由本地机器上运行的相同selenium脚本打开。如何通过任何脚本语言将本地机器的控制权交给虚拟机?

+0

而不是硒保持在本地并连接到虚拟机,我们可以直接在虚拟机中完成设置吗? –

+0

你能详细解释剧本吗? – Murthi

+0

我想要一个硒脚本,它会自动检出虚拟机(VD)并通过RDP连接到IP地址,并在虚拟机中启动jenkins从节点。 –

回答

0

如果你的VM是linux,你可以通过使用jcraft来控制。

注意:您应该启用SSH并且本地IP访问VM中的22端口。从Maven的中央回购

  1. 下载jcraft https://mvnrepository.com/artifact/com.jcraft/jsch

    public 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){ 
    
         } 
    
        } 
    
    } 
    
  2. 提供您的服务器,用户名,密码的主机地址连接你的虚拟机,并命令你想在其中执行。

    (实施例)

    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"); 
        } 
    } 
    
+0

感谢您的答案先生。但我的虚拟机是Windows服务器2008/2016机器。在这种情况下,你可以让我知道如何执行上面的内容。 –

0

这可能是不可能的。您的脚本可能会调用RDP协议来调用虚拟机,但虚拟机是独立的实例,它拥有自己的内核和用户空间。您运行的脚本将位于不同的内核和用户空间中。两者不共享相同的内核和用户空间来访问空间之间的值。

相关问题