рд╣рдо рдХреБрдЫ рдШрдВрдЯреЛрдВ рдореЗрдВ рд╕реНрд╡рдЪрд╛рд▓рди рдХреЛ рддреИрдирд╛рдд рдХрд░рддреЗ рд╣реИрдВ: рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ, рдкреНрд░реЛрдЯреНрд░реЗрдХреНрдЯрд░, рдЬреИрд╕реНрдореАрди

рдирдорд╕реНрдХрд╛рд░, рд╣реЗрдмреНрд░!

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

рдореИрдВ рдХреЗрд╡рд▓ рдЕрдВрдЧреНрд░реЗрдЬреА рдореЗрдВ рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдФрд░ рд╕рдордЭрджрд╛рд░ рдореИрдиреБрдЕрд▓ рдЦреЛрдЬрдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣рд╛ред рдореИрдВрдиреЗ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдХрд┐ рд░реВрд╕реА рдореЗрдВ рдореБрдЭреЗ рднреА рдРрд╕рд╛ рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред рдореИрдВ рдХреЗрд╡рд▓ рдЖрдкрдХреЛ рдореВрд▓ рдмрд╛рддреЗрдВ рдмрддрд╛рдКрдВрдЧрд╛: рдРрд╕рд╛ рд╕реНрдЯреИрдХ рдХреНрдпреЛрдВ, рдЖрдкрдХреЛ рдХреНрдпрд╛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рд╕рдмрд╕реЗ рд╕рд░рд▓ рдкрд░реАрдХреНрд╖рдг рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИред

рдореБрдЭреЗ рддреБрд░рдВрдд рдХрд╣рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдореИрдВ рд╢рд╛рдпрдж рд╣реА рдХрднреА NodeJS, npm рдФрд░ рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реВрдВ (рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде)ред рдЕрдЧрд░ рдЖрдкрдХреЛ рдХрд╣реАрдВ рд╢рдмреНрджрд╛рд╡рд▓реА рдореЗрдВ рдХреЛрдИ рдЧрд▓рддреА рджрд┐рдЦрддреА рд╣реИ рдпрд╛ рдореЗрд░реЗ рдХреБрдЫ рдлреИрд╕рд▓реЛрдВ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рдореБрдЭреЗ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рдЕрдзрд┐рдХ рдЕрдиреБрднрд╡реА рд▓реЛрдЧреЛрдВ рдХреА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд░ рдЦреБрд╢реА рд╣реЛрдЧреАред

рд╡реИрд╕реЗ, рдореЗрд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рд╕рдорд╛рди рд▓реЗрдЦ рдерд╛: "рд╣рдо рдХреБрдЫ рдШрдВрдЯреЛрдВ рдореЗрдВ рд╕реНрд╡рдЪрд╛рд▓рди рдХреЛ рддреИрдирд╛рдд рдХрд░рддреЗ рд╣реИрдВ: PHPUnit, рд╕реЗрд▓реЗрдирд┐рдпрдо, рдХрдореНрдкреЛрдЬрд┐рдЯ" ред



рдХрд╛рд░реНрдп


рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдЗрдП рдЬрд╛рдиреЗрдВ рдХрд┐ рд╣рдо рдХрд┐рд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ AngularJS рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдПрдХ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╣реИред рдпрд╣ рдПрдХ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдврд╛рдВрдЪрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЕрдХреНрд╕рд░ рд╡реЗрдм рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд▓рд┐рдЦреЗ рдЬрд╛рддреЗ рд╣реИрдВред

рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рд╣рдо AngularJS рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рдкреЗрд╢реЗрд╡рд░реЛрдВ рдФрд░ рд╡рд┐рдкрдХреНрд╖реЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред рдЙрдирдХреЗ рд▓рд┐рдП e2e рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрдиреЗ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдРрд╕реА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЗрд╡рд▓ рдХреБрдЫ рд╢рдмреНрджред

