Android рд╕реНрд╡рдЪрд╛рд▓рди рдЕрдкрдирд╛ рдкрд╣рд▓рд╛ рдПрд╕реНрдкреНрд░реЗрд╕реЛ рдЯреЗрд╕реНрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реБрдкрд░ рдЖрд╕рд╛рди рдЧрд╛рдЗрдб

рдирдорд╕реНрдХрд╛рд░ рджреЛрд╕реНрддреЛрдВред рдореЛрдмрд╛рдЗрд▓ QA Engineer рдкрд╛рдареНрдпрдХреНрд░рдо рдХреЗ рдкреНрд░рд╛рд░рдВрдн рдХреА рдкреНрд░рддреНрдпрд╛рд╢рд╛ рдореЗрдВ, рд╣рдо рдЖрдкрдХреЗ рд╕рд╛рде рд░реЛрдЪрдХ рд╕рд╛рдордЧреНрд░реА рдХрд╛ рдЕрдиреБрд╡рд╛рдж рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред




рдПрд╕реНрдкреНрд░реЗрд╕реЛ рдХреНрдпрд╛ рд╣реИ?


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

рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ред рд▓реЗрдХрд┐рди рдХреБрдЫ рднреА рдЖрдкрдХреЛ рдкрд╣рд▓рд╛ рдХрджрдо рдЙрдард╛рдиреЗ рд╕реЗ рд░реЛрдХрддрд╛ рд╣реИ рдФрд░ рдЕрднреА рдПрд╕реНрдкреНрд░реЗрд╕реЛ рдврд╛рдВрдЪреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдВрдбреНрд░реЙрдЗрдб рдХреЗ рд▓рд┐рдП рд╕рд░рд▓ рдкрд░реАрдХреНрд╖рдг рдорд╛рдорд▓реЛрдВ рдХреЛ рд▓рд┐рдЦрдирд╛ рд╕реАрдЦрдирд╛ рд╕реАрдЦрддрд╛ рд╣реИред

рд╣рдореЗрдВ рд╕реНрд╡рдЪрд╛рд▓рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдмрддрд╛рдПрдВ?


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

рдореВрд▓ рд░реВрдк рд╕реЗ рджреЛ рдкреНрд░рдХрд╛рд░ рдХреЗ рдкрд░реАрдХреНрд╖рдг рдврд╛рдВрдЪреЗ рд╣реИрдВ:

  1. рдлреНрд░реЗрдорд╡рд░реНрдХ рдЬрд┐рдиреНрд╣реЗрдВ рд╕реНрд░реЛрдд рдХреЛрдб рддрдХ рдкрд╣реБрдВрдЪ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдФрд░ рдЬреЛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХреАрдХреГрдд рдирд╣реАрдВ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, WebDriver, Appium, QTP ред
  2. рд╕реНрд░реЛрдд рдХреЛрдб рддрдХ рдкрд╣реБрдБрдЪ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдлреНрд░реЗрдорд╡рд░реНрдХред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрд╕реНрдкреНрд░реЗрд╕реЛ, рдХреЗрдЖрдИрдПрдл (рдХреАрдк рдЗрдЯ рдлрдВрдХреНрд╢рдирд▓) ред

рдПрд╕реНрдкреНрд░реЗрд╕реЛ рдПрдХ рдврд╛рдВрдЪрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╕реНрд░реЛрдд рдХреЛрдб рддрдХ рдкрд╣реБрдВрдЪ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕реНрд╡рдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛрдб рддрдХ рдкрд╣реБрдВрдЪ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЪреВрдВрдХрд┐ рд╣рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЪрд▓реЛ рдЗрд╕реЗ рдмрдирд╛рдПрдВ!

рдПрд╕реНрдкреНрд░реЗрд╕реЛ рдХреЗ рдореБрдЦреНрдп рдШрдЯрдХ


