pywinauto 找到一个确切的托盘项目
pywinauto find an exact tray item
我正在尝试为桌面应用程序创建一个自动化的 GUI 测试框架,我正在为此使用 pywinauto。
我的问题是,即使使用 SWAPY 和 Winspector,我仍然无法检测托盘区域并在那里找到我的应用程序。
我已经尝试了当前文档中的所有内容,还尝试了网络中的 Volume 示例,但均未成功。
from pywinauto import taskbar
sti = taskbar.SystemTrayIcons.WrapperObject()
print 'Clicking ', sti.Button(0).info.text
sti.Button(0).Click()
从技术上讲,我唯一需要做的就是找到托盘图标的确切位置,然后单击它以调出菜单。
pywinauto 有一些与任务栏相关的功能,但我无法让它们工作。
任何人都可以给我一些关于如何做到这一点的想法吗?
编辑
我尝试了你的想法 Vasily 但我收到了这个错误:
import pywinauto
from pywinauto import taskbar
app = pywinauto.application.Application()
app.start_('C:\Program Files (x86)\MyApp.exe')
w_handle = pywinauto.findwindows.find_windows(title=u'MyApp')[0]
window = app.window_(handle=w_handle)
texts = taskbar.SystemTrayIcons.Texts()
print texts
和回溯:
Traceback (most recent call last):
File "C:/Users/nicolae.farcas/Desktop/pywinauto_c1.py", line 9, in <module>
texts = taskbar.SystemTrayIcons.Texts()
File "C:\Python27\lib\site-packages\pywinauto\controls\common_controls.py", line 1932, in Texts
btn_text = self.GetButton(i).text
File "C:\Python27\lib\site-packages\pywinauto\controls\common_controls.py", line 1914, in GetButton
button.idCommand)
RuntimeError: GetButtonInfo failed for button with command id 0
我现在正在使用 Windows 7 Pro x64,但我还需要 运行 在 8、8.1 和 10 上(我可以放弃 10,因为我认为对它的支持仍然落后)
如果你使用pywinauto 0.5.1,请调用taskbar.SystemTrayIcons.Texts()
然后复制相应的文本到下面的调用:
taskbar.ClickSystemTrayIcon('button text', exact=True, double=True)
对于隐藏区域使用ClickHiddenSystemTrayIcon(...)
。
另请注意,弹出菜单属于您的应用程序。所以你需要连接到应用程序并调用 app.PopupMenu.MenuItem('item name').Click()
或 ClickInput()
.
如果不起作用,请提供错误输出和OS版本。
编辑:
(评论 Python 32/64 位问题)
理想的方法是 运行 64 位 Python 任务栏特定代码,然后启动 32 位 Python 用于单独的应用程序特定脚本。不太方便,但应该可以。
我正在尝试为桌面应用程序创建一个自动化的 GUI 测试框架,我正在为此使用 pywinauto。 我的问题是,即使使用 SWAPY 和 Winspector,我仍然无法检测托盘区域并在那里找到我的应用程序。
我已经尝试了当前文档中的所有内容,还尝试了网络中的 Volume 示例,但均未成功。
from pywinauto import taskbar
sti = taskbar.SystemTrayIcons.WrapperObject()
print 'Clicking ', sti.Button(0).info.text
sti.Button(0).Click()
从技术上讲,我唯一需要做的就是找到托盘图标的确切位置,然后单击它以调出菜单。
pywinauto 有一些与任务栏相关的功能,但我无法让它们工作。
任何人都可以给我一些关于如何做到这一点的想法吗?
编辑
我尝试了你的想法 Vasily 但我收到了这个错误:
import pywinauto
from pywinauto import taskbar
app = pywinauto.application.Application()
app.start_('C:\Program Files (x86)\MyApp.exe')
w_handle = pywinauto.findwindows.find_windows(title=u'MyApp')[0]
window = app.window_(handle=w_handle)
texts = taskbar.SystemTrayIcons.Texts()
print texts
和回溯:
Traceback (most recent call last):
File "C:/Users/nicolae.farcas/Desktop/pywinauto_c1.py", line 9, in <module>
texts = taskbar.SystemTrayIcons.Texts()
File "C:\Python27\lib\site-packages\pywinauto\controls\common_controls.py", line 1932, in Texts
btn_text = self.GetButton(i).text
File "C:\Python27\lib\site-packages\pywinauto\controls\common_controls.py", line 1914, in GetButton
button.idCommand)
RuntimeError: GetButtonInfo failed for button with command id 0
我现在正在使用 Windows 7 Pro x64,但我还需要 运行 在 8、8.1 和 10 上(我可以放弃 10,因为我认为对它的支持仍然落后)
如果你使用pywinauto 0.5.1,请调用taskbar.SystemTrayIcons.Texts()
然后复制相应的文本到下面的调用:
taskbar.ClickSystemTrayIcon('button text', exact=True, double=True)
对于隐藏区域使用ClickHiddenSystemTrayIcon(...)
。
另请注意,弹出菜单属于您的应用程序。所以你需要连接到应用程序并调用 app.PopupMenu.MenuItem('item name').Click()
或 ClickInput()
.
如果不起作用,请提供错误输出和OS版本。
编辑:
(评论 Python 32/64 位问题)
理想的方法是 运行 64 位 Python 任务栏特定代码,然后启动 32 位 Python 用于单独的应用程序特定脚本。不太方便,但应该可以。