рдЧрддрд┐рд╢реАрд▓ (рдЧреИрд░-рд░реИрдЦрд┐рдХ) рдЬреАрдпреВрдЖрдИ рдкрд░реАрдХреНрд╖рдг

рдХреНрдпрд╛ рд╣реИ

рдЬреАрдпреВрдЖрдИ рддрддреНрд╡реЛрдВ рдкрд░ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдХреНрд░рдо рдореЗрдВ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд░рдирд╛ред

рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рд╣реИ?

рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╡реНрдпрдХреНрддрд┐ рд╣реЛрдореЛ рд╕реЗрдкрд┐рдпрдиреНрд╕ рд╣реИ, рдЕрд░реНрдерд╛рддред рдЙрд╕рдХреЗ рдкрд╛рд╕ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдмреБрджреНрдзрд┐ рд╣реИред рдпрд╣ рдмрд╣реБрдд рд╣реА рдмреБрджреНрдзрд┐рдорд╛рдиреА рдХреЛ рд░реЛрдХрддрд╛ рд╣реИ (рдмрд╣реБрдд рд╣реА рдХрдо, рд▓реЗрдХрд┐рди рд░реЛрдХрддрд╛ рд╣реИ) рдЙрд╕реЗ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рд╕реЗ рдЬреБрдбрд╝реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ "рдмреЗрддреБрдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░" рдХреЛ рдЦреЛрдЬрдиреЗ рд╕реЗ рд░реЛрдХрддрд╛ рд╣реИред рд╡рд╣ рдХреЗрд╡рд▓ рдРрд╕реА рдЕрддрд╛рд░реНрдХрд┐рдХ рд╕реНрдерд┐рддрд┐ рдХреА рдХрд▓реНрдкрдирд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдорд╛рддреНрд░рд╛ рдореЗрдВ QA рд╕реЗ рдмрд╣реБрдд рдмреЗрд╣рддрд░ рд╣реИ рдФрд░ IQ рдореЗрдВ рдЙрд╕рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рдиреАрдЪ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдмрд╣реБрдд рдХрдо рдирд╣реАрдВ рд╣реИред
рддреЛ, рдХреНрдпрд╛, рдореБрдХреНрдд рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдФрд░ рдЗрдЪреНрдЫрд╛ рд╣реЛрдиреЗ рд╕реЗ, рд╣рдореЗрдВ рдРрд╕реА рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрд╛рдп рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХрддрд╛ рд╣реИ? - рдХреБрдЫ рдирд╣реАрдВред
рдЕрдм рд╣рдо рдЙрди рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рддреИрдпрд╛рд░ рдХрд░реЗрдВрдЧреЗ рдЬрд┐рдирдореЗрдВ рдмрдЯрди рдкрд░ "рдиреБрдХреАрд▓реЗ рдЖрд╡рд░рдг" рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ:

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЗрд╕ рдЖрд▓реЗрдЦ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдкрд░реАрдХреНрд╖рдг рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдореМрдЬреВрджрд╛ рдЬреАрдпреВрдЖрдИ рдкрд░реАрдХреНрд╖рдг рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрддред рдХреЗрд╡рд▓ рдмрдЯрди рдХреЗ рдЕрд░рд╛рдЬрдХ "рдХреНрд▓рд┐рдХ" рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рдирд╛ рдХрдо рд╕реЗ рдХрдо рдмреЗрд╡рдХреВрдлреА рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ рдФрд░ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ, рдЗрд╕рдХрд╛ рдХреЛрдИ рд╕рддреНрдпрд╛рдкрди рдирд╣реАрдВ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдкрд╣рд▓реЗ рд╡рд┐рдХрд▓реНрдк рдХреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рдирдХрд╛рд░рд╛рддреНрдордХ рд╕реНрдерд┐рд░рддрд╛ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рджреВрд╕рд░рд╛ рдЕрдирдВрдд рд╕рдордп рдкрд░ рд╕рдмрд╕реЗ рдкреНрд░рднрд╛рд╡реА рд╣реИ, рдЬреЛ рдЕрдХреНрд╕рд░ рдЕрд╕рдВрднрд╡ рд╣реЛрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдПрдХ рдорд╛рдк рдЕрд╡рдзрд┐ рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╣реБрдП, рд╡реНрдпрдХреНрддрд┐ рдХреЛ рдЖрд╡реЗрджрди рдХреА рдЬрдЯрд┐рд▓рддрд╛, рдЗрд╕рдХреЗ рдкреНрд░рдХрд╛рд░ рдФрд░ рдЙрджреНрджреЗрд╢реНрдп рд╕реЗ рдЖрдЧреЗ рдмрдврд╝рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕рдВрднрд╡рддрдГ "рдЧреИрд░-рд╕рд░реНрд╡рд░" рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рджреЛ рдмрдЯрди рдФрд░ 24 рдШрдВрдЯреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЪреЗрдХрдмреЙрдХреНрд╕ рд╕реЗ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддрд╛ рд╣реИ, рдЬреЛ рдХреБрдЫ рдХреЛ рджреЛ рд╕реЗ рдЧреБрдгрд╛ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдЖрдзреЗ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддрд╛ рд╣реИред

