Adding couple notes to Niels’s great answer.
by.repeater()), automatic synchronization between Protractor and Angular that helps to minimize the use of explicit waits here and there; there is a built-in support of BrowserStack and SauceLabs, test parallelization and many more.
- understanding asynchronous test execution in general
- Promises and Control Flow: when to resolve a promise and when not; how to pass promises around from function to function; when to use
deferredand how to manually fulfill/reject a promise; using
- tackling flaky end-to-end tests
- test code design and organization – where and how to keep page objects, how to wrap page objects into each other