1. Every @Test has meaningful name ('validateUserCannotLoginWithWrongCredentialsTest' vs 'badLoginTest')
    Created 1554387173.0
  2. Add JavaDoc for every test with meaningful descriptions and incoming parameters
    Created 1554387096.0
  3. Each assert besides actual and expected result should also have 'message, to be printed in case if the test fails (Assert.assertEquals("How are you, subscriber subscriber?", source.getText(), "OOPS! The test failed because of ...");
    Created 1554387096.0
  4. There's no Thread.Sleep in your code. If there're some of them, replace them with explicit or implicit wait, depending on the case
    Created 1554387096.0
  5. Each test method has logging added (log.info, log.debug, log.error, etc.) and not a System.out.println
    Created 1554387095.0
  6. If you verify few results in 1 test, use rather SoftAssert() than general Assert() for each of them
    Created 1554387089.0
  7. Whenever possible, use Fluent / Chain of Invocations for Page Object (PO) methods instead of invoking PO instance every time ( https://snag.gy/FJlkcR.jpg )
    Created 1554387089.0
  8. Make sure, the screenshot will be taken when your test fails
    Created 1554387088.0
  9. Every @Test has meaningful name ('validateUserCannotLoginWithWrongCredentialsTest' vs 'badLoginTest')
    Created 1554387087.0
  10. There's no Thread.Sleep in your code. If there're some of them, replace them with explicit or implicit wait, depending on the case
    Created 1554386865.0
  11. Each test method has logging added (log.info, log.debug, log.error, etc.) and not a System.out.println
    Created 1554386846.0