如何获取所有打开的窗口的名称/文本列表?
我试过pywinauto:
pywinauto.findwindows.find_windows(title_re="*")
但*用作正则表达式会引发错误
我试过 win32gui:它有
win32gui.GetWindowText(win32gui.GetForegroundWindow())
但在它的文档中,我找不到 getAllWindows 或返回打开 hwnd 句柄的所有名称/文本的内容:http ://timgolden.me.uk/pywin32-docs/contents.html
我正在尝试使用 pytest 和 pywinauto 运行 GUI 测试。当我正常运行代码时,它不会抱怨。
但是,当我通过 pytest 执行此操作时,它会引发一堆错误:
Windows fatal exception: code 0x8001010d
Run Code Online (Sandbox Code Playgroud)
请注意,代码仍然可以正常执行,并且案例被标记为通过。只是输出被这些奇怪的 Windows 异常污染了。
这是什么原因。我应该担心吗?
Windows fatal exception: code 0x8001010d
Run Code Online (Sandbox Code Playgroud) 我安装pywinauto使用pip install pywinauto.
操作系统:Windows 10
蟒蛇:3.6.2
当我运行python并尝试 import 时pywinauto,出现错误:
Python 3.6.2 (v3.6.2:5fd33b5, Jul 8 2017, 04:57:36) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> from pywinauto.application import Application
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Users\John\AppData\Roaming\Python\Python36\site-packages\pywinauto\__init__.py", line 89, in <module>
from . import findwindows
File "C:\Users\John\AppData\Roaming\Python\Python36\site-packages\pywinauto\findwindows.py", line 42, in <module>
from . import controls
File "C:\Users\John\AppData\Roaming\Python\Python36\site-packages\pywinauto\controls\__init__.py", line 36, …Run Code Online (Sandbox Code Playgroud) 我今天一直在玩PyWinAuto并享受自动化各种GUI测试的乐趣.我想知道它是否仍然是最先进的,或者是否有其他东西(也是免费的)可以更好地实现Windows富客户端自动化.
我正在尝试制作一个小功能,它会等到某个窗口出现,然后发送按键(alt+i),我一直在尝试使用 pywinauto 执行此操作,但没有成功。从我可以使用的文档中读到的内容
pywinauto.application.WindowSpecification.Exists()
Run Code Online (Sandbox Code Playgroud)
但我就是不明白如何指定我要查找的内容,我可以使用窗口标题或进程名称,但找不到好的解释。
另外,除了 pywinauto 之外,还有没有更简单的模块可以使用?我不需要做复杂的自动化,只需等待一个窗口并发送一些密钥。
编辑
好的,我找到了一个解决方案,一个永远循环的简单函数
def auto_accept(*args):
while True:
try:
app = pywinauto.Application()
app.window_(title='Untitled - Notepad').SetFocus()
app.window_(title='Untitled - Notepad').TypeKeys("{1}{2}{3}")
except (pywinauto.findwindows.WindowNotFoundError, pywinauto.timings.TimeoutError):
pass
Run Code Online (Sandbox Code Playgroud)
但现在我总是收到类似“2015-07-13 12:18:02,887 INFO: Typed text to the Notepad: {1}{2}{3}”这样的警告,我无法使用警告模块将它们过滤掉,还有另一种过滤\禁用它们的方法吗?这是一个问题,因为当我使用 py2exe 创建 exe 时,程序关闭后它告诉我有错误,但唯一的错误是我从 sendkeys 收到的警告。
我正在做的事情:
我正在尝试使用pywinauto在python中创建脚本以在后台自动安装notepad ++(隐藏或最小化),notepad ++只是一个示例,因为我将编辑它以与其他软件一起使用.
问题:
问题是我想在隐藏或最小化安装程序时执行此操作,但如果我移动鼠标,脚本将停止工作.
题:
如何隐藏或最小化notepad ++安装程序,如何执行此脚本并使其正常工作.
到目前为止这是我的代码:
import sys, os, pywinauto
pwa_app = pywinauto.application.Application()
app = pywinauto.Application().Start(r'npp.6.8.3.Installer.exe')
Wizard = app['Installer Language']
Wizard.NextButton.Click()
Wizard = app['Notepad++ v6.8.3 Setup']
Wizard.Wait('visible')
Wizard['Welcome to the Notepad++ v6.8.3 Setup'].Wait('ready')
Wizard.NextButton.Click()
Wizard['License Agreement'].Wait('ready')
Wizard['I &Agree'].Click()
Wizard['Choose Install Location'].Wait('ready')
Wizard.Button2.Click()
Wizard['Choose Components'].Wait('ready')
Wizard.Button2.Click()
Wizard['Create Shortcut on Desktop'].Wait('enabled').CheckByClick()
Wizard.Install.Click()
Wizard['Completing the Notepad++ v6.8.3 Setup'].Wait('ready', timeout=30)
Wizard['CheckBox'].Wait('enabled').Click()
Wizard.Finish.Click()
Wizard.WaitNot('visible')
Run Code Online (Sandbox Code Playgroud) 我最近遇到了一个不寻常的问题,当我打开一些excel/word文档并尝试连接到它的进程时使用 -
app = pywinauto.Application(backend="uia").connect(process=19812)
Run Code Online (Sandbox Code Playgroud)
它似乎不起作用,这意味着app.is_process_running()返回False,top_window()方法引发RuntimeError(找不到该进程的窗口)异常.
但是,如果我运行实际的可执行程序(Winword.exe或Excel.exe而不是某些*.xls文件),它似乎工作正常,一切似乎工作正常.
我在文件上检查了UIA与inspect.exe的兼容性,一切似乎都没问题.
这可能是什么问题?
这是我的第一篇文章!我想问你我该如何解决这个问题。我正在尝试在 powerBI 中自动发布。我需要单击正确的工作区。现在我正在尝试“我的工作区”,它只存在一次。 请检查此 PowerBI 窗口图像
部分Python代码如下所示:
win = app.window(title_re = '.*Power BI Desktop')
win.Publish.click_input()
publish_dialog = win.child_window(auto_id = "KoPublishToGroupDialog")
publish_dialog.child_window(title = "My Workspace").click_input()
publish_dialog.Select.click()
Run Code Online (Sandbox Code Playgroud)
错误消息看起来像这样
There are 2 elements that match the criteria {'title': 'My workspace', 'top_level_only': False, 'parent': <uia_element_info.UIAElementInfo - 'Publish to Power BI', WindowsForms10.Window.20008.app.0.3c73ab4_r6_ad1, 667196>, 'backend': 'uia'}
Run Code Online (Sandbox Code Playgroud)
有人可以解释一下问题是什么以及如何解决这个问题吗?
非常感谢
我正在为云同步桌面应用程序编写自动化测试。我面临的问题是,我无法从窗口中选择子文件夹,并且右键单击文件夹时无法从上下文菜单中选择选项。
例子:
import pywinauto
pywinauto.Application().Start(r'explorer.exe')
explorer = pywinauto.Application().Connect(path='explorer.exe')
NewWindow = explorer.Window_(top_level_only=True, active_only=True, class_name='CabinetWClass')
NewWindow.AddressBandRoot.ClickInput()
NewWindow.TypeKeys(r'Program Files{ENTER}', with_spaces=True, set_foreground=False)
ProgramFiles = explorer.Window_(top_level_only=True, active_only=True, title='Program Files', class_name='CabinetWClass')
explorer.WaitCPUUsageLower(threshold=5)
item = ProgramFiles.FolderView.GetItem('7-Zip')
item.EnsureVisible()
item.RightClickInput()
Run Code Online (Sandbox Code Playgroud)
回复:
item = ProgramFiles.FolderView.GetItem('7-Zip')
File "C:\Python27\lib\site-packages\pywinauto\application.py", line 243, in __getattr__
ctrls = _resolve_control(self.criteria)
File "C:\Python27\lib\site-packages\pywinauto\application.py", line 758, in _resolve_control
raise e.original_exception
pywinauto.findbestmatch.MatchError: Could not find 'FolderView' in '[u'', u'ShellView', u'ShellViewSHELLDLL_DefView', 'Progress', u'UIRibbonCommandBar', u'24', u'25', u'20', u'21', u'22', u'23', u'WorkerW', u'0', u'ScrollBar', u'4', u'8', 'TreeView', u'DirectUIHWND', u'Address band toolbarToolbar', u'SHELLDLL_DefView', …Run Code Online (Sandbox Code Playgroud) 我正在尝试找到一种方法来创建一个python脚本,找到excel文档中的所有按钮/复选框,并随机地与它们进行交互.
我尝试过使用pywinauto,但它没有在文档中找到实际的对象(可能是因为它是一个vb对象,而不是常规的GUI).
如何使用python完成?或许还有另一种方法可以做到这一点?
这是一个例如excel的文件
谢谢.
python ×10
pywinauto ×10
automation ×2
excel ×1
inspect.exe ×1
powerbi ×1
pytest ×1
python-3.x ×1
win32gui ×1