рдкрд░реАрдХреНрд╖рдг рдореЗрдВ рдлрди рдпрд╛ рд╡рд░реНрдЪреБрдЕрд▓ рдЗрдВрдЯреЗрд▓рд┐рдЬреЗрдВрд╕ рдХреЗ рд▓рд┐рдП рд╡реАрдХрд╛ рдХреЗ рд╕рд╛рде рд╡реЗрдм рдпреВрдЖрдИ рдХрд╛ рдкрд░реАрдХреНрд╖рдг

рд╢реБрдн рджреЛрдкрд╣рд░, рдкреНрд░рд┐рдп рд╣рд╛рдмрд░рд╛ рдкрд╛рдардХреЛрдВред рдЗрд╕ рдмрд╛рд░ рдЖрдИрдЯреА рд╕реЗрдХреНрд╢рди рдореЗрдВ, рдореИрдВ рдЖрдкрдХреЗ рд╕рд╛рде рднрд╡рд┐рд╖реНрдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рд╕рдкрдирд╛ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред рдЙрд╕ рдпреБрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрдм рдХреГрддреНрд░рд┐рдо рдмреБрджреНрдзрд┐ рдПрдХ рдЖрд╢реНрдЪрд░реНрдп рдирд╣реАрдВ рд╣реЛрдЧреА, рдФрд░ рд░реЛрдмреЛрдЯ рд╣рдорд╛рд░реЗ рдХрд░реАрдмреА рджреЛрд╕реНрдд рдмрди рдЬрд╛рдПрдВрдЧреЗ ...

рд▓реЗрдХрд┐рди рд╕рдкрдирд╛ рдХреНрдпреЛрдВ, рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ред рдореИрдВ рдЖрдкрдХреЛ рдРрд╕реЗ рд╣реА рдПрдХ рдкреНрд░рд╛рдгреА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмреЗрд╣рддрд░ рдмрддрд╛рддрд╛ рд╣реВрдВред

VIQA WTL - рд╡рд░реНрдЪреБрдЕрд▓ рдЗрдВрдЯреЗрд▓рд┐рдЬреЗрдВрд╕ рдХреНрд╡рд╛рд▓рд┐рдЯреА рдПрд╢реНрдпреЛрд░реЗрдВрд╕ рд╡реЗрдм рдЯреЗрд╕реНрдЯрд┐рдВрдЧ рдЯреВрд▓ , рдпрд╛ рдмрд╕ рдмрд╛рддреА рд╕реЗ рдорд┐рд▓реЗрдВ ред

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

рдЗрд╕ рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЙрдкрдХрд░рдг рдореЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рдХреНрд╖рдорддрд╛рдУрдВ рдХреА рдПрдХ рд╡рд┐рд╕реНрддреГрдд рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╣реИ рдФрд░ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд╛рддрд╛рд╡рд░рдг рдХреЗ рд▓рд┐рдП рдорд╣рд╛рди рдЕрдиреБрдХреВрд▓рдирд╢реАрд▓рддрд╛ рд╣реИ (рдЬрд┐рд╕ рдкрд░ рдЪрд░реНрдЪрд╛ рдирд╣реАрдВ рдХреА рдЬрд╛рдПрдЧреА)ред

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

рдЖрднрд╛рд╕реА рдмреБрджреНрдзрд┐


рдирд╛рдо рд╕реЗ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реВрдБред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдпрд╣ рдЬрд╛рдирдиреЗ рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реИ рдХрд┐ рд╡рд░реНрдЪреБрдЕрд▓ рдЗрдВрдЯреЗрд▓рд┐рдЬреЗрдВрд╕ рдХрд╣рд╛рдБ рд╕реЗ рдЖрддрд╛ рд╣реИ, рдФрд░ рдореБрдЭреЗ рдЗрд╕рд╕реЗ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ?
рдЫрд╡рд┐

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

рддреЛ, VI рдХреА рдореЗрд░реА рд╕рдордЭ рдореЗрдВ:
  1. рдорд╛рдирд╡ рднрд╛рд╖рд╛ред рдПрдХ рд╕реНрдорд╛рд░реНрдЯ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЬреЛ рдХрд┐рд╕реА рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд╕рд╛рде рдЙрд╕рдХреА рднрд╛рд╖рд╛ рдореЗрдВ рдмрд╛рддрдЪреАрдд рдХрд░рддрд╛ рд╣реИред
  2. рдЙрдкрдпреЛрдЧ рдореЗрдВ рдЖрд╕рд╛рдиреАред рдпрд╣ рдХрд╛рд░реНрдпрдХреНрд░рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рд╕реНрддрд░реЛрдВ (рдХрдо рдкреНрд░рд╡реЗрд╢ рд╕реАрдорд╛, рдЗрд╕рдХреЗ рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ "рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╕реНрдорд╛рд░реНрдЯ рд╣реИ)
  3. Adjustabilityред рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЬрд┐рд╕рдореЗрдВ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд╛рддрд╛рд╡рд░рдг рдХреЗ рд▓рд┐рдП рд╕реАрдЦрдиреЗ (рдЕрдиреБрдХреВрд▓рд┐рдд) рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реЛрддреА рд╣реИ (рдПрдЖрдИ рдХреЗ рд╡рд┐рдкрд░реАрдд, рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХрд┐рд╕реА рд╡реНрдпрдХреНрддрд┐ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдПрдЖрдИ рд╕реАрдЦрдиреЗ рдХреЗ рдЖрдВрдХрдбрд╝реЛрдВ рджреНрд╡рд╛рд░рд╛ рдирд╣реАрдВ)


PageObjects


PageObjects рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛, рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ, рдпрд╣ рд╕реБрдЭрд╛рд╡ рджреЗрддреА рд╣реИ рдХрд┐ рдЬрдм рд╡реЗрдм UI рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╡реЗрдм рдкреЗрдЬ рдФрд░ рддрддреНрд╡реЛрдВ рдХреЛ рдЙрди рдкрд░ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд░реВрдк рдореЗрдВ рджреЗрдЦрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдФрд░ рддрджрдиреБрд╕рд╛рд░, рдХреЛрдб рдореЗрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕рдВрд╕реНрдерд╛рдПрдВ рд╣реИрдВред

рд╕реАрдзреЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ рдХрд╣реЗрдВ, рд╕реНрдерд╛рдиреАрдп рд▓реЛрдЧреЛрдВ рдФрд░ рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рдПрдХ рдкреГрд╖реНрда рдкрд░ рдЯреИрдЧ рдХреА рддрд▓рд╛рд╢ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдЖрдкрдХреЛ рддрд╛рд░реНрдХрд┐рдХ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдПрдХ рд╡рд░реНрдЧ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ "рдмрдЯрди") рдФрд░ рдЗрд╕ рд╡рд░реНрдЧ рдХреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЯреИрдЧ рдФрд░ рд▓реЛрдХреЗрдЯрд░ рдХреЗ рд╕рд╛рде рдирд╣реАрдВред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЙрдкрд░реЛрдХреНрдд рдХрд╛ рдорддрд▓рдм рд╣реИ рдкрд░реАрдХреНрд╖рдг рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рдФрд░ рдХреЛрдб рдХреЛ рдЕрд▓рдЧ рдХрд░рдирд╛ рдЬреЛ рдЖрдкрдХреА рд╕рд╛рдЗрдЯ рдХреЗ рдкреГрд╖реНрдареЛрдВ рдкрд░ рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЙрдирдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдЙрд╕реА рд╕рдордп, рдкреЗрдЬ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЗрд╡рд▓ рдПрдХ рдЕрд╡рдзрд╛рд░рдгрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдкреЗрдЬрдлреИрдХреНрдЯреНрд░реА рдХреЛ рдЫреЛрдбрд╝рдХрд░, рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рдЧрднрдЧ рдХреЛрдИ рдЙрдкрдХрд░рдг рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ
PS рдЖрдк рдпрд╣рд╛рдВ PageObjects рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред code.google.com/p/selenium/wiki/PageObjects рдпрд╛ рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдЬрд╛рдирдХрд╛рд░реА рдЦреЛрдЬ рд╕рдХрддреЗ рд╣реИрдВред

PageObjects рдХреЗ рдЕрдиреНрдп рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди


SQA рдбреЗрдЬрд╝ 15 рдХреЙрдиреНрдлреНрд░реЗрдВрд╕ рдореЗрдВ рдмреЛрд▓рддреЗ рд╣реБрдП, рдореИрдВрдиреЗ рдПрдХ рдЕрдиреНрдп рдЯреВрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рдЬреЛ рдкреЗрдЬрдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ - рдПрдЪрдЯреАрдПрдордПрд▓рдЗрд▓рд┐рд╢ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдХрд┐, рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдЗрд╕ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдПрдХ рдиреЗрддрд╛ рд╣реИред рдФрд░ рдореИрдВрдиреЗ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдХреНрдпрд╛ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рдерд╛ рдФрд░ рдореИрдВрдиреЗ рдПрдХ рд╕рдорд╛рди рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рдврд╛рдВрдЪрд╛ рдмрдирд╛рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХреНрдпреЛрдВ рдХрд┐рдпрд╛ред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рддреБрд▓рдирд╛ рдирд╣реАрдВ рдХрд░реВрдБрдЧрд╛, рд▓реЗрдХрд┐рди рдмрд╕ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реВрдВрдЧрд╛ рдХрд┐ рд╡реАрдХрд╛ рдХреНрдпрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдореВрд▓ рдЕрд╡рдзрд╛рд░рдгрд╛рдПрдБ


рд╡рд┐рдХреА рдкрд░ рд╕рднреА рддрддреНрд╡реЛрдВ рдХреЗ рджрд┐рд▓ рдореЗрдВ Vielement рд╣реИред рд╡реЗрдмрдбреНрд░рд╛рдЗрд╡рд░ рдХреЗ рд╕реБрдкрд░ рд╡реЗрдмрдЗрд▓рдореЗрдВрдЯ рдХреЗ рд╡рд┐рдкрд░реАрдд, рдЬреЛ рд╕рднреА "рддрддреНрд╡реЛрдВ" рдХрд╛ рдорд┐рд▓рди рд╣реИ рдФрд░ рд╡рд╣ рд╕рдм рдХреБрдЫ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╡рд╣ рднреА рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдмрдЯрди рдореЗрдВ sendKeys), VIElement рд╕рднреА рддрддреНрд╡реЛрдВ рдХрд╛ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ (рдЪреМрд░рд╛рд╣рд╛ - рд╕рднреА рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рдЧреБрдг рддрддреНрд╡реЛрдВ) рдФрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рд╕рднреА рддрддреНрд╡реЛрдВ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИред рдФрд░ рдпрд╣ рдирд╣реАрдВ рдкрддрд╛ рд╣реИ рдХрд┐ рдХреБрдЫ рднреА рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИ рдЬрдмрд░реНрджрд╕реНрдд (рд╕рднреА VIElement рддрд░реАрдХреЗ рд╣рдореЗрд╢рд╛ рд▓рд╛рдЧреВ рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рдкрд░рд┐рдгрд╛рдо рджреЗрдВрдЧреЗ)ред

рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдХрд╣рд╛, рд╡реАрдХрд╛ рдкреЗрдЬрдСрдмреНрдЬреЗрдХреНрдЯ рдкреИрдЯрд░реНрди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЗрд╕реЗ рдХреБрдЫ рд╣рдж рддрдХ рдмрдврд╝рд╛рддрд╛ рд╣реИред

рд╡рд┐рдХреА рдХреЗ рдкрд╛рд╕ рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХрдХреНрд╖рд╛рдПрдВ рд╣реИрдВ рдЬреИрд╕реЗ: рд╕рд╛рдЗрдЯ (рджреГрд╢реНрдп), рдкреГрд╖реНрда (VIPage) рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрдЯрди (рдмрдЯрди), рдЪреЗрдХрдмреЙрдХреНрд╕ (рдЪреЗрдХрдмреЙрдХреНрд╕), рдкрд╛рда рдХреНрд╖реЗрддреНрд░ (рдЯреЗрдХреНрд╕реНрдЯрдлрд┐рд▓реНрдб), рдЖрджрд┐ред

рд╡рд┐рдХреА рдореЗрдВ рдХреЛрдИ рднреА рддрддреНрд╡ рдпрд╛ рддреЛ рдПрдХ рдЕрд▓рдЧ рддрд╛рд░реНрдХрд┐рдХ рддрддреНрд╡ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рддрддреНрд╡реЛрдВ рдХреЗ рдХрд┐рд╕реА рднреА рд╕реЗрдЯ рдХрд╛ рдорд┐рд▓рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЪреЗрдХрдмреЙрдХреНрд╕ рдореЗрдВ 3 рддрддреНрд╡ рд╣реЛрддреЗ рд╣реИрдВред VIPage рдореЗрдВ рдХрд┐рд╕реА рднреА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рддрддреНрд╡ рд╢рд╛рдорд┐рд▓ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ, рд╡рд┐рдХреА рдХреЗ рдкрд╛рд╕ рдмреНрд▓реЙрдХ (рдЬреИрд╕реЗ рдпрд╛рдВрдбреЗрдХреНрд╕) рдирд╣реАрдВ рд╣реИрдВред рддрддреНрд╡ рдмреНрд▓реЙрдХ рд╕рд╛рдзрд╛рд░рдг VI рддрддреНрд╡ рд╣реИрдВ рдЬрд┐рдирдореЗрдВ рдЕрдиреНрдп рддрддреНрд╡ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ ( рдЙрджрд╛рд╣рд░рдг 1 рджреЗрдЦреЗрдВ)ред

рд╕рдВрд░рдЪрдирд╛

PageObjects рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдЖрдкрдХреА рд╕рд╛рдЗрдЯ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рд╕реЗ рдЕрд▓рдЧ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдкрд░реАрдХреНрд╖рдг рд╕реНрдерд▓ рд╡рд┐рд╡рд░рдг рдХреА рд╕рдВрд░рдЪрдирд╛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:

рд╡рд┐рд╡рд░рдг рдХреЗ рд▓рд┐рдП, рдЙрджрд╛рд╣рд░рдг 2 рджреЗрдЦреЗрдВред

visite


рдореВрд▓ рддрддреНрд╡ рд╡рд┐рдЬреАрдЯ рд╣реИред рд╡рд┐рдЬрд╝рд┐рдЯ рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рд╕рд╛рдЗрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рднреА рд╕рд╛рдорд╛рдиреНрдп рдЬрд╛рдирдХрд╛рд░реА рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:
WebDriver рд╕реЗрдЯрд┐рдВрдЧреНрд╕, рдЯрд╛рдЗрдордЖрдЙрдЯ рдФрд░ рд▓реЙрдЧрд┐рдВрдЧ рд╕реЗрдЯрд┐рдВрдЧреНрд╕, рдбреЛрдореЗрди рдпреВрдЖрд░рдПрд▓ рдкрддрд╛, рдкреЗрдЬ рд╕реВрдЪреАред
рд╡рд┐рдЬрд╝рд┐рдЯ рдХреА рджреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХреНрд░рд┐рдпрд╛рдПрдВ рд╣реИрдВ: рдордирдорд╛рдирд╛ URL рдЦреЛрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЦреЛрд▓реЗрдВ рдФрд░ рдбреЛрдореЗрди URL рдХреЗ рд▓рд┐рдП OpenHomePageред

VIPage


VIPage - рдкрд░реАрдХреНрд╖рдг рдХрд┐рдП рдЧрдП рдкреГрд╖реНрда рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИред рддрддреНрд╡реЛрдВ рдФрд░ рддрддреНрд╡реЛрдВ рдХреЗ рд╕рдореВрд╣реЛрдВ рд╕реЗ рдорд┐рд▓рдХрд░ рдмрдирддрд╛ рд╣реИред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЕрдкреЗрдХреНрд╖рд┐рдд рдпреВрдЖрд░рдПрд▓ рдФрд░ рд╢реАрд░реНрд╖рдХред рд╕реЗрдЯрд┐рдВрдЧреНрд╕: рдЕрдкреЗрдХреНрд╖рд┐рдд рд╢реАрд░реНрд╖рдХ / url рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ рдпрд╛ рдирд╣реАрдВ (рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдпрджрд┐ Url рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ рдЪреЗрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЕрдиреНрдпрдерд╛ рдирд╣реАрдВред)
рддрддреНрд╡реЛрдВ

рд╕рд░рд▓

ClickableElement, TextElement, ClickableText, Button, Checkbox, Link, TextArea, TextField 


рдЖрдЗрдЯрдо рд╕реВрдЪреА

 CheckList, DropDown, RadioButtons 


рдпреМрдЧрд┐рдХ рддрддреНрд╡

рдЫрд╡рд┐ рдЖрдк рдЕрдкрдиреА рдкрд╕рдВрдж рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЖрдЗрдЯрдо рд╕рдореВрд╣ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рдкреГрд╖реНрда рдХреЗ рдкрд╛рдж рд▓реЗрдЦ рдпрд╛ рд╢реАрд░реНрд╖ рд▓реЗрдЦ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рддрддреНрд╡реЛрдВ рдХреЛ рд╕рдореВрд╣рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╛ рд▓реЙрдЧрд┐рди рдлреЙрд░реНрдо рдореЗрдВред рдЙрдирдХрд╛ рд╡рд░реНрдгрди рдХрд░реЗрдВ рдФрд░ рд╡рд┐рднрд┐рдиреНрди рдкреГрд╖реНрдареЛрдВ рдкрд░ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рд╕рднреА рдорд┐рд╢реНрд░рд┐рдд рддрддреНрд╡реЛрдВ рдХрд╛ рдПрдХ "рд╕рдВрджрд░реНрдн" рд╣реИ - html рддрддреНрд╡ рдХрд╛ рд▓реЛрдХреЗрдЯрд░ рдЬрд┐рд╕рдореЗрдВ рд╡реЗ рд╕реНрдерд┐рдд рд╣реИрдВред рдПрдХ рд╕рдореВрд╣ рдореЗрдВ рддрддреНрд╡реЛрдВ рдХреЗ рд▓реЛрдХреЗрдЯрд░ "рдЗрд╕ рддрддреНрд╡ рдХреЗ рдЕрдВрджрд░" рдЦреЛрдЬреЗ рдЬрд╛рддреЗ рд╣реИрдВред рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реБрдЖред

рдПрдХ рд▓рд╛рдЗрди рдереЛрдХ рднрд░рдирд╛


рдкрд░реАрдХреНрд╖рдг рд╕рд╛рдЗрдЯреЛрдВ рдкрд░, рдЕрдХреНрд╕рд░ рдРрд╕реЗ рдбреЗрдЯрд╛рд╕реЗрдЯ рд╣реЛрддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдХреБрдЫ рд╕рдордЭ рдореЗрдВ рдЖрдиреЗ рд╡рд╛рд▓реА рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдЗрдХрд╛рдИ рд╕реЗ рднрд░рдирд╛ рд╣реЛрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ рдкрд╛рд╕рдкреЛрд░реНрдЯ рдбреЗрдЯрд╛, рдмреИрдВрдХ рдХрд╛рд░реНрдб рдпрд╛ рд▓реЗрдирджреЗрди рдбреЗрдЯрд╛, рдЙрддреНрдкрд╛рджреЛрдВ рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝рд┐рд▓реНрдЯрд░ рдпрд╛ рд╕рд╛рдЗрдЯ рдкрд░ рдХреБрдЫ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдкреГрд╖реНрда рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

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

VIQA рдЖрдкрдХреЛ рдПрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рд▓рд╛рдЧрдд рдХреЗ рдмрд┐рдирд╛ рдЗрд╕ рдСрдкрд░реЗрд╢рди рдХреЛ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рдкреГрд╖реНрда рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реБрдП, рдХрд┐рд╕реА рднреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдЗрди рд╕рднреА рдХреНрд╖реЗрддреНрд░реЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реЗрдВ, рдФрд░ PageObjects рд╣рдореЗрдВ рд╕рдВрдХреЗрдд рджреЗрддреЗ рд╣реИрдВ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдПрдХ рдмреНрд▓реЙрдХ рдпрд╛ рдкреГрд╖реНрда рдореЗрдВ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░реЗрдВ - VIQA (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдкрд╛рд╕рдкреЛрд░реНрдЯ) рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВред рдкреНрд░рддреНрдпреЗрдХ VIElement, рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рдореЗрдВ рдЙрди рддрддреНрд╡реЛрдВ рдХрд╛ рдПрдХ рд╕рдВрдШ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рдирдореЗрдВ рдпрд╣ рд╢рд╛рдорд┐рд▓ рд╣реИред рдЗрди рд╕рднреА рдлрд╝реАрд▓реНрдб рдХреЛ рднрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдмрд╕ рдлрд╝реАрд▓реНрдбреНрд╕ ( рдЙрджрд╛рд╣рд░рдг 3 рджреЗрдЦреЗрдВ) рдХреЛ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдкрд╛рд╕рдкреЛрд░реНрдЯ рдХреЗ рд╕рд╛рде FillFrom рд╡рд┐рдзрд┐ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВ рдФрд░ рдЗрд╕реЗ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ MyPassportData рдкрд╛рд╕ рдХрд░реЗрдВред

 PassportSection. FillFrom(MyPassportData); 


рдЗрдВрдЯрд░рдлреЗрд╕

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

рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдПрдХ рдмрдЯрди рдПрдХ рдРрд╕реА рдЪреАрдЬрд╝ рд╣реИ рдЬрд┐рд╕ рдкрд░ рдЖрдк рдХреНрд▓рд┐рдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЦреИрд░, рдХрднреА-рдХрднреА рдмрдЯрди рдХреЗ рдирд╛рдо рд╣реЛрддреЗ рд╣реИрдВред

рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рдЖрдзрд╛рд░ рдкрд░, VIQA рдХреЗ рдХрд┐рд╕реА рднреА рдмрдЯрди рдореЗрдВ рдХреНрд▓рд┐рдХ рдПрдХреНрд╢рди рдФрд░ рдПрдХ рд▓реЗрдмрд▓ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИред рдЗрди рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рдПрдХ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ (рдмрдЯрди рд▓реЛрдХреЗрдЯрд░ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рд▓реЗрдмрд▓ рдЗрд╕ рд▓реЛрдХреЗрдЯрд░ рдкрд░ рдореВрд▓реНрдп рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рдореВрд▓реНрдп рд╣реИ), рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрдкрдХрд╛ рдмрдЯрди рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ рд╣реИ , , :
Button, ┬л┬╗ - .

C .

:
IButton, ICheckbox, ICheckList, IClickable, ILabeled, ILink, ISelector, ISetValue, ITextArea, IVIElement

VIAction
, VIAction.
, , :

:
( Click)
,
( GetLabel):
, ,
.
, , , - , Frame, , ( , ), . 4


, VIAction.
, Frame . 5


, , ( ) . 6 .

PageObjects, .
VISite.

var mySite = new VISite(тАЬhttp://mysite.comтАЭ)

, , , .


, , , - . , , , .

VISite.Logger = new MyLogger();

.

VISite 3 :
WaitWebElementInSec тАУ (5 ) WaitPageToLoadInSec тАУ (20 ) RetryActionInMsec тАУ ( ) (0,5 )

, . WaitPageToLoadInSec WaitWebElementInSec ( 7 ).

SmartSearch SmartClick
, Selenium . , , , ( , ). , .

, -, , , - .
VIQA ┬л┬╗, , .

тАв Implicitly wait , ? .
тАв ? , (, Click ? )
- , , - . , , , , .
. тАФ .


KillAllRunWebDrivers
WebDriver ( , ). . , , , .

(SetUpFixture) :

VISite.KillAllRunWebDrivers();

. .


WebDriver, beforesuit , WebDriver . - Open ( , BeforeTest: , .. DataSource -, ). , , , . 2-5 . - , , , , , VIQA .
VIQA ( ). Open, .. , . . .


. ( )

:
Java ( , HTML5) ( , Selenium JavaScript : , setAttribute ) , .

, , .
, , )
: vk.com/viqatools
email : viqablog@gmail.com

.

UPD: SQA Days 15 vimeo.com/95245507


:
1

public class Checkbox { public TextElement TextElement; public VIElement CheckSignElement; } public class LoginForm { public TextField LoginTxtField; public TextField PasswordTxtField; public Button LoginButton; }

2
[Site(Domain = "http://market.yandex.ru/")] public class MySite : VISite { [Page(Title = " ", Url = "http://mysite.ru/")] public HomePage HomePage; [Page(Title = " ", Url = "http://mysite.ru/somepage")] public SomePage SomePage; } [Page(Title = " ", Url = "http://mysite.ru/")] public class HomePage : VIPage { [Name(" ")] [Locate(ByClassName = "search")] public static SearchSection SearchSection; }
Note: Page .

