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.
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.
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.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With