рд╣рдо рдЗрд╕реЗ рдХреИрд╕реЗ рдХрд░реЗрдВрдЧреЗ?

рдирд┐рдореНрди рд╡рд┐рд╡рд░рдг рд╡рд┐рдВрдбреЛрдЬ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдкрд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдЕрднрд┐рдкреНрд░реЗрдд рд╣реИред
рдореИрдВ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдЕрдЬрдЧрд░ + рдкрд╛рдЗрд╡рд┐рдиреБрдЯреЛ рдмрдВрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЦрд┐рдбрд╝рдХреА рддрддреНрд╡реЛрдВ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдкрд╛рдЗрд╡рд┐рдиреНрдпреВрдЯреЛ рдХреА рдХреБрдЫ рд╕реАрдорд╛рдПрдВ рд╣реИрдВ, рдпрд╣ рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ рдХрд╣реВрдВ рддреЛ рдореБрдЭреЗ рдХреЛрдИ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рджрд┐рдЦрддрд╛ред рдореЗрд░реЗ рд▓рд┐рдП рдкрд░рд┐рдЪрд┐рдд рд╕рднреА GUI рдкрд░реАрдХреНрд╖рдг рд╕реНрд╡рдЪрд╛рд▓рди рдЙрдкрдХрд░рдг рдореЗрдВ рдиреАрдЪреЗ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рдЧрддрд┐рд╢реАрд▓рддрд╛ рдирд╣реАрдВ рд╣реИ - рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрд░реАрдХреНрд╖рдг рдХреЗ рд╕рдордп, рдирд┐рдпрдВрддреНрд░рдгреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ, рдЙрдирдХреЗ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдХрд░реЗрдВ рдФрд░ рдПрдХ рд╕реНрд╡реАрдХрд╛рд░реНрдп рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд░реЗрдВред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдкрд╛рдпрдерди рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдФрд░ рдЙрд╕рдХреЗ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдХрдо рди рд╕рдордЭреЗрдВред рдпрд╣рд╛рдВ рдЖрдк рдПрдХ рд╡реАрдбрд┐рдпреЛ рд╢реВрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд╕реАрдкреАрдпреВ рдФрд░ рдПрдХ рд╕рдВрджреЗрд╢ рдХреЛ рдорд╛рдк рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдВ рдЖрдкрдХреЛ рдЬрд╝рд░реВрд░рдд рд╣реИ, рдХрд┐рд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рднреЗрдЬреЗрдВ ...

рд╣рдореЗрдВ рдХреНрдпрд╛ рдЪрд╛рд╣рд┐рдП?


рдореИрдВ SWAPY рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рднреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛, рдирд┐рдпрдВрддреНрд░рдг рдХреЗ рдЧреБрдгреЛрдВ рдХреЛ рджреЗрдЦрдирд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ, рдФрд░ рдпрд╣ pywinauto рдХреЗ рд▓рд┐рдП рдХреЛрдб рднреА рдмрдирд╛рддрд╛ рд╣реИред рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдкрд╛рдЗрд╡рд┐рдиреНрдпреВрдЯреЛ рдЖрдкрдХреЗ рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП рдирд┐рдпрдВрддреНрд░рдг рджреЗрдЦрддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред

рдкрд░реАрдХреНрд╖рдг рд╡рд┐рдирд┐рд░реНрджреЗрд╢

  1. рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд┐рдВрдбреЛ рд▓реЙрдиреНрдЪ рдХрд░реЗрдВред
  2. рдЙрдкрд▓рдмреНрдз рдирд┐рдпрдВрддреНрд░рдг рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ (рд╡рд┐рдВрдбреЛ рдмрдВрдж рдХрд░реЗрдВ)ред
  3. рдлреЗрд▓ рдорд╛рдкрджрдВрдб рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВред
  4. рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╕рдордп рдХреЗ рд▓рд┐рдП рдЪрд░рдг 1 рд╕реЗ 3 рджреЛрд╣рд░рд╛рдПрдВред
  5. рдЗрд╕ рд╕рдордп рдХреЗ рдЕрдВрдд рдореЗрдВ, рдкрд░реАрдХреНрд╖рдг рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред

