def testRunTestsWithReference(self): "Add a ref control, get the bugs and validate that the hande " from pywinauto import controlproperties ref_controls = [controlproperties.ControlProps(ctrl) for ctrl in XMLHelpers.ReadPropertiesFromFile("ref_controls.xml")] bugs = self.calc.RunTests(ref_controls = ref_controls) from pywinauto import tests tests.print_bugs(bugs) from pywinauto.controls.HwndWrapper import HwndWrapper self.assertEquals(True, isinstance(bugs[0][0][0], HwndWrapper))
def run_notepad(): """Run notepad and do some small stuff with it""" print("Run with option 'language' e.g. notepad_fast.py language to use") print("application data. This should work on any language Windows/Notepad") print() print("Trying fast timing settings - it's possible these won't work") print("if pywinauto tries to access a window that is not accessible yet") # use fast timings - but allow to wait for windows a long time Timings.Fast() Timings.window_find_timeout = 10 start = time.time() run_with_appdata = False if len(sys.argv) > 1 and sys.argv[1].lower() == 'language': run_with_appdata = True scriptdir = os.path.split(os.path.abspath(__file__))[0] if run_with_appdata: print("\nRunning this script so it will load application data and run") print("against any lanuguage version of Notepad/Windows") # make sure that the app data gets read from the same folder as # the script app = application.Application( os.path.join(scriptdir, "Notepad_fast.pkl")) else: app = application.Application() ## for distribution we don't want to connect to anybodies application ## because we may mess up something they are working on! #try: # app.connect_(path = r"c:\windows\system32\notepad.exe") #except application.ProcessNotFoundError: # app.start_(r"c:\windows\system32\notepad.exe") app.start(r"notepad.exe") app.Notepad.menu_select("File->PageSetup") # ----- Page Setup Dialog ---- # Select the 4th combobox item app.PageSetupDlg.SizeComboBox.select(4) # Select the 'Letter' combobox item or the Letter try: app.PageSetupDlg.SizeComboBox.select("Letter") except ValueError: app.PageSetupDlg.SizeComboBox.select('Letter (8.5" x 11")') app.PageSetupDlg.SizeComboBox.select(2) # run some tests on the Dialog. List of available tests: # "AllControls", # "AsianHotkey", # "ComboBoxDroppedHeight", # "CompareToRefFont", # "LeadTrailSpaces", # "MiscValues", # "Missalignment", # "MissingExtraString", # "Overlapping", # "RepeatedHotkey", # "Translation", # "Truncation", bugs = app.PageSetupDlg.run_tests('RepeatedHotkey Truncation') # if there are any bugs they will be printed to the console # and the controls will be highlighted tests.print_bugs(bugs) # ----- Next Page Setup Dialog ---- app.PageSetupDlg.Printer.click() # do some radio button clicks # Open the Connect to printer dialog so we can # try out checking/unchecking a checkbox app.PageSetupDlg.Network.click() # ----- Connect To Printer Dialog ---- # Select a checkbox app.ConnectToPrinter.ExpandByDefault.check() app.ConnectToPrinter.ExpandByDefault.uncheck() # try doing the same by using click app.ConnectToPrinter.ExpandByDefault.click() app.ConnectToPrinter.ExpandByDefault.click() # close the dialog app.ConnectToPrinter.Cancel.close_click() # ----- 2nd Page Setup Dialog again ---- app.PageSetupDlg.Properties.click() doc_props = app.window(title_re = ".*Properties$") doc_props.wait('exists', timeout=40) # # # ----- Document Properties Dialog ---- # # some tab control selections # # Two ways of selecting tabs with indices... # doc_props.TabCtrl.select(0) # doc_props.TabCtrl.select(1) # try: # doc_props.TabCtrl.select(2) # except IndexError: # # not all users have 3 tabs in this dialog # pass # # # or with text... # #doc_props.TabCtrl.select("PaperQuality") # doc_props.TabCtrl.select(1) # # try: # #doc_props.TabCtrl.select("JobRetention") # doc_props.TabCtrl.select("3") # except MatchError: # # some people do not have the "Job Retention" tab # pass # # doc_props.TabCtrl.select("Finishing") # #doc_props.TabCtrl.select(0) # # # do some radio button clicks # doc_props.RotatedLandscape.click() # doc_props.BackToFront.click() # doc_props.FlipOnShortEdge.click() # # doc_props.Portrait.click() # doc_props._None.click() # #doc_props.FrontToBack.click() # # # open the Advanced options dialog in two steps # advbutton = doc_props.Advanced # advbutton.click() # # # close the 4 windows # # # ----- Advanced Options Dialog ---- # app.window(title_re = ".* Advanced Options").Ok.click() # ----- Document Properties Dialog again ---- doc_props.Cancel.close_click() # for some reason my current printer driver # window does not close cleanly :( if doc_props.Cancel.Exists(): doc_props.OK.close_click() # ----- 2nd Page Setup Dialog again ---- app.PageSetupDlg.OK.close_click() # ----- Page Setup Dialog ---- app.PageSetupDlg.Ok.close_click() # type some text - note that extended characters ARE allowed app.Notepad.Edit.set_edit_text(u"I am typing s\xe4me text to Notepad\r\n\r\n" "And then I am going to quit") app.Notepad.Edit.right_click() app.Popup.menu_item("Right To Left Reading Order").click() #app.PopupMenu.menu_select("Paste", app.Notepad.ctrl_()) #app.Notepad.Edit.right_click() #app.PopupMenu.menu_select( # "Right To Left Reading Order", app.Notepad.ctrl_()) #app.PopupMenu.menu_select( # "Show unicode control characters", app.Notepad.ctrl_()) #time.sleep(1) #app.Notepad.Edit.right_click() #app.PopupMenu.menu_select("Right To Left Reading Order", app.Notepad.ctrl_()) #time.sleep(1) #app.Notepad.Edit.right_click() #app.PopupMenu.menu_select( # "Insert Unicode control character -> IAFS", app.Notepad.ctrl_()) #time.sleep(1) #app.Notepad.Edit.type_keys("{ESC}") # the following shows that Sendtext does not accept # accented characters - but does allow 'control' characters app.Notepad.Edit.type_keys(u"{END}{ENTER}SendText d\xf6\xe9s " u"s\xfcpp\xf4rt \xe0cce\xf1ted characters!!!", with_spaces = True) # Try and save app.Notepad.menu_select("File->SaveAs") app.SaveAs.EncodingComboBox.select("UTF-8") app.SaveAs.FileNameEdit.set_edit_text("Example-utf8.txt") app.SaveAs.Save.close_click() # my machine has a weird problem - when connected to the network # the SaveAs Dialog appears - but doing anything with it can # cause a LONG delay - the easiest thing is to just wait # until the dialog is no longer active # - Dialog might just be gone - because click worked # - dialog might be waiting to disappear # so can't wait for next dialog or for it to be disabled # - dialog might be waiting to display message box so can't wait # for it to be gone or for the main dialog to be enabled. # while the dialog exists wait upto 30 seconds (and yes it can # take that long on my computer sometimes :-( ) app.SaveAsDialog2.Cancel.wait_not('enabled') # If file exists - it asks you if you want to overwrite try: app.SaveAs.Yes.wait('exists').close_click() except pywinauto.MatchError: print('Skip overwriting...') # exit notepad app.Notepad.menu_select("File->Exit") if not run_with_appdata: app.WriteAppData(os.path.join(scriptdir, "Notepad_fast.pkl")) print("That took %.3f to run"% (time.time() - start))
def RunNotepad(): "Run notepad and do some small stuff with it" start = time.time() app = application.Application() ## for distribution we don't want to connect to anybodies application ## because we may mess up something they are working on! #try: # app.connect_(path = r"c:\windows\system32\notepad.exe") #except application.ProcessNotFoundError: # app.start_(r"c:\windows\system32\notepad.exe") app.start_(r"notepad.exe") app.Notepad.MenuSelect("File->PageSetup") # ----- Page Setup Dialog ---- # Select the 4th combobox item app.PageSetupDlg.SizeComboBox.Select(4) # Select the 'Letter' combobox item or the Letter try: app.PageSetupDlg.SizeComboBox.Select("Letter") except ValueError: app.PageSetupDlg.SizeComboBox.Select('Letter (8.5" x 11")') app.PageSetupDlg.SizeComboBox.Select(2) # run some tests on the Dialog. List of available tests: # "AllControls", # "AsianHotkey", # "ComboBoxDroppedHeight", # "CompareToRefFont", # "LeadTrailSpaces", # "MiscValues", # "Missalignment", # "MissingExtraString", # "Overlapping", # "RepeatedHotkey", # "Translation", # "Truncation", bugs = app.PageSetupDlg.RunTests('RepeatedHotkey Truncation') # if there are any bugs they will be printed to the console # and the controls will be highlighted tests.print_bugs(bugs) # ----- Next Page Setup Dialog ---- app.PageSetupDlg.Printer.Click() # do some radio button clicks # Open the Connect to printer dialog so we can # try out checking/unchecking a checkbox app.PageSetupDlg.Network.Click() # ----- Connect To Printer Dialog ---- # Select a checkbox app.ConnectToPrinter.ExpandByDefault.Check() app.ConnectToPrinter.ExpandByDefault.UnCheck() # try doing the same by using click app.ConnectToPrinter.ExpandByDefault.Click() app.ConnectToPrinter.ExpandByDefault.Click() # close the dialog app.ConnectToPrinter.Cancel.CloseClick() # ----- 2nd Page Setup Dialog again ---- app.PageSetupDlg.Properties.Click() doc_props = app.window_(title_re = ".*Properties$") doc_props.Wait('exists', timeout = 40) # ----- Document Properties Dialog ---- # some tab control selections # Two ways of selecting tabs with indices... doc_props.TabCtrl.Select(0) doc_props.TabCtrl.Select(1) try: doc_props.TabCtrl.Select(2) except IndexError: # not all users have 3 tabs in this dialog pass # or with text... doc_props.TabCtrl.Select("PaperQuality") try: doc_props.TabCtrl.Select("JobRetention") except MatchError: # some people do not have the "Job Retention" tab pass # doc_props.TabCtrl.Select("Layout") # # # do some radio button clicks # doc_props.RotatedLandscape.Click() # doc_props.BackToFront.Click() # doc_props.FlipOnShortEdge.Click() # # doc_props.Portrait.Click() # doc_props._None.Click() # doc_props.FrontToBack.Click() # # # open the Advanced options dialog in two steps # advbutton = doc_props.Advanced # advbutton.Click() # # # close the 4 windows # # # ----- Advanced Options Dialog ---- # app.window_(title_re = ".* Advanced Options").Ok.Click() # ----- Document Properties Dialog again ---- doc_props.Cancel.CloseClick() # for some reason my current printer driver # window does not close cleanly :( if doc_props.Cancel.Exists(): doc_props.OK.CloseClick() # ----- 2nd Page Setup Dialog again ---- app.PageSetupDlg.OK.CloseClick() # ----- Page Setup Dialog ---- app.PageSetupDlg.Ok.CloseClick() # type some text - note that extended characters ARE allowed app.Notepad.Edit.SetEditText("I am typing s\xe4me text to Notepad\r\n\r\n" "And then I am going to quit") app.Notepad.Edit.RightClick() app.Popup.MenuItem("Right To Left Reading Order").Click() #app.PopupMenu.MenuSelect("Paste", app.Notepad.ctrl_()) #app.Notepad.Edit.RightClick() #app.PopupMenu.MenuSelect("Right To Left Reading Order", app.Notepad.ctrl_()) #app.PopupMenu.MenuSelect("Show unicode control characters", app.Notepad.ctrl_()) #time.sleep(1) #app.Notepad.Edit.RightClick() #app.PopupMenu.MenuSelect("Right To Left Reading Order", app.Notepad.ctrl_()) #time.sleep(1) #app.Notepad.Edit.RightClick() #app.PopupMenu.MenuSelect("Insert Unicode control character -> IAFS", app.Notepad.ctrl_()) #time.sleep(1) #app.Notepad.Edit.TypeKeys("{ESC}") # the following shows that Sendtext does not accept # accented characters - but does allow 'control' characters app.Notepad.Edit.TypeKeys("{END}{ENTER}SendText d\xf6\xe9s " u"s\xfcpp\xf4rt \xe0cce\xf1ted characters!!!", with_spaces = True) # Try and save app.Notepad.MenuSelect("File->SaveAs") app.SaveAs.EncodingComboBox.Select("UTF-8") app.SaveAs.FileNameEdit.SetEditText("Example-utf8.txt") app.SaveAs.Save.CloseClick() # my machine has a weird problem - when connected to the network # the SaveAs Dialog appears - but doing anything with it can # cause a LONG delay - the easiest thing is to just wait # until the dialog is no longer active # - Dialog might just be gone - because click worked # - dialog might be waiting to disappear # so can't wait for next dialog or for it to be disabled # - dialog might be waiting to display message box so can't wait # for it to be gone or for the main dialog to be enabled. # while the dialog exists wait upto 30 seconds (and yes it can # take that long on my computer sometimes :-( ) app.SaveAsDialog2.Cancel.WaitNot('enabled') # If file exists - it asks you if you want to overwrite try: app.SaveAs.Yes.Wait('exists').CloseClick() except pywinauto.MatchError: pass # exit notepad app.Notepad.MenuSelect("File->Exit") #if not run_with_appdata: # app.WriteAppData(os.path.join(scriptdir, "Notepad_fast.pkl")) print("That took %.3f to run"% (time.time() - start))
def run_notepad(): """Run notepad and do some small stuff with it""" start = time.time() app = application.Application() ## for distribution we don't want to connect to anybodies application ## because we may mess up something they are working on! #try: # app.connect_(path = r"c:\windows\system32\notepad.exe") #except application.ProcessNotFoundError: # app.start_(r"c:\windows\system32\notepad.exe") app.start(r"notepad.exe") app.Notepad.menu_select("File->PageSetup") # ----- Page Setup Dialog ---- # Select the 4th combobox item app.PageSetupDlg.SizeComboBox.select(4) # Select the 'Letter' combobox item or the Letter try: app.PageSetupDlg.SizeComboBox.select("Letter") except ValueError: app.PageSetupDlg.SizeComboBox.select('Letter (8.5" x 11")') app.PageSetupDlg.SizeComboBox.select(2) # run some tests on the Dialog. List of available tests: # "AllControls", # "AsianHotkey", # "ComboBoxDroppedHeight", # "CompareToRefFont", # "LeadTrailSpaces", # "MiscValues", # "Missalignment", # "MissingExtraString", # "Overlapping", # "RepeatedHotkey", # "Translation", # "Truncation", bugs = app.PageSetupDlg.run_tests('RepeatedHotkey Truncation') # if there are any bugs they will be printed to the console # and the controls will be highlighted tests.print_bugs(bugs) # ----- Next Page Setup Dialog ---- app.PageSetupDlg.Printer.click() # do some radio button clicks # Open the Connect to printer dialog so we can # try out checking/unchecking a checkbox app.PageSetupDlg.Network.click() # ----- Connect To Printer Dialog ---- # Select a checkbox app.ConnectToPrinter.ExpandByDefault.check() app.ConnectToPrinter.ExpandByDefault.uncheck() # try doing the same by using click app.ConnectToPrinter.ExpandByDefault.click() app.ConnectToPrinter.ExpandByDefault.click() # close the dialog app.ConnectToPrinter.Cancel.close_click() # ----- 2nd Page Setup Dialog again ---- app.PageSetupDlg.Properties.click() doc_props = app.window(title_re = ".*Properties$") doc_props.wait('exists', timeout=40) # ----- Document Properties Dialog ---- # some tab control selections # Two ways of selecting tabs with indices... doc_props.TabCtrl.select(0) doc_props.TabCtrl.select(1) try: doc_props.TabCtrl.select(2) except IndexError: # not all users have 3 tabs in this dialog print('Skip 3rd tab selection...') # or with text... doc_props.TabCtrl.select("PaperQuality") try: doc_props.TabCtrl.select("JobRetention") except MatchError: # some people do not have the "Job Retention" tab print('Skip "Job Retention" tab...') # doc_props.TabCtrl.select("Layout") # # # do some radio button clicks # doc_props.RotatedLandscape.click() # doc_props.BackToFront.click() # doc_props.FlipOnShortEdge.click() # # doc_props.Portrait.click() # doc_props._None.click() # doc_props.FrontToBack.click() # # # open the Advanced options dialog in two steps # advbutton = doc_props.Advanced # advbutton.click() # # # close the 4 windows # # # ----- Advanced Options Dialog ---- # app.window(title_re = ".* Advanced Options").Ok.click() # ----- Document Properties Dialog again ---- doc_props.Cancel.close_click() # for some reason my current printer driver # window does not close cleanly :( if doc_props.Cancel.Exists(): doc_props.OK.close_click() # ----- 2nd Page Setup Dialog again ---- app.PageSetupDlg.OK.close_click() # ----- Page Setup Dialog ---- app.PageSetupDlg.Ok.close_click() # type some text - note that extended characters ARE allowed app.Notepad.Edit.set_edit_text("I am typing s\xe4me text to Notepad\r\n\r\n" "And then I am going to quit") app.Notepad.Edit.right_click() app.Popup.menu_item("Right To Left Reading Order").click() #app.PopupMenu.menu_select("Paste", app.Notepad.ctrl_()) #app.Notepad.Edit.right_click() #app.PopupMenu.menu_select("Right To Left Reading Order", app.Notepad.ctrl_()) #app.PopupMenu.menu_select("Show unicode control characters", app.Notepad.ctrl_()) #time.sleep(1) #app.Notepad.Edit.right_click() #app.PopupMenu.menu_select("Right To Left Reading Order", app.Notepad.ctrl_()) #time.sleep(1) #app.Notepad.Edit.right_click() #app.PopupMenu.menu_select("Insert Unicode control character -> IAFS", app.Notepad.ctrl_()) #time.sleep(1) #app.Notepad.Edit.type_keys("{ESC}") # the following shows that Sendtext does not accept # accented characters - but does allow 'control' characters app.Notepad.Edit.type_keys("{END}{ENTER}SendText d\xf6\xe9s " u"s\xfcpp\xf4rt \xe0cce\xf1ted characters!!!", with_spaces = True) # Try and save app.Notepad.menu_select("File->SaveAs") app.SaveAs.EncodingComboBox.select("UTF-8") app.SaveAs.FileNameEdit.set_edit_text("Example-utf8.txt") app.SaveAs.Save.close_click() # my machine has a weird problem - when connected to the network # the SaveAs Dialog appears - but doing anything with it can # cause a LONG delay - the easiest thing is to just wait # until the dialog is no longer active # - Dialog might just be gone - because click worked # - dialog might be waiting to disappear # so can't wait for next dialog or for it to be disabled # - dialog might be waiting to display message box so can't wait # for it to be gone or for the main dialog to be enabled. # while the dialog exists wait upto 30 seconds (and yes it can # take that long on my computer sometimes :-( ) app.SaveAsDialog2.Cancel.wait_not('enabled') # If file exists - it asks you if you want to overwrite try: app.SaveAs.Yes.wait('exists').close_click() except MatchError: print('Skip overwriting...') # exit notepad app.Notepad.menu_select("File->Exit") #if not run_with_appdata: # app.WriteAppData(os.path.join(scriptdir, "Notepad_fast.pkl")) print("That took %.3f to run"% (time.time() - start))