рд╕реЗрд▓реЗрдирд┐рдпрдо WebDriverWait рдХреА рдЙрдкрдпреБрдХреНрддрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ

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

рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдПрдХ рдкреГрд╖реНрда рдкрд░ рдПрдХ рдШрдЯрдирд╛ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдХреНрд╕рд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдЯреВрд▓ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдЬрд┐рд╕реЗ WebDriverWait рд╡рд░реНрдЧ рдФрд░ рдЙрд╕рдХреЗ рдореБрдЦреНрдп рддрдХ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдЕрдЧрд░ WebDriverWait рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рдХреНрдпрд╛ рдЗрд╕реЗ рдордирд╛ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ?

рд╡рд┐рдЪрд╛рд░ рд╕реА # рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЗрд╕ рд╡рд░реНрдЧ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рддрд░реНрдХ рдЕрдиреНрдп рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ рд╣реЛрдЧрд╛ред

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

рдЖрдЗрдП, рдЬрдм рддрдХ рд╡рд┐рдзрд┐ рдХрд╛ рд╕реНрд░реЛрдд рдХреЛрдб рджреЗрдЦреЗрдВред рдЙрд╕рдХреЗ рддрд░реНрдХ рдХреА рд░реАрдврд╝ рдПрдХ рдЕрдВрддрд╣реАрди рдЪрдХреНрд░ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЗрд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рджреЛ рд╢рд░реНрддреЗрдВ рд╣реИрдВ: рд╡рд╛рдВрдЫрд┐рдд рдШрдЯрдирд╛ рдХреА рд╢реБрд░реБрдЖрдд рдпрд╛ рд╕рдордпрдмрд╛рд╣реНрдпред рдЕрддрд┐рд░рд┐рдХреНрдд "рдЙрдкрд╣рд╛рд░" рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдЕрдкрд╡рд╛рджреЛрдВ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рд╡рд╛рдкрд╕ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдпрджрд┐ рдЯреНрд░реЙрд╕реНрд▓реЗрдЯ рдмреВрд▓ рдирд╣реАрдВ рд╣реИ (рдЙрд╕ рдкрд░ рдмрд╛рдж рдореЗрдВ рдЕрдзрд┐рдХ)ред

рдкрд╣рд▓реА рд╕реАрдорд╛ рдЬреЛ рдореИрдВ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рд╣рдореЗрдВ рд╣рдореЗрд╢рд╛ IWebDriver рдХреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЬрдм рддрдХ рдХрд┐ рд╡рд┐рдзрд┐ рдХреЗ рдЕрдВрджрд░ (рд╕рдЯреАрдХ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рд╢рд░реНрдд рдХреЗ рд▓рд┐рдП рдПрдХ рдЗрдирдкреБрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ) рд╣рдо рдкреВрд░реА рддрд░рд╣ рд╕реЗ ISearchContext рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рджрд░рдЕрд╕рд▓, рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рд╣рдо рдХреБрдЫ рддрддреНрд╡ рдпрд╛ рдЗрд╕рдХреА рд╕рдВрдкрддреНрддрд┐ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХреА рдЙрдореНрдореАрдж рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП FindElement (рдПрд╕) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред

рдореИрдВ рдпрд╣ рдХрд╣рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрджреНрдпрдо рдХрд░реВрдВрдЧрд╛ рдХрд┐ ISearchContext рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдФрд░ рднреА рдЕрдзрд┐рдХ рддрд░реНрдХрд╕рдВрдЧрдд рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛрдб (рдХреНрд▓рд╛рд╕) рдХреЗрд╡рд▓ рдПрдХ рдкреЗрдЬ рдСрдмреНрдЬреЗрдХреНрдЯ рдирд╣реАрдВ рд╣реИ, рдЬреЛ рдХрд┐ рдмрдЪреНрдЪреЛрдВ рдХреА рдЦреЛрдЬ рдореЗрдВ, рдкреЗрдЬ рдХреА рдЬрдбрд╝ рд╕реЗ рдирд┐рд░рд╕реНрдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдХрднреА-рдХрднреА рдпрд╣ рдПрдХ рдРрд╕рд╛ рд╡рд░реНрдЧ рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдПрдХ рд╕рдордЧреНрд░ рддрддреНрд╡ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдХреА рдЬрдбрд╝ рдкреГрд╖реНрда рдХрд╛ рдПрдХ рдФрд░ рддрддреНрд╡ рд╣реИ, рдФрд░ рдкреГрд╖реНрда рд╣реА рдирд╣реАрдВред рдЗрд╕рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг SelectElement рд╣реИ , рдЬреЛ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ рдореВрд▓ IWebElement рдХреЗ рд╕рдВрджрд░реНрдн рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИред

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