рдЕрд╕рдлрд▓ рдорд╛рдирджрдВрдб - рдПрдХ рд╢рд░реНрдд рдЬрд┐рд╕рдХреЗ рддрд╣рдд рдПрдХ рдкрд░реАрдХреНрд╖рдг рд╡рд┐рдлрд▓ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдХреНрд░реИрд╢ рд░рд┐рдкреЛрд░реНрдЯ рд╡рд┐рдВрдбреЛ рдЪрд▓ рд░рд╣реА рд╣реИ, рддреЛ рдЗрдВрдЯрд░рдиреЗрдЯ рдЬрд╡рд╛рдм рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ, рдЖрджрд┐ред рдкрд░реАрдХреНрд╖рдг рдХреЛ рдХрд┐рд╕реА рднреА рдирд┐рд╖реНрдкрд╛рджрди (рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд╕реНрдерд┐рддрд┐) рдореЗрдВ рд╡рд┐рдлрд▓ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред

рдиреБрдХрд╕рд╛рди


рдХреЛрдб

рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХреЗ рдЕрдиреБрд╕рд╛рд░:
  1. рдмрд╛рдЗрдирд░реА рд▓реЙрдиреНрдЪ рдХрд░реЗрдВ, рдореБрдЦреНрдп рд╡рд┐рдВрдбреЛ рдХреЗ рдкреНрд░рдХрдЯ рд╣реЛрдиреЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВ:
     pywinauto.application.Application().start_(binary_path) pywinauto.timings.WaitUntil(WAIT_TIMEOUT, CHECK_INTERVAL, _check_window) 

  2. enabled_and_visible() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣рдореЗрдВ рдЙрдкрд▓рдмреНрдз рдирд┐рдпрдВрддреНрд░рдгреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдорд┐рд▓рддреА рд╣реИред рд╡рд┐рдВрдбреЛ рдХреЛ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдпрд╛ рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░реИрдВрдбрдо рддрд░реАрдХреЗ рд╕реЗ рдЪреБрдиреЗрдВ:
     if ready_contr_list and random.randint(0,len(ready_contr_list)): control = random.choice(ready_contr_list) print('Click on - "%s"' % control.Texts()[0].encode('unicode-escape', 'replace')) highlight_control(control) control.Click() else: try: window.Close() except: pass else: print('Close window') 

  3. рд╡рд┐рдлрд▓ рдорд╛рдкрджрдВрдбред рдХреБрдЫ рднреА рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрдпрд╛ред рд╣рдо рдПрдХ рдареВрдВрда рдбрд╛рд▓рддреЗ рд╣реИрдВ:
     if 1==0: print('') result = TEST_FAILED break 


рдиреАрдЪреЗ рдкреВрд░рд╛ рдкрд╛рдаред рдореИрдВ рдХреБрдЫ рдФрд░ рдмрд┐рдВрджреБрдУрдВ рдХреЛ рдиреЛрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛:
  1. make_action рдЕрдм рддрдХ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рдПрдВ рдХреНрд▓рд┐рдХ рдХреЗ рд╕рд┐рдЧреНрдирд▓ рдХреЛ рдирд┐рдпрдВрддреНрд░рдг рдореЗрдВ рднреЗрдЬ рд╕рдХрддрд╛ рд╣реИ (рдпрд╛ рд╡рд┐рдВрдбреЛ рдмрдВрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ)ред рдпрджрд┐ рд╡рд┐рд╖рдп рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ, рддреЛ рддрд░реНрдХ рдХреЛ рдЬрдЯрд┐рд▓ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛ред
  2. highlight_control рд╕рдХреНрд░рд┐рдп рдирд┐рдпрдВрддреНрд░рдг рдкрд░ highlight_control рдбрд╛рд▓рддрд╛ рд╣реИред рдмрд╕ рд╕реБрдВрджрд░ рд╣реИред
  3. рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдпрд╣ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛:
    • рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдкрдеред рдпрд╣ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрднрд╡ рд╣реИ:
      BINARY_PATH = r'"C:\path\app.exe" тАУparams 1 2 3'
    • рдореБрдЦреНрдп рд╡рд┐рдВрдбреЛ рдХреЗ рд╢реАрд░реНрд╖рдХ рдмрд╛рд░ рдХреЗ рд▓рд┐рдП рдирд┐рдпрдорд┐рддрддрд╛:
      TITLE_RE = 'My app - .*'
    • рдореБрдЦреНрдп рдЦрд┐рдбрд╝рдХреА рдХрд╛ рд╡рд░реНрдЧред рд╣рдо SWAPY рдореЗрдВ рджреЗрдЦрддреЗ рд╣реИрдВ :
      CLASS_NAME = '#32770'