рдкрд░реАрдХреНрд╖рдг рд╕реНрд╡рдЪрд╛рд▓рди рдХрд╛ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкрд╣рд▓реВ рдкреГрд╖реНрда рддрддреНрд╡реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ, рдЬреЛ рд╕реНрдерд╛рдиреАрдп рд▓реЛрдЧреЛрдВ рдХреА рдорджрдж рд╕реЗ рд╣реЛрддрд╛ рд╣реИред рдПрдХ рд▓реЛрдХреЗрдЯрд░ рдХреБрдЫ рдирд┐рдпрдореЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдФрд░ рдпреВрдЖрдИ рддрддреНрд╡ рдХреА рдкрд╣рдЪрд╛рди рдХрд░рдиреЗ рд╡рд╛рд▓реА рдПрдХ рдкрдВрдХреНрддрд┐ рд╣реИ: рдПрдХ рдпрд╛ рдЕрдзрд┐рдХред

рд╡реЗрдм рдХреЗ рд▓рд┐рдП, CSS рдФрд░ Xpath рдХрд╛ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдХрднреА-рдХрднреА, рдпрджрд┐ рдкреГрд╖реНрда рдкрд░ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЖрдИрдбреА рд╡рд╛рд▓рд╛ рдХреЛрдИ рддрддреНрд╡ рд╣реИ, рддреЛ рдЖрдк рдЗрд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рдЦреЛрдЬ рд╕рдХрддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореБрдЭреЗ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡реЗрдмрдбреНрд░рд╛рдЗрд╡рд░ рдЕрднреА рднреА рдЗрд╕ рдЖрдИрдбреА рдХреЛ рдЕрдВрдд рдореЗрдВ рдПрдХ рд╕реАрдПрд╕рдПрд╕ рд▓реЛрдХреЗрдЯрд░ рдореЗрдВ рдмрджрд▓ рджреЗрддрд╛ рд╣реИ рдФрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред

рдЕрдЧрд░ рд╣рдо рдХреБрдЫ AngularJS рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ HTML рдХреЛрдб рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдЙрди рддрддреНрд╡реЛрдВ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЧреБрдг рджреЗрдЦреЗрдВрдЧреЗ рдЬреЛ рд╢рд╛рд╕реНрддреНрд░реАрдп HTML рдореЗрдВ рдирд╣реАрдВ рд╣реИрдВ:



рдХреЛрдб рдкреНрд░реЛрдЯреНрд░реИрдХреНрдЯрд░-рдбреЗрдореЛ рдкреЗрдЬ рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

Ng- * рд╕реЗ рд╢реБрд░реВ рд╣реЛрдиреЗ рд╡рд╛рд▓реА рд╕рднреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ AngularJS рджреНрд╡рд╛рд░рд╛ UI рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдПрдХ рдХрд╛рдлреА рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕реНрдерд┐рддрд┐ рддрдм рд╣реЛрддреА рд╣реИ рдЬрдм рдЗрди рдирд┐рдпрдВрддреНрд░рдг рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЕрдиреНрдп рддрддреНрд╡реЛрдВ рдХрд╛ рдХреЛрдИ рдЕрдиреНрдп рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рдЧреБрдгрд╡рддреНрддрд╛ рд╡рд╛рд▓реЗ рд▓реЛрдХреЗрдЯрд░реЛрдВ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЬрдЯрд┐рд▓ рдмрдирд╛рддрд╛ рд╣реИред

рдЬрд┐рди рд▓реЛрдЧреЛрдВ рдиреЗ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕реНрд╡рдЪрд╛рд▓рди рдХрд┐рдпрд╛ рд╣реИ, рд╡реЗ рдРрд╕реЗ рдпреВрдЖрдИ рдХреЗ рдореВрд▓реНрдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ рдЬрд┐рдирдХреЗ рд▓рд┐рдП рд▓реЛрдХреЗрдЯрд░ рдЖрд╕рд╛рдиреА рд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЖрдЦрд┐рд░рдХрд╛рд░, рдмрдбрд╝реА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдпрд╣ рджреБрд░реНрд▓рдн рд╣реИред :)

рджрд░рдЕрд╕рд▓, рдпрд╣рд╛рдВ рдРрд╕реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рд╕реНрд╡рдЪрд╛рд▓рди рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЪрд▓реЛ рдЪрд▓рддреЗ рд╣реИрдВ!

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


рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдЗрдП рдЬрд╛рдиреЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рд╕реНрдЯреИрдХ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдШрдЯрдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИред

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

