рдПрдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рд╕рд╛рде рдПрдХ рдХрдВрдЯреЗрдирд░ рд╕реЗ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЕрдкрд▓реЛрдб рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдПрдХ рдкрд░реАрдХреНрд╖рдг рдврд╛рдВрдЪреЗ рдХреЗ рд▓рд┐рдП

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


рд▓реЗрдЦрдХ: habr.com/us/users/anrad
рд╣рдм:
рдЯреИрдЧ: #autotest, #selenium, #selenoid, #headlessbrowser, #download


рдЬрдм рд╣рдо UI рдХреЗ рд▓рд┐рдП рдПрдВрдб- рдЯреВ -рдПрдВрдб рдСрдЯреЛрдЯреЗрд╕реНрдЯ рд╡рд┐рдХрд╕рд┐рдд рдХрд░ рд░рд╣реЗ рдереЗ, рддреЛ рд╣рдореЗрдВ рдЗрд╕ рд╕рд╡рд╛рд▓ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛ тАЬрдЕрдВрддрд┐рдо рд▓реЛрдб рдХрд┐рдП рдЧрдП рдирд╛рдо рдХреЛ рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред WebDriver рд╕реЗ рдлрд╝рд╛рдЗрд▓ рдмреНрд░рд╛рдЙрдЬрд╝рд░? тАЭ, Google рдХреЛ рдЬрд▓реНрджреА рд╕реЗ рдХреБрдЫ рдирд╣реАрдВ рдорд┐рд▓рд╛ред рдЗрд╕рд▓рд┐рдП, рдореИрдВрдиреЗ рдпрд╣ рд▓реЗрдЦ рд▓рд┐рдЦрд╛, рдЬрд┐рд╕рдиреЗ рдЙрд╕реА рд╕рдордп рдмрддрд╛рдпрд╛ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣рдореЗрдВ рдХреНрдпрд╛ рд╕рдорд╕реНрдпрд╛ рдереА рдФрд░ рд╣рдордиреЗ рдЗрд╕реЗ рдХреИрд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ред

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

рдЫрд╡рд┐
рд╕реНрд░реЛрдд


рд▓реЗрдЦ рд╕реНрд╡рдпрдВ рдЪрдХреНрд░ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИ, рдиреАрдЪреЗ рд╕рднреА рдкрд┐рдЫрд▓реЗ рднрд╛рдЧреЛрдВ рдХрд╛ рд▓рд┐рдВрдХ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
рднрд╛рдЧ 1. рд╕рдВрдЧрдардирд╛рддреНрдордХ рдФрд░ рдкреНрд░рдмрдВрдзрдХреАрдпред рд╣рдореЗрдВ рд╕реНрд╡рдЪрд╛рд▓рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рдереАред рд╡рд┐рдХрд╛рд╕ рдФрд░ рдкреНрд░рдмрдВрдзрди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рд╕рдВрдЧрдардиред рдЙрдкрдпреЛрдЧ рдХрд╛ рд╕рдВрдЧрдарди
рднрд╛рдЧ 2. рддрдХрдиреАрдХреАред рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдФрд░ рддрдХрдиреАрдХреА рдвреЗрд░ред рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рд╡рд░рдг рдФрд░ рддрдХрдиреАрдХреА рдЖрд╢реНрдЪрд░реНрдп
рднрд╛рдЧ 2-1ред рд╕рднреА рдкрд░реАрдХреНрд╖рдгреЛрдВ рдФрд░ JUnit RuleChain рдХреЗ рд▓рд┐рдП рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдиред

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

"рдСрдЯреЛрдЯреИрд╕реНрдЯреНрд╕" рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддреЗ рд╕рдордп, рд╣рдореЗрдВ рд╕рд┐рд╕реНрдЯрдо рд╕реЗ рдЙрдирдХреА рд╕рд╛рдордЧреНрд░реА рдХреЗ рдмрд╛рдж рдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд╕рд╛рде рдлрд╛рдЗрд▓ (рдбрд╛рдЙрдирд▓реЛрдб) рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХрд╛ рдХрд╛рдо рдерд╛ред рдкрд░реАрдХреНрд╖рдг рдкреНрд░рдгрд╛рд▓реА рд╕реЗ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ "рдЕрдкрд▓реЛрдб" рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ:
  • "рд╕реНрдерд╛рдиреАрдп" рд▓реЙрдиреНрдЪ рдореЛрдб (рд╕реАрдзреЗ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкреАрд╕реА рдкрд░ рд▓реЙрдиреНрдЪ) рдХреЗ рд▓рд┐рдП - рдЬрдм "рд╕реНрдерд╛рдиреАрдп" рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЛ рдЖрд░рдВрднреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЕрд╕реНрдерд╛рдпреА рд╕реНрдерд╛рдиреАрдп рдлрд╝реЛрд▓реНрдбрд░ рдХрд╛ рдирд╛рдо рдЗрд╕реЗ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдмрд╛рдж, рдлрд╝рд╛рдЗрд▓ рдХреЛ рдмрд╛рдж рдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП рд╕реНрдерд╛рдиреАрдп рдлрд╝реЛрд▓реНрдбрд░ рд╕реЗ рд╕реАрдзреЗ рдкрдврд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ;
  • "рд░рд┐рдореЛрдЯ" рдореЛрдб рдХреЗ рд▓рд┐рдП (рдмрд╛рдВрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ) - рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕реЛрд▓рдиреЙрдЗрдб рд╕рд░реНрд╡рд░ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рд╕рд╛рде рдХрдВрдЯреЗрдирд░ рд╕реЗ "рд▓рд┐рдпрд╛ рдЧрдпрд╛" рдерд╛: selenoid-host.example.com : 4444 / download / {SESSION_ID} / {FUT_NAME}


