Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to perform Click action on Button or Text field by pywinauto

Tags:

pywinauto

I'm using pywinauto to automation Click on some button on DiffDaff software.

My intention are:

  • Step 1: Open DiffDaff software

  • Step 2: Click 'About' button

    from pywinauto.application import Application
    
    app = Application.start("C:\Program Files\DiffDaff\DiffDaff.exe")
    
    app.About.Click()
    

But, I'm on stuck at step 2, and the console show error:

  File "build\bdist.win32\egg\pywinauto\application.py", line 238, in __getattr__
  File "build\bdist.win32\egg\pywinauto\application.py", line 788, in _resolve_control
pywinauto.findbestmatch.MatchError: Could not find 'About' in '['', u'DiffDaff - Compare Files, Folders And Web Pages', u'Internet Explorer_Hidden', u'DiffDaff - Compare Files, Folders And Web PagesDialog', 'Dialog']'

Where, '', u'DiffDaff - Compare Files, Folders And Web Pages', u'Internet Explorer_Hidden', u'DiffDaff - Compare Files, Folders And Web PagesDialog', 'Dialog' is the title of sotfware

Also, using the command 'app.dialogs.print_control_identifiers()' to know what exact position of 'About' button, there is the output:

Button - '&About'   (L750, T388, R834, B411)
    '&About' '&AboutButton' 'Button3'

But it's so difficult to understand the parameter as above (what/where is L750, T388,...) - Would you like to explain all the mean of parameters as above ?

And the way to perform 'Click' button ?

Thanks.

like image 621
Little Chicken Avatar asked Jul 07 '14 08:07

Little Chicken


People also ask

What is pywinauto in Python?

pywinauto is a set of python modules to automate the Microsoft Windows GUI. At its simplest it allows you to send mouse and keyboard actions to windows dialogs and controls, but it has support for more complex actions like getting text data.

How do I close an application in pywinauto?

You can check to see if there's a specific hotkey to close the program. However, the easiest way to do this is to send Alt-F4.


1 Answers

pywinauto requires 2-level hierarchy from Application object to control method. The structure of any call is

app.<DialogName>.<ControlName>.<method>(<params>)

In your case it should look like

app.Dialog.About.click()

If you need more realistic click, please use click_input() which moves cursor and clicks the control as user. click() only sends WM_CLICK and it's less reliable also.

print_control_identifiers() method prints the following information:

<ControlType> - '<Name a la WindowText>' (<rectangle>)
                possible names which are most likely useful for object attribute access

Mentioned code is equivalent to the following:

app.window(best_match='Dialog', top_level_only=True).child_window(best_match='About').click()

pywinauto simplifies such constructions by overriding __getattribute__ method.

like image 163
Vasily Ryabov Avatar answered Sep 20 '22 11:09

Vasily Ryabov