目前,我正在使用Pywinauto和Behave来测试桌面应用程序,并且遇到了麻烦。 在自动化的某一点上,我需要使用双击,目前我已按如下方式进行操作:
@step("User selects {row} in Multi payment window")
def step_impl(context, row):
"""
:param row: that we are going to fill.
:type context: behave.runner.Context
"""
tries = 5
for i in range(tries):
try:
context.popup[str(row)].click_input(button='left', double=True)
except:
if i < tries - 1: # i is zero indexed
continue
else:
break
它完美地工作!但是如果我不在场或机器打开,这会导致问题,因为我使用的是 click_input(),所以我尝试使用 click(double = True),但是它似乎无法单击它,我能做些什么来解决这个问题?
这是运行print_control_identifiers()的结果,我要双击的项目是第0行和第1行,它们是自定义项目。
答案 0 :(得分:1)
这是非常底层的,并试图模拟winapi双击。可能还有更多惯用的方法可以做到这一点。
双击鼠标左键实际上会产生四个消息序列:WM_LBUTTONDOWN,WM_LBUTTONUP,WM_LBUTTONDBLCLK和WM_LBUTTONUP。
我使用app.windows()[0].handle
提取窗口句柄,然后从HwndWrapper
中创建HwndWrapper(handle)
,然后调用HwndWrapper.double_click
:
from pywinauto import Application
from pywinauto.controls.hwndwrapper import HwndWrapper
app = Application(backend='uia').start(r'MFCApplication1.exe')
HwndWrapper(app.windows()[0].handle).double_click()
app.kill()
然后包装器重新生成序列。
即使您的窗口不可见,此方法也可以使用。