рд╡рд┐рд╡рд░рдг рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╣реИрдВред

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


рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕реНрдерд┐рддрд┐ рдЗрд╕ рддрдереНрдп рд╕реЗ рдмрдврд╝ рдЧрдИ рдереА рдХрд┐ рдХреБрдЫ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреА рдорд╣рд╛рди рдЬрдЯрд┐рд▓рддрд╛ рдХреЗ рдХрд╛рд░рдг, рдкрд░реАрдХреНрд╖рдг рдХреЗ рджреМрд░рд╛рди рд╣реА рд╡рд┐рднрд┐рдиреНрди рд╕реНрд╡рддрдВрддреНрд░ рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдкрд┐рдпреЛрдВ рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдХреЗ рджреМрд░рд╛рди рдХрдИ рдлрд╛рдЗрд▓реЗрдВ рдЙрддрд╛рд░реА рдЬрд╛ рд╕рдХрддреА рд╣реИрдВред
рд╣рдорд╛рд░реЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рд╡рд╣ рд╡рд┐рдзрд┐ рдереА рдЬрд┐рд╕рдореЗрдВ рд╣рдордиреЗ рдЕрдВрддрд┐рдо рдбрд╛рдЙрдирд▓реЛрдб рдХреА рдЧрдИ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдХрд┐рдпрд╛ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рдХрдИ рддрд░реАрдХреЗ рдереЗ:
  • . . , ;
  • Google Chrome javascript chrome://downloads/, html-. .




рд╕реНрдерд╛рдиреАрдп рдореЛрдб рдХреЗ рд▓рд┐рдП рдмреНрд░рд╛рдЙрдЬрд╝рд░-рд▓реЛрдб рдХреА рдЧрдИ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдирд╛ рдПрдХ рддреБрдЪреНрдЫ рдХрд╛рд░реНрдп рд╣реИред
рд░рд┐рдореЛрдЯ рдореЛрдб рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╕рд░реНрд╡рд░ рд╕реЗрд▓реЗрдиреЙрдЗрдб рдХреЗ "рдЕрдирдбреЙрдиреНрд╕реНрдб" рдлреАрдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ: selenoid-host.example.com : 4444 / download / {SESSION_ID} рд╕рднреА рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдбрд╛рдЙрдирд▓реЛрдб рдХреА рдЧрдИ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ RESSION_ID рдПрдХ рд╕реЗрд▓реЗрдиреЙрдЗрдб рд╕рддреНрд░ рдЖрдИрдбреА рд╣реИ
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдпреЛрдЬрдирд╛ рдПрдХ рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рде рдареАрдХ рдХрд╛рдо рдХрд░рддреА рд╣реИ: рдлрд╝рд╛рдЗрд▓ рдбрд╛рдЙрдирд▓реЛрдб рд╣реЛрдиреЗ рдФрд░ рд╕реВрдЪреА рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рддрдХ рдЖрдкрдХреЛ рдХреБрдЫ рд╕рдордп рдЗрдВрддрдЬрд╛рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдкреНрд░рддреАрдХреНрд╖рд╛ рдХреЛ рдПрдХ рдЯрд╛рдЗрдордЖрдЙрдЯ рдЪрдХреНрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕ рддрд░рд╣ рд╣рдо рдПрдХ рд╕рдВрднрд╛рд╡рд┐рдд рдлрд╝рд╛рдЗрд▓ рдЕрдкрд▓реЛрдб рддреНрд░реБрдЯрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдо рдХреЗрд╡рд▓ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдлрд╝рд╛рдЗрд▓ рдЗрд╕ рд╕рд░реНрдХрд┐рдЯ рдореЗрдВ рд▓реЛрдб рдирд╣реАрдВ рд╣реБрдИ рдереАред рдЗрд╕рд▓рд┐рдП, рдЕрдВрдд рдореЗрдВ, рд╣рдо рдХреНрд░реЛрдо: // рдбрд╛рдЙрдирд▓реЛрдб / рдкреГрд╖реНрда рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдХрд░рдиреЗ рдХреА рд╡рд┐рдзрд┐ рдкрд░ рдмрд╕реЗред

