Teams know that to avoid this they have to automate most of their acceptance tests by using a variety of tools. This includes the target programming language (Perl, Groovy, Java) or natural language as supported by specific testing frameworks, such as Robot Framework or Cucumber. Or perhaps they use table formats as supported by the Framework for Integrated Testing (FIT). The preferred approach is to take a high level of abstraction that works against the business logic of the application. This prevents the presentation layer or other implementation details from hampering the test.