рдмреЗрд╢рдХ, рд╣рдо рд╕рд╛рджреГрд╢реНрдп рджреНрд╡рд╛рд░рд╛ рдПрдХ рд╡рд░реНрдЧ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
SearchContextWait : DefaultWait<ISearchContext> 
рд▓реЗрдХрд┐рди рдЪрд▓реЛ рдЬрд▓реНрджреА рдордд рдХрд░реЛред рд╣рдореЗрдВ рдЙрд╕рдХреА рдЬрд░реВрд░рдд рдирд╣реАрдВ рд╣реИред

рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдбреНрд░рд╛рдЗрд╡рд░ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдХрд┐рд╕ рддрд░рд╣ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЖрдорддреМрд░ рдкрд░ рдпрд╣ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

 var wait = new WebDriverWait(Driver, TimeSpan.FromSeconds(10)); wait.Until( d => d.FindElements(By.XPath("locator")).Count > 0 ); 

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

 var wait = new WebDriverWait(Driver, TimeSpan.FromSeconds(10)); wait.Until( d => Driver.FindElements(By.XPath("locator")).Count > 0 ); 

рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╕рд╛рдЗрдорди рд╕реНрдЯреАрд╡рд░реНрдЯ рдЕрдкрдиреЗ рднрд╛рд╖рдг рдореЗрдВ рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ ред

рдЫрд╡рд┐

рд╡рд╣ "рдбреА -> рдбреА" рдирд╣реАрдВ рд▓рд┐рдЦрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди "рдбреА -> рдбреНрд░рд╛рдЗрд╡рд░" рд▓рд┐рдЦрддрд╛ рд╣реИ, рдпрд╛рдиреАред рдбреНрд░рд╛рдЗрд╡рд░ рдЙрджрд╛рд╣рд░рдг рдХреЛ рд╡рд┐рдзрд┐ рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╡рд┐рдзрд┐ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ!

рд╡рд┐рдзрд┐ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЗ рдЕрдВрджрд░ рдбреНрд░рд╛рдЗрд╡рд░ рдХреЛ рдХреНрдпреЛрдВ рдкрд╛рд╕ рдХрд░реЗрдВ? рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЗ рдЕрдВрджрд░ рдЦреЛрдЬ рдХреЛ рдЕрд▓рдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ ExpectedConditions рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ? TextToBePresentInElement рд╡рд┐рдзрд┐ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВред рдпрд╛ рджреГрд╢реНрдпрддрд╛ ред рдпрд╛ TextToBePresentInElementValue ред рд╣рд╕реНрддрд╛рдВрддрд░рд┐рдд рдЪрд╛рд▓рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рднреА рдЙрдирдореЗрдВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ!

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

рдЖрдЗрдП рдЕрдм рдкрддрд╛ рд▓рдЧрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдЬрдм рддрдХ рд╡рд┐рдзрд┐ рдХреЛ рд╡рд╛рдкрд╕реА рдореВрд▓реНрдп рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ? рдпрджрд┐ рдмреВрд▓ TResult рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ, рддреЛ рдирд╣реАрдВ, рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╕рдлрд▓рддрд╛ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдк рд╕рдЪ рд╣реЛ рдЬрд╛рдПрдВрдЧреЗ, рдФрд░ рд╡рд┐рдлрд▓рддрд╛ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдкрдХреЛ рдЯрд╛рдЗрдордЖрдЙрдЯ рдЕрдкрд╡рд╛рдж рдорд┐рд▓реЗрдЧрд╛ред рдРрд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреА рд╕реВрдЪрдирд╛ рд╕рд╛рдордЧреНрд░реА рдХреНрдпрд╛ рд╣реИ?

рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рд╡рд╕реНрддреБ TResult рд╣реИ? рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдирд┐рд░реНрдорд╛рдг рдорд╛рди рд▓реЗрдВ:

 var wait = new WebDriverWait(Driver, TimeSpan.FromSeconds(10)); wait.IgnoreExceptionTypes(typeof(NoSuchElementException)); var element = wait.Until(d => d.FindElement(By.XPath("locator"))); 

