How would you design a test automation framework for an end-to-end project, and what components would you include?