рдПрд╕реНрдкреНрд░реЗрд╕реЛ рдореЗрдВ рддреАрди рдкреНрд░рдХрд╛рд░ рдХреА рд╡рд┐рдзрд┐рдпрд╛рдБ рдЙрдкрд▓рдмреНрдз рд╣реИрдВ:

  1. ViewMatchers - рдЖрдк рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЗ рд╡рд░реНрддрдорд╛рди рдкрджрд╛рдиреБрдХреНрд░рдо рдореЗрдВ рдПрдХ рд╡рд╕реНрддреБ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ
  2. ViewAssertions - рдЖрдк рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рд╕реНрдерд┐рддрд┐ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдФрд░ рдпрд╣ рдкреБрд╖реНрдЯрд┐ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ рдХрд┐ рд░рд╛рдЬреНрдп рдорд╛рдирджрдВрдбреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИ
  3. ViewActions - рдпреЗ рд╡рд┐рдзрд┐рдпрд╛рдВ рдЖрдкрдХреЛ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕рд╛рде рд╡рд┐рднрд┐рдиреНрди рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИрдВред

рдЖрдЗрдП рдЧрд╣рд░рд╛рдИ рд╕реЗ рдЦреБрджрд╛рдИ рдХрд░реЗрдВ рдФрд░ рджреЗрдЦреЗрдВ рдХрд┐ рдпрд╣ рд╕рдм рдХреИрд╕реЗ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдПрдХ рд╕рд░рд▓ рд╕реНрд╡рдЪрд╛рд▓рди рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдмрдирд╛рдПрдБ


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

1. рдПрдВрдбреНрд░реЙрдЗрдб рд╕реНрдЯреВрдбрд┐рдпреЛ рдЦреЛрд▓реЗрдВ рдФрд░ рдПрдХ рдирд┐рдЪрд▓рд╛ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдЧрддрд┐рд╡рд┐рдзрд┐ рдмрдирд╛рдПрдВред


Android рд╕реНрдЯреВрдбрд┐рдпреЛред рдирдИ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╡рд┐рдВрдбреЛ рдмрдирд╛рдПрдБ

2. рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рдирд╛рдо рдФрд░ рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВред


Android рд╕реНрдЯреВрдбрд┐рдпреЛред рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд╛ рдирд╛рдо

3. androidTest рдлреЛрд▓реНрдбрд░ рдореЗрдВ рдЬрд╛рдПрдВ


Android рд╕реНрдЯреВрдбрд┐рдпреЛред рд╡рд╛рджреНрдп рдкрд░реАрдХреНрд╖рдгред

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдХреЗрд╡рд▓ рдПрдХ рдкрд░реАрдХреНрд╖рдг рд╡рд╣рд╛рдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдПрдХ рдпреВрдЖрдИ рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рд╣реИ, рдмрд▓реНрдХрд┐ рдПрдХ рдЬреЗрдпреВрдПрдирдЯ рдкрд░реАрдХреНрд╖рд╛ рд╣реИред

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

рдЖрдЗрдП рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдПрдХ рдирд┐рдпрдо рдирд┐рдпрдо рдПрдиреЛрдЯреЗрд╢рди рдЖрдпрд╛рдд:

import org.junit.Rule; 

рд░рдирд╡рд┐рде рдПрдиреЛрдЯреЗрд╢рди рдХреЛ рдкреВрд░рдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдЧрд▓реА рдЪреАрдЬрд╝ рдХреЛ рдХреЛрдб рдХреА рдкрдВрдХреНрддрд┐ рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛:

 @Rule public ActivityTestRule<MainActivity> activityActivityTestRule = new ActivityTestRule<>(MainActivity.class); 



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

рдЪрд▓реЛ рдЧреНрд░реЗрдбрд▓ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдкрд░ рдЬрд╛рдПрдВ рдФрд░ рдЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдЬреЛрдбрд╝реЗрдВред рдмрд┐рд▓реНрдб.рдЧреНрд░реЗрдбрд▓ (рдореЙрдбреНрдпреВрд▓: рдРрдк) рдирд╛рдордХ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдЦреЛрд▓реЗрдВ рдФрд░ рдиреАрдЪреЗ рджреА рдЧрдИ рд▓рд╛рдЗрди рдЬреЛрдбрд╝реЗрдВ:

 androidTestImplementation 'com.android.support.test:rules:1.0.2' 


Android рд╕реНрдЯреВрдбрд┐рдпреЛред рдирд┐рд░реНрднрд░рддрд╛ рдЬреЛрдбрд╝реЗрдВред

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

