Hi everyone,

we just released the new version of our GUI automation tool with the improved 
API: http://www.getautoma.com/blog/Automa-1-5-1-window-switching. Thank you 
again for your help.

Best regards,
Michael

On Monday, March 25, 2013 8:29:23 PM UTC+1, Michael Herrmann wrote:
> Hello everyone, 
> 
> 
> 
> my name is Michael, I'm the lead developer of a Python GUI automation library 
> for Windows called Automa: http://www.getautoma.com. We want to add some 
> features to our library but are unsure how to best expose them via our API. 
> It would be extremely helpful for us if you could let us know which API 
> design feels "right" to you.
> 
> 
> 
> Our API already offers very simple commands for automating the GUI of a 
> Windows computer. For example:
> 
> 
> 
>       from automa.api import *
> 
>       start("Notepad")
> 
>       write("Hello World!")
> 
>       press(CTRL + 's')
> 
>       write("test.txt", into="File name")
> 
>       click("Save")
> 
>       click("Close")
> 
> 
> 
> When you execute this script, Automa starts Notepad and simulates key 
> strokes, mouse movements and clicks to perform the required commands. At the 
> moment, each action is performed in the currently active window. 
> 
> 
> 
> We do not (yet) have a functionality that allows you to explicitly switch to 
> a specific window. Such a functionality would for instance make it possible 
> to open two Notepad windows using the start(...) command, and copy text 
> between them.
> 
> 
> 
> One API design would be to have our start(...) function return a "Window" 
> (say) object, whose methods allow you to do the same operations as the global 
> functions write(...), press(...), click(...) etc., but in the respective 
> window. In this design, the example of operating two Notepad windows could be 
> written as
> 
> 
> 
>       notepad_1 = start("Notepad")
> 
>       notepad_2 = start("Notepad")
> 
>       notepad_1.write("Hello World!")
> 
>       notepad_1.press(CTRL + 'a', CTRL + 'c')
> 
>       notepad_2.press(CTRL + 'v')
> 
> 
> 
> The problem with this design is that it effectively duplicates our API: We 
> want to keep our "global" functions because they are so easy to read. If we 
> add methods to a new "Window" class that do more or less the same, we feel 
> that we are violating Python's principle that "There should be one - and 
> preferably only one - obvious way to do it."
> 
> 
> 
> An alternative design would be to make the window switching an explicit 
> action. One way of doing this would be to add a new global function, say 
> "switch_to" or "activate", that takes a single parameter that identifies the 
> window to be switched to. We could still have start(...) return a Window 
> object, that could then be passed to our function:
> 
> 
> 
>       notepad_1 = start("Notepad")
> 
>       notepad_2 = start("Notepad")
> 
>       switch_to(notepad_1)
> 
>       write("Hello World!")
> 
>       press(CTRL + 'a', CTRL + 'c')
> 
>       switch_to(notepad_2)
> 
>       press(CTRL + 'v')
> 
> 
> 
> Maybe our Window objects could also be used as context managers:
> 
> 
> 
>       notepad_1 = start("Notepad")
> 
>       notepad_2 = start("Notepad")
> 
>       with notepad_1:
> 
>               write("Hello World!")
> 
>               press(CTRL + 'a', CTRL + 'c')
> 
>       with notepad_2:
> 
>               press(CTRL + 'v')
> 
> 
> 
> As a final idea, switching could also be done as a method of the Window class:
> 
> 
> 
>       notepad_1 = start("Notepad")
> 
>       notepad_2 = start("Notepad")
> 
>       notepad_1.activate()
> 
>       write("Hello World!")
> 
>       press(CTRL + 'a', CTRL + 'c')
> 
>       notepad_2.activate()
> 
>       press(CTRL + 'v')
> 
> 
> 
> It would be extremely helpful for us if you could let me know which way of 
> using the API you would prefer. If you opt for an explicit version, how would 
> you call the respective method? "activate" / "switch_to" / "focus" or 
> something else?
> 
> 
> 
> Thank you so much!
> 
> 
> 
> Best wishes,
> 
> Michael
-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to