рдпрд╣ рдврд╛рдВрдЪрд╛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ AngularJS рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рд╕реНрдерд╛рдиреАрдп рд▓реЛрдЧреЛрдВ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рддрд░реАрдХреЗ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ:

element(by.model('first')); element(by.binding('latest')); element(by.repeater('some')); 

рдПрдХ рдкреВрд░реА рд╕реВрдЪреА рдореИрдиреБрдЕрд▓ рдкреЗрдЬ рдкрд░ рдкрд╛рдИ рдЬрд╛ рд╕рдХрддреА рд╣реИред

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

рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ Microsoft рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдИ рдЧрдИ рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рд╣реИред рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ, рдЪрд░ рдХреЛ рдЯрд╛рдЗрдк рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛, рдкреВрд░реНрдг-рд╡рд┐рдХрд╕рд┐рдд рд╡рд░реНрдЧреЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдФрд░ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдореЗрдВ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реЗ рдЕрд▓рдЧ рд╣реИред

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

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

рдиреАрдЪреЗ рд╣рдо рдЗрд╕рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВред

рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдФрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реЗрдЯрдЕрдк


рдЦреИрд░, рд╣рдордиреЗ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рдПрдХ рд╕реЗрдЯ рдкрд░ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рдЕрдм рдЗрд╕ рдкреВрд░реА рдЪреАрдЬрд╝ рдХреЛ рдПрдХ рд╕рд╛рде рд░рдЦрддреЗ рд╣реИрдВред

рдХреЛрдб рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ Microsoft рд╕реЗ рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЛрдб рдЪреБрдирд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдХрдИ WebBorm рдпрд╛ JetBrains рд╕реЗ Intellij Idea рдореЗрдВ рднреА рд▓рд┐рдЦрддреЗ рд╣реИрдВред

рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╣реА NodeJS (v11.6.0) рдФрд░ NPM (6.9.0) рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд▓рд┐рдпрд╛ рд╣реИред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдирд╣реАрдВ рд╣реИ, рддреЛ рдпрд╣ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ, рдЙрдиреНрд╣реЗрдВ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рдкрд░реНрдпрд╛рдкреНрдд рд╡рд┐рд╡рд░рдг рдореЗрдВ рд╕рдм рдХреБрдЫ рд╡рд░реНрдгрд┐рдд рд╣реИред

рдПрдирдкреАрдПрдо рдХреЗ рдмрдЬрд╛рдп рдпрд╛рд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдПрдХ рдЫреЛрдЯреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИред

рд╣рдорд╛рд░реЗ рдЖрдИрдбреАрдИ рдореЗрдВ рд╣рдо рдПрдХ рдирдИ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВред рд╣рдо рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рдЬрдбрд╝ рдореЗрдВ package.json рдмрдирд╛рддреЗ рд╣реИрдВ - рдпрд╣ рдЗрд╕ рдореЗрдВ рд╣реИ рдХрд┐ рд╣рдо рдЙрди рд╕рднреА рдкреИрдХреЗрдЬреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реЗрдВрдЧреЗ рдЬреЛ рд╣рдореЗрдВ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рдЪрд╛рд╣рд┐рдПред

рдЖрдк рдЗрд╕реЗ npm init рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╛ рдЖрдк рдмрд╕ рдХрд┐рд╕реА рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рд╛рдордЧреНрд░реА рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред

рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ, рдкреИрдХреЗрдЬред рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

 { "name": "protractor", "dependencies": { "@types/node": "^10.5.2", "@types/jasmine": "^3.3.12", "protractor": "^5.4.2", "typescript": "^3.4.1" } } 

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

рдирддреАрдЬрддрди, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдиреЛрдб_рдореЙрдбреНрдпреВрд▓ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ рд╡рд╣ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИ, рддреЛ рд╕рдм рдХреБрдЫ рдпреЛрдЬрдирд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╣реЛрддрд╛ рд╣реИред рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рдпрд╣ рдХрдорд╛рдВрдб рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИ, рдЖрдорддреМрд░ рдкрд░ рд╡рд╣рд╛рдВ рд╕рдм рдХреБрдЫ рдХрд╛рдлреА рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд░реНрдгрд┐рдд рд╣реИред

рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдФрд░ рдЙрд╕рдХрд╛ рд╡рд┐рдиреНрдпрд╛рд╕


рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ npm рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

 npm install -g typescript 

рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдпрд╣ рд╕реНрдерд╛рдкрд┐рдд рд╣реИ:

 $ tsc -v Version 3.4.1 

рд╕рдм рдХреБрдЫ рдХреНрд░рдо рдореЗрдВ рд▓рдЧрддрд╛ рд╣реИред

рдЕрдм рд╣рдореЗрдВ рдЯреАрдПрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдореВрд▓ рдореЗрдВ рднреА рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЗрд╕реЗ tsconfig.json рдХрд╣рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП

рдЗрд╕рдХреА рд╕рд╛рдордЧреНрд░реА рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реЛрдЧреА:

 { "compilerOptions": { "lib": ["es6"], "strict": true, "outDir" : "output_js", "types" : ["jasmine", "node"] }, "exclude": [ "node_modules/*" ] } 

рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рд╣рдордиреЗ рдЗрд╕ рд╡рд┐рдиреНрдпрд╛рд╕ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рд╣реИ:

  • рдЕрдВрддрд┐рдо рдЬреЗрдПрд╕-рдХреЛрдб рдбрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ (рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ output_js рд╣реИ)
  • рд╕рдЦреНрдд рдореЛрдб рд╕рдХреНрд╖рдо рдХрд░реЗрдВ
  • рд╕рдВрдХреЗрдд рджрд┐рдпрд╛ рдХрд┐ рд╣рдо рдХрд┐рди рд░реВрдкрд░реЗрдЦрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ
  • рд╕рдВрдХрд▓рди рд╕реЗ рдирд┐рдХрд▓реЗ рдиреЛрдб_рдореЙрдбреНрдпреВрд▓реНрд╕

рдЯреАрдПрд╕ рдореЗрдВ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреА рдПрдХ рд╡рд┐рд╢рд╛рд▓ рд╡рд┐рд╡рд┐рдзрддрд╛ рд╣реИред рдпреЗ рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИрдВред рдЖрдк typecriptlang.org рдкрд░ рдЕрдзрд┐рдХ рдЬрд╛рди рд╕рдХрддреЗ рд╣реИрдВред

рдЕрдм рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ tsc рдХрдорд╛рдВрдб рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ , рдЬреЛ рд╣рдорд╛рд░реЗ TS рдХреЛрдб рдХреЛ JS рдХреЛрдб рдореЗрдВ рдмрджрд▓ рджреЗрдЧрд╛ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрди рд╕рд╛рдордЧреНрд░рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд╛рдзрд╛рд░рдг check_tsc.ts рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдВ:

 saySomething("Hello, world!"); function saySomething(message: string) { console.log(message); } 

рдФрд░ рдлрд┐рд░ tsc рдХрдорд╛рдВрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВ (рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдХреЗ рдЕрдВрджрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП)ред

рд╣рдо рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ output_js рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╣реИ рдФрд░ рдЗрд╕реА рддрд░рд╣ рдХреА js рдлрд╝рд╛рдЗрд▓ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде рдЕрдВрджрд░ рджрд┐рдЦрд╛рдИ рджреА рд╣реИ:

 "use strict"; saySomething("Hello, world!"); function saySomething(message) { console.log(message); } 

рдпрд╣ рдлрд╝рд╛рдЗрд▓ рдиреЛрдб рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд╣рд▓реЗ рд╣реА рд▓реЙрдиреНрдЪ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ:

 $ node output_js/check_tsc.js Hello, world! 

рдЗрд╕рд▓рд┐рдП, рд╣рдордиреЗ рдЕрдкрдирд╛ рдкрд╣рд▓рд╛ рдЯрд╛рдЗрдкрд╕рд┐рдкреНрдЯ рдХрд╛рд░реНрдпрдХреНрд░рдо рд▓рд┐рдЦрд╛, рдмрдзрд╛рдИред рдЪрд▓рд┐рдП рдЕрдм рдЯреЗрд╕реНрдЯ рд▓рд┐рдЦрддреЗ рд╣реИрдВред :)

рдкреНрд░рддрд┐рдХреНрд╖реЗрдкрдХ рд╡рд┐рдиреНрдпрд╛рд╕