рдЕрдм рдЬрдм рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдЕрдЧрд▓рд╛ рдЪрд░рдг рдЗрд╕реЗ рдЗрдВрд╕реНрдЯреНрд░реВрдореЗрдВрдЯрд▓ рдЯреЗрд╕реНрдЯ рдХреЗ рд╕рд╛рде рдлрд╛рдЗрд▓ рдореЗрдВ рдЖрдпрд╛рдд рдХрд░рдирд╛ рд╣реИ:

 import androidx.test.rule.ActivityTestRule; 


Android рд╕реНрдЯреВрдбрд┐рдпреЛред рдПрдХреНрдЯрд┐рд╡рд┐рдЯреАрдЯрд╛рдЗрд╕реНрдЯ рдирд┐рдпрдо рдЖрдпрд╛рдд рдХрд░реЗрдВред

рдареАрдХ рд╣реИ, рдЕрдм рд╣рдо рдЕрдкрдирд╛ рдкрд╣рд▓рд╛ рдкрд░реАрдХреНрд╖рдг рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИрдВред рдЗрд╕ рдХреЛрдб рдХреЛ ExampleInstrumentedTest рдореЗрдВ рджрд░реНрдЬ рдХрд░реЗрдВ:

 @Test public void clickButtonHome(){ onView(withId(R.id.navigation_home)).perform(click()).check(matches(isDisplayed())); } 


Android рд╕реНрдЯреВрдбрд┐рдпреЛред рдПрдХ рдкрд░реАрдХреНрд╖рдг рдЬреЛрдбрд╝рдирд╛ рдФрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рдЖрдЗрдЯрдо рдЖрдпрд╛рдд рдХрд░рдирд╛

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

рдПрд╕реНрдкреНрд░реЗрд╕реЛ рдЯреЗрд╕реНрдЯ рдЪрд▓ рд░рд╣рд╛ рд╣реИ


рдмрд╛рдИрдВ рдУрд░ рд╣рдорд╛рд░реЗ рдкрд░реАрдХреНрд╖рдг рдкрд░ рд░рд╛рдЗрдЯ-рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ рдФрд░ "Run ExampleInstrumentedTest" рдЪреБрдиреЗрдВ ред



рдЪреВрдВрдХрд┐ рдпрд╣ рдПрдХ рдпреВрдЖрдИ рдЯреЗрд╕реНрдЯ рд╣реИ , рди рдХрд┐ рдПрдХ рдпреВрдирд┐рдЯ рдЯреЗрд╕реНрдЯ, рддреЛ рд╣рдо рдбрд┐рд╡рд╛рдЗрд╕ рдХреА рдкрд╕рдВрдж рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд┐рдВрдбреЛ рджреЗрдЦреЗрдВрдЧреЗ, рдЬрд┐рд╕ рдкрд░ рд╣рдо рдЗрд╕реЗ рдЪрд▓рд╛рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗред рдореЗрд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рд░реВрдк рдореЗрдВ "Nexus 5X" рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдЗрд╕реЗ рдЪреБрдирдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред



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

рдареАрдХ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ рдФрд░ рдЬрд╛рджреВ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реЛ рдЬрд╛рдПрдВ!


Android рд╕реНрдЯреВрдбрд┐рдпреЛред рдкрд░реАрдХреНрд╖рдг рдХреЗ рдкрд░рд┐рдгрд╛рдо

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рджреЛ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╣реИ: рдЗрдХрд╛рдИ рдкрд░реАрдХреНрд╖рдг, рдЬреЛ рдХрд┐ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрдирдиреЗ рдХреЗ рдмрд╛рдж рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдерд╛, рдФрд░ рд╣рдорд╛рд░рд╛ рдХреНрд▓рд┐рдХрд╣реЙрдЯрдмрдЯрди рдкрд░реАрдХреНрд╖рдг, рдЬреЛ рд╣рдордиреЗ рдЕрднреА рд▓рд┐рдЦрд╛ рдерд╛ред


Android рд╕реНрдЯреВрдбрд┐рдпреЛред рдкреВрд░реА рд╣реБрдИ рдкрд░реАрдХреНрд╖рд╛ред