рдпрд╛рдиреА рд╣рдо рди рдХреЗрд╡рд▓ рддрддреНрд╡ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рддреЗ рд╣реИрдВ, рдмрд▓реНрдХрд┐ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рднреА рдХрд░рддреЗ рд╣реИрдВ (рдпрджрд┐ рд╣рдордиреЗ рдЗрдВрддрдЬрд╛рд░ рдХрд┐рдпрд╛ рд╣реИ), рдЬрд┐рд╕рд╕реЗ рдбреЛрдо рдХреЛ рдПрдХ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдХреЙрд▓ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рдм рдареАрдХ рд╣реИред

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

 try { FindElement } catch (NoSuchElementException) {} 

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

 var wait = new WebDriverWait(Driver, TimeSpan.FromSeconds(10)); var elements = wait.Until(d => d.FindElements(By.XPath("locator"))); 

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

рдареАрдХ рд╣реИ, рд╕реВрдЪреА рд╕реНрдкрд╖реНрдЯ рд╣реИред рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА, рдкрд╛рдпрд╛ рддрддреНрд╡ рдХреИрд╕реЗ рд▓реМрдЯрд╛рдПрдВ рдФрд░ рдЕрдкрд╡рд╛рдж рди рдлреЗрдВрдХреЗрдВ? рдХреЛрдб рдЗрд╕ рддрд░рд╣ рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИ:

 var wait = new WebDriverWait(Driver, TimeSpan.FromSeconds(10)); var element = wait.Until(d => d.FindElements(By.XPath("locator")).FirstOrDefault()); 

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

рдФрд░ рдлрд┐рд░ рднреА, рджреВрд╕рд░рд╛ рд╡рд┐рдЪрд╛рд░ рдпрд╣ рд╣реИ рдХрд┐ рдЕрдзрд┐рдХрддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЯрд┐рд▓ рд╡рд┐рдзрд┐ рдХрд╛ рд╡рд╛рдкрд╕реА рдореВрд▓реНрдп рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдкрд╛рд░рд┐рдд рдореВрд▓реНрдп рдЕрдирд╛рд╡рд╢реНрдпрдХ рд╣реИ, рд╡рд╛рдкрд╕реА рдореВрд▓реНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рддрдХ рдХреА рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреНрдпрд╛ рд╣реИ? рдХреЗрд╡рд▓ рд╕реНрдерд┐рддрд┐ рдкрджреНрдзрддрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдЪрдХреНрд░ рдФрд░ рдЖрд╡реГрддреНрддрд┐ рдореЗрдВ? рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА SpinWait.SpinUntil рдкрджреНрдзрддрд┐ рдореЗрдВ C # рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдПрдХрдорд╛рддреНрд░ рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдЯрд╛рдЗрдордЖрдЙрдЯ рдЕрдкрд╡рд╛рдж рдирд╣реАрдВ рдлреЗрдВрдХрддрд╛ рд╣реИред рдпрд╣ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рддрдп рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

 public void Wait(Func<bool> condition, TimeSpan timeout) { var waited = SpinWait.SpinUntil(condition, timeout); if (!waited) { throw new TimeoutException(); } } 

рдпрд╛рдиреА рдЕрдзрд┐рдХрд╛рдВрд╢ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдХреЛрдб рдХреА рдпреЗ рдХреБрдЫ рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдкреВрд░реЗ WebDriverWait рд╡рд░реНрдЧ рдХреЗ рддрд░реНрдХ рдХреЛ рдмрджрд▓ рджреЗрддреА рд╣реИрдВред рдХреНрдпрд╛ рдкрд░рд┐рдгрд╛рдо рдХреЗ рд▓рд╛рдпрдХ рдкреНрд░рдпрд╛рд╕ рд╣реИрдВ?

рдЕрджреНрдпрддрди

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

рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ, рдпрд╣ рдРрд╕реА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╣реЛрддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ 2 рд╕реЗрдХрдВрдб рдХреЗ рднреАрддрд░ рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рд╡рд╛рд▓реЗ рддрддреНрд╡ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рддреЗ рд╕рдордп, Unitl рд╡рд┐рдзрд┐ 4 рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреА рд╣реИ, рдФрд░ SpinUntil рд╡рд┐рдзрд┐ рд▓рдЧрднрдЧ 200 рдпрд╛ рдЕрдзрд┐рдХ рд▓реЗрддреА рд╣реИред

рдЖрдЗрдП SpinUntil рдХреЛ рддреНрдпрд╛рдЧреЗрдВ рдФрд░ рдкреНрд░рддреАрдХреНрд╖рд╛ рд╡рд┐рдзрд┐ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦреЗрдВред

 public void Wait(Func<bool> condition, TimeSpan timeout, int evaluatedInterval = 500) { Stopwatch sw = Stopwatch.StartNew(); while (sw.Elapsed < timeout) { if (condition()) { return; } Thread.Sleep(evaluatedInterval); } throw new TimeoutException(); } 


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

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


All Articles