Pywinauto-0.6.8使用远程桌面执行注意事项 电脑端软件GUI鼠标键盘Python自动化办公、测试、重复性工作制定库

转眼间学 Python 也有接近 4 年的事情了。
自从学了这门所谓的编程语言之后,一切皆对象的思维方式影响了我的工作、生活,顺带着影响着人生观等。所以说,专注一件事情的同时,顺带着把其他的一些东西醒悟了,这也算是一件圆满的答复吧。

  • 本人学习、整理的笔记个人YY为比较直观,用词刺眼,如有冒犯,多多见谅。

网上介绍 Python 的太多,我就用最实际的来说:我个人认为硬件技术的发展使得目前的硬件问题变得性能过剩,加上最近几年网上大多数“专家”也发现了摩尔定律可能性或者存在被打破的规律,so,不用多说,学 Python 还是学 other 那是需求者要说的事情;假设你不喜欢蛋糕,每天路过一个蛋糕店,且这个蛋糕店能让你免费领取、试吃新鲜刚做好蛋糕,对于你自己而言,东西再好、免费也是白搭。所以说,一门技术对于一个人来说,最重要的第一点是用途,其次就是易学、易用。
与我来说,Python 在我实际当中本就有实现的用途,其次就是易学与易用。
那么本文的主角 Pywinauto 顾名思义,就是利用 Python 在电脑上进行软件的 GUI 自动化,模拟人工操作;那么,你的流程可以先这样:

  1. 利用面向对象的思维方式,先将重复性且有规律的工作内容进行分类;
  2. 利用流程思维(思维导图的方式)将工作类进行流程设计(面向过程);
  3. 使用 Python Pywinauto 库、os 模块(或者 Pathlib)、win32clipboard(像手动操作复制图片、或者文字需要的)……
    [这里只列举了我自己常用的几个]
    以上只是自己的开头,接下来是正文的开始,我自己从 Pywinauto 官方文档 - 点击传送 里使用 沉浸式翻译 插件进行摘录保存,里面根据自己的理解修改了一定量的东西,再加上根据自己的阅读习惯进行一定量的排版。

GUI 应用程序行为通常不稳定,您的脚本需要等待,直到出现新窗口或关闭/隐藏现有窗口。pywinauto 可以灵活地隐式(使用默认超时)或显式等待对话框初始化,使用专用方法/函数来帮助您使代码更轻松、更可靠。

桌面 GUI 测试通常需要活动桌面移动鼠标光标并在聚焦窗口中键入一些键。这完全阻止了本地计算机的正常使用。

但是在远程计算机上运行测试是一项挑战。本指南收集了已知问题和解决方案,以通过 GUI 测试控制远程计算机。

Windows 远程桌面功能


远程桌面 (RDP) 为具有 Windows 操作系统的远程计算机提供虚拟活动桌面。存在 2 个潜在问题:

  • 如果 RDP 窗口最小化,则默认情况下远程 PC 上没有活动桌面。
  • 如果 RDP 断开连接,则桌面将被锁定。

在这两种情况下,任何 GUI 自动化作业都将失败(如果您不使用下面描述的一些技巧)。解决方法在 TestComplete 文档中得到了很好的描述:

VNC Server 软件


有更简单的方法可以避免上述问题:使用 VNC 服务器软件(例如,Tight VNC)。它作为一对客户端和服务器工作。VNC 服务器还在远程计算机上提供活动桌面。

  • 这是一个非虚拟桌面,因此在远程 PC 上使用本机屏幕分辨率可能需要更新视频驱动程序。
  • 最小化或断开 VNC 客户端不会破坏活动桌面(默认情况下!
  • 这是一个跨平台的解决方案(VNC 服务器是 macOS 的原生部分,可在 Linux 上使用)。

您可能面临的唯一问题:

使用远程桌面 (RDP) 可能会破坏 VNC 服务器的优势,您必须重新启动远程 PC 或应用上述 RDP 解决方法。

其他远程访问软件 ¶


如果有人尝试使用 Team Viewer、PowerBI 桌面或任何其他虚拟桌面软件远程运行 GUI 测试/自动化,请随时在本指南中添加更多详细信息。

在锁定的机器上运行自动化的技巧


对于某些应用程序,可以在锁定的计算机上运行 GUI 自动化,但这需要使用特殊方法。首先,值得列出在锁定的机器上不起作用的方法:

  • click_input 和所有其他鼠标单击和按方法, _input 以 结尾。
  • set_focus 因为它使用 SetCursorPosSetForegroundWindow .
  • type_keys 用于本机键盘输入。
  • 直接使用鼠标和键盘模块。

其他一些方法可能也不起作用,但这取决于应用。在 backend="win32" 以下情况下,有几种无声文本输入的方法:

  • send_chars (仅限符号;特殊组合键不起作用)
  • send_keystrokes (某些特殊的组合键可能有效)

还有另一种有用的方法可以一次输入字符串(适用于两个后端,通常仅用于编辑框):

  • “UIA”:set_edit_text (按原样输入文本,不支持修饰符)
  • “win32”:set_edit_text

使用基于代理的 CI 启动远程脚本


当您的脚本准备就绪并且可以在远程计算机上手动运行它时,是时候自动执行最后一步了:从本地计算机或 CI 服务器触发运行脚本。

如果您有内部托管的 CI(例如 Jenkins),则目标计算机可能已经使用代理连接到 Jenkins master。有三种方法可以连接代理:

  • 将代理即服务运行:在这种情况下,GUI 测试将不起作用,因为在作为服务运行时甚至无法创建 GUI。
  • 通过 SSH 运行代理:GUI 测试不起作用。
  • 像普通应用程序一样运行代理。这是唯一的工作案例!

直接启动远程脚本


本章的灵感来自问题 #401。 #401 (特别感谢 yangliang003))。

第一个选项是 PsExec。感谢 StackExchange 上的这篇文章。

  1. 下载 PsTools
  2. 使用 tasklist 命令获取 RDP 会话的进程 ID。PowerShell 脚本:
$session = tasklist /fo CSV | findstr RDP ; $session = $session.Split(",")[3] ; $session.Split('"')[1]
  1. 启动进程: PsExec.exe -s -i 123 python my_script.py .

Ansible 具有简化它的 PsExec 插件。剧本示例:

- name: test ra module
  hosts: *****
  tasks:
    - name: run GUI automation
      win_psexec:
      	command: python pywinauto_example.py
        executable: C:\Windows\PSTools\psexec.exe
        interactive: yes
        username: admin
        password: ******
        hostnames: ******

Windows 计划程序还能够启动具有 GUI 交互支持的作业。有一种简单的方法可以一次性 cmd.exe 安排任务:

Schtasks /Create /tn my_task /tr c:\temp\my_task.bat /sc ONCE /st hh:mi:ss /sd yyyy/mm/dd
  • 17
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ょ镜花う水月

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值