рдкреНрд░реЛрдЯреЗрдХреНрдЯрд░ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдПрдХ рд╡рд┐рдиреНрдпрд╛рд╕ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдм json рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдмрд▓реНрдХрд┐ ts-file рдХреЗ рд░реВрдк рдореЗрдВ рд╣реЛрдЧрд╛ред рдЪрд▓реЛ рдЗрд╕реЗ config.ts рдХрд╣рддреЗ рд╣реИрдВ рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рд╡рд╣рд╛рдВ рд▓рд┐рдЦреЗрдВ:

 import { Config } from "protractor"; export const config: Config = { seleniumAddress: "http://127.0.0.1:4444/wd/hub", SELENIUM_PROMISE_MANAGER: false, capabilities: { browserName: "chrome", /*chromeOptions: { args: [ "--headless", "--window-size=800,600" ] }*/ }, specs: [ "Tests/*Test.js", ] }; 

рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╣рдордиреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рд╣реИ:

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

 java -jar -Dwebdriver.chrome.driver=/path/to/chromedriver /path/to/selenium-server-standalone.jar 

рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдирд┐рд╖реНрдХрд░реНрд╖ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рд┐рдП:

 23:52:41.691 INFO [GridLauncherV3.launch] - Selenium build info: version: '3.11.0', revision: 'e59cfb3' 23:52:41.693 INFO [GridLauncherV3$1.launch] - Launching a standalone Selenium Server on port 4444 2019-05-02 23:52:41.860:INFO::main: Logging initialized @555ms to org.seleniumhq.jetty9.util.log.StdErrLog 23:52:42.149 INFO [SeleniumServer.boot] - Welcome to Selenium for Workgroups.... 23:52:42.149 INFO [SeleniumServer.boot] - Selenium Server is up and running on port 4444 

рдкреЛрд░реНрдЯ 4444 рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╣реИред рдЗрд╕реЗ -port рдкреИрд░рд╛рдореАрдЯрд░ рдпрд╛ config рдкреИрд░рд╛рдореАрдЯрд░ "seleniumArgs" => "-port" рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдпрджрд┐ рдЖрдк рдЖрд╕рд╛рди рдФрд░ рддреЗрдЬрд╝ рдЪрд╛рд╣рддреЗ рд╣реИрдВ: рдЖрдк npm рдкреИрдХреЗрдЬ рд╡реЗрдмрдбреНрд░рд╛рдЗрд╡рд░-рдореИрдиреЗрдЬрд░ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

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

рджреВрд╕рд░реЗ , рд╣рдордиреЗ рд╕рдВрдХреЗрдд рджрд┐рдпрд╛ рдХрд┐ рд╣рдо рд╡рд╛рджрд╛ рдкреНрд░рдмрдВрдзрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдж рдореЗрдВред

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

рдЪреМрдерд╛ , рд╣рдордиреЗ рдРрдирдХ (рдкрд░реАрдХреНрд╖рдг) рдХреЗ рд▓рд┐рдП рдПрдХ рдореБрдЦреМрдЯрд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ред рд╕рдм рдХреБрдЫ рдЬреЛ рдЯреЗрд╕реНрдЯ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИ рдФрд░ Test.js. рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ Js рдкрд░, ts рдХреНрдпреЛрдВ рдирд╣реАрдВ? рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЕрдВрдд рдореЗрдВ, рдиреЛрдб рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЬреЗрдПрд╕ рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдЧрд╛, рди рдХрд┐ рдЯреАрдПрд╕ рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рдеред рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рднреНрд░рдорд┐рдд рди рд╣реЛрдВ, рдЦрд╛рд╕рдХрд░ рдХрд╛рдо рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВред

рдЕрдм рдЯреЗрд╕реНрдЯ рдлреЛрд▓реНрдбрд░ рдмрдирд╛рдПрдВ рдФрд░ рдкрд╣рд▓рд╛ рдЯреЗрд╕реНрдЯ рд▓рд┐рдЦреЗрдВред рд╡рд╣ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рд░реНрдп рдХрд░реЗрдЧрд╛:

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

