Python Pywinauto-双击的备选方案
目前我正在使用Pywinauto和Behave来测试一个桌面应用程序,我遇到了一个路障。 在我的自动化过程中,有一次我需要使用双击,目前我的操作如下: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
@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的结果。你能解决这个谜题吗?现在还没有,我被拉去做一个不同的项目,我已经有一段时间没有接触过那个代码了。