主机和虚拟机之间的拖拽是一个常用功能,比如VMware Workstation, VMware Horizon View 的用户都可以通过拖拽实现主机和虚拟机之间的文件拷贝。最近我进行了调研,并实现在了VMware Horizon view上的DnD自动化测试,做一些经验总结。
LDTP 是我常用的UI自动化测试框架,因此主体的对象识别操作都是用了它,但是对于拖拽的支持上,我的试验结果:
1. DnD 从client端到agent端(就是Host to Guest):
mousemove('paneProgram*’,<拖拽的文件名>)
generatemouseevent(1300,255,'b1p’)
simulatemousemove(1300,255,930,570)
time.sleep(2)
click('W1064_Ent','paneMKS*’) #让打开的虚拟桌面获取焦点
generatemouseevent(930,570,'b1r’)
结果:这种实现可以成功,但是不是太稳定
2. DnD 从agent端到client端(就是Guest to Host):
结果:LDTP 一旦把鼠标点击到虚拟桌面中,后续的鼠标操作就失效了,这种方案不可行。
Pywinauto有关于mouse和keyboard操作的模块,对应的结果为:
1. DnD 从client端到agent端(就是Host to Guest):
mouse.press(coords=(600,255))
mouse.press(coords=(600,255))
time.sleep(2)
mouse.move(coords=(1300,255))
time.sleep(2)
mouse.release(coords=(1300,255))
结果:这种实现可以成功,也相对稳定。
2. DnD 从agent端到client端(就是Guest to Host):
mouse.press(coords=(1300,255))
time.sleep(2)
mouse.move(coords=(930,570))
time.sleep(2)
mouse.release(coords=(930,580))
结果:这种实现可以成功,也相对稳定。
所以,最终我采用了LDTP+Pywinauto的方式来实现DnD的自动化测试。
从 client 到 agent:
从agent到client:
ExplorerWnd.activateWindow()
ExplorerWnd.mouseLeftClick(fileName_c)
mouse.press(coords=(x + w / 2, y + h / 2))
time.sleep(2)
#稍微移动鼠标
mouse.move(coords=(x + 5 + w / 2, y + 5 + h / 2))
mouse.move(coords=(x + w / 2, y + h / 2))
time.sleep(2)
DesktopWnd.grabFocus(btnOptions)
time.sleep(2)
mouse.move(coords=(j + m / 2, k + n / 2))
#稍微移动鼠标
mouse.move(coords=(j + 5+ m / 2, k + 5+ n / 2))
mouse.move(coords=(j + m / 2, k + n / 2))
time.sleep(2)
mouse.release(coords=(j + m / 2, k + n / 2))
LDTP: https://ldtp.freedesktop.org/wiki/
Pywinauto:http://pywinauto.github.io/