带有RF和AutoIt的Jenkins无法在最小化或封闭的虚拟机中工作

时间:2017-07-17 21:31:49

标签: selenium jenkins virtual-machine robotframework autoit

我在Windows VM上运行Robotframework / Selenium测试,为了处理Windows身份验证弹出窗口,我使用了一个简单的AutoItLibrary发送密钥。

问题是如果我打开远程桌面(远程虚拟机),一切正常,但如果我最小化或关闭远程VM窗口,发送密钥将停止工作。

我可以在脚本发送密钥后立即离开机器,其余的测试也很顺利。

我该如何处理这种情况?我不希望每次运行都要查看测试以发送凭据。

示例:

Login Windows Authentication
    [Documentation]     Windows Authentication using 
    Send    ${USERNAME}
    Send    {TAB}
    Send    ${PASSWORD}
    Send    {ENTER}

我也尝试过这个失败:

http://user:password@example.com

感谢。

2 个答案:

答案 0 :(得分:0)

在Windows机器中,假设您使用"管理员"那么我建议你创建另一个用户" Someuser"具有远程桌面权限。

使用" Someuser"远程登录到Windows机器从这个会议开始,即" Someuser"通过以" Administrator"登录,打开另一台远程桌面到同一台机器。

这样,Windows机器将始终处于活动状态,因为"管理员"你不应该面对这个问题!即使您关闭" Someuser"。

的远程桌面

希望它有所帮助!

答案 1 :(得分:0)

去过那里,完成了;) 在坚果壳中,我从Windows& VM内部,如果没有活动用户连接到Windows VM,就没有桌面环境。这意味着任何与桌面/ GUI交互的应用程序/服务/程序都无法获得正确的对象来处理 - 没有菜单,没有弹出窗口,甚至屏幕截图都是空白的(这是很好的练习,以上验证)。

对于Linux下的Jenkins(任何VM linux都可以),我可以提出以下建议:

  • 创建一个单独的作业,该作业将激活RDP到Windows VM
  • 将此作业链接到您的主作业作为前提条件,因此如果您在WindowsVM上运行测试,RDP作业将建立RDP连接并且将根据需要保留它,而不是执行测试
  • 使用xfreerdp与nohup建立rdp会话,以便在作业完成后保留它(注意DESKTOP_RES,因为分辨率会影响GUI测试):
  

nohup xfreerdp -g DESKTOP_RES -u USER -p PASSWD --ignore-certificate   WIN_VM_IP

在我们的设置中,我们有一个python脚本,它在Win测试之前为所有Win VM建立RDP,它从jenkins获取Win VM节点列表,对于每个Win VM节点,它尝试建立RDP并将其保留在后台(nohup) :

  for i in WinVM:
    for retry in range(0,3):
        try:
            ip=get_IP_from_WinVM(i)
            print('RDP for: '+i+' ip:'+ip)
            proc=Popen(['nohup','xfreerdp','-g',args.res,'-u',args.user,'-p',args.pwd,'--ignore-certificate',ip], stdout=PIPE, stdin=PIPE,stderr=PIPE )
            proc.stdin.write('y')
        except Exception as e:
            print(e)
            print("Retrying RDP connection for "+i)
        else:
            break