protractor training
TRANSCRIPT
![Page 1: Protractor training](https://reader033.vdocuments.mx/reader033/viewer/2022061612/5873bbbf1a28abbc788b573d/html5/thumbnails/1.jpg)
Protractor.jsEnd to End testing
Global Logic
![Page 2: Protractor training](https://reader033.vdocuments.mx/reader033/viewer/2022061612/5873bbbf1a28abbc788b573d/html5/thumbnails/2.jpg)
Lets Learn
Bad Experience
BE
Reflection
R
Theoretical Base
TB
Practice
P
![Page 3: Protractor training](https://reader033.vdocuments.mx/reader033/viewer/2022061612/5873bbbf1a28abbc788b573d/html5/thumbnails/3.jpg)
Fairy Tail about karma
Huge testsNo
Agreements
No Abstractions
“Should”
Copy/Paste
![Page 4: Protractor training](https://reader033.vdocuments.mx/reader033/viewer/2022061612/5873bbbf1a28abbc788b573d/html5/thumbnails/4.jpg)
How it connects
Tests
Jasmine
ProtractorWeb
DriverJS
Explorer
Mozilla
Firefox
ChromeSelenium
InternetNode.js
![Page 5: Protractor training](https://reader033.vdocuments.mx/reader033/viewer/2022061612/5873bbbf1a28abbc788b573d/html5/thumbnails/5.jpg)
Node.js
• Blocks execution
• Runs immediately and return result
• Good for working with data in memory
Synchronous
• Adds new event in the loop
• Runs after all synchronous operations are executed.
• Good for heavy operations like database or filesystem access
Asynchronous
![Page 6: Protractor training](https://reader033.vdocuments.mx/reader033/viewer/2022061612/5873bbbf1a28abbc788b573d/html5/thumbnails/6.jpg)
Promise
asynchrony
try/catch
map
chaining
Abstraction of asynchrony
![Page 7: Protractor training](https://reader033.vdocuments.mx/reader033/viewer/2022061612/5873bbbf1a28abbc788b573d/html5/thumbnails/7.jpg)
???By the way, everything is a Promise
![Page 8: Protractor training](https://reader033.vdocuments.mx/reader033/viewer/2022061612/5873bbbf1a28abbc788b573d/html5/thumbnails/8.jpg)
Why does it look syncronous?
W
C O N T R O LL
F
![Page 9: Protractor training](https://reader033.vdocuments.mx/reader033/viewer/2022061612/5873bbbf1a28abbc788b573d/html5/thumbnails/9.jpg)
Protractor provides...
2
3
4
5
ElemenFinder1
ElementArrayFinder
Waiters for Angular $http and $timeout
Mock modules
Search by css, xpath, repeater, etc
![Page 10: Protractor training](https://reader033.vdocuments.mx/reader033/viewer/2022061612/5873bbbf1a28abbc788b573d/html5/thumbnails/10.jpg)
What E2E testing is about?
![Page 11: Protractor training](https://reader033.vdocuments.mx/reader033/viewer/2022061612/5873bbbf1a28abbc788b573d/html5/thumbnails/11.jpg)
Page Object pattern
2
3
4
5
Hides implementation details1
Maintainable
Reusable
Simplify tests
Extendable
![Page 12: Protractor training](https://reader033.vdocuments.mx/reader033/viewer/2022061612/5873bbbf1a28abbc788b573d/html5/thumbnails/12.jpg)
Keep in mind
If you have WebDriver APIs in your test
methods, You're Doing It Wrong
© Simon Stewart
![Page 13: Protractor training](https://reader033.vdocuments.mx/reader033/viewer/2022061612/5873bbbf1a28abbc788b573d/html5/thumbnails/13.jpg)
Page decomposition
![Page 14: Protractor training](https://reader033.vdocuments.mx/reader033/viewer/2022061612/5873bbbf1a28abbc788b573d/html5/thumbnails/14.jpg)
Page “primitives”
![Page 15: Protractor training](https://reader033.vdocuments.mx/reader033/viewer/2022061612/5873bbbf1a28abbc788b573d/html5/thumbnails/15.jpg)
Section methods
2
3
4
5
field(name)1
hasErrorOn(fieldName)
ensure(state, expected).otherwise(act)
try(action)
errorFor(fieldName)
![Page 16: Protractor training](https://reader033.vdocuments.mx/reader033/viewer/2022061612/5873bbbf1a28abbc788b573d/html5/thumbnails/16.jpg)
OK, but how to organize code?test/e2e├── config├── lib│ ├── section│ │ ├── behavior│ │ └── field│ ├── page.js│ └── section.js├── features│ ├── login│ └── channels├── shared-specs│ ├── toolbars│ └── validators└── support └── login.js
![Page 17: Protractor training](https://reader033.vdocuments.mx/reader033/viewer/2022061612/5873bbbf1a28abbc788b573d/html5/thumbnails/17.jpg)
What we have learned
Simplicity is prerequisite of reliability
© Edsger Dijkstra