Pywinauto: метод click () не найден - PullRequest
0 голосов
/ 19 декабря 2018

Я начинаю проект с использованием Pywinauto на PyCharm.Вот моя структура проекта:

mybeautifulproject
    utils
        Utils
    pages
        LoginPage
    tests
        MyTest

Вот мой Utils файл:

from __future__ import print_function
import logging
from pywinauto import actionlogger
from pywinauto import Application

import argparse

class Test:
    app = Application(backend='uia')

    def __init__(self):
        parser = argparse.ArgumentParser()
        parser.add_argument("--log", help="enable logging", type=str, required=False)
        args = parser.parse_args()

        actionlogger.enable()
        logger = logging.getLogger('pywinauto')
        if args.log:
            logger.handlers[0] = logging.FileHandler(args.log)

        self.app = Application(backend='uia').start(r'mybeautifulapp.EXE')

Так что в основном этот файл всегда будет использоваться (self.app с проверенным приложением во времятест).

Мой MyTest файл:

from __future__ import print_function
from utils import Utils
from pages import LoginPage

test = Utils.Test()

class MyTest:
    loginPage= LoginPage.LoginPage(test)
    loginPage.connexion("login", "password")

И последний, LoginPage:

from __future__ import print_function

class LoginPage:

    def __init__(self, test):
        self.FENETRE_AUTHENTIFICATION = test.app.window(auto_id='UserAuthentication')
        self.INPUT_NOM = self.FENETRE_AUTHENTIFICATION.child_window(auto_id="tbLogin")
        self.INPUT_MOT_DE_PASSE = self.FENETRE_AUTHENTIFICATION.child_window(auto_id="tbPassword")
        self.BTN_VALIDER = self.FENETRE_AUTHENTIFICATION.child_window(title="Mot de Passe", found_index=0)

    def connexion(self, login, password):
        self.INPUT_NOM.set_text(login)
        self.INPUT_MOT_DE_PASSE.set_text(password)
        self.BTN_VALIDER.click()

Когда я запускаю MyTest,приложение открывается, поля заполнены правильно, но затем я получаю сообщение об ошибке:

AttributeError: Neither GUI element (wrapper) nor wrapper method 'click' were found (typo?)

Я не знаю, почему нельзя нажать кнопку.Я знаю, что он найден, потому что, когда я ставлю неправильный идентификатор, возникает ошибка, в которой явно говорится, что объект не может быть найден.

Что мне не хватает?

Спасибо.

1 Ответ

0 голосов
/ 19 декабря 2018

Если кнопка не распознается как ButtonWrapper, правильный метод - .invoke() или .select() или .toggle() в зависимости от типа кнопки.

Чтобы проверить, как она была распознана, используйте self.BTN_VALIDER.wrapper_object()в целях отладки.Также встроенная функция Python dir() может помочь вам перечислить все доступные атрибуты для возвращаемого объекта-оболочки.Пример:

print(dir(self.BTN_VALIDER.wrapper_object()))
...