рдкрд░рд┐рдгрд╛рдо

рдореВрд▓ Windows RDP рдХреНрд▓рд╛рдЗрдВрдЯ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛ред
рдХреЗрд╡рд▓ рдПрдХ рдШрдВрдЯреЗ рдореЗрдВ, рд╣рдо рдЖрд░рдбреАрдкреА рдХреНрд▓рд╛рдЗрдВрдЯ рдХреА рджреБрд░реНрдШрдЯрдирд╛ рдХреЛ рдкрдХрдбрд╝рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣реЗред рд╕рдлрд▓рддрд╛? - рд╢рд╛рдпрджред рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рджреЛрд╣рд░рд╛рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рдерд╛ред
рдлрд┐рд░ рднреА, рдХрд┐рд╕реА рдиреЗ рдЕрднреА рддрдХ рдбрдВрдк рдХреЛ рд░рджреНрдж рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдПрдХ рд╢рд╡ рдкрд░реАрдХреНрд╖рд╛ рджрд┐рдЦрд╛рдПрдЧреА ...

рдкреВрд░реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ:

 import pywinauto import random import thread import time import sys ''' GUI dynamic testing ''' TEST_FAILED = 1 TEST_PASSED = 0 TEST_EXEC_TIME = 60 * 60 WAIT_TIMEOUT = 30 CHECK_INTERVAL = 0.2 BINARY_PATH = r'"C:\WINDOWS\system32\mstsc.exe"' TITLE_RE = 'Remote Desktop Connection' CLASS_NAME = '#32770' def _check_window(): ''' Check window is opened ''' try: pywinauto.findwindows.find_windows(title_re=TITLE_RE, class_name=CLASS_NAME)[0] except: return False else: return True def start_binary(binary_path): ''' Start a binary, wait for window opens ''' if not _check_window(): pywinauto.application.Application().start_(binary_path) pywinauto.timings.WaitUntil(WAIT_TIMEOUT, CHECK_INTERVAL, _check_window) return 0 def get_top_window(title_re, class_name): ''' Return the top window of the binary ''' if not _check_window(): start_binary(BINARY_PATH) app = pywinauto.application.Application() try: app.Connect_(title_re=TITLE_RE, class_name=CLASS_NAME) except pywinauto.findwindows.WindowAmbiguousError: app.Connect_(title_re=TITLE_RE, class_name=CLASS_NAME, active_only=True) return app.top_window_() def enabled_and_visible(all_conrt_list): ''' Return list of ready for action controls ''' ready_contr_list = [] for contr in all_conrt_list: if contr.IsEnabled() and contr.IsVisible(): ready_contr_list.append(contr) return ready_contr_list def highlight_control(control): ''' Highlight control ''' def _highlight_control(control, repeat = 1): while repeat > 0: repeat -= 1 control.DrawOutline(thickness=1) time.sleep(0.7) control.DrawOutline(colour=0xffffff, thickness=1) time.sleep(0.4) thread.start_new_thread(_highlight_control,(control,3)) return 0 def make_action(window): ''' Make action on a control or close a window ''' all_conrt_list = window.Children() ready_contr_list = enabled_and_visible(all_conrt_list) if ready_contr_list and random.randint(0,len(ready_contr_list)): control = random.choice(ready_contr_list) print('Click on - "%s"' % control.Texts()[0].encode('unicode-escape', 'replace')) highlight_control(control) control.Click() else: try: window.Close() except: pass else: print('Close window') def main(): ''' main section ''' start_time = time.time() result = -1 try: #start testig build start_binary(BINARY_PATH) #testing cycle while (time.time() - start_time) < TEST_EXEC_TIME: #get top window window = get_top_window(TITLE_RE, CLASS_NAME) #make an action make_action(window) #check fail criteria if 1==0: print('') result = TEST_FAILED break else: result = TEST_PASSED print('Test passed') except Exception, e: result = TEST_FAILED print('Test failed.\n Exception %s' % e) sys.exit(result) if __name__ == '__main__': main() 

Source: https://habr.com/ru/post/In138963/


All Articles