рдЬреИрд╕рд╛ рдХрд┐ рдирд╛рдо рд╕реЗ рд╣реА рд╕реНрдкрд╖реНрдЯ рд╣реИ, рд╣рдордиреЗ рдХреЗрд╡рд▓ рдирд┐рдЪрд▓реЗ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдмрд╛рд░ рдореЗрдВ рдПрдХ рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд┐рдпрд╛ рдерд╛, рдЬрд┐рд╕реЗ MainActivity рдкрджрд╛рдиреБрдХреНрд░рдо рдореЗрдВ "navigation_home" рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЖрдЗрдП рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВ рдХрд┐ рд╣рдордиреЗ рддрд░реАрдХреЛрдВ рдХреА рдЗрд╕ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рдХреНрдпрд╛ рдХрд┐рдпрд╛:

 public void clickButtonHome(){ onView(withId(R.id.navigation_home)).perform(click()).check(matches(isDisplayed())); } 

  1. 1. onView рдХреЙрд▓ рдХрд░реЗрдВ ред рдпрд╣ рд╡рд┐рдзрд┐ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреА рд╡реНрдпреВрдореИрдЪрд░реНрд╕ рд╣реИ ред рд╣рдореЗрдВ рдХреБрдЫ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реА рдЧрддрд┐рд╡рд┐рдзрд┐ рдореЗрдВ рдПрдХ рд╡рд╕реНрддреБ рдорд┐рд▓рддреА рд╣реИред
  2. 2. рдЗрд╕рдХреЗ рдмрд╛рдж, рд╣рдо рдкреНрд░рджрд░реНрд╢рди (рдХреНрд▓рд┐рдХ ()) рдХрд╣рддреЗ рд╣реИрдВ ред рдпрд╣ рд╡рд┐рдзрд┐ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреА ViewActions рд╣реИ ред рд╣рдо рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдп рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВ - рдПрдХ рдХреНрд▓рд┐рдХ (рдХреНрд▓рд┐рдХ) рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдПрд╕реНрдкреНрд░реЗрд╕реЛ рдореЗрдВ рдХрдИ рдФрд░ рдЕрдзрд┐рдХ рдХрд╛рд░реНрдп рд╡рд┐рдзрд┐рдпрд╛рдБ рдЙрдкрд▓рдмреНрдз рд╣реИрдВ:
  3. 3. рдЖрдЦрд┐рд░реА рдЪреАрдЬ рдЬреЛ рд╣рдореЗрдВ рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ рд╡рд╣ рдпрд╣ рдкреБрд╖реНрдЯрд┐ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ рдХрд┐ рд╣рдордиреЗ рдЬреЛ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреА рдереА рд╡рд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣рдорд╛рд░реЗ рдорд╛рдирджрдВрдбреЛрдВ рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИ, рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдо рдЪреЗрдХ (isDisplayed ()) рд╡рд┐рдзрд┐ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдХрд┐ ViewAssertions рдХреА рдПрдХ рд╡рд┐рдзрд┐ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рдпрд╣ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдСрдмреНрдЬреЗрдХреНрдЯ (рджреГрд╢реНрдп) рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕реНрдХреНрд░реАрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рдмрд╛рдж рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

Android рджреГрд╢реНрдп рдкрджрд╛рдиреБрдХреНрд░рдо


рдкреНрд░рд┐рдп рдкрд╛рдардХ, рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЖрдкрдХреЛ рд╕рдордЭрд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛ рдХрд┐ рдПрд╕реНрдкреНрд░реЗрд╕реЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдВрдбреНрд░реЙрдЗрдб рдХреЗ рд▓рд┐рдП рдмреБрдирд┐рдпрд╛рджреА рдпреВрдЖрдИ рдкрд░реАрдХреНрд╖рдг рдХреИрд╕реЗ рд▓рд┐рдЦреЗрдВред

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рд╕рдордЭрдирд╛ рд╢рд╛рдпрдж рдЗрддрдирд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣рд╛рдВ рдХреНрдпрд╛ рд╣реБрдЖ рд╣реИ рдЕрдЧрд░ рдЖрдкрдХреЛ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдпреЗ рд╕рднреА рдмрдЯрди рдХрд╣рд╛рдВ рд╕реНрдерд┐рдд рд╣реИрдВ рдФрд░ рд╡реЗ рдХрд╣рд╛рдВ рд╕реЗ рдЖрддреЗ рд╣реИрдВред рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдмрд╛рдИрдВ рдУрд░ "Res" рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдЬрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, "рдореЗрдиреВ" рдлрд╝реЛрд▓реНрдбрд░ рдЦреЛрд▓реЗрдВ рдФрд░ "bottom_nav_menu.xml" рдЪреБрдиреЗрдВ ред
рдпрд╣рд╛рдБ рд╣рдо рдХреНрдпрд╛ рджреЗрдЦреЗрдВрдЧреЗ:


Android рд╕реНрдЯреВрдбрд┐рдпреЛред рдирд┐рдЪрд▓реЗ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдореЗрдиреВ рдХреА рдкреНрд░рд╕реНрддреБрддрд┐ рдкрджрд╛рдиреБрдХреНрд░рдоред
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣ рд╡рд╣ рд▓рд╛рдЗрди рд╣реИ рдЬреЛ рдореЗрдиреВ рдЖрдЗрдЯрдо рдХреЗ рд▓рд┐рдП рдПрдХ рдирд╛рдо рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИ:

 android:id="@+id/navigation_home" 

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

рдЕрдзрд┐рдХ рдПрд╕реНрдкреНрд░реЗрд╕реЛ рдЯреЗрд╕реНрдЯ


рд╣рдореЗрдВ ExampleInstrumentedTest рдлрд╝рд╛рдЗрд▓ рдкрд░ рд╡рд╛рдкрд╕ рд▓реМрдЯрдиреЗ рдФрд░ рдХреБрдЫ рдФрд░ рдкрд░реАрдХреНрд╖рдг рдлрд╝рдВрдХреНрд╢рди рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

 @Test public void clickButtonDashboard(){ onView(withId(R.id.navigation_dashboard)).perform(click()).check(matches(isDisplayed())); } @Test public void clickButtonNotification(){ onView(withId(R.id.navigation_notifications)).perform(click()).check(matches(isDisplayed())); } 

рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдЬреЛрдбрд╝реА рдЧрдИ рдПрдХрдорд╛рддреНрд░ рдЪреАрдЬрд╝ рдХрдИ рдФрд░ рдореЗрдиреВ рдЖрдЗрдЯрдореЛрдВ рдХреА рдЬрд╛рдБрдЪ рдХрд░ рд░рд╣реА рдереА: "рдиреЗрд╡рд┐рдЧреЗрд╢рди_рдбреИрд╢рдмреЛрд░реНрдб" рдФрд░ "рдиреЗрд╡реАрдЧреЗрд╢рди_рдиреЛрдЯрд┐рдлрд╝рд┐рдХреЗрд╢рди" ред


Android рд╕реНрдЯреВрдбрд┐рдпреЛред рджреЛ рдФрд░ рдкрд░реАрдХреНрд╖рдг рдЬреЛрдбрд╝реЗрдВред

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

рдЖрдЗрдП рдЗрди рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЬрд╛рд░реА рд░рдЦреЗрдВ рдФрд░ рдЪрд▓рд╛рдПрдВред рд░рди рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред


Android рд╕реНрдЯреВрдбрд┐рдпреЛред рдкрд░реАрдХреНрд╖рдг рдХреЗ рдкрд░рд┐рдгрд╛рдоред

рд╕рднреА 4 рдЯреЗрд╕реНрдЯ рдкрд╛рд╕ рд╣реБрдПред рджреГрд╢реНрдп рдкрджрд╛рдиреБрдХреНрд░рдо рдореЗрдВ рд╕рднреА рджреГрд╢реНрдп рдкрд╛рдП рдЧрдП, рдХреНрд▓рд┐рдХ рдХрд┐рдП рдЧрдП рдФрд░ рдкреБрд╖реНрдЯрд┐ рдХреА рдЧрдИред

рдирд┐рд╖реНрдХрд░реНрд╖


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

рдПрдХ рдЕрдЪреНрдЫрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рд╣реИ!

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


All Articles