public class SearchSection : VIElement { [Name(" ")] [Locate(ByXPath = "//*[@class='search_input'] public TextArea SearchTextField; [Name(" '")] [Locate(ByXPath = "//*[contains(text(),'')] [ClickReloadsPage] public Button SearchButton; public void SearchProduct(string productName) { SearchTextField.NewInput(productName); SearchButton.Click(); } }
Note: .

3
public class PassportData { public string Number; public string Series; public FullName FullName; } public class FullName { public string Name; public string SecondName; } [FillFromField("Number")] public TextField PassportNumberTxtField;
Note: Number -, .

[FillFromField("FullName.Name")] public TextField PassportNameTxtField;
Note: Name FullName

public ITextArea PassportSeriesTxtField = new TextField() { FillRule = ToFillRule<PassportData>(pd => (pd.Number != тАЬтАЭ) ? pd.Series : тАЬтАЭ)), }

Note: FillRule

4
(viElement, actionName, viAction) =>{ VISite.Logger.Event(viElement.DefaultLogMessage(text)); viAction.Invoke(); }

Note: VIAction
(actionName, viAction, logResult) =>{ VISite.Logger.Event(DefaultLogMessage(text)); var result = viAction.Invoke(); if (logResult != null) VISite.Logger.Event(logResult.Invoke(result)); return result; }
Note: VIAction
5
new RadioButtons(тАЬ тАЭ, тАЬ#sensorScreenтАЭ) { VIAction = (viElement, text, viAction) => { if (!FirstSensorRadioButton.IsDisplayed) SensorBlock.Click(); viAction.Invoke(); } };
Note: VIAction . .
6
[Name(Name = "Wi-fi"), Locate(ByXPath = "//*[@class='my-checkbox']")] public ICheckbox MyCheckbox1; [Name(Name = "Wi-fi"), Locate(ByClassName = тАЬmy-checkbox")] public Checkbox MyCheckbox2; public ICheckbox MyCheckbox3 = new Checkbox("Wi-fi", "#my-checkbox"); public Checkbox MyCheckbox4 = new Checkbox("Wi-fi", By.CssSelector("#my-checkbox"));
7
[Name(" ''")] [ClickReloadsPage] public IButton SearchButton;

Note: ClickReloadsPage

MyButton.WithPageLoadAction.Click()
Note:

MyButton.WaitTimeout(20).Click()
Note: .
, , :
Button, ┬л┬╗ - .

C .

:
IButton, ICheckbox, ICheckList, IClickable, ILabeled, ILink, ISelector, ISetValue, ITextArea, IVIElement

VIAction
, VIAction.
, , :

:
( Click)
,
( GetLabel):
, ,
.
, , , - , Frame, , ( , ), . 4


, VIAction.
, Frame . 5


, , ( ) . 6 .

PageObjects, .
VISite.

var mySite = new VISite(тАЬhttp://mysite.comтАЭ)

, , , .


, , , - . , , , .

VISite.Logger = new MyLogger();

.

VISite 3 :
WaitWebElementInSec тАУ (5 ) WaitPageToLoadInSec тАУ (20 ) RetryActionInMsec тАУ ( ) (0,5 )

, . WaitPageToLoadInSec WaitWebElementInSec ( 7 ).

SmartSearch SmartClick
, Selenium . , , , ( , ). , .

, -, , , - .
VIQA ┬л┬╗, , .

тАв Implicitly wait , ? .
тАв ? , (, Click ? )
- , , - . , , , , .
. тАФ .


KillAllRunWebDrivers
WebDriver ( , ). . , , , .

(SetUpFixture) :

VISite.KillAllRunWebDrivers();

. .


WebDriver, beforesuit , WebDriver . - Open ( , BeforeTest: , .. DataSource -, ). , , , . 2-5 . - , , , , , VIQA .
VIQA ( ). Open, .. , . . .


. ( )

:
Java ( , HTML5) ( , Selenium JavaScript : , setAttribute ) , .

, , .
, , )
: vk.com/viqatools
email : viqablog@gmail.com

.

UPD: SQA Days 15 vimeo.com/95245507


:
1

public class Checkbox { public TextElement TextElement; public VIElement CheckSignElement; } public class LoginForm { public TextField LoginTxtField; public TextField PasswordTxtField; public Button LoginButton; }

2
[Site(Domain = "http://market.yandex.ru/")] public class MySite : VISite { [Page(Title = " ", Url = "http://mysite.ru/")] public HomePage HomePage; [Page(Title = " ", Url = "http://mysite.ru/somepage")] public SomePage SomePage; } [Page(Title = " ", Url = "http://mysite.ru/")] public class HomePage : VIPage { [Name(" ")] [Locate(ByClassName = "search")] public static SearchSection SearchSection; }
Note: Page .

public class SearchSection : VIElement { [Name(" ")] [Locate(ByXPath = "//*[@class='search_input'] public TextArea SearchTextField; [Name(" '")] [Locate(ByXPath = "//*[contains(text(),'')] [ClickReloadsPage] public Button SearchButton; public void SearchProduct(string productName) { SearchTextField.NewInput(productName); SearchButton.Click(); } }
Note: .

3
public class PassportData { public string Number; public string Series; public FullName FullName; } public class FullName { public string Name; public string SecondName; } [FillFromField("Number")] public TextField PassportNumberTxtField;
Note: Number -, .

[FillFromField("FullName.Name")] public TextField PassportNameTxtField;
Note: Name FullName

public ITextArea PassportSeriesTxtField = new TextField() { FillRule = ToFillRule<PassportData>(pd => (pd.Number != тАЬтАЭ) ? pd.Series : тАЬтАЭ)), }

Note: FillRule

4
(viElement, actionName, viAction) =>{ VISite.Logger.Event(viElement.DefaultLogMessage(text)); viAction.Invoke(); }

Note: VIAction
(actionName, viAction, logResult) =>{ VISite.Logger.Event(DefaultLogMessage(text)); var result = viAction.Invoke(); if (logResult != null) VISite.Logger.Event(logResult.Invoke(result)); return result; }
Note: VIAction
5
new RadioButtons(тАЬ тАЭ, тАЬ#sensorScreenтАЭ) { VIAction = (viElement, text, viAction) => { if (!FirstSensorRadioButton.IsDisplayed) SensorBlock.Click(); viAction.Invoke(); } };
Note: VIAction . .
6
[Name(Name = "Wi-fi"), Locate(ByXPath = "//*[@class='my-checkbox']")] public ICheckbox MyCheckbox1; [Name(Name = "Wi-fi"), Locate(ByClassName = тАЬmy-checkbox")] public Checkbox MyCheckbox2; public ICheckbox MyCheckbox3 = new Checkbox("Wi-fi", "#my-checkbox"); public Checkbox MyCheckbox4 = new Checkbox("Wi-fi", By.CssSelector("#my-checkbox"));
7
[Name(" ''")] [ClickReloadsPage] public IButton SearchButton;

Note: ClickReloadsPage

MyButton.WithPageLoadAction.Click()
Note:

MyButton.WaitTimeout(20).Click()
Note: .
, , :
Button, ┬л┬╗ - .

C .

:
IButton, ICheckbox, ICheckList, IClickable, ILabeled, ILink, ISelector, ISetValue, ITextArea, IVIElement

VIAction
, VIAction.
, , :

:
( Click)
,
( GetLabel):
, ,
.
, , , - , Frame, , ( , ), . 4


, VIAction.
, Frame . 5


, , ( ) . 6 .

PageObjects, .
VISite.

var mySite = new VISite(тАЬhttp://mysite.comтАЭ)

, , , .


, , , - . , , , .

VISite.Logger = new MyLogger();

.

VISite 3 :
WaitWebElementInSec тАУ (5 ) WaitPageToLoadInSec тАУ (20 ) RetryActionInMsec тАУ ( ) (0,5 )

, . WaitPageToLoadInSec WaitWebElementInSec ( 7 ).

SmartSearch SmartClick
, Selenium . , , , ( , ). , .

, -, , , - .
VIQA ┬л┬╗, , .

тАв Implicitly wait , ? .
тАв ? , (, Click ? )
- , , - . , , , , .
. тАФ .


KillAllRunWebDrivers
WebDriver ( , ). . , , , .

(SetUpFixture) :

VISite.KillAllRunWebDrivers();

. .


WebDriver, beforesuit , WebDriver . - Open ( , BeforeTest: , .. DataSource -, ). , , , . 2-5 . - , , , , , VIQA .
VIQA ( ). Open, .. , . . .


. ( )

:
Java ( , HTML5) ( , Selenium JavaScript : , setAttribute ) , .

, , .
, , )
: vk.com/viqatools
email : viqablog@gmail.com

.

UPD: SQA Days 15 vimeo.com/95245507


:
1

public class Checkbox { public TextElement TextElement; public VIElement CheckSignElement; } public class LoginForm { public TextField LoginTxtField; public TextField PasswordTxtField; public Button LoginButton; }

2
[Site(Domain = "http://market.yandex.ru/")] public class MySite : VISite { [Page(Title = " ", Url = "http://mysite.ru/")] public HomePage HomePage; [Page(Title = " ", Url = "http://mysite.ru/somepage")] public SomePage SomePage; } [Page(Title = " ", Url = "http://mysite.ru/")] public class HomePage : VIPage { [Name(" ")] [Locate(ByClassName = "search")] public static SearchSection SearchSection; }
Note: Page .

public class SearchSection : VIElement { [Name(" ")] [Locate(ByXPath = "//*[@class='search_input'] public TextArea SearchTextField; [Name(" '")] [Locate(ByXPath = "//*[contains(text(),'')] [ClickReloadsPage] public Button SearchButton; public void SearchProduct(string productName) { SearchTextField.NewInput(productName); SearchButton.Click(); } }
Note: .

3
public class PassportData { public string Number; public string Series; public FullName FullName; } public class FullName { public string Name; public string SecondName; } [FillFromField("Number")] public TextField PassportNumberTxtField;
Note: Number -, .

[FillFromField("FullName.Name")] public TextField PassportNameTxtField;
Note: Name FullName

public ITextArea PassportSeriesTxtField = new TextField() { FillRule = ToFillRule<PassportData>(pd => (pd.Number != тАЬтАЭ) ? pd.Series : тАЬтАЭ)), }

Note: FillRule

4
(viElement, actionName, viAction) =>{ VISite.Logger.Event(viElement.DefaultLogMessage(text)); viAction.Invoke(); }

Note: VIAction
(actionName, viAction, logResult) =>{ VISite.Logger.Event(DefaultLogMessage(text)); var result = viAction.Invoke(); if (logResult != null) VISite.Logger.Event(logResult.Invoke(result)); return result; }
Note: VIAction
5
new RadioButtons(тАЬ тАЭ, тАЬ#sensorScreenтАЭ) { VIAction = (viElement, text, viAction) => { if (!FirstSensorRadioButton.IsDisplayed) SensorBlock.Click(); viAction.Invoke(); } };
Note: VIAction . .
6
[Name(Name = "Wi-fi"), Locate(ByXPath = "//*[@class='my-checkbox']")] public ICheckbox MyCheckbox1; [Name(Name = "Wi-fi"), Locate(ByClassName = тАЬmy-checkbox")] public Checkbox MyCheckbox2; public ICheckbox MyCheckbox3 = new Checkbox("Wi-fi", "#my-checkbox"); public Checkbox MyCheckbox4 = new Checkbox("Wi-fi", By.CssSelector("#my-checkbox"));
7
[Name(" ''")] [ClickReloadsPage] public IButton SearchButton;

Note: ClickReloadsPage

MyButton.WithPageLoadAction.Click()
Note:

MyButton.WaitTimeout(20).Click()
Note: .
, , :
Button, ┬л┬╗ - .

C .

:
IButton, ICheckbox, ICheckList, IClickable, ILabeled, ILink, ISelector, ISetValue, ITextArea, IVIElement

VIAction
, VIAction.
, , :

:
( Click)
,
( GetLabel):
, ,
.
, , , - , Frame, , ( , ), . 4


, VIAction.
, Frame . 5


, , ( ) . 6 .

PageObjects, .
VISite.

var mySite = new VISite(тАЬhttp://mysite.comтАЭ)

, , , .


, , , - . , , , .

VISite.Logger = new MyLogger();

.

VISite 3 :
WaitWebElementInSec тАУ (5 ) WaitPageToLoadInSec тАУ (20 ) RetryActionInMsec тАУ ( ) (0,5 )

, . WaitPageToLoadInSec WaitWebElementInSec ( 7 ).

SmartSearch SmartClick
, Selenium . , , , ( , ). , .

, -, , , - .
VIQA ┬л┬╗, , .

тАв Implicitly wait , ? .
тАв ? , (, Click ? )
- , , - . , , , , .
. тАФ .


KillAllRunWebDrivers
WebDriver ( , ). . , , , .

(SetUpFixture) :

VISite.KillAllRunWebDrivers();

. .


WebDriver, beforesuit , WebDriver . - Open ( , BeforeTest: , .. DataSource -, ). , , , . 2-5 . - , , , , , VIQA .
VIQA ( ). Open, .. , . . .


. ( )

:
Java ( , HTML5) ( , Selenium JavaScript : , setAttribute ) , .

, , .
, , )
: vk.com/viqatools
email : viqablog@gmail.com

.

UPD: SQA Days 15 vimeo.com/95245507


:
1

public class Checkbox { public TextElement TextElement; public VIElement CheckSignElement; } public class LoginForm { public TextField LoginTxtField; public TextField PasswordTxtField; public Button LoginButton; }

2
[Site(Domain = "http://market.yandex.ru/")] public class MySite : VISite { [Page(Title = " ", Url = "http://mysite.ru/")] public HomePage HomePage; [Page(Title = " ", Url = "http://mysite.ru/somepage")] public SomePage SomePage; } [Page(Title = " ", Url = "http://mysite.ru/")] public class HomePage : VIPage { [Name(" ")] [Locate(ByClassName = "search")] public static SearchSection SearchSection; }
Note: Page .

public class SearchSection : VIElement { [Name(" ")] [Locate(ByXPath = "//*[@class='search_input'] public TextArea SearchTextField; [Name(" '")] [Locate(ByXPath = "//*[contains(text(),'')] [ClickReloadsPage] public Button SearchButton; public void SearchProduct(string productName) { SearchTextField.NewInput(productName); SearchButton.Click(); } }
Note: .

3
public class PassportData { public string Number; public string Series; public FullName FullName; } public class FullName { public string Name; public string SecondName; } [FillFromField("Number")] public TextField PassportNumberTxtField;
Note: Number -, .

[FillFromField("FullName.Name")] public TextField PassportNameTxtField;
Note: Name FullName

public ITextArea PassportSeriesTxtField = new TextField() { FillRule = ToFillRule<PassportData>(pd => (pd.Number != тАЬтАЭ) ? pd.Series : тАЬтАЭ)), }

Note: FillRule

4
(viElement, actionName, viAction) =>{ VISite.Logger.Event(viElement.DefaultLogMessage(text)); viAction.Invoke(); }

Note: VIAction
(actionName, viAction, logResult) =>{ VISite.Logger.Event(DefaultLogMessage(text)); var result = viAction.Invoke(); if (logResult != null) VISite.Logger.Event(logResult.Invoke(result)); return result; }
Note: VIAction
5
new RadioButtons(тАЬ тАЭ, тАЬ#sensorScreenтАЭ) { VIAction = (viElement, text, viAction) => { if (!FirstSensorRadioButton.IsDisplayed) SensorBlock.Click(); viAction.Invoke(); } };
Note: VIAction . .
6
[Name(Name = "Wi-fi"), Locate(ByXPath = "//*[@class='my-checkbox']")] public ICheckbox MyCheckbox1; [Name(Name = "Wi-fi"), Locate(ByClassName = тАЬmy-checkbox")] public Checkbox MyCheckbox2; public ICheckbox MyCheckbox3 = new Checkbox("Wi-fi", "#my-checkbox"); public Checkbox MyCheckbox4 = new Checkbox("Wi-fi", By.CssSelector("#my-checkbox"));
7
[Name(" ''")] [ClickReloadsPage] public IButton SearchButton;

Note: ClickReloadsPage

MyButton.WithPageLoadAction.Click()
Note:

MyButton.WaitTimeout(20).Click()
Note: .

, , :
Button, ┬л┬╗ - .

C .

:
IButton, ICheckbox, ICheckList, IClickable, ILabeled, ILink, ISelector, ISetValue, ITextArea, IVIElement

VIAction
, VIAction.
, , :

:
( Click)
,
( GetLabel):
, ,
.
, , , - , Frame, , ( , ), . 4


, VIAction.
, Frame . 5


, , ( ) . 6 .

PageObjects, .
VISite.

var mySite = new VISite(тАЬhttp://mysite.comтАЭ)

, , , .


, , , - . , , , .

VISite.Logger = new MyLogger();

.

VISite 3 :
WaitWebElementInSec тАУ (5 ) WaitPageToLoadInSec тАУ (20 ) RetryActionInMsec тАУ ( ) (0,5 )

, . WaitPageToLoadInSec WaitWebElementInSec ( 7 ).

SmartSearch SmartClick
, Selenium . , , , ( , ). , .

, -, , , - .
VIQA ┬л┬╗, , .

тАв Implicitly wait , ? .
тАв ? , (, Click ? )
- , , - . , , , , .
. тАФ .


KillAllRunWebDrivers
WebDriver ( , ). . , , , .

(SetUpFixture) :

VISite.KillAllRunWebDrivers();

. .


WebDriver, beforesuit , WebDriver . - Open ( , BeforeTest: , .. DataSource -, ). , , , . 2-5 . - , , , , , VIQA .
VIQA ( ). Open, .. , . . .


. ( )

:
Java ( , HTML5) ( , Selenium JavaScript : , setAttribute ) , .

, , .
, , )
: vk.com/viqatools
email : viqablog@gmail.com

.

UPD: SQA Days 15 vimeo.com/95245507


:
1

public class Checkbox { public TextElement TextElement; public VIElement CheckSignElement; } public class LoginForm { public TextField LoginTxtField; public TextField PasswordTxtField; public Button LoginButton; }

2
[Site(Domain = "http://market.yandex.ru/")] public class MySite : VISite { [Page(Title = " ", Url = "http://mysite.ru/")] public HomePage HomePage; [Page(Title = " ", Url = "http://mysite.ru/somepage")] public SomePage SomePage; } [Page(Title = " ", Url = "http://mysite.ru/")] public class HomePage : VIPage { [Name(" ")] [Locate(ByClassName = "search")] public static SearchSection SearchSection; }
Note: Page .

public class SearchSection : VIElement { [Name(" ")] [Locate(ByXPath = "//*[@class='search_input'] public TextArea SearchTextField; [Name(" '")] [Locate(ByXPath = "//*[contains(text(),'')] [ClickReloadsPage] public Button SearchButton; public void SearchProduct(string productName) { SearchTextField.NewInput(productName); SearchButton.Click(); } }
Note: .

3
public class PassportData { public string Number; public string Series; public FullName FullName; } public class FullName { public string Name; public string SecondName; } [FillFromField("Number")] public TextField PassportNumberTxtField;
Note: Number -, .

[FillFromField("FullName.Name")] public TextField PassportNameTxtField;
Note: Name FullName

public ITextArea PassportSeriesTxtField = new TextField() { FillRule = ToFillRule<PassportData>(pd => (pd.Number != тАЬтАЭ) ? pd.Series : тАЬтАЭ)), }

Note: FillRule

4
(viElement, actionName, viAction) =>{ VISite.Logger.Event(viElement.DefaultLogMessage(text)); viAction.Invoke(); }

Note: VIAction
(actionName, viAction, logResult) =>{ VISite.Logger.Event(DefaultLogMessage(text)); var result = viAction.Invoke(); if (logResult != null) VISite.Logger.Event(logResult.Invoke(result)); return result; }
Note: VIAction
5
new RadioButtons(тАЬ тАЭ, тАЬ#sensorScreenтАЭ) { VIAction = (viElement, text, viAction) => { if (!FirstSensorRadioButton.IsDisplayed) SensorBlock.Click(); viAction.Invoke(); } };
Note: VIAction . .
6
[Name(Name = "Wi-fi"), Locate(ByXPath = "//*[@class='my-checkbox']")] public ICheckbox MyCheckbox1; [Name(Name = "Wi-fi"), Locate(ByClassName = тАЬmy-checkbox")] public Checkbox MyCheckbox2; public ICheckbox MyCheckbox3 = new Checkbox("Wi-fi", "#my-checkbox"); public Checkbox MyCheckbox4 = new Checkbox("Wi-fi", By.CssSelector("#my-checkbox"));
7
[Name(" ''")] [ClickReloadsPage] public IButton SearchButton;

Note: ClickReloadsPage

MyButton.WithPageLoadAction.Click()
Note:

MyButton.WaitTimeout(20).Click()
Note: .

, , :
Button, ┬л┬╗ - .

C .

:
IButton, ICheckbox, ICheckList, IClickable, ILabeled, ILink, ISelector, ISetValue, ITextArea, IVIElement

VIAction
, VIAction.
, , :

:
( Click)
,
( GetLabel):
, ,
.
, , , - , Frame, , ( , ), . 4


, VIAction.
, Frame . 5


, , ( ) . 6 .

PageObjects, .
VISite.

var mySite = new VISite(тАЬhttp://mysite.comтАЭ)

, , , .


, , , - . , , , .

VISite.Logger = new MyLogger();

.

VISite 3 :
WaitWebElementInSec тАУ (5 ) WaitPageToLoadInSec тАУ (20 ) RetryActionInMsec тАУ ( ) (0,5 )

, . WaitPageToLoadInSec WaitWebElementInSec ( 7 ).

SmartSearch SmartClick
, Selenium . , , , ( , ). , .

, -, , , - .
VIQA ┬л┬╗, , .

тАв Implicitly wait , ? .
тАв ? , (, Click ? )
- , , - . , , , , .
. тАФ .


KillAllRunWebDrivers
WebDriver ( , ). . , , , .

(SetUpFixture) :

VISite.KillAllRunWebDrivers();

. .


WebDriver, beforesuit , WebDriver . - Open ( , BeforeTest: , .. DataSource -, ). , , , . 2-5 . - , , , , , VIQA .
VIQA ( ). Open, .. , . . .


. ( )

:
Java ( , HTML5) ( , Selenium JavaScript : , setAttribute ) , .

, , .
, , )
: vk.com/viqatools
email : viqablog@gmail.com

.

UPD: SQA Days 15 vimeo.com/95245507


:
1

public class Checkbox { public TextElement TextElement; public VIElement CheckSignElement; } public class LoginForm { public TextField LoginTxtField; public TextField PasswordTxtField; public Button LoginButton; }

2
[Site(Domain = "http://market.yandex.ru/")] public class MySite : VISite { [Page(Title = " ", Url = "http://mysite.ru/")] public HomePage HomePage; [Page(Title = " ", Url = "http://mysite.ru/somepage")] public SomePage SomePage; } [Page(Title = " ", Url = "http://mysite.ru/")] public class HomePage : VIPage { [Name(" ")] [Locate(ByClassName = "search")] public static SearchSection SearchSection; }
Note: Page .

public class SearchSection : VIElement { [Name(" ")] [Locate(ByXPath = "//*[@class='search_input'] public TextArea SearchTextField; [Name(" '")] [Locate(ByXPath = "//*[contains(text(),'')] [ClickReloadsPage] public Button SearchButton; public void SearchProduct(string productName) { SearchTextField.NewInput(productName); SearchButton.Click(); } }
Note: .

3
public class PassportData { public string Number; public string Series; public FullName FullName; } public class FullName { public string Name; public string SecondName; } [FillFromField("Number")] public TextField PassportNumberTxtField;
Note: Number -, .

[FillFromField("FullName.Name")] public TextField PassportNameTxtField;
Note: Name FullName

public ITextArea PassportSeriesTxtField = new TextField() { FillRule = ToFillRule<PassportData>(pd => (pd.Number != тАЬтАЭ) ? pd.Series : тАЬтАЭ)), }

Note: FillRule

4
(viElement, actionName, viAction) =>{ VISite.Logger.Event(viElement.DefaultLogMessage(text)); viAction.Invoke(); }

Note: VIAction
(actionName, viAction, logResult) =>{ VISite.Logger.Event(DefaultLogMessage(text)); var result = viAction.Invoke(); if (logResult != null) VISite.Logger.Event(logResult.Invoke(result)); return result; }
Note: VIAction
5
new RadioButtons(тАЬ тАЭ, тАЬ#sensorScreenтАЭ) { VIAction = (viElement, text, viAction) => { if (!FirstSensorRadioButton.IsDisplayed) SensorBlock.Click(); viAction.Invoke(); } };
Note: VIAction . .
6
[Name(Name = "Wi-fi"), Locate(ByXPath = "//*[@class='my-checkbox']")] public ICheckbox MyCheckbox1; [Name(Name = "Wi-fi"), Locate(ByClassName = тАЬmy-checkbox")] public Checkbox MyCheckbox2; public ICheckbox MyCheckbox3 = new Checkbox("Wi-fi", "#my-checkbox"); public Checkbox MyCheckbox4 = new Checkbox("Wi-fi", By.CssSelector("#my-checkbox"));
7
[Name(" ''")] [ClickReloadsPage] public IButton SearchButton;

Note: ClickReloadsPage

MyButton.WithPageLoadAction.Click()
Note:

MyButton.WaitTimeout(20).Click()
Note: .
, , :
Button, ┬л┬╗ - .

C .

:
IButton, ICheckbox, ICheckList, IClickable, ILabeled, ILink, ISelector, ISetValue, ITextArea, IVIElement

VIAction
, VIAction.
, , :

:
( Click)
,
( GetLabel):
, ,
.
, , , - , Frame, , ( , ), . 4


, VIAction.
, Frame . 5


, , ( ) . 6 .

PageObjects, .
VISite.

var mySite = new VISite(тАЬhttp://mysite.comтАЭ)

, , , .


, , , - . , , , .

VISite.Logger = new MyLogger();

.

VISite 3 :
WaitWebElementInSec тАУ (5 ) WaitPageToLoadInSec тАУ (20 ) RetryActionInMsec тАУ ( ) (0,5 )

, . WaitPageToLoadInSec WaitWebElementInSec ( 7 ).

SmartSearch SmartClick
, Selenium . , , , ( , ). , .

, -, , , - .
VIQA ┬л┬╗, , .

тАв Implicitly wait , ? .
тАв ? , (, Click ? )
- , , - . , , , , .
. тАФ .


KillAllRunWebDrivers
WebDriver ( , ). . , , , .

(SetUpFixture) :

VISite.KillAllRunWebDrivers();

. .


WebDriver, beforesuit , WebDriver . - Open ( , BeforeTest: , .. DataSource -, ). , , , . 2-5 . - , , , , , VIQA .
VIQA ( ). Open, .. , . . .


. ( )

:
Java ( , HTML5) ( , Selenium JavaScript : , setAttribute ) , .

, , .
, , )
: vk.com/viqatools
email : viqablog@gmail.com

.

UPD: SQA Days 15 vimeo.com/95245507


:
1

public class Checkbox { public TextElement TextElement; public VIElement CheckSignElement; } public class LoginForm { public TextField LoginTxtField; public TextField PasswordTxtField; public Button LoginButton; }

2
[Site(Domain = "http://market.yandex.ru/")] public class MySite : VISite { [Page(Title = " ", Url = "http://mysite.ru/")] public HomePage HomePage; [Page(Title = " ", Url = "http://mysite.ru/somepage")] public SomePage SomePage; } [Page(Title = " ", Url = "http://mysite.ru/")] public class HomePage : VIPage { [Name(" ")] [Locate(ByClassName = "search")] public static SearchSection SearchSection; }
Note: Page .

public class SearchSection : VIElement { [Name(" ")] [Locate(ByXPath = "//*[@class='search_input'] public TextArea SearchTextField; [Name(" '")] [Locate(ByXPath = "//*[contains(text(),'')] [ClickReloadsPage] public Button SearchButton; public void SearchProduct(string productName) { SearchTextField.NewInput(productName); SearchButton.Click(); } }
Note: .

3
public class PassportData { public string Number; public string Series; public FullName FullName; } public class FullName { public string Name; public string SecondName; } [FillFromField("Number")] public TextField PassportNumberTxtField;
Note: Number -, .

[FillFromField("FullName.Name")] public TextField PassportNameTxtField;
Note: Name FullName

public ITextArea PassportSeriesTxtField = new TextField() { FillRule = ToFillRule<PassportData>(pd => (pd.Number != тАЬтАЭ) ? pd.Series : тАЬтАЭ)), }

Note: FillRule

4
(viElement, actionName, viAction) =>{ VISite.Logger.Event(viElement.DefaultLogMessage(text)); viAction.Invoke(); }

Note: VIAction
(actionName, viAction, logResult) =>{ VISite.Logger.Event(DefaultLogMessage(text)); var result = viAction.Invoke(); if (logResult != null) VISite.Logger.Event(logResult.Invoke(result)); return result; }
Note: VIAction
5
new RadioButtons(тАЬ тАЭ, тАЬ#sensorScreenтАЭ) { VIAction = (viElement, text, viAction) => { if (!FirstSensorRadioButton.IsDisplayed) SensorBlock.Click(); viAction.Invoke(); } };
Note: VIAction . .
6
[Name(Name = "Wi-fi"), Locate(ByXPath = "//*[@class='my-checkbox']")] public ICheckbox MyCheckbox1; [Name(Name = "Wi-fi"), Locate(ByClassName = тАЬmy-checkbox")] public Checkbox MyCheckbox2; public ICheckbox MyCheckbox3 = new Checkbox("Wi-fi", "#my-checkbox"); public Checkbox MyCheckbox4 = new Checkbox("Wi-fi", By.CssSelector("#my-checkbox"));
7
[Name(" ''")] [ClickReloadsPage] public IButton SearchButton;

Note: ClickReloadsPage

MyButton.WithPageLoadAction.Click()
Note:

MyButton.WaitTimeout(20).Click()
Note: .
, , :
Button, ┬л┬╗ - .

C .

:
IButton, ICheckbox, ICheckList, IClickable, ILabeled, ILink, ISelector, ISetValue, ITextArea, IVIElement

VIAction
, VIAction.
, , :

:
( Click)
,
( GetLabel):
, ,
.
, , , - , Frame, , ( , ), . 4


, VIAction.
, Frame . 5


, , ( ) . 6 .

PageObjects, .
VISite.

var mySite = new VISite(тАЬhttp://mysite.comтАЭ)

, , , .


, , , - . , , , .

VISite.Logger = new MyLogger();

.

VISite 3 :
WaitWebElementInSec тАУ (5 ) WaitPageToLoadInSec тАУ (20 ) RetryActionInMsec тАУ ( ) (0,5 )

, . WaitPageToLoadInSec WaitWebElementInSec ( 7 ).

SmartSearch SmartClick
, Selenium . , , , ( , ). , .

, -, , , - .
VIQA ┬л┬╗, , .

тАв Implicitly wait , ? .
тАв ? , (, Click ? )
- , , - . , , , , .
. тАФ .


KillAllRunWebDrivers
WebDriver ( , ). . , , , .

(SetUpFixture) :

VISite.KillAllRunWebDrivers();

. .


WebDriver, beforesuit , WebDriver . - Open ( , BeforeTest: , .. DataSource -, ). , , , . 2-5 . - , , , , , VIQA .
VIQA ( ). Open, .. , . . .


. ( )

:
Java ( , HTML5) ( , Selenium JavaScript : , setAttribute ) , .

, , .
, , )
: vk.com/viqatools
email : viqablog@gmail.com

.

UPD: SQA Days 15 vimeo.com/95245507


:
1

public class Checkbox { public TextElement TextElement; public VIElement CheckSignElement; } public class LoginForm { public TextField LoginTxtField; public TextField PasswordTxtField; public Button LoginButton; }

2
[Site(Domain = "http://market.yandex.ru/")] public class MySite : VISite { [Page(Title = " ", Url = "http://mysite.ru/")] public HomePage HomePage; [Page(Title = " ", Url = "http://mysite.ru/somepage")] public SomePage SomePage; } [Page(Title = " ", Url = "http://mysite.ru/")] public class HomePage : VIPage { [Name(" ")] [Locate(ByClassName = "search")] public static SearchSection SearchSection; }
Note: Page .

public class SearchSection : VIElement { [Name(" ")] [Locate(ByXPath = "//*[@class='search_input'] public TextArea SearchTextField; [Name(" '")] [Locate(ByXPath = "//*[contains(text(),'')] [ClickReloadsPage] public Button SearchButton; public void SearchProduct(string productName) { SearchTextField.NewInput(productName); SearchButton.Click(); } }
Note: .

3
public class PassportData { public string Number; public string Series; public FullName FullName; } public class FullName { public string Name; public string SecondName; } [FillFromField("Number")] public TextField PassportNumberTxtField;
Note: Number -, .

[FillFromField("FullName.Name")] public TextField PassportNameTxtField;
Note: Name FullName

public ITextArea PassportSeriesTxtField = new TextField() { FillRule = ToFillRule<PassportData>(pd => (pd.Number != тАЬтАЭ) ? pd.Series : тАЬтАЭ)), }

Note: FillRule

4
(viElement, actionName, viAction) =>{ VISite.Logger.Event(viElement.DefaultLogMessage(text)); viAction.Invoke(); }

Note: VIAction
(actionName, viAction, logResult) =>{ VISite.Logger.Event(DefaultLogMessage(text)); var result = viAction.Invoke(); if (logResult != null) VISite.Logger.Event(logResult.Invoke(result)); return result; }
Note: VIAction
5
new RadioButtons(тАЬ тАЭ, тАЬ#sensorScreenтАЭ) { VIAction = (viElement, text, viAction) => { if (!FirstSensorRadioButton.IsDisplayed) SensorBlock.Click(); viAction.Invoke(); } };
Note: VIAction . .
6
[Name(Name = "Wi-fi"), Locate(ByXPath = "//*[@class='my-checkbox']")] public ICheckbox MyCheckbox1; [Name(Name = "Wi-fi"), Locate(ByClassName = тАЬmy-checkbox")] public Checkbox MyCheckbox2; public ICheckbox MyCheckbox3 = new Checkbox("Wi-fi", "#my-checkbox"); public Checkbox MyCheckbox4 = new Checkbox("Wi-fi", By.CssSelector("#my-checkbox"));
7
[Name(" ''")] [ClickReloadsPage] public IButton SearchButton;

Note: ClickReloadsPage

MyButton.WithPageLoadAction.Click()
Note:

MyButton.WaitTimeout(20).Click()
Note: .
, , :
Button, ┬л┬╗ - .

C .

:
IButton, ICheckbox, ICheckList, IClickable, ILabeled, ILink, ISelector, ISetValue, ITextArea, IVIElement

VIAction
, VIAction.
, , :

:
( Click)
,
( GetLabel):
, ,
.
, , , - , Frame, , ( , ), . 4


, VIAction.
, Frame . 5


, , ( ) . 6 .

PageObjects, .
VISite.

var mySite = new VISite(тАЬhttp://mysite.comтАЭ)

, , , .


, , , - . , , , .

VISite.Logger = new MyLogger();

.

VISite 3 :
WaitWebElementInSec тАУ (5 ) WaitPageToLoadInSec тАУ (20 ) RetryActionInMsec тАУ ( ) (0,5 )

, . WaitPageToLoadInSec WaitWebElementInSec ( 7 ).

SmartSearch SmartClick
, Selenium . , , , ( , ). , .

, -, , , - .
VIQA ┬л┬╗, , .

тАв Implicitly wait , ? .
тАв ? , (, Click ? )
- , , - . , , , , .
. тАФ .


KillAllRunWebDrivers
WebDriver ( , ). . , , , .

(SetUpFixture) :

VISite.KillAllRunWebDrivers();

. .


WebDriver, beforesuit , WebDriver . - Open ( , BeforeTest: , .. DataSource -, ). , , , . 2-5 . - , , , , , VIQA .
VIQA ( ). Open, .. , . . .


. ( )

:
Java ( , HTML5) ( , Selenium JavaScript : , setAttribute ) , .

, , .
, , )
: vk.com/viqatools
email : viqablog@gmail.com

.

UPD: SQA Days 15 vimeo.com/95245507


:
1

public class Checkbox { public TextElement TextElement; public VIElement CheckSignElement; } public class LoginForm { public TextField LoginTxtField; public TextField PasswordTxtField; public Button LoginButton; }

2
[Site(Domain = "http://market.yandex.ru/")] public class MySite : VISite { [Page(Title = " ", Url = "http://mysite.ru/")] public HomePage HomePage; [Page(Title = " ", Url = "http://mysite.ru/somepage")] public SomePage SomePage; } [Page(Title = " ", Url = "http://mysite.ru/")] public class HomePage : VIPage { [Name(" ")] [Locate(ByClassName = "search")] public static SearchSection SearchSection; }
Note: Page .

public class SearchSection : VIElement { [Name(" ")] [Locate(ByXPath = "//*[@class='search_input'] public TextArea SearchTextField; [Name(" '")] [Locate(ByXPath = "//*[contains(text(),'')] [ClickReloadsPage] public Button SearchButton; public void SearchProduct(string productName) { SearchTextField.NewInput(productName); SearchButton.Click(); } }
Note: .

3
public class PassportData { public string Number; public string Series; public FullName FullName; } public class FullName { public string Name; public string SecondName; } [FillFromField("Number")] public TextField PassportNumberTxtField;
Note: Number -, .

[FillFromField("FullName.Name")] public TextField PassportNameTxtField;
Note: Name FullName

public ITextArea PassportSeriesTxtField = new TextField() { FillRule = ToFillRule<PassportData>(pd => (pd.Number != тАЬтАЭ) ? pd.Series : тАЬтАЭ)), }

Note: FillRule

4
(viElement, actionName, viAction) =>{ VISite.Logger.Event(viElement.DefaultLogMessage(text)); viAction.Invoke(); }

Note: VIAction
(actionName, viAction, logResult) =>{ VISite.Logger.Event(DefaultLogMessage(text)); var result = viAction.Invoke(); if (logResult != null) VISite.Logger.Event(logResult.Invoke(result)); return result; }
Note: VIAction
5
new RadioButtons(тАЬ тАЭ, тАЬ#sensorScreenтАЭ) { VIAction = (viElement, text, viAction) => { if (!FirstSensorRadioButton.IsDisplayed) SensorBlock.Click(); viAction.Invoke(); } };
Note: VIAction . .
6
[Name(Name = "Wi-fi"), Locate(ByXPath = "//*[@class='my-checkbox']")] public ICheckbox MyCheckbox1; [Name(Name = "Wi-fi"), Locate(ByClassName = тАЬmy-checkbox")] public Checkbox MyCheckbox2; public ICheckbox MyCheckbox3 = new Checkbox("Wi-fi", "#my-checkbox"); public Checkbox MyCheckbox4 = new Checkbox("Wi-fi", By.CssSelector("#my-checkbox"));
7
[Name(" ''")] [ClickReloadsPage] public IButton SearchButton;

Note: ClickReloadsPage

MyButton.WithPageLoadAction.Click()
Note:

MyButton.WaitTimeout(20).Click()
Note: .
, , :
Button, ┬л┬╗ - .

C .

:
IButton, ICheckbox, ICheckList, IClickable, ILabeled, ILink, ISelector, ISetValue, ITextArea, IVIElement

VIAction
, VIAction.
, , :

:
( Click)
,
( GetLabel):
, ,
.
, , , - , Frame, , ( , ), . 4


, VIAction.
, Frame . 5


, , ( ) . 6 .

PageObjects, .
VISite.

var mySite = new VISite(тАЬhttp://mysite.comтАЭ)

, , , .


, , , - . , , , .

VISite.Logger = new MyLogger();

.

VISite 3 :
WaitWebElementInSec тАУ (5 ) WaitPageToLoadInSec тАУ (20 ) RetryActionInMsec тАУ ( ) (0,5 )

, . WaitPageToLoadInSec WaitWebElementInSec ( 7 ).

SmartSearch SmartClick
, Selenium . , , , ( , ). , .

, -, , , - .
VIQA ┬л┬╗, , .

тАв Implicitly wait , ? .
тАв ? , (, Click ? )
- , , - . , , , , .
. тАФ .


KillAllRunWebDrivers
WebDriver ( , ). . , , , .

(SetUpFixture) :

VISite.KillAllRunWebDrivers();

. .


WebDriver, beforesuit , WebDriver . - Open ( , BeforeTest: , .. DataSource -, ). , , , . 2-5 . - , , , , , VIQA .
VIQA ( ). Open, .. , . . .


. ( )

:
Java ( , HTML5) ( , Selenium JavaScript : , setAttribute ) , .

, , .
, , )
: vk.com/viqatools
email : viqablog@gmail.com

.

UPD: SQA Days 15 vimeo.com/95245507


:
1

public class Checkbox { public TextElement TextElement; public VIElement CheckSignElement; } public class LoginForm { public TextField LoginTxtField; public TextField PasswordTxtField; public Button LoginButton; }

2
[Site(Domain = "http://market.yandex.ru/")] public class MySite : VISite { [Page(Title = " ", Url = "http://mysite.ru/")] public HomePage HomePage; [Page(Title = " ", Url = "http://mysite.ru/somepage")] public SomePage SomePage; } [Page(Title = " ", Url = "http://mysite.ru/")] public class HomePage : VIPage { [Name(" ")] [Locate(ByClassName = "search")] public static SearchSection SearchSection; }
Note: Page .

public class SearchSection : VIElement { [Name(" ")] [Locate(ByXPath = "//*[@class='search_input'] public TextArea SearchTextField; [Name(" '")] [Locate(ByXPath = "//*[contains(text(),'')] [ClickReloadsPage] public Button SearchButton; public void SearchProduct(string productName) { SearchTextField.NewInput(productName); SearchButton.Click(); } }
Note: .

3
public class PassportData { public string Number; public string Series; public FullName FullName; } public class FullName { public string Name; public string SecondName; } [FillFromField("Number")] public TextField PassportNumberTxtField;
Note: Number -, .

[FillFromField("FullName.Name")] public TextField PassportNameTxtField;
Note: Name FullName

public ITextArea PassportSeriesTxtField = new TextField() { FillRule = ToFillRule<PassportData>(pd => (pd.Number != тАЬтАЭ) ? pd.Series : тАЬтАЭ)), }

Note: FillRule

4
(viElement, actionName, viAction) =>{ VISite.Logger.Event(viElement.DefaultLogMessage(text)); viAction.Invoke(); }

Note: VIAction
(actionName, viAction, logResult) =>{ VISite.Logger.Event(DefaultLogMessage(text)); var result = viAction.Invoke(); if (logResult != null) VISite.Logger.Event(logResult.Invoke(result)); return result; }
Note: VIAction
5
new RadioButtons(тАЬ тАЭ, тАЬ#sensorScreenтАЭ) { VIAction = (viElement, text, viAction) => { if (!FirstSensorRadioButton.IsDisplayed) SensorBlock.Click(); viAction.Invoke(); } };
Note: VIAction . .
6
[Name(Name = "Wi-fi"), Locate(ByXPath = "//*[@class='my-checkbox']")] public ICheckbox MyCheckbox1; [Name(Name = "Wi-fi"), Locate(ByClassName = тАЬmy-checkbox")] public Checkbox MyCheckbox2; public ICheckbox MyCheckbox3 = new Checkbox("Wi-fi", "#my-checkbox"); public Checkbox MyCheckbox4 = new Checkbox("Wi-fi", By.CssSelector("#my-checkbox"));
7
[Name(" ''")] [ClickReloadsPage] public IButton SearchButton;

Note: ClickReloadsPage

MyButton.WithPageLoadAction.Click()
Note:

MyButton.WaitTimeout(20).Click()
Note: .

, , :
Button, ┬л┬╗ - .

C .

:
IButton, ICheckbox, ICheckList, IClickable, ILabeled, ILink, ISelector, ISetValue, ITextArea, IVIElement

VIAction
, VIAction.
, , :

:
( Click)
,
( GetLabel):
, ,
.
, , , - , Frame, , ( , ), . 4


, VIAction.
, Frame . 5


, , ( ) . 6 .

PageObjects, .
VISite.

var mySite = new VISite(тАЬhttp://mysite.comтАЭ)

, , , .


, , , - . , , , .

VISite.Logger = new MyLogger();

.

VISite 3 :
WaitWebElementInSec тАУ (5 ) WaitPageToLoadInSec тАУ (20 ) RetryActionInMsec тАУ ( ) (0,5 )

, . WaitPageToLoadInSec WaitWebElementInSec ( 7 ).

SmartSearch SmartClick
, Selenium . , , , ( , ). , .

, -, , , - .
VIQA ┬л┬╗, , .

тАв Implicitly wait , ? .
тАв ? , (, Click ? )
- , , - . , , , , .
. тАФ .


KillAllRunWebDrivers
WebDriver ( , ). . , , , .

(SetUpFixture) :

VISite.KillAllRunWebDrivers();

. .


WebDriver, beforesuit , WebDriver . - Open ( , BeforeTest: , .. DataSource -, ). , , , . 2-5 . - , , , , , VIQA .
VIQA ( ). Open, .. , . . .


. ( )

:
Java ( , HTML5) ( , Selenium JavaScript : , setAttribute ) , .

, , .
, , )
: vk.com/viqatools
email : viqablog@gmail.com

.

UPD: SQA Days 15 vimeo.com/95245507


:
1

public class Checkbox { public TextElement TextElement; public VIElement CheckSignElement; } public class LoginForm { public TextField LoginTxtField; public TextField PasswordTxtField; public Button LoginButton; }

2
[Site(Domain = "http://market.yandex.ru/")] public class MySite : VISite { [Page(Title = " ", Url = "http://mysite.ru/")] public HomePage HomePage; [Page(Title = " ", Url = "http://mysite.ru/somepage")] public SomePage SomePage; } [Page(Title = " ", Url = "http://mysite.ru/")] public class HomePage : VIPage { [Name(" ")] [Locate(ByClassName = "search")] public static SearchSection SearchSection; }
Note: Page .

public class SearchSection : VIElement { [Name(" ")] [Locate(ByXPath = "//*[@class='search_input'] public TextArea SearchTextField; [Name(" '")] [Locate(ByXPath = "//*[contains(text(),'')] [ClickReloadsPage] public Button SearchButton; public void SearchProduct(string productName) { SearchTextField.NewInput(productName); SearchButton.Click(); } }
Note: .

3
public class PassportData { public string Number; public string Series; public FullName FullName; } public class FullName { public string Name; public string SecondName; } [FillFromField("Number")] public TextField PassportNumberTxtField;
Note: Number -, .

[FillFromField("FullName.Name")] public TextField PassportNameTxtField;
Note: Name FullName

public ITextArea PassportSeriesTxtField = new TextField() { FillRule = ToFillRule<PassportData>(pd => (pd.Number != тАЬтАЭ) ? pd.Series : тАЬтАЭ)), }

Note: FillRule

4
(viElement, actionName, viAction) =>{ VISite.Logger.Event(viElement.DefaultLogMessage(text)); viAction.Invoke(); }

Note: VIAction
(actionName, viAction, logResult) =>{ VISite.Logger.Event(DefaultLogMessage(text)); var result = viAction.Invoke(); if (logResult != null) VISite.Logger.Event(logResult.Invoke(result)); return result; }
Note: VIAction
5
new RadioButtons(тАЬ тАЭ, тАЬ#sensorScreenтАЭ) { VIAction = (viElement, text, viAction) => { if (!FirstSensorRadioButton.IsDisplayed) SensorBlock.Click(); viAction.Invoke(); } };
Note: VIAction . .
6
[Name(Name = "Wi-fi"), Locate(ByXPath = "//*[@class='my-checkbox']")] public ICheckbox MyCheckbox1; [Name(Name = "Wi-fi"), Locate(ByClassName = тАЬmy-checkbox")] public Checkbox MyCheckbox2; public ICheckbox MyCheckbox3 = new Checkbox("Wi-fi", "#my-checkbox"); public Checkbox MyCheckbox4 = new Checkbox("Wi-fi", By.CssSelector("#my-checkbox"));
7
[Name(" ''")] [ClickReloadsPage] public IButton SearchButton;

Note: ClickReloadsPage

MyButton.WithPageLoadAction.Click()
Note:

MyButton.WaitTimeout(20).Click()
Note: .

, , :
Button, ┬л┬╗ - .

C .

:
IButton, ICheckbox, ICheckList, IClickable, ILabeled, ILink, ISelector, ISetValue, ITextArea, IVIElement

VIAction
, VIAction.
, , :

:
( Click)
,
( GetLabel):
, ,
.
, , , - , Frame, , ( , ), . 4


, VIAction.
, Frame . 5


, , ( ) . 6 .

PageObjects, .
VISite.

var mySite = new VISite(тАЬhttp://mysite.comтАЭ)

, , , .


, , , - . , , , .

VISite.Logger = new MyLogger();

.

VISite 3 :
WaitWebElementInSec тАУ (5 ) WaitPageToLoadInSec тАУ (20 ) RetryActionInMsec тАУ ( ) (0,5 )

, . WaitPageToLoadInSec WaitWebElementInSec ( 7 ).

SmartSearch SmartClick
, Selenium . , , , ( , ). , .

, -, , , - .
VIQA ┬л┬╗, , .

тАв Implicitly wait , ? .
тАв ? , (, Click ? )
- , , - . , , , , .
. тАФ .


KillAllRunWebDrivers
WebDriver ( , ). . , , , .

(SetUpFixture) :

VISite.KillAllRunWebDrivers();

. .


WebDriver, beforesuit , WebDriver . - Open ( , BeforeTest: , .. DataSource -, ). , , , . 2-5 . - , , , , , VIQA .
VIQA ( ). Open, .. , . . .


. ( )

:
Java ( , HTML5) ( , Selenium JavaScript : , setAttribute ) , .

, , .
, , )
: vk.com/viqatools
email : viqablog@gmail.com

.

UPD: SQA Days 15 vimeo.com/95245507


:
1

public class Checkbox { public TextElement TextElement; public VIElement CheckSignElement; } public class LoginForm { public TextField LoginTxtField; public TextField PasswordTxtField; public Button LoginButton; }

2
[Site(Domain = "http://market.yandex.ru/")] public class MySite : VISite { [Page(Title = " ", Url = "http://mysite.ru/")] public HomePage HomePage; [Page(Title = " ", Url = "http://mysite.ru/somepage")] public SomePage SomePage; } [Page(Title = " ", Url = "http://mysite.ru/")] public class HomePage : VIPage { [Name(" ")] [Locate(ByClassName = "search")] public static SearchSection SearchSection; }
Note: Page .

public class SearchSection : VIElement { [Name(" ")] [Locate(ByXPath = "//*[@class='search_input'] public TextArea SearchTextField; [Name(" '")] [Locate(ByXPath = "//*[contains(text(),'')] [ClickReloadsPage] public Button SearchButton; public void SearchProduct(string productName) { SearchTextField.NewInput(productName); SearchButton.Click(); } }
Note: .

3
public class PassportData { public string Number; public string Series; public FullName FullName; } public class FullName { public string Name; public string SecondName; } [FillFromField("Number")] public TextField PassportNumberTxtField;
Note: Number -, .

[FillFromField("FullName.Name")] public TextField PassportNameTxtField;
Note: Name FullName

public ITextArea PassportSeriesTxtField = new TextField() { FillRule = ToFillRule<PassportData>(pd => (pd.Number != тАЬтАЭ) ? pd.Series : тАЬтАЭ)), }

Note: FillRule

4
(viElement, actionName, viAction) =>{ VISite.Logger.Event(viElement.DefaultLogMessage(text)); viAction.Invoke(); }

Note: VIAction
(actionName, viAction, logResult) =>{ VISite.Logger.Event(DefaultLogMessage(text)); var result = viAction.Invoke(); if (logResult != null) VISite.Logger.Event(logResult.Invoke(result)); return result; }
Note: VIAction
5
new RadioButtons(тАЬ тАЭ, тАЬ#sensorScreenтАЭ) { VIAction = (viElement, text, viAction) => { if (!FirstSensorRadioButton.IsDisplayed) SensorBlock.Click(); viAction.Invoke(); } };
Note: VIAction . .
6
[Name(Name = "Wi-fi"), Locate(ByXPath = "//*[@class='my-checkbox']")] public ICheckbox MyCheckbox1; [Name(Name = "Wi-fi"), Locate(ByClassName = тАЬmy-checkbox")] public Checkbox MyCheckbox2; public ICheckbox MyCheckbox3 = new Checkbox("Wi-fi", "#my-checkbox"); public Checkbox MyCheckbox4 = new Checkbox("Wi-fi", By.CssSelector("#my-checkbox"));
7
[Name(" ''")] [ClickReloadsPage] public IButton SearchButton;

Note: ClickReloadsPage

MyButton.WithPageLoadAction.Click()
Note:

MyButton.WaitTimeout(20).Click()
Note: .
 , ,  :   
Button, ┬л┬╗ - .

C .

:
IButton, ICheckbox, ICheckList, IClickable, ILabeled, ILink, ISelector, ISetValue, ITextArea, IVIElement

VIAction
, VIAction.
, , :

:
( Click)
,
( GetLabel):
, ,
.
, , , - , Frame, , ( , ), . 4


, VIAction.
, Frame . 5


, , ( ) . 6 .

PageObjects, .
VISite.

var mySite = new VISite(тАЬhttp://mysite.comтАЭ)

, , , .


, , , - . , , , .

VISite.Logger = new MyLogger();

.

VISite 3 :
WaitWebElementInSec тАУ (5 ) WaitPageToLoadInSec тАУ (20 ) RetryActionInMsec тАУ ( ) (0,5 )

, . WaitPageToLoadInSec WaitWebElementInSec ( 7 ).

SmartSearch SmartClick
, Selenium . , , , ( , ). , .

, -, , , - .
VIQA ┬л┬╗, , .

тАв Implicitly wait , ? .
тАв ? , (, Click ? )
- , , - . , , , , .
. тАФ .


KillAllRunWebDrivers
WebDriver ( , ). . , , , .

(SetUpFixture) :

VISite.KillAllRunWebDrivers();

. .


WebDriver, beforesuit , WebDriver . - Open ( , BeforeTest: , .. DataSource -, ). , , , . 2-5 . - , , , , , VIQA .
VIQA ( ). Open, .. , . . .


. ( )

:
Java ( , HTML5) ( , Selenium JavaScript : , setAttribute ) , .

, , .
, , )
: vk.com/viqatools
email : viqablog@gmail.com

.

UPD: SQA Days 15 vimeo.com/95245507


:
1

public class Checkbox { public TextElement TextElement; public VIElement CheckSignElement; } public class LoginForm { public TextField LoginTxtField; public TextField PasswordTxtField; public Button LoginButton; }

2
[Site(Domain = "http://market.yandex.ru/")] public class MySite : VISite { [Page(Title = " ", Url = "http://mysite.ru/")] public HomePage HomePage; [Page(Title = " ", Url = "http://mysite.ru/somepage")] public SomePage SomePage; } [Page(Title = " ", Url = "http://mysite.ru/")] public class HomePage : VIPage { [Name(" ")] [Locate(ByClassName = "search")] public static SearchSection SearchSection; }
Note: Page .

public class SearchSection : VIElement { [Name(" ")] [Locate(ByXPath = "//*[@class='search_input'] public TextArea SearchTextField; [Name(" '")] [Locate(ByXPath = "//*[contains(text(),'')] [ClickReloadsPage] public Button SearchButton; public void SearchProduct(string productName) { SearchTextField.NewInput(productName); SearchButton.Click(); } }
Note: .

3
public class PassportData { public string Number; public string Series; public FullName FullName; } public class FullName { public string Name; public string SecondName; } [FillFromField("Number")] public TextField PassportNumberTxtField;
Note: Number -, .

[FillFromField("FullName.Name")] public TextField PassportNameTxtField;
Note: Name FullName

public ITextArea PassportSeriesTxtField = new TextField() { FillRule = ToFillRule<PassportData>(pd => (pd.Number != тАЬтАЭ) ? pd.Series : тАЬтАЭ)), }

Note: FillRule

4
(viElement, actionName, viAction) =>{ VISite.Logger.Event(viElement.DefaultLogMessage(text)); viAction.Invoke(); }

Note: VIAction
(actionName, viAction, logResult) =>{ VISite.Logger.Event(DefaultLogMessage(text)); var result = viAction.Invoke(); if (logResult != null) VISite.Logger.Event(logResult.Invoke(result)); return result; }
Note: VIAction
5
new RadioButtons(тАЬ тАЭ, тАЬ#sensorScreenтАЭ) { VIAction = (viElement, text, viAction) => { if (!FirstSensorRadioButton.IsDisplayed) SensorBlock.Click(); viAction.Invoke(); } };
Note: VIAction . .
6
[Name(Name = "Wi-fi"), Locate(ByXPath = "//*[@class='my-checkbox']")] public ICheckbox MyCheckbox1; [Name(Name = "Wi-fi"), Locate(ByClassName = тАЬmy-checkbox")] public Checkbox MyCheckbox2; public ICheckbox MyCheckbox3 = new Checkbox("Wi-fi", "#my-checkbox"); public Checkbox MyCheckbox4 = new Checkbox("Wi-fi", By.CssSelector("#my-checkbox"));
7
[Name(" ''")] [ClickReloadsPage] public IButton SearchButton;

Note: ClickReloadsPage

MyButton.WithPageLoadAction.Click()
Note:

MyButton.WaitTimeout(20).Click()
Note: .
, , :
Button, ┬л┬╗ - .

C .

:
IButton, ICheckbox, ICheckList, IClickable, ILabeled, ILink, ISelector, ISetValue, ITextArea, IVIElement

VIAction
, VIAction.
, , :

:
( Click)
,
( GetLabel):
, ,
.
, , , - , Frame, , ( , ), . 4


, VIAction.
, Frame . 5


, , ( ) . 6 .

PageObjects, .
VISite.

var mySite = new VISite(тАЬhttp://mysite.comтАЭ)

, , , .


, , , - . , , , .

VISite.Logger = new MyLogger();

.

VISite 3 :
WaitWebElementInSec тАУ (5 ) WaitPageToLoadInSec тАУ (20 ) RetryActionInMsec тАУ ( ) (0,5 )

, . WaitPageToLoadInSec WaitWebElementInSec ( 7 ).

SmartSearch SmartClick
, Selenium . , , , ( , ). , .

, -, , , - .
VIQA ┬л┬╗, , .

тАв Implicitly wait , ? .
тАв ? , (, Click ? )
- , , - . , , , , .
. тАФ .


KillAllRunWebDrivers
WebDriver ( , ). . , , , .

(SetUpFixture) :

VISite.KillAllRunWebDrivers();

. .


WebDriver, beforesuit , WebDriver . - Open ( , BeforeTest: , .. DataSource -, ). , , , . 2-5 . - , , , , , VIQA .
VIQA ( ). Open, .. , . . .


. ( )

:
Java ( , HTML5) ( , Selenium JavaScript : , setAttribute ) , .

, , .
, , )
: vk.com/viqatools
email : viqablog@gmail.com

.

UPD: SQA Days 15 vimeo.com/95245507


:
1

public class Checkbox { public TextElement TextElement; public VIElement CheckSignElement; } public class LoginForm { public TextField LoginTxtField; public TextField PasswordTxtField; public Button LoginButton; }

2
[Site(Domain = "http://market.yandex.ru/")] public class MySite : VISite { [Page(Title = " ", Url = "http://mysite.ru/")] public HomePage HomePage; [Page(Title = " ", Url = "http://mysite.ru/somepage")] public SomePage SomePage; } [Page(Title = " ", Url = "http://mysite.ru/")] public class HomePage : VIPage { [Name(" ")] [Locate(ByClassName = "search")] public static SearchSection SearchSection; }
Note: Page .

public class SearchSection : VIElement { [Name(" ")] [Locate(ByXPath = "//*[@class='search_input'] public TextArea SearchTextField; [Name(" '")] [Locate(ByXPath = "//*[contains(text(),'')] [ClickReloadsPage] public Button SearchButton; public void SearchProduct(string productName) { SearchTextField.NewInput(productName); SearchButton.Click(); } }
Note: .

3
public class PassportData { public string Number; public string Series; public FullName FullName; } public class FullName { public string Name; public string SecondName; } [FillFromField("Number")] public TextField PassportNumberTxtField;
Note: Number -, .

[FillFromField("FullName.Name")] public TextField PassportNameTxtField;
Note: Name FullName

public ITextArea PassportSeriesTxtField = new TextField() { FillRule = ToFillRule<PassportData>(pd => (pd.Number != тАЬтАЭ) ? pd.Series : тАЬтАЭ)), }

Note: FillRule

4
(viElement, actionName, viAction) =>{ VISite.Logger.Event(viElement.DefaultLogMessage(text)); viAction.Invoke(); }

Note: VIAction
(actionName, viAction, logResult) =>{ VISite.Logger.Event(DefaultLogMessage(text)); var result = viAction.Invoke(); if (logResult != null) VISite.Logger.Event(logResult.Invoke(result)); return result; }
Note: VIAction
5
new RadioButtons(тАЬ тАЭ, тАЬ#sensorScreenтАЭ) { VIAction = (viElement, text, viAction) => { if (!FirstSensorRadioButton.IsDisplayed) SensorBlock.Click(); viAction.Invoke(); } };
Note: VIAction . .
6
[Name(Name = "Wi-fi"), Locate(ByXPath = "//*[@class='my-checkbox']")] public ICheckbox MyCheckbox1; [Name(Name = "Wi-fi"), Locate(ByClassName = тАЬmy-checkbox")] public Checkbox MyCheckbox2; public ICheckbox MyCheckbox3 = new Checkbox("Wi-fi", "#my-checkbox"); public Checkbox MyCheckbox4 = new Checkbox("Wi-fi", By.CssSelector("#my-checkbox"));
7
[Name(" ''")] [ClickReloadsPage] public IButton SearchButton;

Note: ClickReloadsPage

MyButton.WithPageLoadAction.Click()
Note:

MyButton.WaitTimeout(20).Click()
Note: .

, , :
Button, ┬л┬╗ - .

C .

:
IButton, ICheckbox, ICheckList, IClickable, ILabeled, ILink, ISelector, ISetValue, ITextArea, IVIElement

VIAction
, VIAction.
, , :

:
( Click)
,
( GetLabel):
, ,
.
, , , - , Frame, , ( , ), . 4


, VIAction.
, Frame . 5


, , ( ) . 6 .

PageObjects, .
VISite.

var mySite = new VISite(тАЬhttp://mysite.comтАЭ)

, , , .


, , , - . , , , .

VISite.Logger = new MyLogger();

.

VISite 3 :
WaitWebElementInSec тАУ (5 ) WaitPageToLoadInSec тАУ (20 ) RetryActionInMsec тАУ ( ) (0,5 )

, . WaitPageToLoadInSec WaitWebElementInSec ( 7 ).

SmartSearch SmartClick
, Selenium . , , , ( , ). , .

, -, , , - .
VIQA ┬л┬╗, , .

тАв Implicitly wait , ? .
тАв ? , (, Click ? )
- , , - . , , , , .
. тАФ .


KillAllRunWebDrivers
WebDriver ( , ). . , , , .

(SetUpFixture) :

VISite.KillAllRunWebDrivers();

. .


WebDriver, beforesuit , WebDriver . - Open ( , BeforeTest: , .. DataSource -, ). , , , . 2-5 . - , , , , , VIQA .
VIQA ( ). Open, .. , . . .


. ( )

:
Java ( , HTML5) ( , Selenium JavaScript : , setAttribute ) , .

, , .
, , )
: vk.com/viqatools
email : viqablog@gmail.com

.

UPD: SQA Days 15 vimeo.com/95245507


:
1

public class Checkbox { public TextElement TextElement; public VIElement CheckSignElement; } public class LoginForm { public TextField LoginTxtField; public TextField PasswordTxtField; public Button LoginButton; }

2
[Site(Domain = "http://market.yandex.ru/")] public class MySite : VISite { [Page(Title = " ", Url = "http://mysite.ru/")] public HomePage HomePage; [Page(Title = " ", Url = "http://mysite.ru/somepage")] public SomePage SomePage; } [Page(Title = " ", Url = "http://mysite.ru/")] public class HomePage : VIPage { [Name(" ")] [Locate(ByClassName = "search")] public static SearchSection SearchSection; }
Note: Page .

public class SearchSection : VIElement { [Name(" ")] [Locate(ByXPath = "//*[@class='search_input'] public TextArea SearchTextField; [Name(" '")] [Locate(ByXPath = "//*[contains(text(),'')] [ClickReloadsPage] public Button SearchButton; public void SearchProduct(string productName) { SearchTextField.NewInput(productName); SearchButton.Click(); } }
Note: .

3
public class PassportData { public string Number; public string Series; public FullName FullName; } public class FullName { public string Name; public string SecondName; } [FillFromField("Number")] public TextField PassportNumberTxtField;
Note: Number -, .

[FillFromField("FullName.Name")] public TextField PassportNameTxtField;
Note: Name FullName

public ITextArea PassportSeriesTxtField = new TextField() { FillRule = ToFillRule<PassportData>(pd => (pd.Number != тАЬтАЭ) ? pd.Series : тАЬтАЭ)), }

Note: FillRule

4
(viElement, actionName, viAction) =>{ VISite.Logger.Event(viElement.DefaultLogMessage(text)); viAction.Invoke(); }

Note: VIAction
(actionName, viAction, logResult) =>{ VISite.Logger.Event(DefaultLogMessage(text)); var result = viAction.Invoke(); if (logResult != null) VISite.Logger.Event(logResult.Invoke(result)); return result; }
Note: VIAction
5
new RadioButtons(тАЬ тАЭ, тАЬ#sensorScreenтАЭ) { VIAction = (viElement, text, viAction) => { if (!FirstSensorRadioButton.IsDisplayed) SensorBlock.Click(); viAction.Invoke(); } };
Note: VIAction . .
6
[Name(Name = "Wi-fi"), Locate(ByXPath = "//*[@class='my-checkbox']")] public ICheckbox MyCheckbox1; [Name(Name = "Wi-fi"), Locate(ByClassName = тАЬmy-checkbox")] public Checkbox MyCheckbox2; public ICheckbox MyCheckbox3 = new Checkbox("Wi-fi", "#my-checkbox"); public Checkbox MyCheckbox4 = new Checkbox("Wi-fi", By.CssSelector("#my-checkbox"));
7
[Name(" ''")] [ClickReloadsPage] public IButton SearchButton;

Note: ClickReloadsPage

MyButton.WithPageLoadAction.Click()
Note:

MyButton.WaitTimeout(20).Click()
Note: .

, , :
Button, ┬л┬╗ - .

C .

:
IButton, ICheckbox, ICheckList, IClickable, ILabeled, ILink, ISelector, ISetValue, ITextArea, IVIElement

VIAction
, VIAction.
, , :

:
( Click)
,
( GetLabel):
, ,
.
, , , - , Frame, , ( , ), . 4


, VIAction.
, Frame . 5


, , ( ) . 6 .

PageObjects, .
VISite.

var mySite = new VISite(тАЬhttp://mysite.comтАЭ)

, , , .


, , , - . , , , .

VISite.Logger = new MyLogger();

.

VISite 3 :
WaitWebElementInSec тАУ (5 ) WaitPageToLoadInSec тАУ (20 ) RetryActionInMsec тАУ ( ) (0,5 )

, . WaitPageToLoadInSec WaitWebElementInSec ( 7 ).

SmartSearch SmartClick
, Selenium . , , , ( , ). , .

, -, , , - .
VIQA ┬л┬╗, , .

тАв Implicitly wait , ? .
тАв ? , (, Click ? )
- , , - . , , , , .
. тАФ .


KillAllRunWebDrivers
WebDriver ( , ). . , , , .

(SetUpFixture) :

VISite.KillAllRunWebDrivers();

. .


WebDriver, beforesuit , WebDriver . - Open ( , BeforeTest: , .. DataSource -, ). , , , . 2-5 . - , , , , , VIQA .
VIQA ( ). Open, .. , . . .


. ( )

:
Java ( , HTML5) ( , Selenium JavaScript : , setAttribute ) , .

, , .
, , )
: vk.com/viqatools
email : viqablog@gmail.com

.

UPD: SQA Days 15 vimeo.com/95245507


:
1

public class Checkbox { public TextElement TextElement; public VIElement CheckSignElement; } public class LoginForm { public TextField LoginTxtField; public TextField PasswordTxtField; public Button LoginButton; }

2
[Site(Domain = "http://market.yandex.ru/")] public class MySite : VISite { [Page(Title = " ", Url = "http://mysite.ru/")] public HomePage HomePage; [Page(Title = " ", Url = "http://mysite.ru/somepage")] public SomePage SomePage; } [Page(Title = " ", Url = "http://mysite.ru/")] public class HomePage : VIPage { [Name(" ")] [Locate(ByClassName = "search")] public static SearchSection SearchSection; }
Note: Page .

public class SearchSection : VIElement { [Name(" ")] [Locate(ByXPath = "//*[@class='search_input'] public TextArea SearchTextField; [Name(" '")] [Locate(ByXPath = "//*[contains(text(),'')] [ClickReloadsPage] public Button SearchButton; public void SearchProduct(string productName) { SearchTextField.NewInput(productName); SearchButton.Click(); } }
Note: .

3
public class PassportData { public string Number; public string Series; public FullName FullName; } public class FullName { public string Name; public string SecondName; } [FillFromField("Number")] public TextField PassportNumberTxtField;
Note: Number -, .

[FillFromField("FullName.Name")] public TextField PassportNameTxtField;
Note: Name FullName

public ITextArea PassportSeriesTxtField = new TextField() { FillRule = ToFillRule<PassportData>(pd => (pd.Number != тАЬтАЭ) ? pd.Series : тАЬтАЭ)), }

Note: FillRule

4
(viElement, actionName, viAction) =>{ VISite.Logger.Event(viElement.DefaultLogMessage(text)); viAction.Invoke(); }

Note: VIAction
(actionName, viAction, logResult) =>{ VISite.Logger.Event(DefaultLogMessage(text)); var result = viAction.Invoke(); if (logResult != null) VISite.Logger.Event(logResult.Invoke(result)); return result; }
Note: VIAction
5
new RadioButtons(тАЬ тАЭ, тАЬ#sensorScreenтАЭ) { VIAction = (viElement, text, viAction) => { if (!FirstSensorRadioButton.IsDisplayed) SensorBlock.Click(); viAction.Invoke(); } };
Note: VIAction . .
6
[Name(Name = "Wi-fi"), Locate(ByXPath = "//*[@class='my-checkbox']")] public ICheckbox MyCheckbox1; [Name(Name = "Wi-fi"), Locate(ByClassName = тАЬmy-checkbox")] public Checkbox MyCheckbox2; public ICheckbox MyCheckbox3 = new Checkbox("Wi-fi", "#my-checkbox"); public Checkbox MyCheckbox4 = new Checkbox("Wi-fi", By.CssSelector("#my-checkbox"));
7
[Name(" ''")] [ClickReloadsPage] public IButton SearchButton;

Note: ClickReloadsPage

MyButton.WithPageLoadAction.Click()
Note:

MyButton.WaitTimeout(20).Click()
Note: .
 , ,  :   
Button, ┬л┬╗ - .

C .

:
IButton, ICheckbox, ICheckList, IClickable, ILabeled, ILink, ISelector, ISetValue, ITextArea, IVIElement

VIAction
, VIAction.
, , :

:
( Click)
,
( GetLabel):
, ,
.
, , , - , Frame, , ( , ), . 4


, VIAction.
, Frame . 5


, , ( ) . 6 .

PageObjects, .
VISite.

var mySite = new VISite(тАЬhttp://mysite.comтАЭ)

, , , .


, , , - . , , , .

VISite.Logger = new MyLogger();

.

VISite 3 :
WaitWebElementInSec тАУ (5 ) WaitPageToLoadInSec тАУ (20 ) RetryActionInMsec тАУ ( ) (0,5 )

, . WaitPageToLoadInSec WaitWebElementInSec ( 7 ).

SmartSearch SmartClick
, Selenium . , , , ( , ). , .

, -, , , - .
VIQA ┬л┬╗, , .

тАв Implicitly wait , ? .
тАв ? , (, Click ? )
- , , - . , , , , .
. тАФ .


KillAllRunWebDrivers
WebDriver ( , ). . , , , .

(SetUpFixture) :

VISite.KillAllRunWebDrivers();

. .


WebDriver, beforesuit , WebDriver . - Open ( , BeforeTest: , .. DataSource -, ). , , , . 2-5 . - , , , , , VIQA .
VIQA ( ). Open, .. , . . .


. ( )

:
Java ( , HTML5) ( , Selenium JavaScript : , setAttribute ) , .

, , .
, , )
: vk.com/viqatools
email : viqablog@gmail.com

.

UPD: SQA Days 15 vimeo.com/95245507


:
1

public class Checkbox { public TextElement TextElement; public VIElement CheckSignElement; } public class LoginForm { public TextField LoginTxtField; public TextField PasswordTxtField; public Button LoginButton; }

2
[Site(Domain = "http://market.yandex.ru/")] public class MySite : VISite { [Page(Title = " ", Url = "http://mysite.ru/")] public HomePage HomePage; [Page(Title = " ", Url = "http://mysite.ru/somepage")] public SomePage SomePage; } [Page(Title = " ", Url = "http://mysite.ru/")] public class HomePage : VIPage { [Name(" ")] [Locate(ByClassName = "search")] public static SearchSection SearchSection; }
Note: Page .

public class SearchSection : VIElement { [Name(" ")] [Locate(ByXPath = "//*[@class='search_input'] public TextArea SearchTextField; [Name(" '")] [Locate(ByXPath = "//*[contains(text(),'')] [ClickReloadsPage] public Button SearchButton; public void SearchProduct(string productName) { SearchTextField.NewInput(productName); SearchButton.Click(); } }
Note: .

3
public class PassportData { public string Number; public string Series; public FullName FullName; } public class FullName { public string Name; public string SecondName; } [FillFromField("Number")] public TextField PassportNumberTxtField;
Note: Number -, .

[FillFromField("FullName.Name")] public TextField PassportNameTxtField;
Note: Name FullName

public ITextArea PassportSeriesTxtField = new TextField() { FillRule = ToFillRule<PassportData>(pd => (pd.Number != тАЬтАЭ) ? pd.Series : тАЬтАЭ)), }

Note: FillRule

4
(viElement, actionName, viAction) =>{ VISite.Logger.Event(viElement.DefaultLogMessage(text)); viAction.Invoke(); }

Note: VIAction
(actionName, viAction, logResult) =>{ VISite.Logger.Event(DefaultLogMessage(text)); var result = viAction.Invoke(); if (logResult != null) VISite.Logger.Event(logResult.Invoke(result)); return result; }
Note: VIAction
5
new RadioButtons(тАЬ тАЭ, тАЬ#sensorScreenтАЭ) { VIAction = (viElement, text, viAction) => { if (!FirstSensorRadioButton.IsDisplayed) SensorBlock.Click(); viAction.Invoke(); } };
Note: VIAction . .
6
[Name(Name = "Wi-fi"), Locate(ByXPath = "//*[@class='my-checkbox']")] public ICheckbox MyCheckbox1; [Name(Name = "Wi-fi"), Locate(ByClassName = тАЬmy-checkbox")] public Checkbox MyCheckbox2; public ICheckbox MyCheckbox3 = new Checkbox("Wi-fi", "#my-checkbox"); public Checkbox MyCheckbox4 = new Checkbox("Wi-fi", By.CssSelector("#my-checkbox"));
7
[Name(" ''")] [ClickReloadsPage] public IButton SearchButton;

Note: ClickReloadsPage

MyButton.WithPageLoadAction.Click()
Note:

MyButton.WaitTimeout(20).Click()
Note: .
, , :
Button, ┬л┬╗ - .

C .

:
IButton, ICheckbox, ICheckList, IClickable, ILabeled, ILink, ISelector, ISetValue, ITextArea, IVIElement

VIAction
, VIAction.
, , :

:
( Click)
,
( GetLabel):
, ,
.
, , , - , Frame, , ( , ), . 4


, VIAction.
, Frame . 5


, , ( ) . 6 .

PageObjects, .
VISite.

var mySite = new VISite(тАЬhttp://mysite.comтАЭ)

, , , .


, , , - . , , , .

VISite.Logger = new MyLogger();

.

VISite 3 :
WaitWebElementInSec тАУ (5 ) WaitPageToLoadInSec тАУ (20 ) RetryActionInMsec тАУ ( ) (0,5 )

, . WaitPageToLoadInSec WaitWebElementInSec ( 7 ).

SmartSearch SmartClick
, Selenium . , , , ( , ). , .

, -, , , - .
VIQA ┬л┬╗, , .

тАв Implicitly wait , ? .
тАв ? , (, Click ? )
- , , - . , , , , .
. тАФ .


KillAllRunWebDrivers
WebDriver ( , ). . , , , .

(SetUpFixture) :

VISite.KillAllRunWebDrivers();

. .


WebDriver, beforesuit , WebDriver . - Open ( , BeforeTest: , .. DataSource -, ). , , , . 2-5 . - , , , , , VIQA .
VIQA ( ). Open, .. , . . .


. ( )

:
Java ( , HTML5) ( , Selenium JavaScript : , setAttribute ) , .

, , .
, , )
: vk.com/viqatools
email : viqablog@gmail.com

.

UPD: SQA Days 15 vimeo.com/95245507


:
1

public class Checkbox { public TextElement TextElement; public VIElement CheckSignElement; } public class LoginForm { public TextField LoginTxtField; public TextField PasswordTxtField; public Button LoginButton; }

2
[Site(Domain = "http://market.yandex.ru/")] public class MySite : VISite { [Page(Title = " ", Url = "http://mysite.ru/")] public HomePage HomePage; [Page(Title = " ", Url = "http://mysite.ru/somepage")] public SomePage SomePage; } [Page(Title = " ", Url = "http://mysite.ru/")] public class HomePage : VIPage { [Name(" ")] [Locate(ByClassName = "search")] public static SearchSection SearchSection; }
Note: Page .

public class SearchSection : VIElement { [Name(" ")] [Locate(ByXPath = "//*[@class='search_input'] public TextArea SearchTextField; [Name(" '")] [Locate(ByXPath = "//*[contains(text(),'')] [ClickReloadsPage] public Button SearchButton; public void SearchProduct(string productName) { SearchTextField.NewInput(productName); SearchButton.Click(); } }
Note: .

3
public class PassportData { public string Number; public string Series; public FullName FullName; } public class FullName { public string Name; public string SecondName; } [FillFromField("Number")] public TextField PassportNumberTxtField;
Note: Number -, .

[FillFromField("FullName.Name")] public TextField PassportNameTxtField;
Note: Name FullName

public ITextArea PassportSeriesTxtField = new TextField() { FillRule = ToFillRule<PassportData>(pd => (pd.Number != тАЬтАЭ) ? pd.Series : тАЬтАЭ)), }

Note: FillRule

4
(viElement, actionName, viAction) =>{ VISite.Logger.Event(viElement.DefaultLogMessage(text)); viAction.Invoke(); }

Note: VIAction
(actionName, viAction, logResult) =>{ VISite.Logger.Event(DefaultLogMessage(text)); var result = viAction.Invoke(); if (logResult != null) VISite.Logger.Event(logResult.Invoke(result)); return result; }
Note: VIAction
5
new RadioButtons(тАЬ тАЭ, тАЬ#sensorScreenтАЭ) { VIAction = (viElement, text, viAction) => { if (!FirstSensorRadioButton.IsDisplayed) SensorBlock.Click(); viAction.Invoke(); } };
Note: VIAction . .
6
[Name(Name = "Wi-fi"), Locate(ByXPath = "//*[@class='my-checkbox']")] public ICheckbox MyCheckbox1; [Name(Name = "Wi-fi"), Locate(ByClassName = тАЬmy-checkbox")] public Checkbox MyCheckbox2; public ICheckbox MyCheckbox3 = new Checkbox("Wi-fi", "#my-checkbox"); public Checkbox MyCheckbox4 = new Checkbox("Wi-fi", By.CssSelector("#my-checkbox"));
7
[Name(" ''")] [ClickReloadsPage] public IButton SearchButton;

Note: ClickReloadsPage

MyButton.WithPageLoadAction.Click()
Note:

MyButton.WaitTimeout(20).Click()
Note: .
, , :
Button, ┬л┬╗ - .

C .

:
IButton, ICheckbox, ICheckList, IClickable, ILabeled, ILink, ISelector, ISetValue, ITextArea, IVIElement

VIAction
, VIAction.
, , :

:
( Click)
,
( GetLabel):
, ,
.
, , , - , Frame, , ( , ), . 4


, VIAction.
, Frame . 5


, , ( ) . 6 .

PageObjects, .
VISite.

var mySite = new VISite(тАЬhttp://mysite.comтАЭ)

, , , .


, , , - . , , , .

VISite.Logger = new MyLogger();

.

VISite 3 :
WaitWebElementInSec тАУ (5 ) WaitPageToLoadInSec тАУ (20 ) RetryActionInMsec тАУ ( ) (0,5 )

, . WaitPageToLoadInSec WaitWebElementInSec ( 7 ).

SmartSearch SmartClick
, Selenium . , , , ( , ). , .

, -, , , - .
VIQA ┬л┬╗, , .

тАв Implicitly wait , ? .
тАв ? , (, Click ? )
- , , - . , , , , .
. тАФ .


KillAllRunWebDrivers
WebDriver ( , ). . , , , .

(SetUpFixture) :

VISite.KillAllRunWebDrivers();

. .


WebDriver, beforesuit , WebDriver . - Open ( , BeforeTest: , .. DataSource -, ). , , , . 2-5 . - , , , , , VIQA .
VIQA ( ). Open, .. , . . .


. ( )

:
Java ( , HTML5) ( , Selenium JavaScript : , setAttribute ) , .

, , .
, , )
: vk.com/viqatools
email : viqablog@gmail.com

.

UPD: SQA Days 15 vimeo.com/95245507


:
1

public class Checkbox { public TextElement TextElement; public VIElement CheckSignElement; } public class LoginForm { public TextField LoginTxtField; public TextField PasswordTxtField; public Button LoginButton; }

2
[Site(Domain = "http://market.yandex.ru/")] public class MySite : VISite { [Page(Title = " ", Url = "http://mysite.ru/")] public HomePage HomePage; [Page(Title = " ", Url = "http://mysite.ru/somepage")] public SomePage SomePage; } [Page(Title = " ", Url = "http://mysite.ru/")] public class HomePage : VIPage { [Name(" ")] [Locate(ByClassName = "search")] public static SearchSection SearchSection; }
Note: Page .

public class SearchSection : VIElement { [Name(" ")] [Locate(ByXPath = "//*[@class='search_input'] public TextArea SearchTextField; [Name(" '")] [Locate(ByXPath = "//*[contains(text(),'')] [ClickReloadsPage] public Button SearchButton; public void SearchProduct(string productName) { SearchTextField.NewInput(productName); SearchButton.Click(); } }
Note: .

3
public class PassportData { public string Number; public string Series; public FullName FullName; } public class FullName { public string Name; public string SecondName; } [FillFromField("Number")] public TextField PassportNumberTxtField;
Note: Number -, .

[FillFromField("FullName.Name")] public TextField PassportNameTxtField;
Note: Name FullName

public ITextArea PassportSeriesTxtField = new TextField() { FillRule = ToFillRule<PassportData>(pd => (pd.Number != тАЬтАЭ) ? pd.Series : тАЬтАЭ)), }

Note: FillRule

4
(viElement, actionName, viAction) =>{ VISite.Logger.Event(viElement.DefaultLogMessage(text)); viAction.Invoke(); }

Note: VIAction
(actionName, viAction, logResult) =>{ VISite.Logger.Event(DefaultLogMessage(text)); var result = viAction.Invoke(); if (logResult != null) VISite.Logger.Event(logResult.Invoke(result)); return result; }
Note: VIAction
5
new RadioButtons(тАЬ тАЭ, тАЬ#sensorScreenтАЭ) { VIAction = (viElement, text, viAction) => { if (!FirstSensorRadioButton.IsDisplayed) SensorBlock.Click(); viAction.Invoke(); } };
Note: VIAction . .
6
[Name(Name = "Wi-fi"), Locate(ByXPath = "//*[@class='my-checkbox']")] public ICheckbox MyCheckbox1; [Name(Name = "Wi-fi"), Locate(ByClassName = тАЬmy-checkbox")] public Checkbox MyCheckbox2; public ICheckbox MyCheckbox3 = new Checkbox("Wi-fi", "#my-checkbox"); public Checkbox MyCheckbox4 = new Checkbox("Wi-fi", By.CssSelector("#my-checkbox"));
7
[Name(" ''")] [ClickReloadsPage] public IButton SearchButton;

Note: ClickReloadsPage

MyButton.WithPageLoadAction.Click()
Note:

MyButton.WaitTimeout(20).Click()
Note: .

, , :
Button, ┬л┬╗ - .

C .

:
IButton, ICheckbox, ICheckList, IClickable, ILabeled, ILink, ISelector, ISetValue, ITextArea, IVIElement

VIAction
, VIAction.
, , :

:
( Click)
,
( GetLabel):
, ,
.
, , , - , Frame, , ( , ), . 4


, VIAction.
, Frame . 5


, , ( ) . 6 .

PageObjects, .
VISite.

var mySite = new VISite(тАЬhttp://mysite.comтАЭ)

, , , .


, , , - . , , , .

VISite.Logger = new MyLogger();

.

VISite 3 :
WaitWebElementInSec тАУ (5 ) WaitPageToLoadInSec тАУ (20 ) RetryActionInMsec тАУ ( ) (0,5 )

, . WaitPageToLoadInSec WaitWebElementInSec ( 7 ).

SmartSearch SmartClick
, Selenium . , , , ( , ). , .

, -, , , - .
VIQA ┬л┬╗, , .

тАв Implicitly wait , ? .
тАв ? , (, Click ? )
- , , - . , , , , .
. тАФ .


KillAllRunWebDrivers
WebDriver ( , ). . , , , .

(SetUpFixture) :

VISite.KillAllRunWebDrivers();

. .


WebDriver, beforesuit , WebDriver . - Open ( , BeforeTest: , .. DataSource -, ). , , , . 2-5 . - , , , , , VIQA .
VIQA ( ). Open, .. , . . .


. ( )

:
Java ( , HTML5) ( , Selenium JavaScript : , setAttribute ) , .

, , .
, , )
: vk.com/viqatools
email : viqablog@gmail.com

.

UPD: SQA Days 15 vimeo.com/95245507


:
1

public class Checkbox { public TextElement TextElement; public VIElement CheckSignElement; } public class LoginForm { public TextField LoginTxtField; public TextField PasswordTxtField; public Button LoginButton; }

2
[Site(Domain = "http://market.yandex.ru/")] public class MySite : VISite { [Page(Title = " ", Url = "http://mysite.ru/")] public HomePage HomePage; [Page(Title = " ", Url = "http://mysite.ru/somepage")] public SomePage SomePage; } [Page(Title = " ", Url = "http://mysite.ru/")] public class HomePage : VIPage { [Name(" ")] [Locate(ByClassName = "search")] public static SearchSection SearchSection; }
Note: Page .

public class SearchSection : VIElement { [Name(" ")] [Locate(ByXPath = "//*[@class='search_input'] public TextArea SearchTextField; [Name(" '")] [Locate(ByXPath = "//*[contains(text(),'')] [ClickReloadsPage] public Button SearchButton; public void SearchProduct(string productName) { SearchTextField.NewInput(productName); SearchButton.Click(); } }
Note: .

3
public class PassportData { public string Number; public string Series; public FullName FullName; } public class FullName { public string Name; public string SecondName; } [FillFromField("Number")] public TextField PassportNumberTxtField;
Note: Number -, .

[FillFromField("FullName.Name")] public TextField PassportNameTxtField;
Note: Name FullName

public ITextArea PassportSeriesTxtField = new TextField() { FillRule = ToFillRule<PassportData>(pd => (pd.Number != тАЬтАЭ) ? pd.Series : тАЬтАЭ)), }

Note: FillRule

4
(viElement, actionName, viAction) =>{ VISite.Logger.Event(viElement.DefaultLogMessage(text)); viAction.Invoke(); }

Note: VIAction
(actionName, viAction, logResult) =>{ VISite.Logger.Event(DefaultLogMessage(text)); var result = viAction.Invoke(); if (logResult != null) VISite.Logger.Event(logResult.Invoke(result)); return result; }
Note: VIAction
5
new RadioButtons(тАЬ тАЭ, тАЬ#sensorScreenтАЭ) { VIAction = (viElement, text, viAction) => { if (!FirstSensorRadioButton.IsDisplayed) SensorBlock.Click(); viAction.Invoke(); } };
Note: VIAction . .
6
[Name(Name = "Wi-fi"), Locate(ByXPath = "//*[@class='my-checkbox']")] public ICheckbox MyCheckbox1; [Name(Name = "Wi-fi"), Locate(ByClassName = тАЬmy-checkbox")] public Checkbox MyCheckbox2; public ICheckbox MyCheckbox3 = new Checkbox("Wi-fi", "#my-checkbox"); public Checkbox MyCheckbox4 = new Checkbox("Wi-fi", By.CssSelector("#my-checkbox"));
7
[Name(" ''")] [ClickReloadsPage] public IButton SearchButton;

Note: ClickReloadsPage

MyButton.WithPageLoadAction.Click()
Note:

MyButton.WaitTimeout(20).Click()
Note: .

, , :
Button, ┬л┬╗ - .

C .

:
IButton, ICheckbox, ICheckList, IClickable, ILabeled, ILink, ISelector, ISetValue, ITextArea, IVIElement

VIAction
, VIAction.
, , :

:
( Click)
,
( GetLabel):
, ,
.
, , , - , Frame, , ( , ), . 4


, VIAction.
, Frame . 5


, , ( ) . 6 .

PageObjects, .
VISite.

var mySite = new VISite(тАЬhttp://mysite.comтАЭ)

, , , .


, , , - . , , , .

VISite.Logger = new MyLogger();

.

VISite 3 :
WaitWebElementInSec тАУ (5 ) WaitPageToLoadInSec тАУ (20 ) RetryActionInMsec тАУ ( ) (0,5 )

, . WaitPageToLoadInSec WaitWebElementInSec ( 7 ).

SmartSearch SmartClick
, Selenium . , , , ( , ). , .

, -, , , - .
VIQA ┬л┬╗, , .

тАв Implicitly wait , ? .
тАв ? , (, Click ? )
- , , - . , , , , .
. тАФ .


KillAllRunWebDrivers
WebDriver ( , ). . , , , .

(SetUpFixture) :

VISite.KillAllRunWebDrivers();

. .


WebDriver, beforesuit , WebDriver . - Open ( , BeforeTest: , .. DataSource -, ). , , , . 2-5 . - , , , , , VIQA .
VIQA ( ). Open, .. , . . .


. ( )

:
Java ( , HTML5) ( , Selenium JavaScript : , setAttribute ) , .

, , .
, , )
: vk.com/viqatools
email : viqablog@gmail.com

.

UPD: SQA Days 15 vimeo.com/95245507


:
1

public class Checkbox { public TextElement TextElement; public VIElement CheckSignElement; } public class LoginForm { public TextField LoginTxtField; public TextField PasswordTxtField; public Button LoginButton; }

2
[Site(Domain = "http://market.yandex.ru/")] public class MySite : VISite { [Page(Title = " ", Url = "http://mysite.ru/")] public HomePage HomePage; [Page(Title = " ", Url = "http://mysite.ru/somepage")] public SomePage SomePage; } [Page(Title = " ", Url = "http://mysite.ru/")] public class HomePage : VIPage { [Name(" ")] [Locate(ByClassName = "search")] public static SearchSection SearchSection; }
Note: Page .

public class SearchSection : VIElement { [Name(" ")] [Locate(ByXPath = "//*[@class='search_input'] public TextArea SearchTextField; [Name(" '")] [Locate(ByXPath = "//*[contains(text(),'')] [ClickReloadsPage] public Button SearchButton; public void SearchProduct(string productName) { SearchTextField.NewInput(productName); SearchButton.Click(); } }
Note: .

3
public class PassportData { public string Number; public string Series; public FullName FullName; } public class FullName { public string Name; public string SecondName; } [FillFromField("Number")] public TextField PassportNumberTxtField;
Note: Number -, .

[FillFromField("FullName.Name")] public TextField PassportNameTxtField;
Note: Name FullName

public ITextArea PassportSeriesTxtField = new TextField() { FillRule = ToFillRule<PassportData>(pd => (pd.Number != тАЬтАЭ) ? pd.Series : тАЬтАЭ)), }

Note: FillRule

4
(viElement, actionName, viAction) =>{ VISite.Logger.Event(viElement.DefaultLogMessage(text)); viAction.Invoke(); }

Note: VIAction
(actionName, viAction, logResult) =>{ VISite.Logger.Event(DefaultLogMessage(text)); var result = viAction.Invoke(); if (logResult != null) VISite.Logger.Event(logResult.Invoke(result)); return result; }
Note: VIAction
5
new RadioButtons(тАЬ тАЭ, тАЬ#sensorScreenтАЭ) { VIAction = (viElement, text, viAction) => { if (!FirstSensorRadioButton.IsDisplayed) SensorBlock.Click(); viAction.Invoke(); } };
Note: VIAction . .
6
[Name(Name = "Wi-fi"), Locate(ByXPath = "//*[@class='my-checkbox']")] public ICheckbox MyCheckbox1; [Name(Name = "Wi-fi"), Locate(ByClassName = тАЬmy-checkbox")] public Checkbox MyCheckbox2; public ICheckbox MyCheckbox3 = new Checkbox("Wi-fi", "#my-checkbox"); public Checkbox MyCheckbox4 = new Checkbox("Wi-fi", By.CssSelector("#my-checkbox"));
7
[Name(" ''")] [ClickReloadsPage] public IButton SearchButton;

Note: ClickReloadsPage

MyButton.WithPageLoadAction.Click()
Note:

MyButton.WaitTimeout(20).Click()
Note: .

, , :
Button, ┬л┬╗ - .

C .

:
IButton, ICheckbox, ICheckList, IClickable, ILabeled, ILink, ISelector, ISetValue, ITextArea, IVIElement

VIAction
, VIAction.
, , :

:
( Click)
,
( GetLabel):
, ,
.
, , , - , Frame, , ( , ), . 4


, VIAction.
, Frame . 5


, , ( ) . 6 .

PageObjects, .
VISite.

var mySite = new VISite(тАЬhttp://mysite.comтАЭ)

, , , .


, , , - . , , , .

VISite.Logger = new MyLogger();

.

VISite 3 :
WaitWebElementInSec тАУ (5 ) WaitPageToLoadInSec тАУ (20 ) RetryActionInMsec тАУ ( ) (0,5 )

, . WaitPageToLoadInSec WaitWebElementInSec ( 7 ).

SmartSearch SmartClick
, Selenium . , , , ( , ). , .

, -, , , - .
VIQA ┬л┬╗, , .

тАв Implicitly wait , ? .
тАв ? , (, Click ? )
- , , - . , , , , .
. тАФ .


KillAllRunWebDrivers
WebDriver ( , ). . , , , .

(SetUpFixture) :

VISite.KillAllRunWebDrivers();

. .


WebDriver, beforesuit , WebDriver . - Open ( , BeforeTest: , .. DataSource -, ). , , , . 2-5 . - , , , , , VIQA .
VIQA ( ). Open, .. , . . .


. ( )

:
Java ( , HTML5) ( , Selenium JavaScript : , setAttribute ) , .

, , .
, , )
: vk.com/viqatools
email : viqablog@gmail.com

.

UPD: SQA Days 15 vimeo.com/95245507


:
1

public class Checkbox { public TextElement TextElement; public VIElement CheckSignElement; } public class LoginForm { public TextField LoginTxtField; public TextField PasswordTxtField; public Button LoginButton; }

2
[Site(Domain = "http://market.yandex.ru/")] public class MySite : VISite { [Page(Title = " ", Url = "http://mysite.ru/")] public HomePage HomePage; [Page(Title = " ", Url = "http://mysite.ru/somepage")] public SomePage SomePage; } [Page(Title = " ", Url = "http://mysite.ru/")] public class HomePage : VIPage { [Name(" ")] [Locate(ByClassName = "search")] public static SearchSection SearchSection; }
Note: Page .

public class SearchSection : VIElement { [Name(" ")] [Locate(ByXPath = "//*[@class='search_input'] public TextArea SearchTextField; [Name(" '")] [Locate(ByXPath = "//*[contains(text(),'')] [ClickReloadsPage] public Button SearchButton; public void SearchProduct(string productName) { SearchTextField.NewInput(productName); SearchButton.Click(); } }
Note: .

3
public class PassportData { public string Number; public string Series; public FullName FullName; } public class FullName { public string Name; public string SecondName; } [FillFromField("Number")] public TextField PassportNumberTxtField;
Note: Number -, .

[FillFromField("FullName.Name")] public TextField PassportNameTxtField;
Note: Name FullName

public ITextArea PassportSeriesTxtField = new TextField() { FillRule = ToFillRule<PassportData>(pd => (pd.Number != тАЬтАЭ) ? pd.Series : тАЬтАЭ)), }

Note: FillRule

4
(viElement, actionName, viAction) =>{ VISite.Logger.Event(viElement.DefaultLogMessage(text)); viAction.Invoke(); }

Note: VIAction
(actionName, viAction, logResult) =>{ VISite.Logger.Event(DefaultLogMessage(text)); var result = viAction.Invoke(); if (logResult != null) VISite.Logger.Event(logResult.Invoke(result)); return result; }
Note: VIAction
5
new RadioButtons(тАЬ тАЭ, тАЬ#sensorScreenтАЭ) { VIAction = (viElement, text, viAction) => { if (!FirstSensorRadioButton.IsDisplayed) SensorBlock.Click(); viAction.Invoke(); } };
Note: VIAction . .
6
[Name(Name = "Wi-fi"), Locate(ByXPath = "//*[@class='my-checkbox']")] public ICheckbox MyCheckbox1; [Name(Name = "Wi-fi"), Locate(ByClassName = тАЬmy-checkbox")] public Checkbox MyCheckbox2; public ICheckbox MyCheckbox3 = new Checkbox("Wi-fi", "#my-checkbox"); public Checkbox MyCheckbox4 = new Checkbox("Wi-fi", By.CssSelector("#my-checkbox"));
7
[Name(" ''")] [ClickReloadsPage] public IButton SearchButton;

Note: ClickReloadsPage

MyButton.WithPageLoadAction.Click()
Note:

MyButton.WaitTimeout(20).Click()
Note: .

, , :
Button, ┬л┬╗ - .

C .

:
IButton, ICheckbox, ICheckList, IClickable, ILabeled, ILink, ISelector, ISetValue, ITextArea, IVIElement

VIAction
, VIAction.
, , :

:
( Click)
,
( GetLabel):
, ,
.
, , , - , Frame, , ( , ), . 4


, VIAction.
, Frame . 5


, , ( ) . 6 .

PageObjects, .
VISite.

var mySite = new VISite(тАЬhttp://mysite.comтАЭ)

, , , .


, , , - . , , , .

VISite.Logger = new MyLogger();

.

VISite 3 :
WaitWebElementInSec тАУ (5 ) WaitPageToLoadInSec тАУ (20 ) RetryActionInMsec тАУ ( ) (0,5 )

, . WaitPageToLoadInSec WaitWebElementInSec ( 7 ).

SmartSearch SmartClick
, Selenium . , , , ( , ). , .

, -, , , - .
VIQA ┬л┬╗, , .

тАв Implicitly wait , ? .
тАв ? , (, Click ? )
- , , - . , , , , .
. тАФ .


KillAllRunWebDrivers
WebDriver ( , ). . , , , .

(SetUpFixture) :

VISite.KillAllRunWebDrivers();

. .


WebDriver, beforesuit , WebDriver . - Open ( , BeforeTest: , .. DataSource -, ). , , , . 2-5 . - , , , , , VIQA .
VIQA ( ). Open, .. , . . .


. ( )

:
Java ( , HTML5) ( , Selenium JavaScript : , setAttribute ) , .

, , .
, , )
: vk.com/viqatools
email : viqablog@gmail.com

.

UPD: SQA Days 15 vimeo.com/95245507


:
1

public class Checkbox { public TextElement TextElement; public VIElement CheckSignElement; } public class LoginForm { public TextField LoginTxtField; public TextField PasswordTxtField; public Button LoginButton; }

2
[Site(Domain = "http://market.yandex.ru/")] public class MySite : VISite { [Page(Title = " ", Url = "http://mysite.ru/")] public HomePage HomePage; [Page(Title = " ", Url = "http://mysite.ru/somepage")] public SomePage SomePage; } [Page(Title = " ", Url = "http://mysite.ru/")] public class HomePage : VIPage { [Name(" ")] [Locate(ByClassName = "search")] public static SearchSection SearchSection; }
Note: Page .

public class SearchSection : VIElement { [Name(" ")] [Locate(ByXPath = "//*[@class='search_input'] public TextArea SearchTextField; [Name(" '")] [Locate(ByXPath = "//*[contains(text(),'')] [ClickReloadsPage] public Button SearchButton; public void SearchProduct(string productName) { SearchTextField.NewInput(productName); SearchButton.Click(); } }
Note: .

3
public class PassportData { public string Number; public string Series; public FullName FullName; } public class FullName { public string Name; public string SecondName; } [FillFromField("Number")] public TextField PassportNumberTxtField;
Note: Number -, .

[FillFromField("FullName.Name")] public TextField PassportNameTxtField;
Note: Name FullName

public ITextArea PassportSeriesTxtField = new TextField() { FillRule = ToFillRule<PassportData>(pd => (pd.Number != тАЬтАЭ) ? pd.Series : тАЬтАЭ)), }

Note: FillRule

4
(viElement, actionName, viAction) =>{ VISite.Logger.Event(viElement.DefaultLogMessage(text)); viAction.Invoke(); }

Note: VIAction
(actionName, viAction, logResult) =>{ VISite.Logger.Event(DefaultLogMessage(text)); var result = viAction.Invoke(); if (logResult != null) VISite.Logger.Event(logResult.Invoke(result)); return result; }
Note: VIAction
5
new RadioButtons(тАЬ тАЭ, тАЬ#sensorScreenтАЭ) { VIAction = (viElement, text, viAction) => { if (!FirstSensorRadioButton.IsDisplayed) SensorBlock.Click(); viAction.Invoke(); } };
Note: VIAction . .
6
[Name(Name = "Wi-fi"), Locate(ByXPath = "//*[@class='my-checkbox']")] public ICheckbox MyCheckbox1; [Name(Name = "Wi-fi"), Locate(ByClassName = тАЬmy-checkbox")] public Checkbox MyCheckbox2; public ICheckbox MyCheckbox3 = new Checkbox("Wi-fi", "#my-checkbox"); public Checkbox MyCheckbox4 = new Checkbox("Wi-fi", By.CssSelector("#my-checkbox"));
7
[Name(" ''")] [ClickReloadsPage] public IButton SearchButton;

Note: ClickReloadsPage

MyButton.WithPageLoadAction.Click()
Note:

MyButton.WaitTimeout(20).Click()
Note: .
, , :
Button, ┬л┬╗ - .

C .

:
IButton, ICheckbox, ICheckList, IClickable, ILabeled, ILink, ISelector, ISetValue, ITextArea, IVIElement

VIAction
, VIAction.
, , :

:
( Click)
,
( GetLabel):
, ,
.
, , , - , Frame, , ( , ), . 4


, VIAction.
, Frame . 5


, , ( ) . 6 .

PageObjects, .
VISite.

var mySite = new VISite(тАЬhttp://mysite.comтАЭ)

, , , .


, , , - . , , , .

VISite.Logger = new MyLogger();

.

VISite 3 :
WaitWebElementInSec тАУ (5 ) WaitPageToLoadInSec тАУ (20 ) RetryActionInMsec тАУ ( ) (0,5 )

, . WaitPageToLoadInSec WaitWebElementInSec ( 7 ).

SmartSearch SmartClick
, Selenium . , , , ( , ). , .

, -, , , - .
VIQA ┬л┬╗, , .

тАв Implicitly wait , ? .
тАв ? , (, Click ? )
- , , - . , , , , .
. тАФ .


KillAllRunWebDrivers
WebDriver ( , ). . , , , .

(SetUpFixture) :

VISite.KillAllRunWebDrivers();

. .


WebDriver, beforesuit , WebDriver . - Open ( , BeforeTest: , .. DataSource -, ). , , , . 2-5 . - , , , , , VIQA .
VIQA ( ). Open, .. , . . .


. ( )

:
Java ( , HTML5) ( , Selenium JavaScript : , setAttribute ) , .

, , .
, , )
: vk.com/viqatools
email : viqablog@gmail.com

.

UPD: SQA Days 15 vimeo.com/95245507


:
1

public class Checkbox { public TextElement TextElement; public VIElement CheckSignElement; } public class LoginForm { public TextField LoginTxtField; public TextField PasswordTxtField; public Button LoginButton; }

2
[Site(Domain = "http://market.yandex.ru/")] public class MySite : VISite { [Page(Title = " ", Url = "http://mysite.ru/")] public HomePage HomePage; [Page(Title = " ", Url = "http://mysite.ru/somepage")] public SomePage SomePage; } [Page(Title = " ", Url = "http://mysite.ru/")] public class HomePage : VIPage { [Name(" ")] [Locate(ByClassName = "search")] public static SearchSection SearchSection; }
Note: Page .

public class SearchSection : VIElement { [Name(" ")] [Locate(ByXPath = "//*[@class='search_input'] public TextArea SearchTextField; [Name(" '")] [Locate(ByXPath = "//*[contains(text(),'')] [ClickReloadsPage] public Button SearchButton; public void SearchProduct(string productName) { SearchTextField.NewInput(productName); SearchButton.Click(); } }
Note: .

3
public class PassportData { public string Number; public string Series; public FullName FullName; } public class FullName { public string Name; public string SecondName; } [FillFromField("Number")] public TextField PassportNumberTxtField;
Note: Number -, .

[FillFromField("FullName.Name")] public TextField PassportNameTxtField;
Note: Name FullName

public ITextArea PassportSeriesTxtField = new TextField() { FillRule = ToFillRule<PassportData>(pd => (pd.Number != тАЬтАЭ) ? pd.Series : тАЬтАЭ)), }

Note: FillRule

4
(viElement, actionName, viAction) =>{ VISite.Logger.Event(viElement.DefaultLogMessage(text)); viAction.Invoke(); }

Note: VIAction
(actionName, viAction, logResult) =>{ VISite.Logger.Event(DefaultLogMessage(text)); var result = viAction.Invoke(); if (logResult != null) VISite.Logger.Event(logResult.Invoke(result)); return result; }
Note: VIAction
5
new RadioButtons(тАЬ тАЭ, тАЬ#sensorScreenтАЭ) { VIAction = (viElement, text, viAction) => { if (!FirstSensorRadioButton.IsDisplayed) SensorBlock.Click(); viAction.Invoke(); } };
Note: VIAction . .
6
[Name(Name = "Wi-fi"), Locate(ByXPath = "//*[@class='my-checkbox']")] public ICheckbox MyCheckbox1; [Name(Name = "Wi-fi"), Locate(ByClassName = тАЬmy-checkbox")] public Checkbox MyCheckbox2; public ICheckbox MyCheckbox3 = new Checkbox("Wi-fi", "#my-checkbox"); public Checkbox MyCheckbox4 = new Checkbox("Wi-fi", By.CssSelector("#my-checkbox"));
7
[Name(" ''")] [ClickReloadsPage] public IButton SearchButton;

Note: ClickReloadsPage

MyButton.WithPageLoadAction.Click()
Note:

MyButton.WaitTimeout(20).Click()
Note: .
, , :
Button, ┬л┬╗ - .

C .

:
IButton, ICheckbox, ICheckList, IClickable, ILabeled, ILink, ISelector, ISetValue, ITextArea, IVIElement

VIAction
, VIAction.
, , :

:
( Click)
,
( GetLabel):
, ,
.
, , , - , Frame, , ( , ), . 4


, VIAction.
, Frame . 5


, , ( ) . 6 .

PageObjects, .
VISite.

var mySite = new VISite(тАЬhttp://mysite.comтАЭ)

, , , .


, , , - . , , , .

VISite.Logger = new MyLogger();

.

VISite 3 :
WaitWebElementInSec тАУ (5 ) WaitPageToLoadInSec тАУ (20 ) RetryActionInMsec тАУ ( ) (0,5 )

, . WaitPageToLoadInSec WaitWebElementInSec ( 7 ).

SmartSearch SmartClick
, Selenium . , , , ( , ). , .

, -, , , - .
VIQA ┬л┬╗, , .

тАв Implicitly wait , ? .
тАв ? , (, Click ? )
- , , - . , , , , .
. тАФ .


KillAllRunWebDrivers
WebDriver ( , ). . , , , .

(SetUpFixture) :

VISite.KillAllRunWebDrivers();

. .


WebDriver, beforesuit , WebDriver . - Open ( , BeforeTest: , .. DataSource -, ). , , , . 2-5 . - , , , , , VIQA .
VIQA ( ). Open, .. , . . .


. ( )

:
Java ( , HTML5) ( , Selenium JavaScript : , setAttribute ) , .

, , .
, , )
: vk.com/viqatools
email : viqablog@gmail.com

.

UPD: SQA Days 15 vimeo.com/95245507


:
1

public class Checkbox { public TextElement TextElement; public VIElement CheckSignElement; } public class LoginForm { public TextField LoginTxtField; public TextField PasswordTxtField; public Button LoginButton; }

2
[Site(Domain = "http://market.yandex.ru/")] public class MySite : VISite { [Page(Title = " ", Url = "http://mysite.ru/")] public HomePage HomePage; [Page(Title = " ", Url = "http://mysite.ru/somepage")] public SomePage SomePage; } [Page(Title = " ", Url = "http://mysite.ru/")] public class HomePage : VIPage { [Name(" ")] [Locate(ByClassName = "search")] public static SearchSection SearchSection; }
Note: Page .

public class SearchSection : VIElement { [Name(" ")] [Locate(ByXPath = "//*[@class='search_input'] public TextArea SearchTextField; [Name(" '")] [Locate(ByXPath = "//*[contains(text(),'')] [ClickReloadsPage] public Button SearchButton; public void SearchProduct(string productName) { SearchTextField.NewInput(productName); SearchButton.Click(); } }
Note: .

3
public class PassportData { public string Number; public string Series; public FullName FullName; } public class FullName { public string Name; public string SecondName; } [FillFromField("Number")] public TextField PassportNumberTxtField;
Note: Number -, .

[FillFromField("FullName.Name")] public TextField PassportNameTxtField;
Note: Name FullName

public ITextArea PassportSeriesTxtField = new TextField() { FillRule = ToFillRule<PassportData>(pd => (pd.Number != тАЬтАЭ) ? pd.Series : тАЬтАЭ)), }

Note: FillRule

4
(viElement, actionName, viAction) =>{ VISite.Logger.Event(viElement.DefaultLogMessage(text)); viAction.Invoke(); }

Note: VIAction
(actionName, viAction, logResult) =>{ VISite.Logger.Event(DefaultLogMessage(text)); var result = viAction.Invoke(); if (logResult != null) VISite.Logger.Event(logResult.Invoke(result)); return result; }
Note: VIAction
5
new RadioButtons(тАЬ тАЭ, тАЬ#sensorScreenтАЭ) { VIAction = (viElement, text, viAction) => { if (!FirstSensorRadioButton.IsDisplayed) SensorBlock.Click(); viAction.Invoke(); } };
Note: VIAction . .
6
[Name(Name = "Wi-fi"), Locate(ByXPath = "//*[@class='my-checkbox']")] public ICheckbox MyCheckbox1; [Name(Name = "Wi-fi"), Locate(ByClassName = тАЬmy-checkbox")] public Checkbox MyCheckbox2; public ICheckbox MyCheckbox3 = new Checkbox("Wi-fi", "#my-checkbox"); public Checkbox MyCheckbox4 = new Checkbox("Wi-fi", By.CssSelector("#my-checkbox"));
7
[Name(" ''")] [ClickReloadsPage] public IButton SearchButton;

Note: ClickReloadsPage

MyButton.WithPageLoadAction.Click()
Note:

MyButton.WaitTimeout(20).Click()
Note: .
 , ,  :   
Button, ┬л┬╗ - .

C .

:
IButton, ICheckbox, ICheckList, IClickable, ILabeled, ILink, ISelector, ISetValue, ITextArea, IVIElement

VIAction
, VIAction.
, , :

:
( Click)
,
( GetLabel):
, ,
.
, , , - , Frame, , ( , ), . 4


, VIAction.
, Frame . 5


, , ( ) . 6 .

PageObjects, .
VISite.

var mySite = new VISite(тАЬhttp://mysite.comтАЭ)

, , , .


, , , - . , , , .

VISite.Logger = new MyLogger();

.

VISite 3 :
WaitWebElementInSec тАУ (5 ) WaitPageToLoadInSec тАУ (20 ) RetryActionInMsec тАУ ( ) (0,5 )

, . WaitPageToLoadInSec WaitWebElementInSec ( 7 ).

SmartSearch SmartClick
, Selenium . , , , ( , ). , .

, -, , , - .
VIQA ┬л┬╗, , .

тАв Implicitly wait , ? .
тАв ? , (, Click ? )
- , , - . , , , , .
. тАФ .


KillAllRunWebDrivers
WebDriver ( , ). . , , , .

(SetUpFixture) :

VISite.KillAllRunWebDrivers();

. .


WebDriver, beforesuit , WebDriver . - Open ( , BeforeTest: , .. DataSource -, ). , , , . 2-5 . - , , , , , VIQA .
VIQA ( ). Open, .. , . . .


. ( )

:
Java ( , HTML5) ( , Selenium JavaScript : , setAttribute ) , .

, , .
, , )
: vk.com/viqatools
email : viqablog@gmail.com

.

UPD: SQA Days 15 vimeo.com/95245507


:
1

public class Checkbox { public TextElement TextElement; public VIElement CheckSignElement; } public class LoginForm { public TextField LoginTxtField; public TextField PasswordTxtField; public Button LoginButton; }

2
[Site(Domain = "http://market.yandex.ru/")] public class MySite : VISite { [Page(Title = " ", Url = "http://mysite.ru/")] public HomePage HomePage; [Page(Title = " ", Url = "http://mysite.ru/somepage")] public SomePage SomePage; } [Page(Title = " ", Url = "http://mysite.ru/")] public class HomePage : VIPage { [Name(" ")] [Locate(ByClassName = "search")] public static SearchSection SearchSection; }
Note: Page .

public class SearchSection : VIElement { [Name(" ")] [Locate(ByXPath = "//*[@class='search_input'] public TextArea SearchTextField; [Name(" '")] [Locate(ByXPath = "//*[contains(text(),'')] [ClickReloadsPage] public Button SearchButton; public void SearchProduct(string productName) { SearchTextField.NewInput(productName); SearchButton.Click(); } }
Note: .

3
public class PassportData { public string Number; public string Series; public FullName FullName; } public class FullName { public string Name; public string SecondName; } [FillFromField("Number")] public TextField PassportNumberTxtField;
Note: Number -, .

[FillFromField("FullName.Name")] public TextField PassportNameTxtField;
Note: Name FullName

public ITextArea PassportSeriesTxtField = new TextField() { FillRule = ToFillRule<PassportData>(pd => (pd.Number != тАЬтАЭ) ? pd.Series : тАЬтАЭ)), }

Note: FillRule

4
(viElement, actionName, viAction) =>{ VISite.Logger.Event(viElement.DefaultLogMessage(text)); viAction.Invoke(); }

Note: VIAction
(actionName, viAction, logResult) =>{ VISite.Logger.Event(DefaultLogMessage(text)); var result = viAction.Invoke(); if (logResult != null) VISite.Logger.Event(logResult.Invoke(result)); return result; }
Note: VIAction
5
new RadioButtons(тАЬ тАЭ, тАЬ#sensorScreenтАЭ) { VIAction = (viElement, text, viAction) => { if (!FirstSensorRadioButton.IsDisplayed) SensorBlock.Click(); viAction.Invoke(); } };
Note: VIAction . .
6
[Name(Name = "Wi-fi"), Locate(ByXPath = "//*[@class='my-checkbox']")] public ICheckbox MyCheckbox1; [Name(Name = "Wi-fi"), Locate(ByClassName = тАЬmy-checkbox")] public Checkbox MyCheckbox2; public ICheckbox MyCheckbox3 = new Checkbox("Wi-fi", "#my-checkbox"); public Checkbox MyCheckbox4 = new Checkbox("Wi-fi", By.CssSelector("#my-checkbox"));
7
[Name(" ''")] [ClickReloadsPage] public IButton SearchButton;

Note: ClickReloadsPage

MyButton.WithPageLoadAction.Click()
Note:

MyButton.WaitTimeout(20).Click()
Note: .
, , :
Button, ┬л┬╗ - .

C .

:
IButton, ICheckbox, ICheckList, IClickable, ILabeled, ILink, ISelector, ISetValue, ITextArea, IVIElement

VIAction
, VIAction.
, , :

:
( Click)
,
( GetLabel):
, ,
.
, , , - , Frame, , ( , ), . 4


, VIAction.
, Frame . 5


, , ( ) . 6 .

PageObjects, .
VISite.

var mySite = new VISite(тАЬhttp://mysite.comтАЭ)

, , , .


, , , - . , , , .

VISite.Logger = new MyLogger();

.

VISite 3 :
WaitWebElementInSec тАУ (5 ) WaitPageToLoadInSec тАУ (20 ) RetryActionInMsec тАУ ( ) (0,5 )

, . WaitPageToLoadInSec WaitWebElementInSec ( 7 ).

SmartSearch SmartClick
, Selenium . , , , ( , ). , .

, -, , , - .
VIQA ┬л┬╗, , .

тАв Implicitly wait , ? .
тАв ? , (, Click ? )
- , , - . , , , , .
. тАФ .


KillAllRunWebDrivers
WebDriver ( , ). . , , , .

(SetUpFixture) :

VISite.KillAllRunWebDrivers();

. .


WebDriver, beforesuit , WebDriver . - Open ( , BeforeTest: , .. DataSource -, ). , , , . 2-5 . - , , , , , VIQA .
VIQA ( ). Open, .. , . . .


. ( )

:
Java ( , HTML5) ( , Selenium JavaScript : , setAttribute ) , .

, , .
, , )
: vk.com/viqatools
email : viqablog@gmail.com

.

UPD: SQA Days 15 vimeo.com/95245507


:
1

public class Checkbox { public TextElement TextElement; public VIElement CheckSignElement; } public class LoginForm { public TextField LoginTxtField; public TextField PasswordTxtField; public Button LoginButton; }

2
[Site(Domain = "http://market.yandex.ru/")] public class MySite : VISite { [Page(Title = " ", Url = "http://mysite.ru/")] public HomePage HomePage; [Page(Title = " ", Url = "http://mysite.ru/somepage")] public SomePage SomePage; } [Page(Title = " ", Url = "http://mysite.ru/")] public class HomePage : VIPage { [Name(" ")] [Locate(ByClassName = "search")] public static SearchSection SearchSection; }
Note: Page .

public class SearchSection : VIElement { [Name(" ")] [Locate(ByXPath = "//*[@class='search_input'] public TextArea SearchTextField; [Name(" '")] [Locate(ByXPath = "//*[contains(text(),'')] [ClickReloadsPage] public Button SearchButton; public void SearchProduct(string productName) { SearchTextField.NewInput(productName); SearchButton.Click(); } }
Note: .

3
public class PassportData { public string Number; public string Series; public FullName FullName; } public class FullName { public string Name; public string SecondName; } [FillFromField("Number")] public TextField PassportNumberTxtField;
Note: Number -, .

[FillFromField("FullName.Name")] public TextField PassportNameTxtField;
Note: Name FullName

public ITextArea PassportSeriesTxtField = new TextField() { FillRule = ToFillRule<PassportData>(pd => (pd.Number != тАЬтАЭ) ? pd.Series : тАЬтАЭ)), }

Note: FillRule

4
(viElement, actionName, viAction) =>{ VISite.Logger.Event(viElement.DefaultLogMessage(text)); viAction.Invoke(); }

Note: VIAction
(actionName, viAction, logResult) =>{ VISite.Logger.Event(DefaultLogMessage(text)); var result = viAction.Invoke(); if (logResult != null) VISite.Logger.Event(logResult.Invoke(result)); return result; }
Note: VIAction
5
new RadioButtons(тАЬ тАЭ, тАЬ#sensorScreenтАЭ) { VIAction = (viElement, text, viAction) => { if (!FirstSensorRadioButton.IsDisplayed) SensorBlock.Click(); viAction.Invoke(); } };
Note: VIAction . .
6
[Name(Name = "Wi-fi"), Locate(ByXPath = "//*[@class='my-checkbox']")] public ICheckbox MyCheckbox1; [Name(Name = "Wi-fi"), Locate(ByClassName = тАЬmy-checkbox")] public Checkbox MyCheckbox2; public ICheckbox MyCheckbox3 = new Checkbox("Wi-fi", "#my-checkbox"); public Checkbox MyCheckbox4 = new Checkbox("Wi-fi", By.CssSelector("#my-checkbox"));
7
[Name(" ''")] [ClickReloadsPage] public IButton SearchButton;

Note: ClickReloadsPage

MyButton.WithPageLoadAction.Click()
Note:

MyButton.WaitTimeout(20).Click()
Note: .
, , :
Button, ┬л┬╗ - .

C .

:
IButton, ICheckbox, ICheckList, IClickable, ILabeled, ILink, ISelector, ISetValue, ITextArea, IVIElement

VIAction
, VIAction.
, , :

:
( Click)
,
( GetLabel):
, ,
.
, , , - , Frame, , ( , ), . 4


, VIAction.
, Frame . 5


, , ( ) . 6 .

PageObjects, .
VISite.

var mySite = new VISite(тАЬhttp://mysite.comтАЭ)

, , , .


, , , - . , , , .

VISite.Logger = new MyLogger();

.

VISite 3 :
WaitWebElementInSec тАУ (5 ) WaitPageToLoadInSec тАУ (20 ) RetryActionInMsec тАУ ( ) (0,5 )

, . WaitPageToLoadInSec WaitWebElementInSec ( 7 ).

SmartSearch SmartClick
, Selenium . , , , ( , ). , .

, -, , , - .
VIQA ┬л┬╗, , .

тАв Implicitly wait , ? .
тАв ? , (, Click ? )
- , , - . , , , , .
. тАФ .


KillAllRunWebDrivers
WebDriver ( , ). . , , , .

(SetUpFixture) :

VISite.KillAllRunWebDrivers();

. .


WebDriver, beforesuit , WebDriver . - Open ( , BeforeTest: , .. DataSource -, ). , , , . 2-5 . - , , , , , VIQA .
VIQA ( ). Open, .. , . . .


. ( )

:
Java ( , HTML5) ( , Selenium JavaScript : , setAttribute ) , .

, , .
, , )
: vk.com/viqatools
email : viqablog@gmail.com

.

UPD: SQA Days 15 vimeo.com/95245507


:
1

public class Checkbox { public TextElement TextElement; public VIElement CheckSignElement; } public class LoginForm { public TextField LoginTxtField; public TextField PasswordTxtField; public Button LoginButton; }

2
[Site(Domain = "http://market.yandex.ru/")] public class MySite : VISite { [Page(Title = " ", Url = "http://mysite.ru/")] public HomePage HomePage; [Page(Title = " ", Url = "http://mysite.ru/somepage")] public SomePage SomePage; } [Page(Title = " ", Url = "http://mysite.ru/")] public class HomePage : VIPage { [Name(" ")] [Locate(ByClassName = "search")] public static SearchSection SearchSection; }
Note: Page .

public class SearchSection : VIElement { [Name(" ")] [Locate(ByXPath = "//*[@class='search_input'] public TextArea SearchTextField; [Name(" '")] [Locate(ByXPath = "//*[contains(text(),'')] [ClickReloadsPage] public Button SearchButton; public void SearchProduct(string productName) { SearchTextField.NewInput(productName); SearchButton.Click(); } }
Note: .

3
public class PassportData { public string Number; public string Series; public FullName FullName; } public class FullName { public string Name; public string SecondName; } [FillFromField("Number")] public TextField PassportNumberTxtField;
Note: Number -, .

[FillFromField("FullName.Name")] public TextField PassportNameTxtField;
Note: Name FullName

public ITextArea PassportSeriesTxtField = new TextField() { FillRule = ToFillRule<PassportData>(pd => (pd.Number != тАЬтАЭ) ? pd.Series : тАЬтАЭ)), }

Note: FillRule

4
(viElement, actionName, viAction) =>{ VISite.Logger.Event(viElement.DefaultLogMessage(text)); viAction.Invoke(); }

Note: VIAction
(actionName, viAction, logResult) =>{ VISite.Logger.Event(DefaultLogMessage(text)); var result = viAction.Invoke(); if (logResult != null) VISite.Logger.Event(logResult.Invoke(result)); return result; }
Note: VIAction
5
new RadioButtons(тАЬ тАЭ, тАЬ#sensorScreenтАЭ) { VIAction = (viElement, text, viAction) => { if (!FirstSensorRadioButton.IsDisplayed) SensorBlock.Click(); viAction.Invoke(); } };
Note: VIAction . .
6
[Name(Name = "Wi-fi"), Locate(ByXPath = "//*[@class='my-checkbox']")] public ICheckbox MyCheckbox1; [Name(Name = "Wi-fi"), Locate(ByClassName = тАЬmy-checkbox")] public Checkbox MyCheckbox2; public ICheckbox MyCheckbox3 = new Checkbox("Wi-fi", "#my-checkbox"); public Checkbox MyCheckbox4 = new Checkbox("Wi-fi", By.CssSelector("#my-checkbox"));
7
[Name(" ''")] [ClickReloadsPage] public IButton SearchButton;

Note: ClickReloadsPage

MyButton.WithPageLoadAction.Click()
Note:

MyButton.WaitTimeout(20).Click()
Note: .
, , :
Button, ┬л┬╗ - .

C .

:
IButton, ICheckbox, ICheckList, IClickable, ILabeled, ILink, ISelector, ISetValue, ITextArea, IVIElement

VIAction
, VIAction.
, , :

:
( Click)
,
( GetLabel):
, ,
.
, , , - , Frame, , ( , ), . 4


, VIAction.
, Frame . 5


, , ( ) . 6 .

PageObjects, .
VISite.

var mySite = new VISite(тАЬhttp://mysite.comтАЭ)

, , , .


, , , - . , , , .

VISite.Logger = new MyLogger();

.

VISite 3 :
WaitWebElementInSec тАУ (5 ) WaitPageToLoadInSec тАУ (20 ) RetryActionInMsec тАУ ( ) (0,5 )

, . WaitPageToLoadInSec WaitWebElementInSec ( 7 ).

SmartSearch SmartClick
, Selenium . , , , ( , ). , .

, -, , , - .
VIQA ┬л┬╗, , .

тАв Implicitly wait , ? .
тАв ? , (, Click ? )
- , , - . , , , , .
. тАФ .


KillAllRunWebDrivers
WebDriver ( , ). . , , , .

(SetUpFixture) :

VISite.KillAllRunWebDrivers();

. .


WebDriver, beforesuit , WebDriver . - Open ( , BeforeTest: , .. DataSource -, ). , , , . 2-5 . - , , , , , VIQA .
VIQA ( ). Open, .. , . . .


. ( )

:
Java ( , HTML5) ( , Selenium JavaScript : , setAttribute ) , .

, , .
, , )
: vk.com/viqatools
email : viqablog@gmail.com

.

UPD: SQA Days 15 vimeo.com/95245507


:
1

public class Checkbox { public TextElement TextElement; public VIElement CheckSignElement; } public class LoginForm { public TextField LoginTxtField; public TextField PasswordTxtField; public Button LoginButton; }

2
[Site(Domain = "http://market.yandex.ru/")] public class MySite : VISite { [Page(Title = " ", Url = "http://mysite.ru/")] public HomePage HomePage; [Page(Title = " ", Url = "http://mysite.ru/somepage")] public SomePage SomePage; } [Page(Title = " ", Url = "http://mysite.ru/")] public class HomePage : VIPage { [Name(" ")] [Locate(ByClassName = "search")] public static SearchSection SearchSection; }
Note: Page .

public class SearchSection : VIElement { [Name(" ")] [Locate(ByXPath = "//*[@class='search_input'] public TextArea SearchTextField; [Name(" '")] [Locate(ByXPath = "//*[contains(text(),'')] [ClickReloadsPage] public Button SearchButton; public void SearchProduct(string productName) { SearchTextField.NewInput(productName); SearchButton.Click(); } }
Note: .

3
public class PassportData { public string Number; public string Series; public FullName FullName; } public class FullName { public string Name; public string SecondName; } [FillFromField("Number")] public TextField PassportNumberTxtField;
Note: Number -, .

[FillFromField("FullName.Name")] public TextField PassportNameTxtField;
Note: Name FullName

public ITextArea PassportSeriesTxtField = new TextField() { FillRule = ToFillRule<PassportData>(pd => (pd.Number != тАЬтАЭ) ? pd.Series : тАЬтАЭ)), }

Note: FillRule

4
(viElement, actionName, viAction) =>{ VISite.Logger.Event(viElement.DefaultLogMessage(text)); viAction.Invoke(); }

Note: VIAction
(actionName, viAction, logResult) =>{ VISite.Logger.Event(DefaultLogMessage(text)); var result = viAction.Invoke(); if (logResult != null) VISite.Logger.Event(logResult.Invoke(result)); return result; }
Note: VIAction
5
new RadioButtons(тАЬ тАЭ, тАЬ#sensorScreenтАЭ) { VIAction = (viElement, text, viAction) => { if (!FirstSensorRadioButton.IsDisplayed) SensorBlock.Click(); viAction.Invoke(); } };
Note: VIAction . .
6
[Name(Name = "Wi-fi"), Locate(ByXPath = "//*[@class='my-checkbox']")] public ICheckbox MyCheckbox1; [Name(Name = "Wi-fi"), Locate(ByClassName = тАЬmy-checkbox")] public Checkbox MyCheckbox2; public ICheckbox MyCheckbox3 = new Checkbox("Wi-fi", "#my-checkbox"); public Checkbox MyCheckbox4 = new Checkbox("Wi-fi", By.CssSelector("#my-checkbox"));
7
[Name(" ''")] [ClickReloadsPage] public IButton SearchButton;

Note: ClickReloadsPage

MyButton.WithPageLoadAction.Click()
Note:

MyButton.WaitTimeout(20).Click()
Note: .
, , :
Button, ┬л┬╗ - .

C .

:
IButton, ICheckbox, ICheckList, IClickable, ILabeled, ILink, ISelector, ISetValue, ITextArea, IVIElement

VIAction
, VIAction.
, , :

:
( Click)
,
( GetLabel):
, ,
.
, , , - , Frame, , ( , ), . 4


, VIAction.
, Frame . 5


, , ( ) . 6 .

PageObjects, .
VISite.

var mySite = new VISite(тАЬhttp://mysite.comтАЭ)

, , , .


, , , - . , , , .

VISite.Logger = new MyLogger();

.

VISite 3 :
WaitWebElementInSec тАУ (5 ) WaitPageToLoadInSec тАУ (20 ) RetryActionInMsec тАУ ( ) (0,5 )

, . WaitPageToLoadInSec WaitWebElementInSec ( 7 ).

SmartSearch SmartClick
, Selenium . , , , ( , ). , .

, -, , , - .
VIQA ┬л┬╗, , .

тАв Implicitly wait , ? .
тАв ? , (, Click ? )
- , , - . , , , , .
. тАФ .


KillAllRunWebDrivers
WebDriver ( , ). . , , , .

(SetUpFixture) :

VISite.KillAllRunWebDrivers();

. .


WebDriver, beforesuit , WebDriver . - Open ( , BeforeTest: , .. DataSource -, ). , , , . 2-5 . - , , , , , VIQA .
VIQA ( ). Open, .. , . . .


. ( )

:
Java ( , HTML5) ( , Selenium JavaScript : , setAttribute ) , .

, , .
, , )
: vk.com/viqatools
email : viqablog@gmail.com

.

UPD: SQA Days 15 vimeo.com/95245507


:
1

public class Checkbox { public TextElement TextElement; public VIElement CheckSignElement; } public class LoginForm { public TextField LoginTxtField; public TextField PasswordTxtField; public Button LoginButton; }

2
[Site(Domain = "http://market.yandex.ru/")] public class MySite : VISite { [Page(Title = " ", Url = "http://mysite.ru/")] public HomePage HomePage; [Page(Title = " ", Url = "http://mysite.ru/somepage")] public SomePage SomePage; } [Page(Title = " ", Url = "http://mysite.ru/")] public class HomePage : VIPage { [Name(" ")] [Locate(ByClassName = "search")] public static SearchSection SearchSection; }
Note: Page .

public class SearchSection : VIElement { [Name(" ")] [Locate(ByXPath = "//*[@class='search_input'] public TextArea SearchTextField; [Name(" '")] [Locate(ByXPath = "//*[contains(text(),'')] [ClickReloadsPage] public Button SearchButton; public void SearchProduct(string productName) { SearchTextField.NewInput(productName); SearchButton.Click(); } }
Note: .

3
public class PassportData { public string Number; public string Series; public FullName FullName; } public class FullName { public string Name; public string SecondName; } [FillFromField("Number")] public TextField PassportNumberTxtField;
Note: Number -, .

[FillFromField("FullName.Name")] public TextField PassportNameTxtField;
Note: Name FullName

public ITextArea PassportSeriesTxtField = new TextField() { FillRule = ToFillRule<PassportData>(pd => (pd.Number != тАЬтАЭ) ? pd.Series : тАЬтАЭ)), }

Note: FillRule

4
(viElement, actionName, viAction) =>{ VISite.Logger.Event(viElement.DefaultLogMessage(text)); viAction.Invoke(); }

Note: VIAction
(actionName, viAction, logResult) =>{ VISite.Logger.Event(DefaultLogMessage(text)); var result = viAction.Invoke(); if (logResult != null) VISite.Logger.Event(logResult.Invoke(result)); return result; }
Note: VIAction
5
new RadioButtons(тАЬ тАЭ, тАЬ#sensorScreenтАЭ) { VIAction = (viElement, text, viAction) => { if (!FirstSensorRadioButton.IsDisplayed) SensorBlock.Click(); viAction.Invoke(); } };
Note: VIAction . .
6
[Name(Name = "Wi-fi"), Locate(ByXPath = "//*[@class='my-checkbox']")] public ICheckbox MyCheckbox1; [Name(Name = "Wi-fi"), Locate(ByClassName = тАЬmy-checkbox")] public Checkbox MyCheckbox2; public ICheckbox MyCheckbox3 = new Checkbox("Wi-fi", "#my-checkbox"); public Checkbox MyCheckbox4 = new Checkbox("Wi-fi", By.CssSelector("#my-checkbox"));
7
[Name(" ''")] [ClickReloadsPage] public IButton SearchButton;

Note: ClickReloadsPage

MyButton.WithPageLoadAction.Click()
Note:

MyButton.WaitTimeout(20).Click()
Note: .
, , :
Button, ┬л┬╗ - .

C .

:
IButton, ICheckbox, ICheckList, IClickable, ILabeled, ILink, ISelector, ISetValue, ITextArea, IVIElement

VIAction
, VIAction.
, , :

:
( Click)
,
( GetLabel):
, ,
.
, , , - , Frame, , ( , ), . 4


, VIAction.
, Frame . 5


, , ( ) . 6 .

PageObjects, .
VISite.

var mySite = new VISite(тАЬhttp://mysite.comтАЭ)

, , , .


, , , - . , , , .

VISite.Logger = new MyLogger();

.

VISite 3 :
WaitWebElementInSec тАУ (5 ) WaitPageToLoadInSec тАУ (20 ) RetryActionInMsec тАУ ( ) (0,5 )

, . WaitPageToLoadInSec WaitWebElementInSec ( 7 ).

SmartSearch SmartClick
, Selenium . , , , ( , ). , .

, -, , , - .
VIQA ┬л┬╗, , .

тАв Implicitly wait , ? .
тАв ? , (, Click ? )
- , , - . , , , , .
. тАФ .


KillAllRunWebDrivers
WebDriver ( , ). . , , , .

(SetUpFixture) :

VISite.KillAllRunWebDrivers();

. .


WebDriver, beforesuit , WebDriver . - Open ( , BeforeTest: , .. DataSource -, ). , , , . 2-5 . - , , , , , VIQA .
VIQA ( ). Open, .. , . . .


. ( )

:
Java ( , HTML5) ( , Selenium JavaScript : , setAttribute ) , .

, , .
, , )
: vk.com/viqatools
email : viqablog@gmail.com

.

UPD: SQA Days 15 vimeo.com/95245507


:
1

public class Checkbox { public TextElement TextElement; public VIElement CheckSignElement; } public class LoginForm { public TextField LoginTxtField; public TextField PasswordTxtField; public Button LoginButton; }

2
[Site(Domain = "http://market.yandex.ru/")] public class MySite : VISite { [Page(Title = " ", Url = "http://mysite.ru/")] public HomePage HomePage; [Page(Title = " ", Url = "http://mysite.ru/somepage")] public SomePage SomePage; } [Page(Title = " ", Url = "http://mysite.ru/")] public class HomePage : VIPage { [Name(" ")] [Locate(ByClassName = "search")] public static SearchSection SearchSection; }
Note: Page .

public class SearchSection : VIElement { [Name(" ")] [Locate(ByXPath = "//*[@class='search_input'] public TextArea SearchTextField; [Name(" '")] [Locate(ByXPath = "//*[contains(text(),'')] [ClickReloadsPage] public Button SearchButton; public void SearchProduct(string productName) { SearchTextField.NewInput(productName); SearchButton.Click(); } }
Note: .

3
public class PassportData { public string Number; public string Series; public FullName FullName; } public class FullName { public string Name; public string SecondName; } [FillFromField("Number")] public TextField PassportNumberTxtField;
Note: Number -, .

[FillFromField("FullName.Name")] public TextField PassportNameTxtField;
Note: Name FullName

public ITextArea PassportSeriesTxtField = new TextField() { FillRule = ToFillRule<PassportData>(pd => (pd.Number != тАЬтАЭ) ? pd.Series : тАЬтАЭ)), }

Note: FillRule

4
(viElement, actionName, viAction) =>{ VISite.Logger.Event(viElement.DefaultLogMessage(text)); viAction.Invoke(); }

Note: VIAction
(actionName, viAction, logResult) =>{ VISite.Logger.Event(DefaultLogMessage(text)); var result = viAction.Invoke(); if (logResult != null) VISite.Logger.Event(logResult.Invoke(result)); return result; }
Note: VIAction
5
new RadioButtons(тАЬ тАЭ, тАЬ#sensorScreenтАЭ) { VIAction = (viElement, text, viAction) => { if (!FirstSensorRadioButton.IsDisplayed) SensorBlock.Click(); viAction.Invoke(); } };
Note: VIAction . .
6
[Name(Name = "Wi-fi"), Locate(ByXPath = "//*[@class='my-checkbox']")] public ICheckbox MyCheckbox1; [Name(Name = "Wi-fi"), Locate(ByClassName = тАЬmy-checkbox")] public Checkbox MyCheckbox2; public ICheckbox MyCheckbox3 = new Checkbox("Wi-fi", "#my-checkbox"); public Checkbox MyCheckbox4 = new Checkbox("Wi-fi", By.CssSelector("#my-checkbox"));
7
[Name(" ''")] [ClickReloadsPage] public IButton SearchButton;

Note: ClickReloadsPage

MyButton.WithPageLoadAction.Click()
Note:

MyButton.WaitTimeout(20).Click()
Note: .
, , :
Button, ┬л┬╗ - .

C .

:
IButton, ICheckbox, ICheckList, IClickable, ILabeled, ILink, ISelector, ISetValue, ITextArea, IVIElement

VIAction
, VIAction.
, , :

:
( Click)
,
( GetLabel):
, ,
.
, , , - , Frame, , ( , ), . 4


, VIAction.
, Frame . 5


, , ( ) . 6 .

PageObjects, .
VISite.

var mySite = new VISite(тАЬhttp://mysite.comтАЭ)

, , , .


, , , - . , , , .

VISite.Logger = new MyLogger();

.

VISite 3 :
WaitWebElementInSec тАУ (5 ) WaitPageToLoadInSec тАУ (20 ) RetryActionInMsec тАУ ( ) (0,5 )

, . WaitPageToLoadInSec WaitWebElementInSec ( 7 ).

SmartSearch SmartClick
, Selenium . , , , ( , ). , .

, -, , , - .
VIQA ┬л┬╗, , .

тАв Implicitly wait , ? .
тАв ? , (, Click ? )
- , , - . , , , , .
. тАФ .


KillAllRunWebDrivers
WebDriver ( , ). . , , , .

(SetUpFixture) :

VISite.KillAllRunWebDrivers();

. .


WebDriver, beforesuit , WebDriver . - Open ( , BeforeTest: , .. DataSource -, ). , , , . 2-5 . - , , , , , VIQA .
VIQA ( ). Open, .. , . . .


. ( )

:
Java ( , HTML5) ( , Selenium JavaScript : , setAttribute ) , .

, , .
, , )
: vk.com/viqatools
email : viqablog@gmail.com

.

UPD: SQA Days 15 vimeo.com/95245507


:
1

public class Checkbox { public TextElement TextElement; public VIElement CheckSignElement; } public class LoginForm { public TextField LoginTxtField; public TextField PasswordTxtField; public Button LoginButton; }

2
[Site(Domain = "http://market.yandex.ru/")] public class MySite : VISite { [Page(Title = " ", Url = "http://mysite.ru/")] public HomePage HomePage; [Page(Title = " ", Url = "http://mysite.ru/somepage")] public SomePage SomePage; } [Page(Title = " ", Url = "http://mysite.ru/")] public class HomePage : VIPage { [Name(" ")] [Locate(ByClassName = "search")] public static SearchSection SearchSection; }
Note: Page .

public class SearchSection : VIElement { [Name(" ")] [Locate(ByXPath = "//*[@class='search_input'] public TextArea SearchTextField; [Name(" '")] [Locate(ByXPath = "//*[contains(text(),'')] [ClickReloadsPage] public Button SearchButton; public void SearchProduct(string productName) { SearchTextField.NewInput(productName); SearchButton.Click(); } }
Note: .

3
public class PassportData { public string Number; public string Series; public FullName FullName; } public class FullName { public string Name; public string SecondName; } [FillFromField("Number")] public TextField PassportNumberTxtField;
Note: Number -, .

[FillFromField("FullName.Name")] public TextField PassportNameTxtField;
Note: Name FullName

public ITextArea PassportSeriesTxtField = new TextField() { FillRule = ToFillRule<PassportData>(pd => (pd.Number != тАЬтАЭ) ? pd.Series : тАЬтАЭ)), }

Note: FillRule

4
(viElement, actionName, viAction) =>{ VISite.Logger.Event(viElement.DefaultLogMessage(text)); viAction.Invoke(); }

Note: VIAction
(actionName, viAction, logResult) =>{ VISite.Logger.Event(DefaultLogMessage(text)); var result = viAction.Invoke(); if (logResult != null) VISite.Logger.Event(logResult.Invoke(result)); return result; }
Note: VIAction
5
new RadioButtons(тАЬ тАЭ, тАЬ#sensorScreenтАЭ) { VIAction = (viElement, text, viAction) => { if (!FirstSensorRadioButton.IsDisplayed) SensorBlock.Click(); viAction.Invoke(); } };
Note: VIAction . .
6
[Name(Name = "Wi-fi"), Locate(ByXPath = "//*[@class='my-checkbox']")] public ICheckbox MyCheckbox1; [Name(Name = "Wi-fi"), Locate(ByClassName = тАЬmy-checkbox")] public Checkbox MyCheckbox2; public ICheckbox MyCheckbox3 = new Checkbox("Wi-fi", "#my-checkbox"); public Checkbox MyCheckbox4 = new Checkbox("Wi-fi", By.CssSelector("#my-checkbox"));
7
[Name(" ''")] [ClickReloadsPage] public IButton SearchButton;

Note: ClickReloadsPage

MyButton.WithPageLoadAction.Click()
Note:

MyButton.WaitTimeout(20).Click()
Note: .

, , :
Button, ┬л┬╗ - .

C .

:
IButton, ICheckbox, ICheckList, IClickable, ILabeled, ILink, ISelector, ISetValue, ITextArea, IVIElement

VIAction
, VIAction.
, , :

:
( Click)
,
( GetLabel):
, ,
.
, , , - , Frame, , ( , ), . 4


, VIAction.
, Frame . 5


, , ( ) . 6 .

PageObjects, .
VISite.

var mySite = new VISite(тАЬhttp://mysite.comтАЭ)

, , , .


, , , - . , , , .

VISite.Logger = new MyLogger();

.

VISite 3 :
WaitWebElementInSec тАУ (5 ) WaitPageToLoadInSec тАУ (20 ) RetryActionInMsec тАУ ( ) (0,5 )

, . WaitPageToLoadInSec WaitWebElementInSec ( 7 ).

SmartSearch SmartClick
, Selenium . , , , ( , ). , .

, -, , , - .
VIQA ┬л┬╗, , .

тАв Implicitly wait , ? .
тАв ? , (, Click ? )
- , , - . , , , , .
. тАФ .


KillAllRunWebDrivers
WebDriver ( , ). . , , , .

(SetUpFixture) :

VISite.KillAllRunWebDrivers();

. .


WebDriver, beforesuit , WebDriver . - Open ( , BeforeTest: , .. DataSource -, ). , , , . 2-5 . - , , , , , VIQA .
VIQA ( ). Open, .. , . . .


. ( )

:
Java ( , HTML5) ( , Selenium JavaScript : , setAttribute ) , .

, , .
, , )
: vk.com/viqatools
email : viqablog@gmail.com

.

UPD: SQA Days 15 vimeo.com/95245507


:
1

public class Checkbox { public TextElement TextElement; public VIElement CheckSignElement; } public class LoginForm { public TextField LoginTxtField; public TextField PasswordTxtField; public Button LoginButton; }

2
[Site(Domain = "http://market.yandex.ru/")] public class MySite : VISite { [Page(Title = " ", Url = "http://mysite.ru/")] public HomePage HomePage; [Page(Title = " ", Url = "http://mysite.ru/somepage")] public SomePage SomePage; } [Page(Title = " ", Url = "http://mysite.ru/")] public class HomePage : VIPage { [Name(" ")] [Locate(ByClassName = "search")] public static SearchSection SearchSection; }
Note: Page .

public class SearchSection : VIElement { [Name(" ")] [Locate(ByXPath = "//*[@class='search_input'] public TextArea SearchTextField; [Name(" '")] [Locate(ByXPath = "//*[contains(text(),'')] [ClickReloadsPage] public Button SearchButton; public void SearchProduct(string productName) { SearchTextField.NewInput(productName); SearchButton.Click(); } }
Note: .

3
public class PassportData { public string Number; public string Series; public FullName FullName; } public class FullName { public string Name; public string SecondName; } [FillFromField("Number")] public TextField PassportNumberTxtField;
Note: Number -, .

[FillFromField("FullName.Name")] public TextField PassportNameTxtField;
Note: Name FullName

public ITextArea PassportSeriesTxtField = new TextField() { FillRule = ToFillRule<PassportData>(pd => (pd.Number != тАЬтАЭ) ? pd.Series : тАЬтАЭ)), }

Note: FillRule

4
(viElement, actionName, viAction) =>{ VISite.Logger.Event(viElement.DefaultLogMessage(text)); viAction.Invoke(); }

Note: VIAction
(actionName, viAction, logResult) =>{ VISite.Logger.Event(DefaultLogMessage(text)); var result = viAction.Invoke(); if (logResult != null) VISite.Logger.Event(logResult.Invoke(result)); return result; }
Note: VIAction
5
new RadioButtons(тАЬ тАЭ, тАЬ#sensorScreenтАЭ) { VIAction = (viElement, text, viAction) => { if (!FirstSensorRadioButton.IsDisplayed) SensorBlock.Click(); viAction.Invoke(); } };
Note: VIAction . .
6
[Name(Name = "Wi-fi"), Locate(ByXPath = "//*[@class='my-checkbox']")] public ICheckbox MyCheckbox1; [Name(Name = "Wi-fi"), Locate(ByClassName = тАЬmy-checkbox")] public Checkbox MyCheckbox2; public ICheckbox MyCheckbox3 = new Checkbox("Wi-fi", "#my-checkbox"); public Checkbox MyCheckbox4 = new Checkbox("Wi-fi", By.CssSelector("#my-checkbox"));
7
[Name(" ''")] [ClickReloadsPage] public IButton SearchButton;

Note: ClickReloadsPage

MyButton.WithPageLoadAction.Click()
Note:

MyButton.WaitTimeout(20).Click()
Note: .

, , :
Button, ┬л┬╗ - .

C .

:
IButton, ICheckbox, ICheckList, IClickable, ILabeled, ILink, ISelector, ISetValue, ITextArea, IVIElement

VIAction
, VIAction.
, , :

:
( Click)
,
( GetLabel):
, ,
.
, , , - , Frame, , ( , ), . 4


, VIAction.
, Frame . 5


, , ( ) . 6 .

PageObjects, .
VISite.

var mySite = new VISite(тАЬhttp://mysite.comтАЭ)

, , , .


, , , - . , , , .

VISite.Logger = new MyLogger();

.

VISite 3 :
WaitWebElementInSec тАУ (5 ) WaitPageToLoadInSec тАУ (20 ) RetryActionInMsec тАУ ( ) (0,5 )

, . WaitPageToLoadInSec WaitWebElementInSec ( 7 ).

SmartSearch SmartClick
, Selenium . , , , ( , ). , .

, -, , , - .
VIQA ┬л┬╗, , .

тАв Implicitly wait , ? .
тАв ? , (, Click ? )
- , , - . , , , , .
. тАФ .


KillAllRunWebDrivers
WebDriver ( , ). . , , , .

(SetUpFixture) :

VISite.KillAllRunWebDrivers();

. .


WebDriver, beforesuit , WebDriver . - Open ( , BeforeTest: , .. DataSource -, ). , , , . 2-5 . - , , , , , VIQA .
VIQA ( ). Open, .. , . . .


. ( )

:
Java ( , HTML5) ( , Selenium JavaScript : , setAttribute ) , .

, , .
, , )
: vk.com/viqatools
email : viqablog@gmail.com

.

UPD: SQA Days 15 vimeo.com/95245507


:
1

public class Checkbox { public TextElement TextElement; public VIElement CheckSignElement; } public class LoginForm { public TextField LoginTxtField; public TextField PasswordTxtField; public Button LoginButton; }

2
[Site(Domain = "http://market.yandex.ru/")] public class MySite : VISite { [Page(Title = " ", Url = "http://mysite.ru/")] public HomePage HomePage; [Page(Title = " ", Url = "http://mysite.ru/somepage")] public SomePage SomePage; } [Page(Title = " ", Url = "http://mysite.ru/")] public class HomePage : VIPage { [Name(" ")] [Locate(ByClassName = "search")] public static SearchSection SearchSection; }
Note: Page .

public class SearchSection : VIElement { [Name(" ")] [Locate(ByXPath = "//*[@class='search_input'] public TextArea SearchTextField; [Name(" '")] [Locate(ByXPath = "//*[contains(text(),'')] [ClickReloadsPage] public Button SearchButton; public void SearchProduct(string productName) { SearchTextField.NewInput(productName); SearchButton.Click(); } }
Note: .

3
public class PassportData { public string Number; public string Series; public FullName FullName; } public class FullName { public string Name; public string SecondName; } [FillFromField("Number")] public TextField PassportNumberTxtField;
Note: Number -, .

[FillFromField("FullName.Name")] public TextField PassportNameTxtField;
Note: Name FullName

public ITextArea PassportSeriesTxtField = new TextField() { FillRule = ToFillRule<PassportData>(pd => (pd.Number != тАЬтАЭ) ? pd.Series : тАЬтАЭ)), }

Note: FillRule

4
(viElement, actionName, viAction) =>{ VISite.Logger.Event(viElement.DefaultLogMessage(text)); viAction.Invoke(); }

Note: VIAction
(actionName, viAction, logResult) =>{ VISite.Logger.Event(DefaultLogMessage(text)); var result = viAction.Invoke(); if (logResult != null) VISite.Logger.Event(logResult.Invoke(result)); return result; }
Note: VIAction
5
new RadioButtons(тАЬ тАЭ, тАЬ#sensorScreenтАЭ) { VIAction = (viElement, text, viAction) => { if (!FirstSensorRadioButton.IsDisplayed) SensorBlock.Click(); viAction.Invoke(); } };
Note: VIAction . .
6
[Name(Name = "Wi-fi"), Locate(ByXPath = "//*[@class='my-checkbox']")] public ICheckbox MyCheckbox1; [Name(Name = "Wi-fi"), Locate(ByClassName = тАЬmy-checkbox")] public Checkbox MyCheckbox2; public ICheckbox MyCheckbox3 = new Checkbox("Wi-fi", "#my-checkbox"); public Checkbox MyCheckbox4 = new Checkbox("Wi-fi", By.CssSelector("#my-checkbox"));
7
[Name(" ''")] [ClickReloadsPage] public IButton SearchButton;

Note: ClickReloadsPage

MyButton.WithPageLoadAction.Click()
Note:

MyButton.WaitTimeout(20).Click()
Note: .

, , :
Button, ┬л┬╗ - .

C .

:
IButton, ICheckbox, ICheckList, IClickable, ILabeled, ILink, ISelector, ISetValue, ITextArea, IVIElement

VIAction
, VIAction.
, , :

:
( Click)
,
( GetLabel):
, ,
.
, , , - , Frame, , ( , ), . 4


, VIAction.
, Frame . 5


, , ( ) . 6 .

PageObjects, .
VISite.

var mySite = new VISite(тАЬhttp://mysite.comтАЭ)

, , , .


, , , - . , , , .

VISite.Logger = new MyLogger();

.

VISite 3 :
WaitWebElementInSec тАУ (5 ) WaitPageToLoadInSec тАУ (20 ) RetryActionInMsec тАУ ( ) (0,5 )

, . WaitPageToLoadInSec WaitWebElementInSec ( 7 ).

SmartSearch SmartClick
, Selenium . , , , ( , ). , .

, -, , , - .
VIQA ┬л┬╗, , .

тАв Implicitly wait , ? .
тАв ? , (, Click ? )
- , , - . , , , , .
. тАФ .


KillAllRunWebDrivers
WebDriver ( , ). . , , , .

(SetUpFixture) :

VISite.KillAllRunWebDrivers();

. .


WebDriver, beforesuit , WebDriver . - Open ( , BeforeTest: , .. DataSource -, ). , , , . 2-5 . - , , , , , VIQA .
VIQA ( ). Open, .. , . . .


. ( )

:
Java ( , HTML5) ( , Selenium JavaScript : , setAttribute ) , .

, , .
, , )
: vk.com/viqatools
email : viqablog@gmail.com

.

UPD: SQA Days 15 vimeo.com/95245507


:
1

public class Checkbox { public TextElement TextElement; public VIElement CheckSignElement; } public class LoginForm { public TextField LoginTxtField; public TextField PasswordTxtField; public Button LoginButton; }

2
[Site(Domain = "http://market.yandex.ru/")] public class MySite : VISite { [Page(Title = " ", Url = "http://mysite.ru/")] public HomePage HomePage; [Page(Title = " ", Url = "http://mysite.ru/somepage")] public SomePage SomePage; } [Page(Title = " ", Url = "http://mysite.ru/")] public class HomePage : VIPage { [Name(" ")] [Locate(ByClassName = "search")] public static SearchSection SearchSection; }
Note: Page .

public class SearchSection : VIElement { [Name(" ")] [Locate(ByXPath = "//*[@class='search_input'] public TextArea SearchTextField; [Name(" '")] [Locate(ByXPath = "//*[contains(text(),'')] [ClickReloadsPage] public Button SearchButton; public void SearchProduct(string productName) { SearchTextField.NewInput(productName); SearchButton.Click(); } }
Note: .

3
public class PassportData { public string Number; public string Series; public FullName FullName; } public class FullName { public string Name; public string SecondName; } [FillFromField("Number")] public TextField PassportNumberTxtField;
Note: Number -, .

[FillFromField("FullName.Name")] public TextField PassportNameTxtField;
Note: Name FullName

public ITextArea PassportSeriesTxtField = new TextField() { FillRule = ToFillRule<PassportData>(pd => (pd.Number != тАЬтАЭ) ? pd.Series : тАЬтАЭ)), }

Note: FillRule

4
(viElement, actionName, viAction) =>{ VISite.Logger.Event(viElement.DefaultLogMessage(text)); viAction.Invoke(); }

Note: VIAction
(actionName, viAction, logResult) =>{ VISite.Logger.Event(DefaultLogMessage(text)); var result = viAction.Invoke(); if (logResult != null) VISite.Logger.Event(logResult.Invoke(result)); return result; }
Note: VIAction
5
new RadioButtons(тАЬ тАЭ, тАЬ#sensorScreenтАЭ) { VIAction = (viElement, text, viAction) => { if (!FirstSensorRadioButton.IsDisplayed) SensorBlock.Click(); viAction.Invoke(); } };
Note: VIAction . .
6
[Name(Name = "Wi-fi"), Locate(ByXPath = "//*[@class='my-checkbox']")] public ICheckbox MyCheckbox1; [Name(Name = "Wi-fi"), Locate(ByClassName = тАЬmy-checkbox")] public Checkbox MyCheckbox2; public ICheckbox MyCheckbox3 = new Checkbox("Wi-fi", "#my-checkbox"); public Checkbox MyCheckbox4 = new Checkbox("Wi-fi", By.CssSelector("#my-checkbox"));
7
[Name(" ''")] [ClickReloadsPage] public IButton SearchButton;

Note: ClickReloadsPage

MyButton.WithPageLoadAction.Click()
Note:

MyButton.WaitTimeout(20).Click()
Note: .
 , ,  :   
Button, ┬л┬╗ - .

C .

:
IButton, ICheckbox, ICheckList, IClickable, ILabeled, ILink, ISelector, ISetValue, ITextArea, IVIElement

VIAction
, VIAction.
, , :

:
( Click)
,
( GetLabel):
, ,
.
, , , - , Frame, , ( , ), . 4


, VIAction.
, Frame . 5


, , ( ) . 6 .

PageObjects, .
VISite.

var mySite = new VISite(тАЬhttp://mysite.comтАЭ)

, , , .


, , , - . , , , .

VISite.Logger = new MyLogger();

.

VISite 3 :
WaitWebElementInSec тАУ (5 ) WaitPageToLoadInSec тАУ (20 ) RetryActionInMsec тАУ ( ) (0,5 )

, . WaitPageToLoadInSec WaitWebElementInSec ( 7 ).

SmartSearch SmartClick
, Selenium . , , , ( , ). , .

, -, , , - .
VIQA ┬л┬╗, , .

тАв Implicitly wait , ? .
тАв ? , (, Click ? )
- , , - . , , , , .
. тАФ .


KillAllRunWebDrivers
WebDriver ( , ). . , , , .

(SetUpFixture) :

VISite.KillAllRunWebDrivers();

. .


WebDriver, beforesuit , WebDriver . - Open ( , BeforeTest: , .. DataSource -, ). , , , . 2-5 . - , , , , , VIQA .
VIQA ( ). Open, .. , . . .


. ( )

:
Java ( , HTML5) ( , Selenium JavaScript : , setAttribute ) , .

, , .
, , )
: vk.com/viqatools
email : viqablog@gmail.com

.

UPD: SQA Days 15 vimeo.com/95245507


:
1

public class Checkbox { public TextElement TextElement; public VIElement CheckSignElement; } public class LoginForm { public TextField LoginTxtField; public TextField PasswordTxtField; public Button LoginButton; }

2
[Site(Domain = "http://market.yandex.ru/")] public class MySite : VISite { [Page(Title = " ", Url = "http://mysite.ru/")] public HomePage HomePage; [Page(Title = " ", Url = "http://mysite.ru/somepage")] public SomePage SomePage; } [Page(Title = " ", Url = "http://mysite.ru/")] public class HomePage : VIPage { [Name(" ")] [Locate(ByClassName = "search")] public static SearchSection SearchSection; }
Note: Page .

public class SearchSection : VIElement { [Name(" ")] [Locate(ByXPath = "//*[@class='search_input'] public TextArea SearchTextField; [Name(" '")] [Locate(ByXPath = "//*[contains(text(),'')] [ClickReloadsPage] public Button SearchButton; public void SearchProduct(string productName) { SearchTextField.NewInput(productName); SearchButton.Click(); } }
Note: .

3
public class PassportData { public string Number; public string Series; public FullName FullName; } public class FullName { public string Name; public string SecondName; } [FillFromField("Number")] public TextField PassportNumberTxtField;
Note: Number -, .

[FillFromField("FullName.Name")] public TextField PassportNameTxtField;
Note: Name FullName

public ITextArea PassportSeriesTxtField = new TextField() { FillRule = ToFillRule<PassportData>(pd => (pd.Number != тАЬтАЭ) ? pd.Series : тАЬтАЭ)), }

Note: FillRule

4
(viElement, actionName, viAction) =>{ VISite.Logger.Event(viElement.DefaultLogMessage(text)); viAction.Invoke(); }

Note: VIAction
(actionName, viAction, logResult) =>{ VISite.Logger.Event(DefaultLogMessage(text)); var result = viAction.Invoke(); if (logResult != null) VISite.Logger.Event(logResult.Invoke(result)); return result; }
Note: VIAction
5
new RadioButtons(тАЬ тАЭ, тАЬ#sensorScreenтАЭ) { VIAction = (viElement, text, viAction) => { if (!FirstSensorRadioButton.IsDisplayed) SensorBlock.Click(); viAction.Invoke(); } };
Note: VIAction . .
6
[Name(Name = "Wi-fi"), Locate(ByXPath = "//*[@class='my-checkbox']")] public ICheckbox MyCheckbox1; [Name(Name = "Wi-fi"), Locate(ByClassName = тАЬmy-checkbox")] public Checkbox MyCheckbox2; public ICheckbox MyCheckbox3 = new Checkbox("Wi-fi", "#my-checkbox"); public Checkbox MyCheckbox4 = new Checkbox("Wi-fi", By.CssSelector("#my-checkbox"));
7
[Name(" ''")] [ClickReloadsPage] public IButton SearchButton;

Note: ClickReloadsPage

MyButton.WithPageLoadAction.Click()
Note:

MyButton.WaitTimeout(20).Click()
Note: .
, , :
Button, ┬л┬╗ - .

C .

:
IButton, ICheckbox, ICheckList, IClickable, ILabeled, ILink, ISelector, ISetValue, ITextArea, IVIElement

VIAction
, VIAction.
, , :

:
( Click)
,
( GetLabel):
, ,
.
, , , - , Frame, , ( , ), . 4


, VIAction.
, Frame . 5


, , ( ) . 6 .

PageObjects, .
VISite.

var mySite = new VISite(тАЬhttp://mysite.comтАЭ)

, , , .


, , , - . , , , .

VISite.Logger = new MyLogger();

.

VISite 3 :
WaitWebElementInSec тАУ (5 ) WaitPageToLoadInSec тАУ (20 ) RetryActionInMsec тАУ ( ) (0,5 )

, . WaitPageToLoadInSec WaitWebElementInSec ( 7 ).

SmartSearch SmartClick
, Selenium . , , , ( , ). , .

, -, , , - .
VIQA ┬л┬╗, , .

тАв Implicitly wait , ? .
тАв ? , (, Click ? )
- , , - . , , , , .
. тАФ .


KillAllRunWebDrivers
WebDriver ( , ). . , , , .

(SetUpFixture) :

VISite.KillAllRunWebDrivers();

. .


WebDriver, beforesuit , WebDriver . - Open ( , BeforeTest: , .. DataSource -, ). , , , . 2-5 . - , , , , , VIQA .
VIQA ( ). Open, .. , . . .


. ( )

:
Java ( , HTML5) ( , Selenium JavaScript : , setAttribute ) , .

, , .
, , )
: vk.com/viqatools
email : viqablog@gmail.com

.

UPD: SQA Days 15 vimeo.com/95245507


:
1

public class Checkbox { public TextElement TextElement; public VIElement CheckSignElement; } public class LoginForm { public TextField LoginTxtField; public TextField PasswordTxtField; public Button LoginButton; }

2
[Site(Domain = "http://market.yandex.ru/")] public class MySite : VISite { [Page(Title = " ", Url = "http://mysite.ru/")] public HomePage HomePage; [Page(Title = " ", Url = "http://mysite.ru/somepage")] public SomePage SomePage; } [Page(Title = " ", Url = "http://mysite.ru/")] public class HomePage : VIPage { [Name(" ")] [Locate(ByClassName = "search")] public static SearchSection SearchSection; }
Note: Page .

public class SearchSection : VIElement { [Name(" ")] [Locate(ByXPath = "//*[@class='search_input'] public TextArea SearchTextField; [Name(" '")] [Locate(ByXPath = "//*[contains(text(),'')] [ClickReloadsPage] public Button SearchButton; public void SearchProduct(string productName) { SearchTextField.NewInput(productName); SearchButton.Click(); } }
Note: .

3
public class PassportData { public string Number; public string Series; public FullName FullName; } public class FullName { public string Name; public string SecondName; } [FillFromField("Number")] public TextField PassportNumberTxtField;
Note: Number -, .

[FillFromField("FullName.Name")] public TextField PassportNameTxtField;
Note: Name FullName

public ITextArea PassportSeriesTxtField = new TextField() { FillRule = ToFillRule<PassportData>(pd => (pd.Number != тАЬтАЭ) ? pd.Series : тАЬтАЭ)), }

Note: FillRule

4
(viElement, actionName, viAction) =>{ VISite.Logger.Event(viElement.DefaultLogMessage(text)); viAction.Invoke(); }

Note: VIAction
(actionName, viAction, logResult) =>{ VISite.Logger.Event(DefaultLogMessage(text)); var result = viAction.Invoke(); if (logResult != null) VISite.Logger.Event(logResult.Invoke(result)); return result; }
Note: VIAction
5
new RadioButtons(тАЬ тАЭ, тАЬ#sensorScreenтАЭ) { VIAction = (viElement, text, viAction) => { if (!FirstSensorRadioButton.IsDisplayed) SensorBlock.Click(); viAction.Invoke(); } };
Note: VIAction . .
6
[Name(Name = "Wi-fi"), Locate(ByXPath = "//*[@class='my-checkbox']")] public ICheckbox MyCheckbox1; [Name(Name = "Wi-fi"), Locate(ByClassName = тАЬmy-checkbox")] public Checkbox MyCheckbox2; public ICheckbox MyCheckbox3 = new Checkbox("Wi-fi", "#my-checkbox"); public Checkbox MyCheckbox4 = new Checkbox("Wi-fi", By.CssSelector("#my-checkbox"));
7
[Name(" ''")] [ClickReloadsPage] public IButton SearchButton;

Note: ClickReloadsPage

MyButton.WithPageLoadAction.Click()
Note:

MyButton.WaitTimeout(20).Click()
Note: .
 , ,  :   
Button, ┬л┬╗ - .

C .

:
IButton, ICheckbox, ICheckList, IClickable, ILabeled, ILink, ISelector, ISetValue, ITextArea, IVIElement

VIAction
, VIAction.
, , :

:
( Click)
,
( GetLabel):
, ,
.
, , , - , Frame, , ( , ), . 4


, VIAction.
, Frame . 5


, , ( ) . 6 .

PageObjects, .
VISite.

var mySite = new VISite(тАЬhttp://mysite.comтАЭ)

, , , .


, , , - . , , , .

VISite.Logger = new MyLogger();

.

VISite 3 :
WaitWebElementInSec тАУ (5 ) WaitPageToLoadInSec тАУ (20 ) RetryActionInMsec тАУ ( ) (0,5 )

, . WaitPageToLoadInSec WaitWebElementInSec ( 7 ).

SmartSearch SmartClick
, Selenium . , , , ( , ). , .

, -, , , - .
VIQA ┬л┬╗, , .

тАв Implicitly wait , ? .
тАв ? , (, Click ? )
- , , - . , , , , .
. тАФ .


KillAllRunWebDrivers
WebDriver ( , ). . , , , .

(SetUpFixture) :

VISite.KillAllRunWebDrivers();

. .


WebDriver, beforesuit , WebDriver . - Open ( , BeforeTest: , .. DataSource -, ). , , , . 2-5 . - , , , , , VIQA .
VIQA ( ). Open, .. , . . .


. ( )

:
Java ( , HTML5) ( , Selenium JavaScript : , setAttribute ) , .

, , .
, , )
: vk.com/viqatools
email : viqablog@gmail.com

.

UPD: SQA Days 15 vimeo.com/95245507


:
1

public class Checkbox { public TextElement TextElement; public VIElement CheckSignElement; } public class LoginForm { public TextField LoginTxtField; public TextField PasswordTxtField; public Button LoginButton; }

2
[Site(Domain = "http://market.yandex.ru/")] public class MySite : VISite { [Page(Title = " ", Url = "http://mysite.ru/")] public HomePage HomePage; [Page(Title = " ", Url = "http://mysite.ru/somepage")] public SomePage SomePage; } [Page(Title = " ", Url = "http://mysite.ru/")] public class HomePage : VIPage { [Name(" ")] [Locate(ByClassName = "search")] public static SearchSection SearchSection; }
Note: Page .

public class SearchSection : VIElement { [Name(" ")] [Locate(ByXPath = "//*[@class='search_input'] public TextArea SearchTextField; [Name(" '")] [Locate(ByXPath = "//*[contains(text(),'')] [ClickReloadsPage] public Button SearchButton; public void SearchProduct(string productName) { SearchTextField.NewInput(productName); SearchButton.Click(); } }
Note: .

3
public class PassportData { public string Number; public string Series; public FullName FullName; } public class FullName { public string Name; public string SecondName; } [FillFromField("Number")] public TextField PassportNumberTxtField;
Note: Number -, .

[FillFromField("FullName.Name")] public TextField PassportNameTxtField;
Note: Name FullName

public ITextArea PassportSeriesTxtField = new TextField() { FillRule = ToFillRule<PassportData>(pd => (pd.Number != тАЬтАЭ) ? pd.Series : тАЬтАЭ)), }

Note: FillRule

4
(viElement, actionName, viAction) =>{ VISite.Logger.Event(viElement.DefaultLogMessage(text)); viAction.Invoke(); }

Note: VIAction
(actionName, viAction, logResult) =>{ VISite.Logger.Event(DefaultLogMessage(text)); var result = viAction.Invoke(); if (logResult != null) VISite.Logger.Event(logResult.Invoke(result)); return result; }
Note: VIAction
5
new RadioButtons(тАЬ тАЭ, тАЬ#sensorScreenтАЭ) { VIAction = (viElement, text, viAction) => { if (!FirstSensorRadioButton.IsDisplayed) SensorBlock.Click(); viAction.Invoke(); } };
Note: VIAction . .
6
[Name(Name = "Wi-fi"), Locate(ByXPath = "//*[@class='my-checkbox']")] public ICheckbox MyCheckbox1; [Name(Name = "Wi-fi"), Locate(ByClassName = тАЬmy-checkbox")] public Checkbox MyCheckbox2; public ICheckbox MyCheckbox3 = new Checkbox("Wi-fi", "#my-checkbox"); public Checkbox MyCheckbox4 = new Checkbox("Wi-fi", By.CssSelector("#my-checkbox"));
7
[Name(" ''")] [ClickReloadsPage] public IButton SearchButton;

Note: ClickReloadsPage

MyButton.WithPageLoadAction.Click()
Note:

MyButton.WaitTimeout(20).Click()
Note: .
, , :
Button, ┬л┬╗ - .

C .

:
IButton, ICheckbox, ICheckList, IClickable, ILabeled, ILink, ISelector, ISetValue, ITextArea, IVIElement

VIAction
, VIAction.
, , :

:
( Click)
,
( GetLabel):
, ,
.
, , , - , Frame, , ( , ), . 4


, VIAction.
, Frame . 5


, , ( ) . 6 .

PageObjects, .
VISite.

var mySite = new VISite(тАЬhttp://mysite.comтАЭ)

, , , .


, , , - . , , , .

VISite.Logger = new MyLogger();

.

VISite 3 :
WaitWebElementInSec тАУ (5 ) WaitPageToLoadInSec тАУ (20 ) RetryActionInMsec тАУ ( ) (0,5 )

, . WaitPageToLoadInSec WaitWebElementInSec ( 7 ).

SmartSearch SmartClick
, Selenium . , , , ( , ). , .

, -, , , - .
VIQA ┬л┬╗, , .

тАв Implicitly wait , ? .
тАв ? , (, Click ? )
- , , - . , , , , .
. тАФ .


KillAllRunWebDrivers
WebDriver ( , ). . , , , .

(SetUpFixture) :

VISite.KillAllRunWebDrivers();

. .


WebDriver, beforesuit , WebDriver . - Open ( , BeforeTest: , .. DataSource -, ). , , , . 2-5 . - , , , , , VIQA .
VIQA ( ). Open, .. , . . .


. ( )

:
Java ( , HTML5) ( , Selenium JavaScript : , setAttribute ) , .

, , .
, , )
: vk.com/viqatools
email : viqablog@gmail.com

.

UPD: SQA Days 15 vimeo.com/95245507


:
1

public class Checkbox { public TextElement TextElement; public VIElement CheckSignElement; } public class LoginForm { public TextField LoginTxtField; public TextField PasswordTxtField; public Button LoginButton; }

2
[Site(Domain = "http://market.yandex.ru/")] public class MySite : VISite { [Page(Title = " ", Url = "http://mysite.ru/")] public HomePage HomePage; [Page(Title = " ", Url = "http://mysite.ru/somepage")] public SomePage SomePage; } [Page(Title = " ", Url = "http://mysite.ru/")] public class HomePage : VIPage { [Name(" ")] [Locate(ByClassName = "search")] public static SearchSection SearchSection; }
Note: Page .

public class SearchSection : VIElement { [Name(" ")] [Locate(ByXPath = "//*[@class='search_input'] public TextArea SearchTextField; [Name(" '")] [Locate(ByXPath = "//*[contains(text(),'')] [ClickReloadsPage] public Button SearchButton; public void SearchProduct(string productName) { SearchTextField.NewInput(productName); SearchButton.Click(); } }
Note: .

3
public class PassportData { public string Number; public string Series; public FullName FullName; } public class FullName { public string Name; public string SecondName; } [FillFromField("Number")] public TextField PassportNumberTxtField;
Note: Number -, .

[FillFromField("FullName.Name")] public TextField PassportNameTxtField;
Note: Name FullName

public ITextArea PassportSeriesTxtField = new TextField() { FillRule = ToFillRule<PassportData>(pd => (pd.Number != тАЬтАЭ) ? pd.Series : тАЬтАЭ)), }

Note: FillRule

4
(viElement, actionName, viAction) =>{ VISite.Logger.Event(viElement.DefaultLogMessage(text)); viAction.Invoke(); }

Note: VIAction
(actionName, viAction, logResult) =>{ VISite.Logger.Event(DefaultLogMessage(text)); var result = viAction.Invoke(); if (logResult != null) VISite.Logger.Event(logResult.Invoke(result)); return result; }
Note: VIAction
5
new RadioButtons(тАЬ тАЭ, тАЬ#sensorScreenтАЭ) { VIAction = (viElement, text, viAction) => { if (!FirstSensorRadioButton.IsDisplayed) SensorBlock.Click(); viAction.Invoke(); } };
Note: VIAction . .
6
[Name(Name = "Wi-fi"), Locate(ByXPath = "//*[@class='my-checkbox']")] public ICheckbox MyCheckbox1; [Name(Name = "Wi-fi"), Locate(ByClassName = тАЬmy-checkbox")] public Checkbox MyCheckbox2; public ICheckbox MyCheckbox3 = new Checkbox("Wi-fi", "#my-checkbox"); public Checkbox MyCheckbox4 = new Checkbox("Wi-fi", By.CssSelector("#my-checkbox"));
7
[Name(" ''")] [ClickReloadsPage] public IButton SearchButton;

Note: ClickReloadsPage

MyButton.WithPageLoadAction.Click()
Note:

MyButton.WaitTimeout(20).Click()
Note: .
 , ,  :   
Button, ┬л┬╗ - .

C .

:
IButton, ICheckbox, ICheckList, IClickable, ILabeled, ILink, ISelector, ISetValue, ITextArea, IVIElement

VIAction
, VIAction.
, , :

:
( Click)
,
( GetLabel):
, ,
.
, , , - , Frame, , ( , ), . 4


, VIAction.
, Frame . 5


, , ( ) . 6 .

PageObjects, .
VISite.

var mySite = new VISite(тАЬhttp://mysite.comтАЭ)

, , , .


, , , - . , , , .

VISite.Logger = new MyLogger();

.

VISite 3 :
WaitWebElementInSec тАУ (5 ) WaitPageToLoadInSec тАУ (20 ) RetryActionInMsec тАУ ( ) (0,5 )

, . WaitPageToLoadInSec WaitWebElementInSec ( 7 ).

SmartSearch SmartClick
, Selenium . , , , ( , ). , .

, -, , , - .
VIQA ┬л┬╗, , .

тАв Implicitly wait , ? .
тАв ? , (, Click ? )
- , , - . , , , , .
. тАФ .


KillAllRunWebDrivers
WebDriver ( , ). . , , , .

(SetUpFixture) :

VISite.KillAllRunWebDrivers();

. .


WebDriver, beforesuit , WebDriver . - Open ( , BeforeTest: , .. DataSource -, ). , , , . 2-5 . - , , , , , VIQA .
VIQA ( ). Open, .. , . . .


. ( )

:
Java ( , HTML5) ( , Selenium JavaScript : , setAttribute ) , .

, , .
, , )
: vk.com/viqatools
email : viqablog@gmail.com

.

UPD: SQA Days 15 vimeo.com/95245507


:
1

public class Checkbox { public TextElement TextElement; public VIElement CheckSignElement; } public class LoginForm { public TextField LoginTxtField; public TextField PasswordTxtField; public Button LoginButton; }

2
[Site(Domain = "http://market.yandex.ru/")] public class MySite : VISite { [Page(Title = " ", Url = "http://mysite.ru/")] public HomePage HomePage; [Page(Title = " ", Url = "http://mysite.ru/somepage")] public SomePage SomePage; } [Page(Title = " ", Url = "http://mysite.ru/")] public class HomePage : VIPage { [Name(" ")] [Locate(ByClassName = "search")] public static SearchSection SearchSection; }
Note: Page .

public class SearchSection : VIElement { [Name(" ")] [Locate(ByXPath = "//*[@class='search_input'] public TextArea SearchTextField; [Name(" '")] [Locate(ByXPath = "//*[contains(text(),'')] [ClickReloadsPage] public Button SearchButton; public void SearchProduct(string productName) { SearchTextField.NewInput(productName); SearchButton.Click(); } }
Note: .

3
public class PassportData { public string Number; public string Series; public FullName FullName; } public class FullName { public string Name; public string SecondName; } [FillFromField("Number")] public TextField PassportNumberTxtField;
Note: Number -, .

[FillFromField("FullName.Name")] public TextField PassportNameTxtField;
Note: Name FullName

public ITextArea PassportSeriesTxtField = new TextField() { FillRule = ToFillRule<PassportData>(pd => (pd.Number != тАЬтАЭ) ? pd.Series : тАЬтАЭ)), }

Note: FillRule

4
(viElement, actionName, viAction) =>{ VISite.Logger.Event(viElement.DefaultLogMessage(text)); viAction.Invoke(); }

Note: VIAction
(actionName, viAction, logResult) =>{ VISite.Logger.Event(DefaultLogMessage(text)); var result = viAction.Invoke(); if (logResult != null) VISite.Logger.Event(logResult.Invoke(result)); return result; }
Note: VIAction
5
new RadioButtons(тАЬ тАЭ, тАЬ#sensorScreenтАЭ) { VIAction = (viElement, text, viAction) => { if (!FirstSensorRadioButton.IsDisplayed) SensorBlock.Click(); viAction.Invoke(); } };
Note: VIAction . .
6
[Name(Name = "Wi-fi"), Locate(ByXPath = "//*[@class='my-checkbox']")] public ICheckbox MyCheckbox1; [Name(Name = "Wi-fi"), Locate(ByClassName = тАЬmy-checkbox")] public Checkbox MyCheckbox2; public ICheckbox MyCheckbox3 = new Checkbox("Wi-fi", "#my-checkbox"); public Checkbox MyCheckbox4 = new Checkbox("Wi-fi", By.CssSelector("#my-checkbox"));
7
[Name(" ''")] [ClickReloadsPage] public IButton SearchButton;

Note: ClickReloadsPage

MyButton.WithPageLoadAction.Click()
Note:

MyButton.WaitTimeout(20).Click()
Note: .
, , :
Button, ┬л┬╗ - .

C .

:
IButton, ICheckbox, ICheckList, IClickable, ILabeled, ILink, ISelector, ISetValue, ITextArea, IVIElement

VIAction
, VIAction.
, , :

:
( Click)
,
( GetLabel):
, ,
.
, , , - , Frame, , ( , ), . 4


, VIAction.
, Frame . 5


, , ( ) . 6 .

PageObjects, .
VISite.

var mySite = new VISite(тАЬhttp://mysite.comтАЭ)

, , , .


, , , - . , , , .

VISite.Logger = new MyLogger();

.

VISite 3 :
WaitWebElementInSec тАУ (5 ) WaitPageToLoadInSec тАУ (20 ) RetryActionInMsec тАУ ( ) (0,5 )

, . WaitPageToLoadInSec WaitWebElementInSec ( 7 ).

SmartSearch SmartClick
, Selenium . , , , ( , ). , .

, -, , , - .
VIQA ┬л┬╗, , .

тАв Implicitly wait , ? .
тАв ? , (, Click ? )
- , , - . , , , , .
. тАФ .


KillAllRunWebDrivers
WebDriver ( , ). . , , , .

(SetUpFixture) :

VISite.KillAllRunWebDrivers();

. .


WebDriver, beforesuit , WebDriver . - Open ( , BeforeTest: , .. DataSource -, ). , , , . 2-5 . - , , , , , VIQA .
VIQA ( ). Open, .. , . . .


. ( )

:
Java ( , HTML5) ( , Selenium JavaScript : , setAttribute ) , .

, , .
, , )
: vk.com/viqatools
email : viqablog@gmail.com

.

UPD: SQA Days 15 vimeo.com/95245507


:
1

public class Checkbox { public TextElement TextElement; public VIElement CheckSignElement; } public class LoginForm { public TextField LoginTxtField; public TextField PasswordTxtField; public Button LoginButton; }

2
[Site(Domain = "http://market.yandex.ru/")] public class MySite : VISite { [Page(Title = " ", Url = "http://mysite.ru/")] public HomePage HomePage; [Page(Title = " ", Url = "http://mysite.ru/somepage")] public SomePage SomePage; } [Page(Title = " ", Url = "http://mysite.ru/")] public class HomePage : VIPage { [Name(" ")] [Locate(ByClassName = "search")] public static SearchSection SearchSection; }
Note: Page .

public class SearchSection : VIElement { [Name(" ")] [Locate(ByXPath = "//*[@class='search_input'] public TextArea SearchTextField; [Name(" '")] [Locate(ByXPath = "//*[contains(text(),'')] [ClickReloadsPage] public Button SearchButton; public void SearchProduct(string productName) { SearchTextField.NewInput(productName); SearchButton.Click(); } }
Note: .

3
public class PassportData { public string Number; public string Series; public FullName FullName; } public class FullName { public string Name; public string SecondName; } [FillFromField("Number")] public TextField PassportNumberTxtField;
Note: Number -, .

[FillFromField("FullName.Name")] public TextField PassportNameTxtField;
Note: Name FullName

public ITextArea PassportSeriesTxtField = new TextField() { FillRule = ToFillRule<PassportData>(pd => (pd.Number != тАЬтАЭ) ? pd.Series : тАЬтАЭ)), }

Note: FillRule

4
(viElement, actionName, viAction) =>{ VISite.Logger.Event(viElement.DefaultLogMessage(text)); viAction.Invoke(); }

Note: VIAction
(actionName, viAction, logResult) =>{ VISite.Logger.Event(DefaultLogMessage(text)); var result = viAction.Invoke(); if (logResult != null) VISite.Logger.Event(logResult.Invoke(result)); return result; }
Note: VIAction
5
new RadioButtons(тАЬ тАЭ, тАЬ#sensorScreenтАЭ) { VIAction = (viElement, text, viAction) => { if (!FirstSensorRadioButton.IsDisplayed) SensorBlock.Click(); viAction.Invoke(); } };
Note: VIAction . .
6
[Name(Name = "Wi-fi"), Locate(ByXPath = "//*[@class='my-checkbox']")] public ICheckbox MyCheckbox1; [Name(Name = "Wi-fi"), Locate(ByClassName = тАЬmy-checkbox")] public Checkbox MyCheckbox2; public ICheckbox MyCheckbox3 = new Checkbox("Wi-fi", "#my-checkbox"); public Checkbox MyCheckbox4 = new Checkbox("Wi-fi", By.CssSelector("#my-checkbox"));
7
[Name(" ''")] [ClickReloadsPage] public IButton SearchButton;

Note: ClickReloadsPage

MyButton.WithPageLoadAction.Click()
Note:

MyButton.WaitTimeout(20).Click()
Note: .
 , ,  :   
Button, ┬л┬╗ - .

C .

:
IButton, ICheckbox, ICheckList, IClickable, ILabeled, ILink, ISelector, ISetValue, ITextArea, IVIElement

VIAction
, VIAction.
, , :

:
( Click)
,
( GetLabel):
, ,
.
, , , - , Frame, , ( , ), . 4


, VIAction.
, Frame . 5


, , ( ) . 6 .

PageObjects, .
VISite.

var mySite = new VISite(тАЬhttp://mysite.comтАЭ)

, , , .


, , , - . , , , .

VISite.Logger = new MyLogger();

.

VISite 3 :
WaitWebElementInSec тАУ (5 ) WaitPageToLoadInSec тАУ (20 ) RetryActionInMsec тАУ ( ) (0,5 )

, . WaitPageToLoadInSec WaitWebElementInSec ( 7 ).

SmartSearch SmartClick
, Selenium . , , , ( , ). , .

, -, , , - .
VIQA ┬л┬╗, , .

тАв Implicitly wait , ? .
тАв ? , (, Click ? )
- , , - . , , , , .
. тАФ .


KillAllRunWebDrivers
WebDriver ( , ). . , , , .

(SetUpFixture) :

VISite.KillAllRunWebDrivers();

. .


WebDriver, beforesuit , WebDriver . - Open ( , BeforeTest: , .. DataSource -, ). , , , . 2-5 . - , , , , , VIQA .
VIQA ( ). Open, .. , . . .


. ( )

:
Java ( , HTML5) ( , Selenium JavaScript : , setAttribute ) , .

, , .
, , )
: vk.com/viqatools
email : viqablog@gmail.com

.

UPD: SQA Days 15 vimeo.com/95245507


:
1

public class Checkbox { public TextElement TextElement; public VIElement CheckSignElement; } public class LoginForm { public TextField LoginTxtField; public TextField PasswordTxtField; public Button LoginButton; }

2
[Site(Domain = "http://market.yandex.ru/")] public class MySite : VISite { [Page(Title = " ", Url = "http://mysite.ru/")] public HomePage HomePage; [Page(Title = " ", Url = "http://mysite.ru/somepage")] public SomePage SomePage; } [Page(Title = " ", Url = "http://mysite.ru/")] public class HomePage : VIPage { [Name(" ")] [Locate(ByClassName = "search")] public static SearchSection SearchSection; }
Note: Page .

public class SearchSection : VIElement { [Name(" ")] [Locate(ByXPath = "//*[@class='search_input'] public TextArea SearchTextField; [Name(" '")] [Locate(ByXPath = "//*[contains(text(),'')] [ClickReloadsPage] public Button SearchButton; public void SearchProduct(string productName) { SearchTextField.NewInput(productName); SearchButton.Click(); } }
Note: .

3
public class PassportData { public string Number; public string Series; public FullName FullName; } public class FullName { public string Name; public string SecondName; } [FillFromField("Number")] public TextField PassportNumberTxtField;
Note: Number -, .

[FillFromField("FullName.Name")] public TextField PassportNameTxtField;
Note: Name FullName

public ITextArea PassportSeriesTxtField = new TextField() { FillRule = ToFillRule<PassportData>(pd => (pd.Number != тАЬтАЭ) ? pd.Series : тАЬтАЭ)), }

Note: FillRule

4
(viElement, actionName, viAction) =>{ VISite.Logger.Event(viElement.DefaultLogMessage(text)); viAction.Invoke(); }

Note: VIAction
(actionName, viAction, logResult) =>{ VISite.Logger.Event(DefaultLogMessage(text)); var result = viAction.Invoke(); if (logResult != null) VISite.Logger.Event(logResult.Invoke(result)); return result; }
Note: VIAction
5
new RadioButtons(тАЬ тАЭ, тАЬ#sensorScreenтАЭ) { VIAction = (viElement, text, viAction) => { if (!FirstSensorRadioButton.IsDisplayed) SensorBlock.Click(); viAction.Invoke(); } };
Note: VIAction . .
6
[Name(Name = "Wi-fi"), Locate(ByXPath = "//*[@class='my-checkbox']")] public ICheckbox MyCheckbox1; [Name(Name = "Wi-fi"), Locate(ByClassName = тАЬmy-checkbox")] public Checkbox MyCheckbox2; public ICheckbox MyCheckbox3 = new Checkbox("Wi-fi", "#my-checkbox"); public Checkbox MyCheckbox4 = new Checkbox("Wi-fi", By.CssSelector("#my-checkbox"));
7
[Name(" ''")] [ClickReloadsPage] public IButton SearchButton;

Note: ClickReloadsPage

MyButton.WithPageLoadAction.Click()
Note:

MyButton.WaitTimeout(20).Click()
Note: .
, , :
Button, ┬л┬╗ - .

C .

:
IButton, ICheckbox, ICheckList, IClickable, ILabeled, ILink, ISelector, ISetValue, ITextArea, IVIElement

VIAction
, VIAction.
, , :

:
( Click)
,
( GetLabel):
, ,
.
, , , - , Frame, , ( , ), . 4


, VIAction.
, Frame . 5


, , ( ) . 6 .

PageObjects, .
VISite.

var mySite = new VISite(тАЬhttp://mysite.comтАЭ)

, , , .


, , , - . , , , .

VISite.Logger = new MyLogger();

.

VISite 3 :
WaitWebElementInSec тАУ (5 ) WaitPageToLoadInSec тАУ (20 ) RetryActionInMsec тАУ ( ) (0,5 )

, . WaitPageToLoadInSec WaitWebElementInSec ( 7 ).

SmartSearch SmartClick
, Selenium . , , , ( , ). , .

, -, , , - .
VIQA ┬л┬╗, , .

тАв Implicitly wait , ? .
тАв ? , (, Click ? )
- , , - . , , , , .
. тАФ .


KillAllRunWebDrivers
WebDriver ( , ). . , , , .

(SetUpFixture) :

VISite.KillAllRunWebDrivers();

. .


WebDriver, beforesuit , WebDriver . - Open ( , BeforeTest: , .. DataSource -, ). , , , . 2-5 . - , , , , , VIQA .
VIQA ( ). Open, .. , . . .


. ( )

:
Java ( , HTML5) ( , Selenium JavaScript : , setAttribute ) , .

, , .
, , )
: vk.com/viqatools
email : viqablog@gmail.com

.

UPD: SQA Days 15 vimeo.com/95245507


:
1

public class Checkbox { public TextElement TextElement; public VIElement CheckSignElement; } public class LoginForm { public TextField LoginTxtField; public TextField PasswordTxtField; public Button LoginButton; }

2
[Site(Domain = "http://market.yandex.ru/")] public class MySite : VISite { [Page(Title = " ", Url = "http://mysite.ru/")] public HomePage HomePage; [Page(Title = " ", Url = "http://mysite.ru/somepage")] public SomePage SomePage; } [Page(Title = " ", Url = "http://mysite.ru/")] public class HomePage : VIPage { [Name(" ")] [Locate(ByClassName = "search")] public static SearchSection SearchSection; }
Note: Page .

public class SearchSection : VIElement { [Name(" ")] [Locate(ByXPath = "//*[@class='search_input'] public TextArea SearchTextField; [Name(" '")] [Locate(ByXPath = "//*[contains(text(),'')] [ClickReloadsPage] public Button SearchButton; public void SearchProduct(string productName) { SearchTextField.NewInput(productName); SearchButton.Click(); } }
Note: .

3
public class PassportData { public string Number; public string Series; public FullName FullName; } public class FullName { public string Name; public string SecondName; } [FillFromField("Number")] public TextField PassportNumberTxtField;
Note: Number -, .

[FillFromField("FullName.Name")] public TextField PassportNameTxtField;
Note: Name FullName

public ITextArea PassportSeriesTxtField = new TextField() { FillRule = ToFillRule<PassportData>(pd => (pd.Number != тАЬтАЭ) ? pd.Series : тАЬтАЭ)), }

Note: FillRule

4
(viElement, actionName, viAction) =>{ VISite.Logger.Event(viElement.DefaultLogMessage(text)); viAction.Invoke(); }

Note: VIAction
(actionName, viAction, logResult) =>{ VISite.Logger.Event(DefaultLogMessage(text)); var result = viAction.Invoke(); if (logResult != null) VISite.Logger.Event(logResult.Invoke(result)); return result; }
Note: VIAction
5
new RadioButtons(тАЬ тАЭ, тАЬ#sensorScreenтАЭ) { VIAction = (viElement, text, viAction) => { if (!FirstSensorRadioButton.IsDisplayed) SensorBlock.Click(); viAction.Invoke(); } };
Note: VIAction . .
6
[Name(Name = "Wi-fi"), Locate(ByXPath = "//*[@class='my-checkbox']")] public ICheckbox MyCheckbox1; [Name(Name = "Wi-fi"), Locate(ByClassName = тАЬmy-checkbox")] public Checkbox MyCheckbox2; public ICheckbox MyCheckbox3 = new Checkbox("Wi-fi", "#my-checkbox"); public Checkbox MyCheckbox4 = new Checkbox("Wi-fi", By.CssSelector("#my-checkbox"));
7
[Name(" ''")] [ClickReloadsPage] public IButton SearchButton;

Note: ClickReloadsPage

MyButton.WithPageLoadAction.Click()
Note:

MyButton.WaitTimeout(20).Click()
Note: .
 , ,  :   
Button, ┬л┬╗ - .

C .

:
IButton, ICheckbox, ICheckList, IClickable, ILabeled, ILink, ISelector, ISetValue, ITextArea, IVIElement

VIAction
, VIAction.
, , :

:
( Click)
,
( GetLabel):
, ,
.
, , , - , Frame, , ( , ), . 4


, VIAction.
, Frame . 5


, , ( ) . 6 .

PageObjects, .
VISite.

var mySite = new VISite(тАЬhttp://mysite.comтАЭ)

, , , .


, , , - . , , , .

VISite.Logger = new MyLogger();

.

VISite 3 :
WaitWebElementInSec тАУ (5 ) WaitPageToLoadInSec тАУ (20 ) RetryActionInMsec тАУ ( ) (0,5 )

, . WaitPageToLoadInSec WaitWebElementInSec ( 7 ).

SmartSearch SmartClick
, Selenium . , , , ( , ). , .

, -, , , - .
VIQA ┬л┬╗, , .

тАв Implicitly wait , ? .
тАв ? , (, Click ? )
- , , - . , , , , .
. тАФ .


KillAllRunWebDrivers
WebDriver ( , ). . , , , .

(SetUpFixture) :

VISite.KillAllRunWebDrivers();

. .


WebDriver, beforesuit , WebDriver . - Open ( , BeforeTest: , .. DataSource -, ). , , , . 2-5 . - , , , , , VIQA .
VIQA ( ). Open, .. , . . .


. ( )

:
Java ( , HTML5) ( , Selenium JavaScript : , setAttribute ) , .

, , .
, , )
: vk.com/viqatools
email : viqablog@gmail.com

.

UPD: SQA Days 15 vimeo.com/95245507


:
1

public class Checkbox { public TextElement TextElement; public VIElement CheckSignElement; } public class LoginForm { public TextField LoginTxtField; public TextField PasswordTxtField; public Button LoginButton; }

2
[Site(Domain = "http://market.yandex.ru/")] public class MySite : VISite { [Page(Title = " ", Url = "http://mysite.ru/")] public HomePage HomePage; [Page(Title = " ", Url = "http://mysite.ru/somepage")] public SomePage SomePage; } [Page(Title = " ", Url = "http://mysite.ru/")] public class HomePage : VIPage { [Name(" ")] [Locate(ByClassName = "search")] public static SearchSection SearchSection; }
Note: Page .

public class SearchSection : VIElement { [Name(" ")] [Locate(ByXPath = "//*[@class='search_input'] public TextArea SearchTextField; [Name(" '")] [Locate(ByXPath = "//*[contains(text(),'')] [ClickReloadsPage] public Button SearchButton; public void SearchProduct(string productName) { SearchTextField.NewInput(productName); SearchButton.Click(); } }
Note: .

3
public class PassportData { public string Number; public string Series; public FullName FullName; } public class FullName { public string Name; public string SecondName; } [FillFromField("Number")] public TextField PassportNumberTxtField;
Note: Number -, .

[FillFromField("FullName.Name")] public TextField PassportNameTxtField;
Note: Name FullName

public ITextArea PassportSeriesTxtField = new TextField() { FillRule = ToFillRule<PassportData>(pd => (pd.Number != тАЬтАЭ) ? pd.Series : тАЬтАЭ)), }

Note: FillRule

4
(viElement, actionName, viAction) =>{ VISite.Logger.Event(viElement.DefaultLogMessage(text)); viAction.Invoke(); }

Note: VIAction
(actionName, viAction, logResult) =>{ VISite.Logger.Event(DefaultLogMessage(text)); var result = viAction.Invoke(); if (logResult != null) VISite.Logger.Event(logResult.Invoke(result)); return result; }
Note: VIAction
5
new RadioButtons(тАЬ тАЭ, тАЬ#sensorScreenтАЭ) { VIAction = (viElement, text, viAction) => { if (!FirstSensorRadioButton.IsDisplayed) SensorBlock.Click(); viAction.Invoke(); } };
Note: VIAction . .
6
[Name(Name = "Wi-fi"), Locate(ByXPath = "//*[@class='my-checkbox']")] public ICheckbox MyCheckbox1; [Name(Name = "Wi-fi"), Locate(ByClassName = тАЬmy-checkbox")] public Checkbox MyCheckbox2; public ICheckbox MyCheckbox3 = new Checkbox("Wi-fi", "#my-checkbox"); public Checkbox MyCheckbox4 = new Checkbox("Wi-fi", By.CssSelector("#my-checkbox"));
7
[Name(" ''")] [ClickReloadsPage] public IButton SearchButton;

Note: ClickReloadsPage

MyButton.WithPageLoadAction.Click()
Note:

MyButton.WaitTimeout(20).Click()
Note: .
, , :
Button, ┬л┬╗ - .

C .

:
IButton, ICheckbox, ICheckList, IClickable, ILabeled, ILink, ISelector, ISetValue, ITextArea, IVIElement

VIAction
, VIAction.
, , :

:
( Click)
,
( GetLabel):
, ,
.
, , , - , Frame, , ( , ), . 4


, VIAction.
, Frame . 5


, , ( ) . 6 .

PageObjects, .
VISite.

var mySite = new VISite(тАЬhttp://mysite.comтАЭ)

, , , .


, , , - . , , , .

VISite.Logger = new MyLogger();

.

VISite 3 :
WaitWebElementInSec тАУ (5 ) WaitPageToLoadInSec тАУ (20 ) RetryActionInMsec тАУ ( ) (0,5 )

, . WaitPageToLoadInSec WaitWebElementInSec ( 7 ).

SmartSearch SmartClick
, Selenium . , , , ( , ). , .

, -, , , - .
VIQA ┬л┬╗, , .

тАв Implicitly wait , ? .
тАв ? , (, Click ? )
- , , - . , , , , .
. тАФ .


KillAllRunWebDrivers
WebDriver ( , ). . , , , .

(SetUpFixture) :

VISite.KillAllRunWebDrivers();

. .


WebDriver, beforesuit , WebDriver . - Open ( , BeforeTest: , .. DataSource -, ). , , , . 2-5 . - , , , , , VIQA .
VIQA ( ). Open, .. , . . .


. ( )

:
Java ( , HTML5) ( , Selenium JavaScript : , setAttribute ) , .

, , .
, , )
: vk.com/viqatools
email : viqablog@gmail.com

.

UPD: SQA Days 15 vimeo.com/95245507


:
1

public class Checkbox { public TextElement TextElement; public VIElement CheckSignElement; } public class LoginForm { public TextField LoginTxtField; public TextField PasswordTxtField; public Button LoginButton; }

2
[Site(Domain = "http://market.yandex.ru/")] public class MySite : VISite { [Page(Title = " ", Url = "http://mysite.ru/")] public HomePage HomePage; [Page(Title = " ", Url = "http://mysite.ru/somepage")] public SomePage SomePage; } [Page(Title = " ", Url = "http://mysite.ru/")] public class HomePage : VIPage { [Name(" ")] [Locate(ByClassName = "search")] public static SearchSection SearchSection; }
Note: Page .

public class SearchSection : VIElement { [Name(" ")] [Locate(ByXPath = "//*[@class='search_input'] public TextArea SearchTextField; [Name(" '")] [Locate(ByXPath = "//*[contains(text(),'')] [ClickReloadsPage] public Button SearchButton; public void SearchProduct(string productName) { SearchTextField.NewInput(productName); SearchButton.Click(); } }
Note: .

3
public class PassportData { public string Number; public string Series; public FullName FullName; } public class FullName { public string Name; public string SecondName; } [FillFromField("Number")] public TextField PassportNumberTxtField;
Note: Number -, .

[FillFromField("FullName.Name")] public TextField PassportNameTxtField;
Note: Name FullName

public ITextArea PassportSeriesTxtField = new TextField() { FillRule = ToFillRule<PassportData>(pd => (pd.Number != тАЬтАЭ) ? pd.Series : тАЬтАЭ)), }

Note: FillRule

4
(viElement, actionName, viAction) =>{ VISite.Logger.Event(viElement.DefaultLogMessage(text)); viAction.Invoke(); }

Note: VIAction
(actionName, viAction, logResult) =>{ VISite.Logger.Event(DefaultLogMessage(text)); var result = viAction.Invoke(); if (logResult != null) VISite.Logger.Event(logResult.Invoke(result)); return result; }
Note: VIAction
5
new RadioButtons(тАЬ тАЭ, тАЬ#sensorScreenтАЭ) { VIAction = (viElement, text, viAction) => { if (!FirstSensorRadioButton.IsDisplayed) SensorBlock.Click(); viAction.Invoke(); } };
Note: VIAction . .
6
[Name(Name = "Wi-fi"), Locate(ByXPath = "//*[@class='my-checkbox']")] public ICheckbox MyCheckbox1; [Name(Name = "Wi-fi"), Locate(ByClassName = тАЬmy-checkbox")] public Checkbox MyCheckbox2; public ICheckbox MyCheckbox3 = new Checkbox("Wi-fi", "#my-checkbox"); public Checkbox MyCheckbox4 = new Checkbox("Wi-fi", By.CssSelector("#my-checkbox"));
7
[Name(" ''")] [ClickReloadsPage] public IButton SearchButton;

Note: ClickReloadsPage

MyButton.WithPageLoadAction.Click()
Note:

MyButton.WaitTimeout(20).Click()
Note: .
 , ,  :   
Button, ┬л┬╗ - .

C .

:
IButton, ICheckbox, ICheckList, IClickable, ILabeled, ILink, ISelector, ISetValue, ITextArea, IVIElement

VIAction
, VIAction.
, , :

:
( Click)
,
( GetLabel):
, ,
.
, , , - , Frame, , ( , ), . 4


, VIAction.
, Frame . 5


, , ( ) . 6 .

PageObjects, .
VISite.

var mySite = new VISite(тАЬhttp://mysite.comтАЭ)

, , , .


, , , - . , , , .

VISite.Logger = new MyLogger();

.

VISite 3 :
WaitWebElementInSec тАУ (5 ) WaitPageToLoadInSec тАУ (20 ) RetryActionInMsec тАУ ( ) (0,5 )

, . WaitPageToLoadInSec WaitWebElementInSec ( 7 ).

SmartSearch SmartClick
, Selenium . , , , ( , ). , .

, -, , , - .
VIQA ┬л┬╗, , .

тАв Implicitly wait , ? .
тАв ? , (, Click ? )
- , , - . , , , , .
. тАФ .


KillAllRunWebDrivers
WebDriver ( , ). . , , , .

(SetUpFixture) :

VISite.KillAllRunWebDrivers();

. .


WebDriver, beforesuit , WebDriver . - Open ( , BeforeTest: , .. DataSource -, ). , , , . 2-5 . - , , , , , VIQA .
VIQA ( ). Open, .. , . . .


. ( )

:
Java ( , HTML5) ( , Selenium JavaScript : , setAttribute ) , .

, , .
, , )
: vk.com/viqatools
email : viqablog@gmail.com

.

UPD: SQA Days 15 vimeo.com/95245507


:
1

public class Checkbox { public TextElement TextElement; public VIElement CheckSignElement; } public class LoginForm { public TextField LoginTxtField; public TextField PasswordTxtField; public Button LoginButton; }

2
[Site(Domain = "http://market.yandex.ru/")] public class MySite : VISite { [Page(Title = " ", Url = "http://mysite.ru/")] public HomePage HomePage; [Page(Title = " ", Url = "http://mysite.ru/somepage")] public SomePage SomePage; } [Page(Title = " ", Url = "http://mysite.ru/")] public class HomePage : VIPage { [Name(" ")] [Locate(ByClassName = "search")] public static SearchSection SearchSection; }
Note: Page .

public class SearchSection : VIElement { [Name(" ")] [Locate(ByXPath = "//*[@class='search_input'] public TextArea SearchTextField; [Name(" '")] [Locate(ByXPath = "//*[contains(text(),'')] [ClickReloadsPage] public Button SearchButton; public void SearchProduct(string productName) { SearchTextField.NewInput(productName); SearchButton.Click(); } }
Note: .

3
public class PassportData { public string Number; public string Series; public FullName FullName; } public class FullName { public string Name; public string SecondName; } [FillFromField("Number")] public TextField PassportNumberTxtField;
Note: Number -, .

[FillFromField("FullName.Name")] public TextField PassportNameTxtField;
Note: Name FullName

public ITextArea PassportSeriesTxtField = new TextField() { FillRule = ToFillRule<PassportData>(pd => (pd.Number != тАЬтАЭ) ? pd.Series : тАЬтАЭ)), }

Note: FillRule

4
(viElement, actionName, viAction) =>{ VISite.Logger.Event(viElement.DefaultLogMessage(text)); viAction.Invoke(); }

Note: VIAction
(actionName, viAction, logResult) =>{ VISite.Logger.Event(DefaultLogMessage(text)); var result = viAction.Invoke(); if (logResult != null) VISite.Logger.Event(logResult.Invoke(result)); return result; }
Note: VIAction
5
new RadioButtons(тАЬ тАЭ, тАЬ#sensorScreenтАЭ) { VIAction = (viElement, text, viAction) => { if (!FirstSensorRadioButton.IsDisplayed) SensorBlock.Click(); viAction.Invoke(); } };
Note: VIAction . .
6
[Name(Name = "Wi-fi"), Locate(ByXPath = "//*[@class='my-checkbox']")] public ICheckbox MyCheckbox1; [Name(Name = "Wi-fi"), Locate(ByClassName = тАЬmy-checkbox")] public Checkbox MyCheckbox2; public ICheckbox MyCheckbox3 = new Checkbox("Wi-fi", "#my-checkbox"); public Checkbox MyCheckbox4 = new Checkbox("Wi-fi", By.CssSelector("#my-checkbox"));
7
[Name(" ''")] [ClickReloadsPage] public IButton SearchButton;

Note: ClickReloadsPage

MyButton.WithPageLoadAction.Click()
Note:

MyButton.WaitTimeout(20).Click()
Note: .
, , :
Button, ┬л┬╗ - .

C .

:
IButton, ICheckbox, ICheckList, IClickable, ILabeled, ILink, ISelector, ISetValue, ITextArea, IVIElement

VIAction
, VIAction.
, , :

:
( Click)
,
( GetLabel):
, ,
.
, , , - , Frame, , ( , ), . 4


, VIAction.
, Frame . 5


, , ( ) . 6 .

PageObjects, .
VISite.

var mySite = new VISite(тАЬhttp://mysite.comтАЭ)

, , , .


, , , - . , , , .

VISite.Logger = new MyLogger();

.

VISite 3 :
WaitWebElementInSec тАУ (5 ) WaitPageToLoadInSec тАУ (20 ) RetryActionInMsec тАУ ( ) (0,5 )

, . WaitPageToLoadInSec WaitWebElementInSec ( 7 ).

SmartSearch SmartClick
, Selenium . , , , ( , ). , .

, -, , , - .
VIQA ┬л┬╗, , .

тАв Implicitly wait , ? .
тАв ? , (, Click ? )
- , , - . , , , , .
. тАФ .


KillAllRunWebDrivers
WebDriver ( , ). . , , , .

(SetUpFixture) :

VISite.KillAllRunWebDrivers();

. .


WebDriver, beforesuit , WebDriver . - Open ( , BeforeTest: , .. DataSource -, ). , , , . 2-5 . - , , , , , VIQA .
VIQA ( ). Open, .. , . . .


. ( )

:
Java ( , HTML5) ( , Selenium JavaScript : , setAttribute ) , .

, , .
, , )
: vk.com/viqatools
email : viqablog@gmail.com

.

UPD: SQA Days 15 vimeo.com/95245507


:
1

public class Checkbox { public TextElement TextElement; public VIElement CheckSignElement; } public class LoginForm { public TextField LoginTxtField; public TextField PasswordTxtField; public Button LoginButton; }

2
[Site(Domain = "http://market.yandex.ru/")] public class MySite : VISite { [Page(Title = " ", Url = "http://mysite.ru/")] public HomePage HomePage; [Page(Title = " ", Url = "http://mysite.ru/somepage")] public SomePage SomePage; } [Page(Title = " ", Url = "http://mysite.ru/")] public class HomePage : VIPage { [Name(" ")] [Locate(ByClassName = "search")] public static SearchSection SearchSection; }
Note: Page .

public class SearchSection : VIElement { [Name(" ")] [Locate(ByXPath = "//*[@class='search_input'] public TextArea SearchTextField; [Name(" '")] [Locate(ByXPath = "//*[contains(text(),'')] [ClickReloadsPage] public Button SearchButton; public void SearchProduct(string productName) { SearchTextField.NewInput(productName); SearchButton.Click(); } }
Note: .

3
public class PassportData { public string Number; public string Series; public FullName FullName; } public class FullName { public string Name; public string SecondName; } [FillFromField("Number")] public TextField PassportNumberTxtField;
Note: Number -, .

[FillFromField("FullName.Name")] public TextField PassportNameTxtField;
Note: Name FullName

public ITextArea PassportSeriesTxtField = new TextField() { FillRule = ToFillRule<PassportData>(pd => (pd.Number != тАЬтАЭ) ? pd.Series : тАЬтАЭ)), }

Note: FillRule

4
(viElement, actionName, viAction) =>{ VISite.Logger.Event(viElement.DefaultLogMessage(text)); viAction.Invoke(); }

Note: VIAction
(actionName, viAction, logResult) =>{ VISite.Logger.Event(DefaultLogMessage(text)); var result = viAction.Invoke(); if (logResult != null) VISite.Logger.Event(logResult.Invoke(result)); return result; }
Note: VIAction
5
new RadioButtons(тАЬ тАЭ, тАЬ#sensorScreenтАЭ) { VIAction = (viElement, text, viAction) => { if (!FirstSensorRadioButton.IsDisplayed) SensorBlock.Click(); viAction.Invoke(); } };
Note: VIAction . .
6
[Name(Name = "Wi-fi"), Locate(ByXPath = "//*[@class='my-checkbox']")] public ICheckbox MyCheckbox1; [Name(Name = "Wi-fi"), Locate(ByClassName = тАЬmy-checkbox")] public Checkbox MyCheckbox2; public ICheckbox MyCheckbox3 = new Checkbox("Wi-fi", "#my-checkbox"); public Checkbox MyCheckbox4 = new Checkbox("Wi-fi", By.CssSelector("#my-checkbox"));
7
[Name(" ''")] [ClickReloadsPage] public IButton SearchButton;

Note: ClickReloadsPage

MyButton.WithPageLoadAction.Click()
Note:

MyButton.WaitTimeout(20).Click()
Note: .
 , ,  :   
Button, ┬л┬╗ - .

C .

:
IButton, ICheckbox, ICheckList, IClickable, ILabeled, ILink, ISelector, ISetValue, ITextArea, IVIElement

VIAction
, VIAction.
, , :

:
( Click)
,
( GetLabel):
, ,
.
, , , - , Frame, , ( , ), . 4


, VIAction.
, Frame . 5


, , ( ) . 6 .

PageObjects, .
VISite.

var mySite = new VISite(тАЬhttp://mysite.comтАЭ)

, , , .


, , , - . , , , .

VISite.Logger = new MyLogger();

.

VISite 3 :
WaitWebElementInSec тАУ (5 ) WaitPageToLoadInSec тАУ (20 ) RetryActionInMsec тАУ ( ) (0,5 )

, . WaitPageToLoadInSec WaitWebElementInSec ( 7 ).

SmartSearch SmartClick
, Selenium . , , , ( , ). , .

, -, , , - .
VIQA ┬л┬╗, , .

тАв Implicitly wait , ? .
тАв ? , (, Click ? )
- , , - . , , , , .
. тАФ .


KillAllRunWebDrivers
WebDriver ( , ). . , , , .

(SetUpFixture) :

VISite.KillAllRunWebDrivers();

. .


WebDriver, beforesuit , WebDriver . - Open ( , BeforeTest: , .. DataSource -, ). , , , . 2-5 . - , , , , , VIQA .
VIQA ( ). Open, .. , . . .


. ( )

:
Java ( , HTML5) ( , Selenium JavaScript : , setAttribute ) , .

, , .
, , )
: vk.com/viqatools
email : viqablog@gmail.com

.

UPD: SQA Days 15 vimeo.com/95245507


:
1

public class Checkbox { public TextElement TextElement; public VIElement CheckSignElement; } public class LoginForm { public TextField LoginTxtField; public TextField PasswordTxtField; public Button LoginButton; }

2
[Site(Domain = "http://market.yandex.ru/")] public class MySite : VISite { [Page(Title = " ", Url = "http://mysite.ru/")] public HomePage HomePage; [Page(Title = " ", Url = "http://mysite.ru/somepage")] public SomePage SomePage; } [Page(Title = " ", Url = "http://mysite.ru/")] public class HomePage : VIPage { [Name(" ")] [Locate(ByClassName = "search")] public static SearchSection SearchSection; }
Note: Page .

public class SearchSection : VIElement { [Name(" ")] [Locate(ByXPath = "//*[@class='search_input'] public TextArea SearchTextField; [Name(" '")] [Locate(ByXPath = "//*[contains(text(),'')] [ClickReloadsPage] public Button SearchButton; public void SearchProduct(string productName) { SearchTextField.NewInput(productName); SearchButton.Click(); } }
Note: .

3
public class PassportData { public string Number; public string Series; public FullName FullName; } public class FullName { public string Name; public string SecondName; } [FillFromField("Number")] public TextField PassportNumberTxtField;
Note: Number -, .

[FillFromField("FullName.Name")] public TextField PassportNameTxtField;
Note: Name FullName

public ITextArea PassportSeriesTxtField = new TextField() { FillRule = ToFillRule<PassportData>(pd => (pd.Number != тАЬтАЭ) ? pd.Series : тАЬтАЭ)), }

Note: FillRule

4
(viElement, actionName, viAction) =>{ VISite.Logger.Event(viElement.DefaultLogMessage(text)); viAction.Invoke(); }

Note: VIAction
(actionName, viAction, logResult) =>{ VISite.Logger.Event(DefaultLogMessage(text)); var result = viAction.Invoke(); if (logResult != null) VISite.Logger.Event(logResult.Invoke(result)); return result; }
Note: VIAction
5
new RadioButtons(тАЬ тАЭ, тАЬ#sensorScreenтАЭ) { VIAction = (viElement, text, viAction) => { if (!FirstSensorRadioButton.IsDisplayed) SensorBlock.Click(); viAction.Invoke(); } };
Note: VIAction . .
6
[Name(Name = "Wi-fi"), Locate(ByXPath = "//*[@class='my-checkbox']")] public ICheckbox MyCheckbox1; [Name(Name = "Wi-fi"), Locate(ByClassName = тАЬmy-checkbox")] public Checkbox MyCheckbox2; public ICheckbox MyCheckbox3 = new Checkbox("Wi-fi", "#my-checkbox"); public Checkbox MyCheckbox4 = new Checkbox("Wi-fi", By.CssSelector("#my-checkbox"));
7
[Name(" ''")] [ClickReloadsPage] public IButton SearchButton;

Note: ClickReloadsPage

MyButton.WithPageLoadAction.Click()
Note:

MyButton.WaitTimeout(20).Click()
Note: .
, , :
Button, ┬л┬╗ - .

C .

:
IButton, ICheckbox, ICheckList, IClickable, ILabeled, ILink, ISelector, ISetValue, ITextArea, IVIElement

VIAction
, VIAction.
, , :

:
( Click)
,
( GetLabel):
, ,
.
, , , - , Frame, , ( , ), . 4


, VIAction.
, Frame . 5


, , ( ) . 6 .

PageObjects, .
VISite.

var mySite = new VISite(тАЬhttp://mysite.comтАЭ)

, , , .


, , , - . , , , .

VISite.Logger = new MyLogger();

.

VISite 3 :
WaitWebElementInSec тАУ (5 ) WaitPageToLoadInSec тАУ (20 ) RetryActionInMsec тАУ ( ) (0,5 )

, . WaitPageToLoadInSec WaitWebElementInSec ( 7 ).

SmartSearch SmartClick
, Selenium . , , , ( , ). , .

, -, , , - .
VIQA ┬л┬╗, , .

тАв Implicitly wait , ? .
тАв ? , (, Click ? )
- , , - . , , , , .
. тАФ .


KillAllRunWebDrivers
WebDriver ( , ). . , , , .

(SetUpFixture) :

VISite.KillAllRunWebDrivers();

. .


WebDriver, beforesuit , WebDriver . - Open ( , BeforeTest: , .. DataSource -, ). , , , . 2-5 . - , , , , , VIQA .
VIQA ( ). Open, .. , . . .


. ( )

:
Java ( , HTML5) ( , Selenium JavaScript : , setAttribute ) , .

, , .
, , )
: vk.com/viqatools
email : viqablog@gmail.com

.

UPD: SQA Days 15 vimeo.com/95245507


:
1

public class Checkbox { public TextElement TextElement; public VIElement CheckSignElement; } public class LoginForm { public TextField LoginTxtField; public TextField PasswordTxtField; public Button LoginButton; }

2
[Site(Domain = "http://market.yandex.ru/")] public class MySite : VISite { [Page(Title = " ", Url = "http://mysite.ru/")] public HomePage HomePage; [Page(Title = " ", Url = "http://mysite.ru/somepage")] public SomePage SomePage; } [Page(Title = " ", Url = "http://mysite.ru/")] public class HomePage : VIPage { [Name(" ")] [Locate(ByClassName = "search")] public static SearchSection SearchSection; }
Note: Page .

public class SearchSection : VIElement { [Name(" ")] [Locate(ByXPath = "//*[@class='search_input'] public TextArea SearchTextField; [Name(" '")] [Locate(ByXPath = "//*[contains(text(),'')] [ClickReloadsPage] public Button SearchButton; public void SearchProduct(string productName) { SearchTextField.NewInput(productName); SearchButton.Click(); } }
Note: .

3
public class PassportData { public string Number; public string Series; public FullName FullName; } public class FullName { public string Name; public string SecondName; } [FillFromField("Number")] public TextField PassportNumberTxtField;
Note: Number -, .

[FillFromField("FullName.Name")] public TextField PassportNameTxtField;
Note: Name FullName

public ITextArea PassportSeriesTxtField = new TextField() { FillRule = ToFillRule<PassportData>(pd => (pd.Number != тАЬтАЭ) ? pd.Series : тАЬтАЭ)), }

Note: FillRule

4
(viElement, actionName, viAction) =>{ VISite.Logger.Event(viElement.DefaultLogMessage(text)); viAction.Invoke(); }

Note: VIAction
(actionName, viAction, logResult) =>{ VISite.Logger.Event(DefaultLogMessage(text)); var result = viAction.Invoke(); if (logResult != null) VISite.Logger.Event(logResult.Invoke(result)); return result; }
Note: VIAction
5
new RadioButtons(тАЬ тАЭ, тАЬ#sensorScreenтАЭ) { VIAction = (viElement, text, viAction) => { if (!FirstSensorRadioButton.IsDisplayed) SensorBlock.Click(); viAction.Invoke(); } };
Note: VIAction . .
6
[Name(Name = "Wi-fi"), Locate(ByXPath = "//*[@class='my-checkbox']")] public ICheckbox MyCheckbox1; [Name(Name = "Wi-fi"), Locate(ByClassName = тАЬmy-checkbox")] public Checkbox MyCheckbox2; public ICheckbox MyCheckbox3 = new Checkbox("Wi-fi", "#my-checkbox"); public Checkbox MyCheckbox4 = new Checkbox("Wi-fi", By.CssSelector("#my-checkbox"));
7
[Name(" ''")] [ClickReloadsPage] public IButton SearchButton;

Note: ClickReloadsPage

MyButton.WithPageLoadAction.Click()
Note:

MyButton.WaitTimeout(20).Click()
Note: .
 , ,  :   
Button, ┬л┬╗ - .

C .

:
IButton, ICheckbox, ICheckList, IClickable, ILabeled, ILink, ISelector, ISetValue, ITextArea, IVIElement

VIAction
, VIAction.
, , :

:
( Click)
,
( GetLabel):
, ,
.
, , , - , Frame, , ( , ), . 4


, VIAction.
, Frame . 5


, , ( ) . 6 .

PageObjects, .
VISite.

var mySite = new VISite(тАЬhttp://mysite.comтАЭ)

, , , .


, , , - . , , , .

VISite.Logger = new MyLogger();

.

VISite 3 :
WaitWebElementInSec тАУ (5 ) WaitPageToLoadInSec тАУ (20 ) RetryActionInMsec тАУ ( ) (0,5 )

, . WaitPageToLoadInSec WaitWebElementInSec ( 7 ).

SmartSearch SmartClick
, Selenium . , , , ( , ). , .

, -, , , - .
VIQA ┬л┬╗, , .

тАв Implicitly wait , ? .
тАв ? , (, Click ? )
- , , - . , , , , .
. тАФ .


KillAllRunWebDrivers
WebDriver ( , ). . , , , .

(SetUpFixture) :

VISite.KillAllRunWebDrivers();

. .


WebDriver, beforesuit , WebDriver . - Open ( , BeforeTest: , .. DataSource -, ). , , , . 2-5 . - , , , , , VIQA .
VIQA ( ). Open, .. , . . .


. ( )

:
Java ( , HTML5) ( , Selenium JavaScript : , setAttribute ) , .

, , .
, , )
: vk.com/viqatools
email : viqablog@gmail.com

.

UPD: SQA Days 15 vimeo.com/95245507


:
1

public class Checkbox { public TextElement TextElement; public VIElement CheckSignElement; } public class LoginForm { public TextField LoginTxtField; public TextField PasswordTxtField; public Button LoginButton; }

2
[Site(Domain = "http://market.yandex.ru/")] public class MySite : VISite { [Page(Title = " ", Url = "http://mysite.ru/")] public HomePage HomePage; [Page(Title = " ", Url = "http://mysite.ru/somepage")] public SomePage SomePage; } [Page(Title = " ", Url = "http://mysite.ru/")] public class HomePage : VIPage { [Name(" ")] [Locate(ByClassName = "search")] public static SearchSection SearchSection; }
Note: Page .

public class SearchSection : VIElement { [Name(" ")] [Locate(ByXPath = "//*[@class='search_input'] public TextArea SearchTextField; [Name(" '")] [Locate(ByXPath = "//*[contains(text(),'')] [ClickReloadsPage] public Button SearchButton; public void SearchProduct(string productName) { SearchTextField.NewInput(productName); SearchButton.Click(); } }
Note: .

3
public class PassportData { public string Number; public string Series; public FullName FullName; } public class FullName { public string Name; public string SecondName; } [FillFromField("Number")] public TextField PassportNumberTxtField;
Note: Number -, .

[FillFromField("FullName.Name")] public TextField PassportNameTxtField;
Note: Name FullName

public ITextArea PassportSeriesTxtField = new TextField() { FillRule = ToFillRule<PassportData>(pd => (pd.Number != тАЬтАЭ) ? pd.Series : тАЬтАЭ)), }

Note: FillRule

4
(viElement, actionName, viAction) =>{ VISite.Logger.Event(viElement.DefaultLogMessage(text)); viAction.Invoke(); }

Note: VIAction
(actionName, viAction, logResult) =>{ VISite.Logger.Event(DefaultLogMessage(text)); var result = viAction.Invoke(); if (logResult != null) VISite.Logger.Event(logResult.Invoke(result)); return result; }
Note: VIAction
5
new RadioButtons(тАЬ тАЭ, тАЬ#sensorScreenтАЭ) { VIAction = (viElement, text, viAction) => { if (!FirstSensorRadioButton.IsDisplayed) SensorBlock.Click(); viAction.Invoke(); } };
Note: VIAction . .
6
[Name(Name = "Wi-fi"), Locate(ByXPath = "//*[@class='my-checkbox']")] public ICheckbox MyCheckbox1; [Name(Name = "Wi-fi"), Locate(ByClassName = тАЬmy-checkbox")] public Checkbox MyCheckbox2; public ICheckbox MyCheckbox3 = new Checkbox("Wi-fi", "#my-checkbox"); public Checkbox MyCheckbox4 = new Checkbox("Wi-fi", By.CssSelector("#my-checkbox"));
7
[Name(" ''")] [ClickReloadsPage] public IButton SearchButton;

Note: ClickReloadsPage

MyButton.WithPageLoadAction.Click()
Note:

MyButton.WaitTimeout(20).Click()
Note: .
, , :
Button, ┬л┬╗ - .

C .

:
IButton, ICheckbox, ICheckList, IClickable, ILabeled, ILink, ISelector, ISetValue, ITextArea, IVIElement

VIAction
, VIAction.
, , :

:
( Click)
,
( GetLabel):
, ,
.
, , , - , Frame, , ( , ), . 4


, VIAction.
, Frame . 5


, , ( ) . 6 .

PageObjects, .
VISite.

var mySite = new VISite(тАЬhttp://mysite.comтАЭ)

, , , .


, , , - . , , , .

VISite.Logger = new MyLogger();

.

VISite 3 :
WaitWebElementInSec тАУ (5 ) WaitPageToLoadInSec тАУ (20 ) RetryActionInMsec тАУ ( ) (0,5 )

, . WaitPageToLoadInSec WaitWebElementInSec ( 7 ).

SmartSearch SmartClick
, Selenium . , , , ( , ). , .

, -, , , - .
VIQA ┬л┬╗, , .

тАв Implicitly wait , ? .
тАв ? , (, Click ? )
- , , - . , , , , .
. тАФ .


KillAllRunWebDrivers
WebDriver ( , ). . , , , .

(SetUpFixture) :

VISite.KillAllRunWebDrivers();

. .


WebDriver, beforesuit , WebDriver . - Open ( , BeforeTest: , .. DataSource -, ). , , , . 2-5 . - , , , , , VIQA .
VIQA ( ). Open, .. , . . .


. ( )

:
Java ( , HTML5) ( , Selenium JavaScript : , setAttribute ) , .

, , .
, , )
: vk.com/viqatools
email : viqablog@gmail.com

.

UPD: SQA Days 15 vimeo.com/95245507


:
1

public class Checkbox { public TextElement TextElement; public VIElement CheckSignElement; } public class LoginForm { public TextField LoginTxtField; public TextField PasswordTxtField; public Button LoginButton; }

2
[Site(Domain = "http://market.yandex.ru/")] public class MySite : VISite { [Page(Title = " ", Url = "http://mysite.ru/")] public HomePage HomePage; [Page(Title = " ", Url = "http://mysite.ru/somepage")] public SomePage SomePage; } [Page(Title = " ", Url = "http://mysite.ru/")] public class HomePage : VIPage { [Name(" ")] [Locate(ByClassName = "search")] public static SearchSection SearchSection; }
Note: Page .

public class SearchSection : VIElement { [Name(" ")] [Locate(ByXPath = "//*[@class='search_input'] public TextArea SearchTextField; [Name(" '")] [Locate(ByXPath = "//*[contains(text(),'')] [ClickReloadsPage] public Button SearchButton; public void SearchProduct(string productName) { SearchTextField.NewInput(productName); SearchButton.Click(); } }
Note: .

3
public class PassportData { public string Number; public string Series; public FullName FullName; } public class FullName { public string Name; public string SecondName; } [FillFromField("Number")] public TextField PassportNumberTxtField;
Note: Number -, .

[FillFromField("FullName.Name")] public TextField PassportNameTxtField;
Note: Name FullName

public ITextArea PassportSeriesTxtField = new TextField() { FillRule = ToFillRule<PassportData>(pd => (pd.Number != тАЬтАЭ) ? pd.Series : тАЬтАЭ)), }

Note: FillRule

4
(viElement, actionName, viAction) =>{ VISite.Logger.Event(viElement.DefaultLogMessage(text)); viAction.Invoke(); }

Note: VIAction
(actionName, viAction, logResult) =>{ VISite.Logger.Event(DefaultLogMessage(text)); var result = viAction.Invoke(); if (logResult != null) VISite.Logger.Event(logResult.Invoke(result)); return result; }
Note: VIAction
5
new RadioButtons(тАЬ тАЭ, тАЬ#sensorScreenтАЭ) { VIAction = (viElement, text, viAction) => { if (!FirstSensorRadioButton.IsDisplayed) SensorBlock.Click(); viAction.Invoke(); } };
Note: VIAction . .
6
[Name(Name = "Wi-fi"), Locate(ByXPath = "//*[@class='my-checkbox']")] public ICheckbox MyCheckbox1; [Name(Name = "Wi-fi"), Locate(ByClassName = тАЬmy-checkbox")] public Checkbox MyCheckbox2; public ICheckbox MyCheckbox3 = new Checkbox("Wi-fi", "#my-checkbox"); public Checkbox MyCheckbox4 = new Checkbox("Wi-fi", By.CssSelector("#my-checkbox"));
7
[Name(" ''")] [ClickReloadsPage] public IButton SearchButton;

Note: ClickReloadsPage

MyButton.WithPageLoadAction.Click()
Note:

MyButton.WaitTimeout(20).Click()
Note: .
 , ,  :   
Button, ┬л┬╗ - .

C .

:
IButton, ICheckbox, ICheckList, IClickable, ILabeled, ILink, ISelector, ISetValue, ITextArea, IVIElement

VIAction
, VIAction.
, , :

:
( Click)
,
( GetLabel):
, ,
.
, , , - , Frame, , ( , ), . 4


, VIAction.
, Frame . 5


, , ( ) . 6 .

PageObjects, .
VISite.

var mySite = new VISite(тАЬhttp://mysite.comтАЭ)

, , , .


, , , - . , , , .

VISite.Logger = new MyLogger();

.

VISite 3 :
WaitWebElementInSec тАУ (5 ) WaitPageToLoadInSec тАУ (20 ) RetryActionInMsec тАУ ( ) (0,5 )

, . WaitPageToLoadInSec WaitWebElementInSec ( 7 ).

SmartSearch SmartClick
, Selenium . , , , ( , ). , .

, -, , , - .
VIQA ┬л┬╗, , .

тАв Implicitly wait , ? .
тАв ? , (, Click ? )
- , , - . , , , , .
. тАФ .


KillAllRunWebDrivers
WebDriver ( , ). . , , , .

(SetUpFixture) :

VISite.KillAllRunWebDrivers();

. .


WebDriver, beforesuit , WebDriver . - Open ( , BeforeTest: , .. DataSource -, ). , , , . 2-5 . - , , , , , VIQA .
VIQA ( ). Open, .. , . . .


. ( )

:
Java ( , HTML5) ( , Selenium JavaScript : , setAttribute ) , .

, , .
, , )
: vk.com/viqatools
email : viqablog@gmail.com

.

UPD: SQA Days 15 vimeo.com/95245507


:
1

public class Checkbox { public TextElement TextElement; public VIElement CheckSignElement; } public class LoginForm { public TextField LoginTxtField; public TextField PasswordTxtField; public Button LoginButton; }

2
[Site(Domain = "http://market.yandex.ru/")] public class MySite : VISite { [Page(Title = " ", Url = "http://mysite.ru/")] public HomePage HomePage; [Page(Title = " ", Url = "http://mysite.ru/somepage")] public SomePage SomePage; } [Page(Title = " ", Url = "http://mysite.ru/")] public class HomePage : VIPage { [Name(" ")] [Locate(ByClassName = "search")] public static SearchSection SearchSection; }
Note: Page .

public class SearchSection : VIElement { [Name(" ")] [Locate(ByXPath = "//*[@class='search_input'] public TextArea SearchTextField; [Name(" '")] [Locate(ByXPath = "//*[contains(text(),'')] [ClickReloadsPage] public Button SearchButton; public void SearchProduct(string productName) { SearchTextField.NewInput(productName); SearchButton.Click(); } }
Note: .

3
public class PassportData { public string Number; public string Series; public FullName FullName; } public class FullName { public string Name; public string SecondName; } [FillFromField("Number")] public TextField PassportNumberTxtField;
Note: Number -, .

[FillFromField("FullName.Name")] public TextField PassportNameTxtField;
Note: Name FullName

public ITextArea PassportSeriesTxtField = new TextField() { FillRule = ToFillRule<PassportData>(pd => (pd.Number != тАЬтАЭ) ? pd.Series : тАЬтАЭ)), }

Note: FillRule

4
(viElement, actionName, viAction) =>{ VISite.Logger.Event(viElement.DefaultLogMessage(text)); viAction.Invoke(); }

Note: VIAction
(actionName, viAction, logResult) =>{ VISite.Logger.Event(DefaultLogMessage(text)); var result = viAction.Invoke(); if (logResult != null) VISite.Logger.Event(logResult.Invoke(result)); return result; }
Note: VIAction
5
new RadioButtons(тАЬ тАЭ, тАЬ#sensorScreenтАЭ) { VIAction = (viElement, text, viAction) => { if (!FirstSensorRadioButton.IsDisplayed) SensorBlock.Click(); viAction.Invoke(); } };
Note: VIAction . .
6
[Name(Name = "Wi-fi"), Locate(ByXPath = "//*[@class='my-checkbox']")] public ICheckbox MyCheckbox1; [Name(Name = "Wi-fi"), Locate(ByClassName = тАЬmy-checkbox")] public Checkbox MyCheckbox2; public ICheckbox MyCheckbox3 = new Checkbox("Wi-fi", "#my-checkbox"); public Checkbox MyCheckbox4 = new Checkbox("Wi-fi", By.CssSelector("#my-checkbox"));
7
[Name(" ''")] [ClickReloadsPage] public IButton SearchButton;

Note: ClickReloadsPage

MyButton.WithPageLoadAction.Click()
Note:

MyButton.WaitTimeout(20).Click()
Note: .
, , :
Button, ┬л┬╗ - .

C .

:
IButton, ICheckbox, ICheckList, IClickable, ILabeled, ILink, ISelector, ISetValue, ITextArea, IVIElement

VIAction
, VIAction.
, , :

:
( Click)
,
( GetLabel):
, ,
.
, , , - , Frame, , ( , ), . 4


, VIAction.
, Frame . 5


, , ( ) . 6 .

PageObjects, .
VISite.

var mySite = new VISite(тАЬhttp://mysite.comтАЭ)

, , , .


, , , - . , , , .

VISite.Logger = new MyLogger();

.

VISite 3 :
WaitWebElementInSec тАУ (5 ) WaitPageToLoadInSec тАУ (20 ) RetryActionInMsec тАУ ( ) (0,5 )

, . WaitPageToLoadInSec WaitWebElementInSec ( 7 ).

SmartSearch SmartClick
, Selenium . , , , ( , ). , .

, -, , , - .
VIQA ┬л┬╗, , .

тАв Implicitly wait , ? .
тАв ? , (, Click ? )
- , , - . , , , , .
. тАФ .


KillAllRunWebDrivers
WebDriver ( , ). . , , , .

(SetUpFixture) :

VISite.KillAllRunWebDrivers();

. .


WebDriver, beforesuit , WebDriver . - Open ( , BeforeTest: , .. DataSource -, ). , , , . 2-5 . - , , , , , VIQA .
VIQA ( ). Open, .. , . . .


. ( )

:
Java ( , HTML5) ( , Selenium JavaScript : , setAttribute ) , .

, , .
, , )
: vk.com/viqatools
email : viqablog@gmail.com

.

UPD: SQA Days 15 vimeo.com/95245507


:
1

public class Checkbox { public TextElement TextElement; public VIElement CheckSignElement; } public class LoginForm { public TextField LoginTxtField; public TextField PasswordTxtField; public Button LoginButton; }

2
[Site(Domain = "http://market.yandex.ru/")] public class MySite : VISite { [Page(Title = " ", Url = "http://mysite.ru/")] public HomePage HomePage; [Page(Title = " ", Url = "http://mysite.ru/somepage")] public SomePage SomePage; } [Page(Title = " ", Url = "http://mysite.ru/")] public class HomePage : VIPage { [Name(" ")] [Locate(ByClassName = "search")] public static SearchSection SearchSection; }
Note: Page .

public class SearchSection : VIElement { [Name(" ")] [Locate(ByXPath = "//*[@class='search_input'] public TextArea SearchTextField; [Name(" '")] [Locate(ByXPath = "//*[contains(text(),'')] [ClickReloadsPage] public Button SearchButton; public void SearchProduct(string productName) { SearchTextField.NewInput(productName); SearchButton.Click(); } }
Note: .

3
public class PassportData { public string Number; public string Series; public FullName FullName; } public class FullName { public string Name; public string SecondName; } [FillFromField("Number")] public TextField PassportNumberTxtField;
Note: Number -, .

[FillFromField("FullName.Name")] public TextField PassportNameTxtField;
Note: Name FullName

public ITextArea PassportSeriesTxtField = new TextField() { FillRule = ToFillRule<PassportData>(pd => (pd.Number != тАЬтАЭ) ? pd.Series : тАЬтАЭ)), }

Note: FillRule

4
(viElement, actionName, viAction) =>{ VISite.Logger.Event(viElement.DefaultLogMessage(text)); viAction.Invoke(); }

Note: VIAction
(actionName, viAction, logResult) =>{ VISite.Logger.Event(DefaultLogMessage(text)); var result = viAction.Invoke(); if (logResult != null) VISite.Logger.Event(logResult.Invoke(result)); return result; }
Note: VIAction
5
new RadioButtons(тАЬ тАЭ, тАЬ#sensorScreenтАЭ) { VIAction = (viElement, text, viAction) => { if (!FirstSensorRadioButton.IsDisplayed) SensorBlock.Click(); viAction.Invoke(); } };
Note: VIAction . .
6
[Name(Name = "Wi-fi"), Locate(ByXPath = "//*[@class='my-checkbox']")] public ICheckbox MyCheckbox1; [Name(Name = "Wi-fi"), Locate(ByClassName = тАЬmy-checkbox")] public Checkbox MyCheckbox2; public ICheckbox MyCheckbox3 = new Checkbox("Wi-fi", "#my-checkbox"); public Checkbox MyCheckbox4 = new Checkbox("Wi-fi", By.CssSelector("#my-checkbox"));
7
[Name(" ''")] [ClickReloadsPage] public IButton SearchButton;

Note: ClickReloadsPage

MyButton.WithPageLoadAction.Click()
Note:

MyButton.WaitTimeout(20).Click()
Note: .
 , ,  :   
Button, ┬л┬╗ - .

C .

:
IButton, ICheckbox, ICheckList, IClickable, ILabeled, ILink, ISelector, ISetValue, ITextArea, IVIElement

VIAction
, VIAction.
, , :

:
( Click)
,
( GetLabel):
, ,
.
, , , - , Frame, , ( , ), . 4


, VIAction.
, Frame . 5


, , ( ) . 6 .

PageObjects, .
VISite.

var mySite = new VISite(тАЬhttp://mysite.comтАЭ)

, , , .


, , , - . , , , .

VISite.Logger = new MyLogger();

.

VISite 3 :
WaitWebElementInSec тАУ (5 ) WaitPageToLoadInSec тАУ (20 ) RetryActionInMsec тАУ ( ) (0,5 )

, . WaitPageToLoadInSec WaitWebElementInSec ( 7 ).

SmartSearch SmartClick
, Selenium . , , , ( , ). , .

, -, , , - .
VIQA ┬л┬╗, , .

тАв Implicitly wait , ? .
тАв ? , (, Click ? )
- , , - . , , , , .
. тАФ .


KillAllRunWebDrivers
WebDriver ( , ). . , , , .

(SetUpFixture) :

VISite.KillAllRunWebDrivers();

. .


WebDriver, beforesuit , WebDriver . - Open ( , BeforeTest: , .. DataSource -, ). , , , . 2-5 . - , , , , , VIQA .
VIQA ( ). Open, .. , . . .


. ( )

:
Java ( , HTML5) ( , Selenium JavaScript : , setAttribute ) , .

, , .
, , )
: vk.com/viqatools
email : viqablog@gmail.com

.

UPD: SQA Days 15 vimeo.com/95245507


:
1

public class Checkbox { public TextElement TextElement; public VIElement CheckSignElement; } public class LoginForm { public TextField LoginTxtField; public TextField PasswordTxtField; public Button LoginButton; }

2
[Site(Domain = "http://market.yandex.ru/")] public class MySite : VISite { [Page(Title = " ", Url = "http://mysite.ru/")] public HomePage HomePage; [Page(Title = " ", Url = "http://mysite.ru/somepage")] public SomePage SomePage; } [Page(Title = " ", Url = "http://mysite.ru/")] public class HomePage : VIPage { [Name(" ")] [Locate(ByClassName = "search")] public static SearchSection SearchSection; }
Note: Page .

public class SearchSection : VIElement { [Name(" ")] [Locate(ByXPath = "//*[@class='search_input'] public TextArea SearchTextField; [Name(" '")] [Locate(ByXPath = "//*[contains(text(),'')] [ClickReloadsPage] public Button SearchButton; public void SearchProduct(string productName) { SearchTextField.NewInput(productName); SearchButton.Click(); } }
Note: .

3
public class PassportData { public string Number; public string Series; public FullName FullName; } public class FullName { public string Name; public string SecondName; } [FillFromField("Number")] public TextField PassportNumberTxtField;
Note: Number -, .

[FillFromField("FullName.Name")] public TextField PassportNameTxtField;
Note: Name FullName

public ITextArea PassportSeriesTxtField = new TextField() { FillRule = ToFillRule<PassportData>(pd => (pd.Number != тАЬтАЭ) ? pd.Series : тАЬтАЭ)), }

Note: FillRule

4
(viElement, actionName, viAction) =>{ VISite.Logger.Event(viElement.DefaultLogMessage(text)); viAction.Invoke(); }

Note: VIAction
(actionName, viAction, logResult) =>{ VISite.Logger.Event(DefaultLogMessage(text)); var result = viAction.Invoke(); if (logResult != null) VISite.Logger.Event(logResult.Invoke(result)); return result; }
Note: VIAction
5
new RadioButtons(тАЬ тАЭ, тАЬ#sensorScreenтАЭ) { VIAction = (viElement, text, viAction) => { if (!FirstSensorRadioButton.IsDisplayed) SensorBlock.Click(); viAction.Invoke(); } };
Note: VIAction . .
6
[Name(Name = "Wi-fi"), Locate(ByXPath = "//*[@class='my-checkbox']")] public ICheckbox MyCheckbox1; [Name(Name = "Wi-fi"), Locate(ByClassName = тАЬmy-checkbox")] public Checkbox MyCheckbox2; public ICheckbox MyCheckbox3 = new Checkbox("Wi-fi", "#my-checkbox"); public Checkbox MyCheckbox4 = new Checkbox("Wi-fi", By.CssSelector("#my-checkbox"));
7
[Name(" ''")] [ClickReloadsPage] public IButton SearchButton;

Note: ClickReloadsPage

MyButton.WithPageLoadAction.Click()
Note:

MyButton.WaitTimeout(20).Click()
Note: .
, , :
Button, ┬л┬╗ - .

C .

:
IButton, ICheckbox, ICheckList, IClickable, ILabeled, ILink, ISelector, ISetValue, ITextArea, IVIElement

VIAction
, VIAction.
, , :

:
( Click)
,
( GetLabel):
, ,
.
, , , - , Frame, , ( , ), . 4


, VIAction.
, Frame . 5


, , ( ) . 6 .

PageObjects, .
VISite.

var mySite = new VISite(тАЬhttp://mysite.comтАЭ)

, , , .


, , , - . , , , .

VISite.Logger = new MyLogger();

.

VISite 3 :
WaitWebElementInSec тАУ (5 ) WaitPageToLoadInSec тАУ (20 ) RetryActionInMsec тАУ ( ) (0,5 )

, . WaitPageToLoadInSec WaitWebElementInSec ( 7 ).

SmartSearch SmartClick
, Selenium . , , , ( , ). , .

, -, , , - .
VIQA ┬л┬╗, , .

тАв Implicitly wait , ? .
тАв ? , (, Click ? )
- , , - . , , , , .
. тАФ .


KillAllRunWebDrivers
WebDriver ( , ). . , , , .

(SetUpFixture) :

VISite.KillAllRunWebDrivers();

. .


WebDriver, beforesuit , WebDriver . - Open ( , BeforeTest: , .. DataSource -, ). , , , . 2-5 . - , , , , , VIQA .
VIQA ( ). Open, .. , . . .


. ( )

:
Java ( , HTML5) ( , Selenium JavaScript : , setAttribute ) , .

, , .
, , )
: vk.com/viqatools
email : viqablog@gmail.com

.

UPD: SQA Days 15 vimeo.com/95245507


:
1

public class Checkbox { public TextElement TextElement; public VIElement CheckSignElement; } public class LoginForm { public TextField LoginTxtField; public TextField PasswordTxtField; public Button LoginButton; }

2
[Site(Domain = "http://market.yandex.ru/")] public class MySite : VISite { [Page(Title = " ", Url = "http://mysite.ru/")] public HomePage HomePage; [Page(Title = " ", Url = "http://mysite.ru/somepage")] public SomePage SomePage; } [Page(Title = " ", Url = "http://mysite.ru/")] public class HomePage : VIPage { [Name(" ")] [Locate(ByClassName = "search")] public static SearchSection SearchSection; }
Note: Page .

public class SearchSection : VIElement { [Name(" ")] [Locate(ByXPath = "//*[@class='search_input'] public TextArea SearchTextField; [Name(" '")] [Locate(ByXPath = "//*[contains(text(),'')] [ClickReloadsPage] public Button SearchButton; public void SearchProduct(string productName) { SearchTextField.NewInput(productName); SearchButton.Click(); } }
Note: .

3
public class PassportData { public string Number; public string Series; public FullName FullName; } public class FullName { public string Name; public string SecondName; } [FillFromField("Number")] public TextField PassportNumberTxtField;
Note: Number -, .

[FillFromField("FullName.Name")] public TextField PassportNameTxtField;
Note: Name FullName

public ITextArea PassportSeriesTxtField = new TextField() { FillRule = ToFillRule<PassportData>(pd => (pd.Number != тАЬтАЭ) ? pd.Series : тАЬтАЭ)), }

Note: FillRule

4
(viElement, actionName, viAction) =>{ VISite.Logger.Event(viElement.DefaultLogMessage(text)); viAction.Invoke(); }

Note: VIAction
(actionName, viAction, logResult) =>{ VISite.Logger.Event(DefaultLogMessage(text)); var result = viAction.Invoke(); if (logResult != null) VISite.Logger.Event(logResult.Invoke(result)); return result; }
Note: VIAction
5
new RadioButtons(тАЬ тАЭ, тАЬ#sensorScreenтАЭ) { VIAction = (viElement, text, viAction) => { if (!FirstSensorRadioButton.IsDisplayed) SensorBlock.Click(); viAction.Invoke(); } };
Note: VIAction . .
6
[Name(Name = "Wi-fi"), Locate(ByXPath = "//*[@class='my-checkbox']")] public ICheckbox MyCheckbox1; [Name(Name = "Wi-fi"), Locate(ByClassName = тАЬmy-checkbox")] public Checkbox MyCheckbox2; public ICheckbox MyCheckbox3 = new Checkbox("Wi-fi", "#my-checkbox"); public Checkbox MyCheckbox4 = new Checkbox("Wi-fi", By.CssSelector("#my-checkbox"));
7
[Name(" ''")] [ClickReloadsPage] public IButton SearchButton;

Note: ClickReloadsPage

MyButton.WithPageLoadAction.Click()
Note:

MyButton.WaitTimeout(20).Click()
Note: .
 , ,  :   
Button, ┬л┬╗ - .

C .

:
IButton, ICheckbox, ICheckList, IClickable, ILabeled, ILink, ISelector, ISetValue, ITextArea, IVIElement

VIAction
, VIAction.
, , :

:
( Click)
,
( GetLabel):
, ,
.
, , , - , Frame, , ( , ), . 4


, VIAction.
, Frame . 5


, , ( ) . 6 .

PageObjects, .
VISite.

var mySite = new VISite(тАЬhttp://mysite.comтАЭ)

, , , .


, , , - . , , , .

VISite.Logger = new MyLogger();

.

VISite 3 :
WaitWebElementInSec тАУ (5 ) WaitPageToLoadInSec тАУ (20 ) RetryActionInMsec тАУ ( ) (0,5 )

, . WaitPageToLoadInSec WaitWebElementInSec ( 7 ).

SmartSearch SmartClick
, Selenium . , , , ( , ). , .

, -, , , - .
VIQA ┬л┬╗, , .

тАв Implicitly wait , ? .
тАв ? , (, Click ? )
- , , - . , , , , .
. тАФ .


KillAllRunWebDrivers
WebDriver ( , ). . , , , .

(SetUpFixture) :

VISite.KillAllRunWebDrivers();

. .


WebDriver, beforesuit , WebDriver . - Open ( , BeforeTest: , .. DataSource -, ). , , , . 2-5 . - , , , , , VIQA .
VIQA ( ). Open, .. , . . .


. ( )

:
Java ( , HTML5) ( , Selenium JavaScript : , setAttribute ) , .

, , .
, , )
: vk.com/viqatools
email : viqablog@gmail.com

.

UPD: SQA Days 15 vimeo.com/95245507


:
1

public class Checkbox { public TextElement TextElement; public VIElement CheckSignElement; } public class LoginForm { public TextField LoginTxtField; public TextField PasswordTxtField; public Button LoginButton; }

2
[Site(Domain = "http://market.yandex.ru/")] public class MySite : VISite { [Page(Title = " ", Url = "http://mysite.ru/")] public HomePage HomePage; [Page(Title = " ", Url = "http://mysite.ru/somepage")] public SomePage SomePage; } [Page(Title = " ", Url = "http://mysite.ru/")] public class HomePage : VIPage { [Name(" ")] [Locate(ByClassName = "search")] public static SearchSection SearchSection; }
Note: Page .

public class SearchSection : VIElement { [Name(" ")] [Locate(ByXPath = "//*[@class='search_input'] public TextArea SearchTextField; [Name(" '")] [Locate(ByXPath = "//*[contains(text(),'')] [ClickReloadsPage] public Button SearchButton; public void SearchProduct(string productName) { SearchTextField.NewInput(productName); SearchButton.Click(); } }
Note: .

3
public class PassportData { public string Number; public string Series; public FullName FullName; } public class FullName { public string Name; public string SecondName; } [FillFromField("Number")] public TextField PassportNumberTxtField;
Note: Number -, .

[FillFromField("FullName.Name")] public TextField PassportNameTxtField;
Note: Name FullName

public ITextArea PassportSeriesTxtField = new TextField() { FillRule = ToFillRule<PassportData>(pd => (pd.Number != тАЬтАЭ) ? pd.Series : тАЬтАЭ)), }

Note: FillRule

4
(viElement, actionName, viAction) =>{ VISite.Logger.Event(viElement.DefaultLogMessage(text)); viAction.Invoke(); }

Note: VIAction
(actionName, viAction, logResult) =>{ VISite.Logger.Event(DefaultLogMessage(text)); var result = viAction.Invoke(); if (logResult != null) VISite.Logger.Event(logResult.Invoke(result)); return result; }
Note: VIAction
5
new RadioButtons(тАЬ тАЭ, тАЬ#sensorScreenтАЭ) { VIAction = (viElement, text, viAction) => { if (!FirstSensorRadioButton.IsDisplayed) SensorBlock.Click(); viAction.Invoke(); } };
Note: VIAction . .
6
[Name(Name = "Wi-fi"), Locate(ByXPath = "//*[@class='my-checkbox']")] public ICheckbox MyCheckbox1; [Name(Name = "Wi-fi"), Locate(ByClassName = тАЬmy-checkbox")] public Checkbox MyCheckbox2; public ICheckbox MyCheckbox3 = new Checkbox("Wi-fi", "#my-checkbox"); public Checkbox MyCheckbox4 = new Checkbox("Wi-fi", By.CssSelector("#my-checkbox"));
7
[Name(" ''")] [ClickReloadsPage] public IButton SearchButton;

Note: ClickReloadsPage

MyButton.WithPageLoadAction.Click()
Note:

MyButton.WaitTimeout(20).Click()
Note: .
, , :
Button, ┬л┬╗ - .

C .

:
IButton, ICheckbox, ICheckList, IClickable, ILabeled, ILink, ISelector, ISetValue, ITextArea, IVIElement

VIAction
, VIAction.
, , :

:
( Click)
,
( GetLabel):
, ,
.
, , , - , Frame, , ( , ), . 4


, VIAction.
, Frame . 5


, , ( ) . 6 .

PageObjects, .
VISite.

var mySite = new VISite(тАЬhttp://mysite.comтАЭ)

, , , .


, , , - . , , , .

VISite.Logger = new MyLogger();

.

VISite 3 :
WaitWebElementInSec тАУ (5 ) WaitPageToLoadInSec тАУ (20 ) RetryActionInMsec тАУ ( ) (0,5 )

, . WaitPageToLoadInSec WaitWebElementInSec ( 7 ).

SmartSearch SmartClick
, Selenium . , , , ( , ). , .

, -, , , - .
VIQA ┬л┬╗, , .

тАв Implicitly wait , ? .
тАв ? , (, Click ? )
- , , - . , , , , .
. тАФ .


KillAllRunWebDrivers
WebDriver ( , ). . , , , .

(SetUpFixture) :

VISite.KillAllRunWebDrivers();

. .


WebDriver, beforesuit , WebDriver . - Open ( , BeforeTest: , .. DataSource -, ). , , , . 2-5 . - , , , , , VIQA .
VIQA ( ). Open, .. , . . .


. ( )

:
Java ( , HTML5) ( , Selenium JavaScript : , setAttribute ) , .

, , .
, , )
: vk.com/viqatools
email : viqablog@gmail.com

.

UPD: SQA Days 15 vimeo.com/95245507


:
1

public class Checkbox { public TextElement TextElement; public VIElement CheckSignElement; } public class LoginForm { public TextField LoginTxtField; public TextField PasswordTxtField; public Button LoginButton; }

2
[Site(Domain = "http://market.yandex.ru/")] public class MySite : VISite { [Page(Title = " ", Url = "http://mysite.ru/")] public HomePage HomePage; [Page(Title = " ", Url = "http://mysite.ru/somepage")] public SomePage SomePage; } [Page(Title = " ", Url = "http://mysite.ru/")] public class HomePage : VIPage { [Name(" ")] [Locate(ByClassName = "search")] public static SearchSection SearchSection; }
Note: Page .

public class SearchSection : VIElement { [Name(" ")] [Locate(ByXPath = "//*[@class='search_input'] public TextArea SearchTextField; [Name(" '")] [Locate(ByXPath = "//*[contains(text(),'')] [ClickReloadsPage] public Button SearchButton; public void SearchProduct(string productName) { SearchTextField.NewInput(productName); SearchButton.Click(); } }
Note: .

3
public class PassportData { public string Number; public string Series; public FullName FullName; } public class FullName { public string Name; public string SecondName; } [FillFromField("Number")] public TextField PassportNumberTxtField;
Note: Number -, .

[FillFromField("FullName.Name")] public TextField PassportNameTxtField;
Note: Name FullName

public ITextArea PassportSeriesTxtField = new TextField() { FillRule = ToFillRule<PassportData>(pd => (pd.Number != тАЬтАЭ) ? pd.Series : тАЬтАЭ)), }

Note: FillRule

4
(viElement, actionName, viAction) =>{ VISite.Logger.Event(viElement.DefaultLogMessage(text)); viAction.Invoke(); }

Note: VIAction
(actionName, viAction, logResult) =>{ VISite.Logger.Event(DefaultLogMessage(text)); var result = viAction.Invoke(); if (logResult != null) VISite.Logger.Event(logResult.Invoke(result)); return result; }
Note: VIAction
5
new RadioButtons(тАЬ тАЭ, тАЬ#sensorScreenтАЭ) { VIAction = (viElement, text, viAction) => { if (!FirstSensorRadioButton.IsDisplayed) SensorBlock.Click(); viAction.Invoke(); } };
Note: VIAction . .
6
[Name(Name = "Wi-fi"), Locate(ByXPath = "//*[@class='my-checkbox']")] public ICheckbox MyCheckbox1; [Name(Name = "Wi-fi"), Locate(ByClassName = тАЬmy-checkbox")] public Checkbox MyCheckbox2; public ICheckbox MyCheckbox3 = new Checkbox("Wi-fi", "#my-checkbox"); public Checkbox MyCheckbox4 = new Checkbox("Wi-fi", By.CssSelector("#my-checkbox"));
7
[Name(" ''")] [ClickReloadsPage] public IButton SearchButton;

Note: ClickReloadsPage

MyButton.WithPageLoadAction.Click()
Note:

MyButton.WaitTimeout(20).Click()
Note: .
 , ,  :   
Button, ┬л┬╗ - .

C .

:
IButton, ICheckbox, ICheckList, IClickable, ILabeled, ILink, ISelector, ISetValue, ITextArea, IVIElement

VIAction
, VIAction.
, , :

:
( Click)
,
( GetLabel):
, ,
.
, , , - , Frame, , ( , ), . 4


, VIAction.
, Frame . 5


, , ( ) . 6 .

PageObjects, .
VISite.

var mySite = new VISite(тАЬhttp://mysite.comтАЭ)

, , , .


, , , - . , , , .

VISite.Logger = new MyLogger();

.

VISite 3 :
WaitWebElementInSec тАУ (5 ) WaitPageToLoadInSec тАУ (20 ) RetryActionInMsec тАУ ( ) (0,5 )

, . WaitPageToLoadInSec WaitWebElementInSec ( 7 ).

SmartSearch SmartClick
, Selenium . , , , ( , ). , .

, -, , , - .
VIQA ┬л┬╗, , .

тАв Implicitly wait , ? .
тАв ? , (, Click ? )
- , , - . , , , , .
. тАФ .


KillAllRunWebDrivers
WebDriver ( , ). . , , , .

(SetUpFixture) :

VISite.KillAllRunWebDrivers();

. .


WebDriver, beforesuit , WebDriver . - Open ( , BeforeTest: , .. DataSource -, ). , , , . 2-5 . - , , , , , VIQA .
VIQA ( ). Open, .. , . . .


. ( )

:
Java ( , HTML5) ( , Selenium JavaScript : , setAttribute ) , .

, , .
, , )
: vk.com/viqatools
email : viqablog@gmail.com

.

UPD: SQA Days 15 vimeo.com/95245507


:
1

public class Checkbox { public TextElement TextElement; public VIElement CheckSignElement; } public class LoginForm { public TextField LoginTxtField; public TextField PasswordTxtField; public Button LoginButton; }

2
[Site(Domain = "http://market.yandex.ru/")] public class MySite : VISite { [Page(Title = " ", Url = "http://mysite.ru/")] public HomePage HomePage; [Page(Title = " ", Url = "http://mysite.ru/somepage")] public SomePage SomePage; } [Page(Title = " ", Url = "http://mysite.ru/")] public class HomePage : VIPage { [Name(" ")] [Locate(ByClassName = "search")] public static SearchSection SearchSection; }
Note: Page .

public class SearchSection : VIElement { [Name(" ")] [Locate(ByXPath = "//*[@class='search_input'] public TextArea SearchTextField; [Name(" '")] [Locate(ByXPath = "//*[contains(text(),'')] [ClickReloadsPage] public Button SearchButton; public void SearchProduct(string productName) { SearchTextField.NewInput(productName); SearchButton.Click(); } }
Note: .

3
public class PassportData { public string Number; public string Series; public FullName FullName; } public class FullName { public string Name; public string SecondName; } [FillFromField("Number")] public TextField PassportNumberTxtField;
Note: Number -, .

[FillFromField("FullName.Name")] public TextField PassportNameTxtField;
Note: Name FullName

public ITextArea PassportSeriesTxtField = new TextField() { FillRule = ToFillRule<PassportData>(pd => (pd.Number != тАЬтАЭ) ? pd.Series : тАЬтАЭ)), }

Note: FillRule

4
(viElement, actionName, viAction) =>{ VISite.Logger.Event(viElement.DefaultLogMessage(text)); viAction.Invoke(); }

Note: VIAction
(actionName, viAction, logResult) =>{ VISite.Logger.Event(DefaultLogMessage(text)); var result = viAction.Invoke(); if (logResult != null) VISite.Logger.Event(logResult.Invoke(result)); return result; }
Note: VIAction
5
new RadioButtons(тАЬ тАЭ, тАЬ#sensorScreenтАЭ) { VIAction = (viElement, text, viAction) => { if (!FirstSensorRadioButton.IsDisplayed) SensorBlock.Click(); viAction.Invoke(); } };
Note: VIAction . .
6
[Name(Name = "Wi-fi"), Locate(ByXPath = "//*[@class='my-checkbox']")] public ICheckbox MyCheckbox1; [Name(Name = "Wi-fi"), Locate(ByClassName = тАЬmy-checkbox")] public Checkbox MyCheckbox2; public ICheckbox MyCheckbox3 = new Checkbox("Wi-fi", "#my-checkbox"); public Checkbox MyCheckbox4 = new Checkbox("Wi-fi", By.CssSelector("#my-checkbox"));
7
[Name(" ''")] [ClickReloadsPage] public IButton SearchButton;

Note: ClickReloadsPage

MyButton.WithPageLoadAction.Click()
Note:

MyButton.WaitTimeout(20).Click()
Note: .
, , :
Button, ┬л┬╗ - .

C .

:
IButton, ICheckbox, ICheckList, IClickable, ILabeled, ILink, ISelector, ISetValue, ITextArea, IVIElement

VIAction
, VIAction.
, , :

:
( Click)
,
( GetLabel):
, ,
.
, , , - , Frame, , ( , ), . 4


, VIAction.
, Frame . 5


, , ( ) . 6 .

PageObjects, .
VISite.

var mySite = new VISite(тАЬhttp://mysite.comтАЭ)

, , , .


, , , - . , , , .

VISite.Logger = new MyLogger();

.

VISite 3 :
WaitWebElementInSec тАУ (5 ) WaitPageToLoadInSec тАУ (20 ) RetryActionInMsec тАУ ( ) (0,5 )

, . WaitPageToLoadInSec WaitWebElementInSec ( 7 ).

SmartSearch SmartClick
, Selenium . , , , ( , ). , .

, -, , , - .
VIQA ┬л┬╗, , .

тАв Implicitly wait , ? .
тАв ? , (, Click ? )
- , , - . , , , , .
. тАФ .


KillAllRunWebDrivers
WebDriver ( , ). . , , , .

(SetUpFixture) :

VISite.KillAllRunWebDrivers();

. .


WebDriver, beforesuit , WebDriver . - Open ( , BeforeTest: , .. DataSource -, ). , , , . 2-5 . - , , , , , VIQA .
VIQA ( ). Open, .. , . . .


. ( )

:
Java ( , HTML5) ( , Selenium JavaScript : , setAttribute ) , .

, , .
, , )
: vk.com/viqatools
email : viqablog@gmail.com

.

UPD: SQA Days 15 vimeo.com/95245507


:
1

public class Checkbox { public TextElement TextElement; public VIElement CheckSignElement; } public class LoginForm { public TextField LoginTxtField; public TextField PasswordTxtField; public Button LoginButton; }

2
[Site(Domain = "http://market.yandex.ru/")] public class MySite : VISite { [Page(Title = " ", Url = "http://mysite.ru/")] public HomePage HomePage; [Page(Title = " ", Url = "http://mysite.ru/somepage")] public SomePage SomePage; } [Page(Title = " ", Url = "http://mysite.ru/")] public class HomePage : VIPage { [Name(" ")] [Locate(ByClassName = "search")] public static SearchSection SearchSection; }
Note: Page .

public class SearchSection : VIElement { [Name(" ")] [Locate(ByXPath = "//*[@class='search_input'] public TextArea SearchTextField; [Name(" '")] [Locate(ByXPath = "//*[contains(text(),'')] [ClickReloadsPage] public Button SearchButton; public void SearchProduct(string productName) { SearchTextField.NewInput(productName); SearchButton.Click(); } }
Note: .

3
public class PassportData { public string Number; public string Series; public FullName FullName; } public class FullName { public string Name; public string SecondName; } [FillFromField("Number")] public TextField PassportNumberTxtField;
Note: Number -, .

[FillFromField("FullName.Name")] public TextField PassportNameTxtField;
Note: Name FullName

public ITextArea PassportSeriesTxtField = new TextField() { FillRule = ToFillRule<PassportData>(pd => (pd.Number != тАЬтАЭ) ? pd.Series : тАЬтАЭ)), }

Note: FillRule

4
(viElement, actionName, viAction) =>{ VISite.Logger.Event(viElement.DefaultLogMessage(text)); viAction.Invoke(); }

Note: VIAction
(actionName, viAction, logResult) =>{ VISite.Logger.Event(DefaultLogMessage(text)); var result = viAction.Invoke(); if (logResult != null) VISite.Logger.Event(logResult.Invoke(result)); return result; }
Note: VIAction
5
new RadioButtons(тАЬ тАЭ, тАЬ#sensorScreenтАЭ) { VIAction = (viElement, text, viAction) => { if (!FirstSensorRadioButton.IsDisplayed) SensorBlock.Click(); viAction.Invoke(); } };
Note: VIAction . .
6
[Name(Name = "Wi-fi"), Locate(ByXPath = "//*[@class='my-checkbox']")] public ICheckbox MyCheckbox1; [Name(Name = "Wi-fi"), Locate(ByClassName = тАЬmy-checkbox")] public Checkbox MyCheckbox2; public ICheckbox MyCheckbox3 = new Checkbox("Wi-fi", "#my-checkbox"); public Checkbox MyCheckbox4 = new Checkbox("Wi-fi", By.CssSelector("#my-checkbox"));
7
[Name(" ''")] [ClickReloadsPage] public IButton SearchButton;

Note: ClickReloadsPage

MyButton.WithPageLoadAction.Click()
Note:

MyButton.WaitTimeout(20).Click()
Note: .
 , ,  :   
Button, ┬л┬╗ - .

C .

:
IButton, ICheckbox, ICheckList, IClickable, ILabeled, ILink, ISelector, ISetValue, ITextArea, IVIElement

VIAction
, VIAction.
, , :

:
( Click)
,
( GetLabel):
, ,
.
, , , - , Frame, , ( , ), . 4


, VIAction.
, Frame . 5


, , ( ) . 6 .

PageObjects, .
VISite.

var mySite = new VISite(тАЬhttp://mysite.comтАЭ)

, , , .


, , , - . , , , .

VISite.Logger = new MyLogger();

.

VISite 3 :
WaitWebElementInSec тАУ (5 ) WaitPageToLoadInSec тАУ (20 ) RetryActionInMsec тАУ ( ) (0,5 )

, . WaitPageToLoadInSec WaitWebElementInSec ( 7 ).

SmartSearch SmartClick
, Selenium . , , , ( , ). , .

, -, , , - .
VIQA ┬л┬╗, , .

тАв Implicitly wait , ? .
тАв ? , (, Click ? )
- , , - . , , , , .
. тАФ .


KillAllRunWebDrivers
WebDriver ( , ). . , , , .

(SetUpFixture) :

VISite.KillAllRunWebDrivers();

. .


WebDriver, beforesuit , WebDriver . - Open ( , BeforeTest: , .. DataSource -, ). , , , . 2-5 . - , , , , , VIQA .
VIQA ( ). Open, .. , . . .


. ( )

:
Java ( , HTML5) ( , Selenium JavaScript : , setAttribute ) , .

, , .
, , )
: vk.com/viqatools
email : viqablog@gmail.com

.

UPD: SQA Days 15 vimeo.com/95245507


:
1

public class Checkbox { public TextElement TextElement; public VIElement CheckSignElement; } public class LoginForm { public TextField LoginTxtField; public TextField PasswordTxtField; public Button LoginButton; }

2
[Site(Domain = "http://market.yandex.ru/")] public class MySite : VISite { [Page(Title = " ", Url = "http://mysite.ru/")] public HomePage HomePage; [Page(Title = " ", Url = "http://mysite.ru/somepage")] public SomePage SomePage; } [Page(Title = " ", Url = "http://mysite.ru/")] public class HomePage : VIPage { [Name(" ")] [Locate(ByClassName = "search")] public static SearchSection SearchSection; }
Note: Page .

public class SearchSection : VIElement { [Name(" ")] [Locate(ByXPath = "//*[@class='search_input'] public TextArea SearchTextField; [Name(" '")] [Locate(ByXPath = "//*[contains(text(),'')] [ClickReloadsPage] public Button SearchButton; public void SearchProduct(string productName) { SearchTextField.NewInput(productName); SearchButton.Click(); } }
Note: .

3
public class PassportData { public string Number; public string Series; public FullName FullName; } public class FullName { public string Name; public string SecondName; } [FillFromField("Number")] public TextField PassportNumberTxtField;
Note: Number -, .

[FillFromField("FullName.Name")] public TextField PassportNameTxtField;
Note: Name FullName

public ITextArea PassportSeriesTxtField = new TextField() { FillRule = ToFillRule<PassportData>(pd => (pd.Number != тАЬтАЭ) ? pd.Series : тАЬтАЭ)), }

Note: FillRule

4
(viElement, actionName, viAction) =>{ VISite.Logger.Event(viElement.DefaultLogMessage(text)); viAction.Invoke(); }

Note: VIAction
(actionName, viAction, logResult) =>{ VISite.Logger.Event(DefaultLogMessage(text)); var result = viAction.Invoke(); if (logResult != null) VISite.Logger.Event(logResult.Invoke(result)); return result; }
Note: VIAction
5
new RadioButtons(тАЬ тАЭ, тАЬ#sensorScreenтАЭ) { VIAction = (viElement, text, viAction) => { if (!FirstSensorRadioButton.IsDisplayed) SensorBlock.Click(); viAction.Invoke(); } };
Note: VIAction . .
6
[Name(Name = "Wi-fi"), Locate(ByXPath = "//*[@class='my-checkbox']")] public ICheckbox MyCheckbox1; [Name(Name = "Wi-fi"), Locate(ByClassName = тАЬmy-checkbox")] public Checkbox MyCheckbox2; public ICheckbox MyCheckbox3 = new Checkbox("Wi-fi", "#my-checkbox"); public Checkbox MyCheckbox4 = new Checkbox("Wi-fi", By.CssSelector("#my-checkbox"));
7
[Name(" ''")] [ClickReloadsPage] public IButton SearchButton;

Note: ClickReloadsPage

MyButton.WithPageLoadAction.Click()
Note:

MyButton.WaitTimeout(20).Click()
Note: .
, , :
Button, ┬л┬╗ - .

C .

:
IButton, ICheckbox, ICheckList, IClickable, ILabeled, ILink, ISelector, ISetValue, ITextArea, IVIElement

VIAction
, VIAction.
, , :

:
( Click)
,
( GetLabel):
, ,
.
, , , - , Frame, , ( , ), . 4


, VIAction.
, Frame . 5


, , ( ) . 6 .

PageObjects, .
VISite.

var mySite = new VISite(тАЬhttp://mysite.comтАЭ)

, , , .


, , , - . , , , .

VISite.Logger = new MyLogger();

.

VISite 3 :
WaitWebElementInSec тАУ (5 ) WaitPageToLoadInSec тАУ (20 ) RetryActionInMsec тАУ ( ) (0,5 )

, . WaitPageToLoadInSec WaitWebElementInSec ( 7 ).

SmartSearch SmartClick
, Selenium . , , , ( , ). , .

, -, , , - .
VIQA ┬л┬╗, , .

тАв Implicitly wait , ? .
тАв ? , (, Click ? )
- , , - . , , , , .
. тАФ .


KillAllRunWebDrivers
WebDriver ( , ). . , , , .

(SetUpFixture) :

VISite.KillAllRunWebDrivers();

. .


WebDriver, beforesuit , WebDriver . - Open ( , BeforeTest: , .. DataSource -, ). , , , . 2-5 . - , , , , , VIQA .
VIQA ( ). Open, .. , . . .


. ( )

:
Java ( , HTML5) ( , Selenium JavaScript : , setAttribute ) , .

, , .
, , )
: vk.com/viqatools
email : viqablog@gmail.com

.

UPD: SQA Days 15 vimeo.com/95245507


:
1

public class Checkbox { public TextElement TextElement; public VIElement CheckSignElement; } public class LoginForm { public TextField LoginTxtField; public TextField PasswordTxtField; public Button LoginButton; }

2
[Site(Domain = "http://market.yandex.ru/")] public class MySite : VISite { [Page(Title = " ", Url = "http://mysite.ru/")] public HomePage HomePage; [Page(Title = " ", Url = "http://mysite.ru/somepage")] public SomePage SomePage; } [Page(Title = " ", Url = "http://mysite.ru/")] public class HomePage : VIPage { [Name(" ")] [Locate(ByClassName = "search")] public static SearchSection SearchSection; }
Note: Page .

public class SearchSection : VIElement { [Name(" ")] [Locate(ByXPath = "//*[@class='search_input'] public TextArea SearchTextField; [Name(" '")] [Locate(ByXPath = "//*[contains(text(),'')] [ClickReloadsPage] public Button SearchButton; public void SearchProduct(string productName) { SearchTextField.NewInput(productName); SearchButton.Click(); } }
Note: .

3
public class PassportData { public string Number; public string Series; public FullName FullName; } public class FullName { public string Name; public string SecondName; } [FillFromField("Number")] public TextField PassportNumberTxtField;
Note: Number -, .

[FillFromField("FullName.Name")] public TextField PassportNameTxtField;
Note: Name FullName

public ITextArea PassportSeriesTxtField = new TextField() { FillRule = ToFillRule<PassportData>(pd => (pd.Number != тАЬтАЭ) ? pd.Series : тАЬтАЭ)), }

Note: FillRule

4
(viElement, actionName, viAction) =>{ VISite.Logger.Event(viElement.DefaultLogMessage(text)); viAction.Invoke(); }

Note: VIAction
(actionName, viAction, logResult) =>{ VISite.Logger.Event(DefaultLogMessage(text)); var result = viAction.Invoke(); if (logResult != null) VISite.Logger.Event(logResult.Invoke(result)); return result; }
Note: VIAction
5
new RadioButtons(тАЬ тАЭ, тАЬ#sensorScreenтАЭ) { VIAction = (viElement, text, viAction) => { if (!FirstSensorRadioButton.IsDisplayed) SensorBlock.Click(); viAction.Invoke(); } };
Note: VIAction . .
6
[Name(Name = "Wi-fi"), Locate(ByXPath = "//*[@class='my-checkbox']")] public ICheckbox MyCheckbox1; [Name(Name = "Wi-fi"), Locate(ByClassName = тАЬmy-checkbox")] public Checkbox MyCheckbox2; public ICheckbox MyCheckbox3 = new Checkbox("Wi-fi", "#my-checkbox"); public Checkbox MyCheckbox4 = new Checkbox("Wi-fi", By.CssSelector("#my-checkbox"));
7
[Name(" ''")] [ClickReloadsPage] public IButton SearchButton;

Note: ClickReloadsPage

MyButton.WithPageLoadAction.Click()
Note:

MyButton.WaitTimeout(20).Click()
Note: .

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


All Articles