Synchronization is the main concept in automation. Code execution and application need to be in sync to perform the operation. If the application slows down for the below reasons/issues,
Network
Loading
Heavy page
then code keep on checking the particular element and if it doesn’t able to find that element it fails, by throwing the exceptions like NoSuchElement, ElementNotVisible etc..
so, its our job to maintain the synchronization during automation. In Selenium WebDriver, Synchronization can be divided into 2 types.
*Unconditional
*Conditional