Python Pywinauto-双击的备选方案

Python Pywinauto-双击的备选方案,python,pywinauto,Python,Pywinauto,目前我正在使用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

目前我正在使用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
@step(“用户在多付款窗口中选择{row}”)
def step_impl(上下文,行):
"""
:param row:我们将要填充的。
:键入上下文:behave.runner.context
"""
尝试=5次
对于范围内的i(尝试):
尝试:
context.popup[str(row)]。单击输入(button='left',double=True)
除:
如果i
它工作得很好!但是如果我不在场或机器打开,这将导致问题,因为我使用的是click_input(),所以我尝试使用click(double=True),但它似乎无法单击它,我可以做些什么来解决这个问题吗

这是运行print_control_identifiers()的结果,我试图双击的项目是第0行和第1行,它们是自定义项目

这是非常低级的,尝试模拟winapi双击。也许有更多的惯用方法可以做到这一点

参见实际事件顺序的代码和说明:

双击鼠标左键实际上会生成一系列四条消息:WM_LBUTTONDOWN、WM_LBUTTONUP、WM_lbuttondblck和WM_LBUTTONUP

我使用
app.windows()[0]提取窗口句柄。句柄
,然后从中创建
HwndWrapper
HwndWrapper(句柄)
,然后调用
HwndWrapper。双击

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()
然后包装器复制序列


即使您的窗口不可见,这也能正常工作。

我尝试了它,但得到了这个错误
KeyError:
这就是我实现您的答案的方式:
HwndWrapper(context.popup[f'{str(row)}]].double_click()
尝试添加
.handle
HwndWrapper(context.popup[f'{str(row)}].handle)。double_click()
尝试返回class\u name=element.class\u name AttributeError:“非类型”对象没有属性“class\u name”上下文的值和类型是什么。弹出[f'{str(row)}']
?这是在其上运行type的结果。你能解决这个谜题吗?现在还没有,我被拉去做一个不同的项目,我已经有一段时间没有接触过那个代码了。