Make screenshot provider configureable and refactor to have abstract
provider