рдХреНрд░реЛрдо рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛: // рдбрд╛рдЙрдирд▓реЛрдб / рдкреГрд╖реНрда


рдпрд╣ рд╡рд┐рдзрд┐ рд╕реНрдерд╛рдиреАрдп рдФрд░ рджреВрд░рд╕реНрде рджреЛрдиреЛрдВ рдореЛрдб рдореЗрдВ рд╕рдорд╛рди рд░реВрдк рд╕реЗ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддреА рд╣реИред рдХрд╛рд░реНрдп рдХреА рдпреЛрдЬрдирд╛ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ:
  • рдХреНрд░реЛрдо рд╡рд┐рдВрдбреЛ рдЦреЛрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рд╡рд╛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рдПрдВ: // рдбрд╛рдЙрдирд▓реЛрдб /;
  • рд╕рд╛рдорд╛рдиреНрдп рддрд░реАрдХреЗ рд╕реЗ рд╡рд┐рдВрдбреЛ рдореЗрдВ рдбреЗрдЯрд╛ рдкреНрд░реЛрд╕реЗрд╕ рдХрд░реЗрдВред рд╕реВрдЪреА рдореЗрдВ рдкрд╣рд▓реА рдлрд╝рд╛рдЗрд▓ рд▓реЛрдб рд╣реЛрдиреЗ рдФрд░ рдЙрд╕рдХрд╛ рдирд╛рдо рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рддрдХ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВ;
  • рдХреНрд░реЛрдо: // рдбрд╛рдЙрдирд▓реЛрдб / рд╡рд┐рдВрдбреЛ рдмрдВрдж рдХрд░реЗрдВ рдФрд░ рдЙрд╕ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдирд╛рдо рд▓реМрдЯрд╛рдПрдВ рдЬрд┐рд╕реЗ рдЖрдк рдЦреЛрдЬ рд░рд╣реЗ рд╣реИрдВред


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

рдХреНрд░реЛрдо рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХреА рдЧрдИ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдирд╛рдо рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдХреНрд╖рд╛: // рдбрд╛рдЙрдирд▓реЛрдб /
	private static final long DOWNLOADS_PAGE_LOAD_TIMEOUT = 5_000;
	private static final long MAX_GET_FILE_NAME_ATTEMPT = 5;
 
	public static String getLastDownloadedFilename() throws DownloaderException {
        String[] filename = new String[1];
        Exception[] ex = new Exception[1];
        WebDriver driver = WebDriverRunner.getWebDriver();
        JavascriptExecutor executor = (JavascriptExecutor) driver;
        Utils.driver.openNewTabCheckAndClose(
                () -> {
                    executor.executeScript("window.open('','_blank');");
                },
                () -> {
                    driver.get("chrome://downloads/");
 
                    for (int i = 0; i < MAX_GET_FILE_NAME_ATTEMPT; i++) {
                    	ex[0] = null;
                        sleep();
                    	try {
                        	WebElement element = (WebElement) executor.executeScript(
                                    "return document.querySelector('downloads-manager').shadowRoot.querySelector('downloads-item').shadowRoot.getElementById('file-link')");
                        	filename[0] = element.getText();
                            LOGGER.info("Attempt get file name " + i + ". Name = '" + filename[0] + "'");
                    	} catch (WebDriverException e) {
                        	ex[0] = e;
                            LOGGER.info("Failed attempt "+ i + " to get filename text: " + e.getMessage());
                        	continue;
                    	}
                    	if (filename[0] != null && !filename[0].isEmpty()) {
                        	 //             
                         	executor.executeScript(
                                    "document.querySelector('downloads-manager').shadowRoot.querySelector('downloads-item').shadowRoot.getElementById('remove').click()");
                        	break;
                    	}
                    }
                }
    	);
 
    	if (filename[0] != null && !filename[0].isEmpty()) {
            return filename[0];
    	}
 
    	String message = "Timeout. Can not get last downloaded file name from chrome://downloads/. File name is '" + filename[0] + "'. Exception: " + ex[0].getMessage();
        LOGGER.warning(message);
    	throw new DownloaderException(message, ex[0]);
	}

All Articles