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

рдирд╛рдо рдмрд╣реБрдд рд▓реЛрдХрдкреНрд░рд┐рдп рдХрдВрдкреНрдпреВрдЯрд░ рдЧреЗрдо
рдорд╛рд╕ рдЗрдлреЗрдХреНрдЯ рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ
ред рдХрд╣рд╛рдиреА рдХреБрдЫ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
Kvarians рдХреА рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдЧреЗрд▓реЗрдХреНрдЯрд┐рдХ рджреМрдбрд╝ рдиреЗ рдЖрд░реНрдЯрд┐рдлрд┐рд╢рд┐рдпрд▓ рдЗрдВрдЯреЗрд▓рд┐рдЬреЗрдВрд╕ рдмрдирд╛рдпрд╛, рдЬреЛ рдЙрдиреНрд╣реЛрдВрдиреЗ рдХрд┐рдпрд╛ рдерд╛, рдЙрд╕рдХреЗ рдЦрддрд░реЗ рдХреЛ рдорд╣рд╕реВрд╕ рдХрд░рддреЗ рд╣реБрдП, рдЕрдкрдиреЗ рдкреНрд░рд╛рдгрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рд▓рдбрд╝рд╛рдИ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд┐рдпрд╛, рдЗрд╕реЗ рдЦреЛ рджрд┐рдпрд╛ рдФрд░ AI рд╕реЗ рд╕рдВрдкрдиреНрди рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдХреА рдПрдХ рджреМрдбрд╝ рджреНрд╡рд╛рд░рд╛ рдЕрдкрдиреЗ рд╡рд┐рд╢реНрд╡ рдХреЗ рд╕рднреА рдЧреНрд░рд╣реЛрдВ рд╕реЗ рдирд┐рд╖реНрдХрд╛рд╕рд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ред
рдЗрди рдШрдЯрдирд╛рдУрдВ рдХреЗ рдмрд╛рдж, рдПрдЖрдИ рдХрд╛ рд╡рд┐рдХрд╛рд╕ рдЖрдХрд╛рд╢рдЧрдВрдЧрд╛ рдореЗрдВ рдирд┐рд╖рд┐рджреНрдз рд╣реЛ рдЧрдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рдЙрдирдХреЗ рдирд┐рдпрдВрддреНрд░рдг рд╕реЗ рдмрд╛рд╣рд░ рд╣реЛрдиреЗ рдХрд╛ рдЦрддрд░рд╛ рдерд╛ред рдПрдЖрдИ рдХреЗ рд╡рд┐рдкрд░реАрдд, рдЖрдХрд╛рд╢рдЧрдВрдЧрд╛ рдХрд╛ рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
VI ред
рд╡рд░реНрдЪреБрдЕрд▓ рдЗрдВрдЯреЗрд▓реАрдЬреЗрдВрд╕ рдорд╛рдирд╡-рдЬреИрд╕реЗ рдЗрдВрдЯрд░рдлреЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд▓реЗрдХрд┐рди рд╕реНрд╡-рд╢рд┐рдХреНрд╖рд╛ (рдФрд░ рдЗрд╕рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реБрд░рдХреНрд╖рд┐рдд рдирд╣реАрдВ рд╣реИ)ред
рддреЛ, VI рдХреА рдореЗрд░реА рд╕рдордЭ рдореЗрдВ:
- рдорд╛рдирд╡ рднрд╛рд╖рд╛ред рдПрдХ рд╕реНрдорд╛рд░реНрдЯ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЬреЛ рдХрд┐рд╕реА рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд╕рд╛рде рдЙрд╕рдХреА рднрд╛рд╖рд╛ рдореЗрдВ рдмрд╛рддрдЪреАрдд рдХрд░рддрд╛ рд╣реИред
- рдЙрдкрдпреЛрдЧ рдореЗрдВ рдЖрд╕рд╛рдиреАред рдпрд╣ рдХрд╛рд░реНрдпрдХреНрд░рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рд╕реНрддрд░реЛрдВ (рдХрдо рдкреНрд░рд╡реЗрд╢ рд╕реАрдорд╛, рдЗрд╕рдХреЗ рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ "рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╕реНрдорд╛рд░реНрдЯ рд╣реИ)
- 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 рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдЖрдкрдХреА рд╕рд╛рдЗрдЯ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рд╕реЗ рдЕрд▓рдЧ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдкрд░реАрдХреНрд╖рдг рд╕реНрдерд▓ рд╡рд┐рд╡рд░рдг рдХреА рд╕рдВрд░рдЪрдирд╛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
- visite
- рдкреГрд╖реНрда 1
- section1
- Element1
- [Element2]
- [рдзрд╛рд░рд╛]
- ...
- [Section2]
- [рдкреГрд╖реНрда 2]
- [рдкреГрд╖реНрда 3]
- ...
рд╡рд┐рд╡рд░рдг рдХреЗ рд▓рд┐рдП,
рдЙрджрд╛рд╣рд░рдг 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: .
, , : 
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: .