рдпрд╣рд╛рдБ рдХреЛрдб рдореБрдЭреЗ рдорд┐рд▓рд╛ рд╣реИ:

 import { browser, by, element, protractor } from "protractor"; describe('Search', () => { it('Open google and find a text', async () => { //       let EC = protractor.ExpectedConditions; //    AngularJS await browser.waitForAngularEnabled(false); //   Google await browser.get('https://www.google.com/'); //    css = input[role='combobox'] let input_button = element(by.css("input[role='combobox']")); //     ( presenceOf) await browser.wait(EC.presenceOf(input_button), 5000); //     тАЬprotractorтАЭ await input_button.sendKeys("protractor"); //      css let submit_button = element(by.css(".FPdoLc input[type='submit'][name='btnK']")); //      ( ,     input-,   ) await browser.wait(EC.presenceOf(submit_button), 5000); //     await submit_button.click(); // ,  URL    'protractor' await browser.wait(EC.urlContains('protractor'), 5000); }); }); 

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

рдореИрдВ рдЬреИрд╕реНрдореАрди рдХреА рд╕рднреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛, рдЖрдк рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡реЗрдмрд╕рд╛рдЗрдЯ jasmine.imtqy.com рдкрд░ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ

рд╣рдорд╛рд░реЗ рдкрд░реАрдХреНрд╖рдг рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ TS рдХреЛрдб рдХреЛ JS рдХреЛрдб рдореЗрдВ рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛, рдФрд░ рдлрд┐рд░ рдЙрд╕реЗ рдЪрд▓рд╛рдирд╛ рд╣реЛрдЧрд╛:

 $ tsc $ protractor output_js/config.js 

рд╣рдорд╛рд░реА рдкрд░реАрдХреНрд╖рд╛ рд╢реБрд░реВ рд╣реБрдИ - рд╣рдо рдорд╣рд╛рди рд╣реИрдВред :)



рдпрджрд┐ рдкрд░реАрдХреНрд╖рдг рд╢реБрд░реВ рдирд╣реАрдВ рд╣реБрдЖ, рддреЛ рдпрд╣ рдЬрд╛рдБрдЪрдиреЗ рдпреЛрдЧреНрдп рд╣реИ:

  • рдпрд╣ рдХреЛрдб рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдпрджрд┐ рдХреЛрдб рдореЗрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╣реИрдВ, рддреЛ рд╣рдо рдЙрдиреНрд╣реЗрдВ tsc рдХрдорд╛рдВрдб рдХреЗ рджреМрд░рд╛рди рдкрдХрдбрд╝ рд▓реЗрдВрдЧреЗред
  • рд╡рд╣ рд╕реЗрд▓реЗрдирд┐рдпрдо рд╕рд░реНрд╡рд░ рдЪрд▓ рд░рд╣рд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк URL http: //127.0.0.1-00-00444/wd/hub рдЦреЛрд▓ рд╕рдХрддреЗ рд╣реИрдВ - рд╕реЗрд▓реЗрдирд┐рдпрдо-рд╕рддреНрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
  • рдХреНрд░реЛрдо рдХреНрд░реЛрдо рдбреНрд░рд╛рдЗрд╡рд░ рдХреЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдП рдЧрдП рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, wd / рд╣рдм / рдкреГрд╖реНрда рдкрд░, рд╕рддреНрд░ рдмрдирд╛рдПрдБ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ рдФрд░ рдХреНрд░реЛрдо рдХрд╛ рдЪрдпрди рдХрд░реЗрдВред рдпрджрд┐ рдпрд╣ рд╢реБрд░реВ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдХреНрд░реЛрдо рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдпрд╛ рдХреНрд░реЛрдо-рдбреНрд░рд╛рдЗрд╡рд░ рдХрд╛ рджреВрд╕рд░рд╛ рд╕рдВрд╕реНрдХрд░рдг рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
  • рдпрджрд┐ рдпрд╣ рд╕рдм рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЖрдк рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ npm рд╕реНрдерд╛рдкрд┐рдд рдХрдорд╛рдВрдб рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкреВрд░рд╛ рд╣реЛ рдЧрдпрд╛ рд╣реИред
  • рдЕрдЧрд░ рд╕рдм рдХреБрдЫ рд╕рд╣реА рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдХреБрдЫ рднреА рд╢реБрд░реВ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ - рддреНрд░реБрдЯрд┐ рдХреЛ Google рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред рдпрд╣ рдЕрдХреНрд╕рд░ рдорджрдж рдХрд░рддрд╛ рд╣реИред :)

рдПрдирдкреАрдПрдо рд╕реНрдХреНрд░рд┐рдкреНрдЯ


рдЬреАрд╡рди рдХреЛ рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк npm рдЙрдкрдирд╛рдореЛрдВ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореИрдВ рдкрд┐рдЫрд▓реА рдЬреЗрдПрд╕ рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЛ рд╣рдЯрд╛рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЗрд╕реЗ рдирдП рд▓реЛрдЧреЛрдВ рдХреЗ рд╕рд╛рде рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдКрдВрдЧрд╛ред

рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЖрдЗрдЯрдо рдХреЛ package.json рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ:

 { "name": "protractor", "scripts": { "test": "rm -rf output_js/; tsc; protractor output_js/config.js" }, "dependencies": { "@types/node": "^10.5.2", "@types/jasmine": "^3.3.12", "protractor": "^5.4.2", "typescript": "^3.4.1" } } 

рдЕрдм npm рдкрд░реАрдХреНрд╖рдг рдХрдорд╛рдВрдб рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдирд┐рдореНрди рд╣реЛрдЧрд╛: рдкреБрд░рд╛рдиреЗ рдХреЛрдб рдХреЗ рд╕рд╛рде output_js рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╣рдЯрд╛ рджреА рдЬрд╛рдПрдЧреА, рдЗрд╕реЗ рдирдП рд╕рд┐рд░реЗ рд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдПрдХ рдирдпрд╛ JS рдХреЛрдб рд▓рд┐рдЦрд╛ рдЬрд╛рдПрдЧрд╛ред рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рддреБрд░рдВрдд рдкрд░реАрдХреНрд╖рдг рд╢реБрд░реВ рд╣реЛ рдЬрд╛рдПрдВрдЧреЗред

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

рд╡рд╛рджрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛


рдЕрдВрдд рдореЗрдВ, рдореИрдВ рд╡рд╛рджрд╛, async / рдкреНрд░рддреАрдХреНрд╖рд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝реА рдмрд╛рдд рдХрд░реВрдВрдЧрд╛ рдФрд░ NodeJS рдореЗрдВ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХрд╛ рд▓реЗрдЦрди рдПрдХ рд╣реА рдЬрд╛рд╡рд╛ рдпрд╛ рдкрд╛рдпрдерди рд╕реЗ рдХреИрд╕реЗ рднрд┐рдиреНрди рд╣реЛрддрд╛ рд╣реИред

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

рд╡рд╛рджрд╛ (рдЖрдорддреМрд░ рдкрд░ "рд╡рд╛рджреЗ" рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ) рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХреЛрдб рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рддрд░реАрдХрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдЖрдк рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рди рд╕рдХрддреЗ рд╣реИрдВ learn.javascript.ru рдкрд░ ред

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИрдВ рдЬреЛ рдПрдХ рдХреЛрдб рдХреЛ рджреВрд╕рд░реЗ рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдСрд░реНрдбрд░ рдХреА рдЧрд╛рд░рдВрдЯреА рд╣реЛрддреА рд╣реИред рдЗрди рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕рд╛рде рдкреНрд░реЛрдЯреЗрдХреНрдЯрд░ рдмрд╣реБрдд рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдЖрдЗрдП рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВред рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВ:

 driver.findElement().getText(); 

рдЬрд╛рд╡рд╛ рдореЗрдВ, рд╣рдо рд╣рдорд╕реЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреА рдПрдХ рд╡рд╕реНрддреБ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░рддреЗ рд╣реИрдВред рдкреНрд░реЛрдЯреЗрдХреНрдЯрд░ рдореЗрдВ, рдпрд╣ рдХрд╛рдлреА рдирд╣реАрдВ рд╣реИ, рд╣рдо рдПрдХ рд╡рд╛рджрд╛ рд╡рд╕реНрддреБ рд╡рд╛рдкрд╕ рдХрд░реЗрдВрдЧреЗред рдФрд░ рдРрд╕реЗ рд╣реА, рдЗрд╕реЗ рдбреАрдмрдЧ рдХреЗ рд▓рдХреНрд╖реНрдп рдХреЗ рд╕рд╛рде рдкреНрд░рд┐рдВрдЯ рдХрд░рдиреЗ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдЪрд▓реЗрдЧрд╛ред

рдЖрдорддреМрд░ рдкрд░ рд╣рдореЗрдВ рдкрд░рд┐рдгрд╛рдореА рдореВрд▓реНрдп рдХреЛ рдкреНрд░рд┐рдВрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред рд╣рдореЗрдВ рдЗрд╕реЗ рдХрд┐рд╕реА рдЕрдиреНрдп рд╡рд┐рдзрд┐ рд╕реЗ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрд╕ рдореВрд▓реНрдп рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдЧреАред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЕрдкреЗрдХреНрд╖рд┐рдд рдХреЗ рдЕрдиреБрдкрд╛рд▓рди рдХреЗ рд▓рд┐рдП рдкрд╛рда рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдЧрд╛ред

рдкреНрд░реЛрдЯреНрд░реИрдХреНрдЯрд░ рдореЗрдВ рднреА рдЗрд╕реА рддрд░рд╣ рдХреЗ рддрд░реАрдХреЗ рдкреНрд░реЙрдорд┐рд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдЗрдирдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди, рдпрджрд┐ рдЖрдк рдЕрднреА рднреА рдореВрд▓реНрдп рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ () рдХрд╛рдо рдЖрдПрдЧрд╛ред

рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо Google рдкреГрд╖реНрда рдкрд░ рдмрдЯрди рдкрд╛рда рдХреИрд╕реЗ рдкреНрд░рд┐рдВрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрд╣ рдПрдХ рдмрдЯрди рд╣реИ, рдкрд╛рда рдореВрд▓реНрдп рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рдЕрдВрджрд░ рд╣реИ):

 //   let submit_button = element(by.css(".FPdoLc input[type='submit'][name='btnK']")); //    await browser.wait(EC.presenceOf(submit_button), 5000); //   then()   await submit_button.getAttribute("value").then((text) => { console.log(text); }); 

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

рдШрд░ рдХрд╛ рдкрд╛рда


рдПрдХ рд╣реЛрдорд╡рд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВ AngularJS рдореЗрдВ рд▓рд┐рдЦреЗ рдкреГрд╖реНрда рдХреЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реВрдВ: рдкреНрд░реЛрдЯреНрд░реИрдХреНрдЯрд░-рдбреЗрдореЛ ред

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

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


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

рд░рд╛рд╕реНрддреЗ рдореЗрдВ, рд╣рдордиреЗ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдСрдЯреЛ-рдЯреЗрд╕реНрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝реА рдЪрд░реНрдЪрд╛ рдХреАред рдпрд╣ рдХреБрдЫ рдШрдВрдЯреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рд▓рдЧрддрд╛ рд╣реИред :)

