Python Pywinauto:未找到click()方法

Python Pywinauto:未找到click()方法,python,pycharm,automated-tests,pywinauto,Python,Pycharm,Automated Tests,Pywinauto,我正在PyCharm上使用Pywinauto开始一个项目。以下是我的项目结构: mybeautifulproject utils Utils pages LoginPage tests MyTest 这是我的Utils文件: from __future__ import print_function import logging from pywinauto import actionlogger from pywinau

我正在PyCharm上使用Pywinauto开始一个项目。以下是我的项目结构:

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')
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")
因此,基本上,这个文件将一直被使用(
self.app
在测试过程中与被测试的应用程序一起使用)

我的
MyTest
文件:

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')
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?)
我不知道为什么按钮不能点击。我知道它被找到了,因为当我输入一个错误的标识符时,有一个错误明确地表示找不到对象

我错过了什么


谢谢。

如果按钮未被识别为
ButtonWrapper
,正确的方法是
.invoke()
.select()
.toggle()
,具体取决于按钮类型

要检查如何识别它,请使用self.BTN\u VALIDER.wrapper\u object()进行调试。另外,内置的Python函数
dir()
可以帮助您列出返回的包装器对象的所有可用属性。例如:

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

我已尝试添加导入,但找不到该方法
从pywinauto.controls.common_控件导入单击
非常感谢!我打印了(self.BTN\u VALIDER.wrapper\u object()),得到了以下输出:
uiawrapper.uiawrapper-'Mot de Passe',Static
。我想这不是一个真正的按钮。。。因此,作为一种解决方法,我执行了
SendKeys({ENTER}',其中的_spaces=True)
。self.dump_tree()可能有助于找到合适的控件。您可以使用从dump_树输出复制的self.child_窗口(…),然后使用.draw_outline()检查是否正确找到它。