Cypress tests are designed solely for end-to-end testing. If this is your first time developing or running end-to-end tests, [Fleet testing documentation](../docs/3-Contributing/2-Testing.md) includes git instructions for test preparation and running tests.
Cypress tests the integration of [entire features](integration/all/app) of the app.
With the roll out of teams, Cypress tests the user interface of each role of a user on the Basic Tier ([Fleet Basic Documentation](integration/basic/README.md)) and Core Tier ([Fleet Core Documentation](integration/basic/README.md)).
As much as possible, build from a user's perspective. Use `.within` cypress command as needed to scope a command within a specific element (e.g. table, nav).
1. By **element tag** using elements (e.g. buttons), we can target text within. Confirm what the user is seeing with target text. If this is not specific enough, add on Role.
2. By **role** using default or explicitly assigned roles of elements. If this is not specific enough, add on element class.
3. By **element class** is least preferred as it does not follow a user's perspective. Occasionally this may be the only option. If that is the case, prioritize using the class name that specifies what the element is doing.