Page object model is understood, locators are clear, explicit waits and expected conditions are straightforward.
Java concepts such as classes, objects, inheritance, looping, arrays, lists are all covered.
With the new skills, you can write test automation scripts for a variety of websites.
You are wondering now about the next level of test automation.
There is always a next level so what is it for you?
How do you go to it?
What resource should you use for guidance?
Most available books and courses target the beginner and intermediate test automation levels.
There are not many resources available on advanced test automation skills.
There is one place however, often forgotten, that has everything you need in your quest to more knowledge.
The Selenium source code.
It is extremely helpful not only to learn how to use Selenium but also to read the source code.
Doing this provides many benefits such as:
1. it shows how Selenium classes and methods work
For example, how does Selenium find a web element using the findElement() method?
How does Selenium locate an element by css locator?
2. you can learn how a framework is built
Selenium is a framework.
You can learn many things about building an automation framework from studying how the Selenium framework is built.
3. you can learn what good programming is
Selenium was created by professional developers.
What better source of learning than the code that they wrote?
4. you find out what you dont know yet but should know
For example, by reading the Page Factory code, you will learn about annotations.
And design patterns.
And proxy classes.
You will need all these Java concepts (and more) to make the transition to the next test automation level.
So attach the Selenium source code to the project in Eclipse and start reading.
When do you need these new skills?
Lets say that you want to have in your automation project the ability of taking screenshots automatically when an exception happens in a test script.
You use TestNG as the unit testing framework.
TestNG listeners can help but there is a problem.
You need in the test listener the driver object created in the test class or the base test class.
To get this driver object, you will use reflection and generics.
Another example of using the new skills is creating new locator types.
Selenium provides by default a variety of locator types such as id, class, name, xpath, css.
You will need annotations for this.