Pywinauto - Альтернативы для двойного щелчка - PullRequest
0 голосов
/ 05 ноября 2018

В настоящее время я использую 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, они пользовательские элементы.

print_control_identifiers

1 Ответ

0 голосов
/ 05 ноября 2018

Это очень низкий уровень и пытается эмулировать двойной щелчок 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()

Обёртка воспроизводит последовательность.

Это работает, даже если ваше окно не видно.

...