###Definitely, not in a single file. We are using Protractor as well and have a large test codebase and I think, we've learned a lot of lessons along the way. What is working for us are the following principles: * use [Page Object pattern][1] to abstract away the elements and blocks of a page building a convenient API for your tests to use * put page objects to under `po` directory, specs to under `specs` organized using inner directories per screen or per feature. Here is our current directory structure: /config /helpers (a collection of helper methods and internal testing utilities) /po /dashboard.po index.js filters.po.js profile.po.js /specs /dashboard /validation defaultView.spec.js /exportToExcel ... Note how we are defining some page objects as "node packages" in directories with `index.js` and "child" page objects. We are also using `requirePO` and `requireHelper` functions to ease importing page objects and helpers inside tests, suggested [here][2]. * follow [Protractor's Style Guide][3] * one test file should cover one particular block of functionality - it should be easy to set the `describe` description in one sentence without using "and" ("and" is usually a sign that you are trying to test two or more different things) * aim to *one assertion per test* - this is not always achievable and does not always make sense, but most of the times this helps to avoid testing too many things in a single test * if you are nesting `describe` blocks into each other - this is a strong sign of over-complicating this particular test. See if you are better off creating separate test files. **"Flat is better than nested."** (from the ["Zen of Python"][4]) * we also had success in using [`jasmine-data-provider`][5] that allows to "multiply" and parameterize tests * enforce Style Guide and other rules with *static code analysis* (we've been using [`ESLint`][6], [`eslint-plugin-jasmine`][7] and [`eslint-plugin-protractor`][8] plugins) * group tests into logical groups with [`suites`][9] [1]: https://martinfowler.com/bliki/PageObject.html [2]: https://stackoverflow.com/q/31491952/771848 [3]: http://www.protractortest.org/#/style-guide [4]: https://www.python.org/dev/peps/pep-0020/ [5]: https://www.npmjs.com/package/jasmine-data-provider [6]: https://eslint.org/ [7]: https://www.npmjs.com/package/eslint-plugin-jasmine [8]: https://github.com/alecxe/eslint-plugin-protractor [9]: https://stackoverflow.com/questions/30331018/suites-vs-specs-protractor