рдХреНрдпрд╛ рдкрдврд╝рдирд╛ рд╣реИ, рдХрд╣рд╛рдВ рджреЗрдЦрдирд╛ рд╣реИ


Protractor рдореЗрдВ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдореИрдиреБрдЕрд▓ рд╣реИ: https://www.protractortest.org/#/tutorial
рдЬреИрд╕реНрдорд┐рди рдХреЗ рдкрд╛рд╕ рдПрдХ рдореИрдиреБрдЕрд▓ рд╣реИ: https://jasmine.imtqy.com/pages/docs_home.html
TypeScipt рдХреА рд╢реБрд░реБрдЖрдд рдЕрдЪреНрдЫреА рд╣реИ: https://www.typescriptlang.org/docs/handbook/typescript-in-5-minutes.html

рдордзреНрдпрдо рдкрд░, рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ + рдкреНрд░реЛрдЯреЗрдХреНрдЯрд░ + рдХрдХрдбрд╝реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдВрдЧреНрд░реЗрдЬреА рдореЗрдВ рдПрдХ рдЕрдЪреНрдЫрд╛ рд▓реЗрдЦ рд╣реИ: https://medium.com/@igniteram/e2e-testing-with-protractor-cucumber-use-typescript-564575814e4a

рдФрд░ рдореЗрд░реА рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдореИрдВрдиреЗ рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рдЕрдВрддрд┐рдо рдХреЛрдб рдХреЛ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛: https://github.com/KotovVitaliy/HarbProtractorJasmineJasmine ред

рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдЖрдк рдЗрд╕ рдвреЗрд░ рдкрд░ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдФрд░ рдмрдбрд╝реА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред

рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж! :)

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


All Articles