Download - APIs: A Better Alternative to Page Objects
![Page 1: APIs: A Better Alternative to Page Objects](https://reader033.vdocuments.us/reader033/viewer/2022052821/554a1927b4c90507558b53c5/html5/thumbnails/1.jpg)
APIs: A Better Alternative to Page Objects
Eileen XieHead of Quality at PBworks
#sfse 8/23/11
![Page 2: APIs: A Better Alternative to Page Objects](https://reader033.vdocuments.us/reader033/viewer/2022052821/554a1927b4c90507558b53c5/html5/thumbnails/2.jpg)
Page Objects
![Page 3: APIs: A Better Alternative to Page Objects](https://reader033.vdocuments.us/reader033/viewer/2022052821/554a1927b4c90507558b53c5/html5/thumbnails/3.jpg)
What are they trying to solve?
![Page 4: APIs: A Better Alternative to Page Objects](https://reader033.vdocuments.us/reader033/viewer/2022052821/554a1927b4c90507558b53c5/html5/thumbnails/4.jpg)
What are they trying to solve?
• repetition
• maintenance
• readability
![Page 5: APIs: A Better Alternative to Page Objects](https://reader033.vdocuments.us/reader033/viewer/2022052821/554a1927b4c90507558b53c5/html5/thumbnails/5.jpg)
How well do they solve them?
![Page 6: APIs: A Better Alternative to Page Objects](https://reader033.vdocuments.us/reader033/viewer/2022052821/554a1927b4c90507558b53c5/html5/thumbnails/6.jpg)
How well do they solve them?
• repetition: poorly
• maintenance: poorly
• readability: poorly
![Page 7: APIs: A Better Alternative to Page Objects](https://reader033.vdocuments.us/reader033/viewer/2022052821/554a1927b4c90507558b53c5/html5/thumbnails/7.jpg)
Repetition
![Page 8: APIs: A Better Alternative to Page Objects](https://reader033.vdocuments.us/reader033/viewer/2022052821/554a1927b4c90507558b53c5/html5/thumbnails/8.jpg)
Repetition
• still too many steps
• some steps repeated over and overhomePage = HomePage.load();loginPage = homePage.getLoginLink().click();welcomePage = loginPage.login();newTaskPage = welcomePage.getNewTaskLink().click();newTaskPage.getTaskNameField().type(“Learn Selenium”);
![Page 9: APIs: A Better Alternative to Page Objects](https://reader033.vdocuments.us/reader033/viewer/2022052821/554a1927b4c90507558b53c5/html5/thumbnails/9.jpg)
Maintenance
![Page 10: APIs: A Better Alternative to Page Objects](https://reader033.vdocuments.us/reader033/viewer/2022052821/554a1927b4c90507558b53c5/html5/thumbnails/10.jpg)
Maintenance
• huge overhead
• QA needs to maintain and fix
• still dependent on page workflow
• still dependent on page structure/layout
![Page 11: APIs: A Better Alternative to Page Objects](https://reader033.vdocuments.us/reader033/viewer/2022052821/554a1927b4c90507558b53c5/html5/thumbnails/11.jpg)
Readability
![Page 12: APIs: A Better Alternative to Page Objects](https://reader033.vdocuments.us/reader033/viewer/2022052821/554a1927b4c90507558b53c5/html5/thumbnails/12.jpg)
Readability
• see repetition
![Page 13: APIs: A Better Alternative to Page Objects](https://reader033.vdocuments.us/reader033/viewer/2022052821/554a1927b4c90507558b53c5/html5/thumbnails/13.jpg)
What can we do instead?
![Page 14: APIs: A Better Alternative to Page Objects](https://reader033.vdocuments.us/reader033/viewer/2022052821/554a1927b4c90507558b53c5/html5/thumbnails/14.jpg)
What can we do instead?
• APIs!
![Page 15: APIs: A Better Alternative to Page Objects](https://reader033.vdocuments.us/reader033/viewer/2022052821/554a1927b4c90507558b53c5/html5/thumbnails/15.jpg)
APIs
![Page 16: APIs: A Better Alternative to Page Objects](https://reader033.vdocuments.us/reader033/viewer/2022052821/554a1927b4c90507558b53c5/html5/thumbnails/16.jpg)
What do they look like?
![Page 17: APIs: A Better Alternative to Page Objects](https://reader033.vdocuments.us/reader033/viewer/2022052821/554a1927b4c90507558b53c5/html5/thumbnails/17.jpg)
createNetwork();
createNetworkWorkspace();
addNetworkUser();
What do they look like?
![Page 18: APIs: A Better Alternative to Page Objects](https://reader033.vdocuments.us/reader033/viewer/2022052821/554a1927b4c90507558b53c5/html5/thumbnails/18.jpg)
What do they look like under the hood?
![Page 19: APIs: A Better Alternative to Page Objects](https://reader033.vdocuments.us/reader033/viewer/2022052821/554a1927b4c90507558b53c5/html5/thumbnails/19.jpg)
What do they look like under the hood?
function createNetworkFolder(name) {curl(“http://pbworks.com/api_v2/op/CreateNetworkFolder/name/” + name);
}
![Page 20: APIs: A Better Alternative to Page Objects](https://reader033.vdocuments.us/reader033/viewer/2022052821/554a1927b4c90507558b53c5/html5/thumbnails/20.jpg)
What?
• Where’s all the code?
• Why would we do this?
• How do the API calls get tested?
• How do we start?
• Wait a minute...
![Page 21: APIs: A Better Alternative to Page Objects](https://reader033.vdocuments.us/reader033/viewer/2022052821/554a1927b4c90507558b53c5/html5/thumbnails/21.jpg)
Where’s all the code?
![Page 22: APIs: A Better Alternative to Page Objects](https://reader033.vdocuments.us/reader033/viewer/2022052821/554a1927b4c90507558b53c5/html5/thumbnails/22.jpg)
Where’s all the code?
• in the product!
• really.
![Page 23: APIs: A Better Alternative to Page Objects](https://reader033.vdocuments.us/reader033/viewer/2022052821/554a1927b4c90507558b53c5/html5/thumbnails/23.jpg)
Why would we do this?
![Page 24: APIs: A Better Alternative to Page Objects](https://reader033.vdocuments.us/reader033/viewer/2022052821/554a1927b4c90507558b53c5/html5/thumbnails/24.jpg)
Why would we do this?
• less repetition
• makes tests clearer
• maintained by developers
• easier to read
• makes software more testable
• test execution speed
• better than straight SQL insertions
![Page 25: APIs: A Better Alternative to Page Objects](https://reader033.vdocuments.us/reader033/viewer/2022052821/554a1927b4c90507558b53c5/html5/thumbnails/25.jpg)
How do the API calls get tested?
![Page 26: APIs: A Better Alternative to Page Objects](https://reader033.vdocuments.us/reader033/viewer/2022052821/554a1927b4c90507558b53c5/html5/thumbnails/26.jpg)
How do the API calls get tested?
• separate tests!
• one test does the API stuff through the UIdashboardPage.getNewTaskLink().click();newTaskPage.getTaskNameField().type(“Learn Selenium”);newTaskPage.getTaskDueDateField().type(“8/31/11”);
• every other test calls the APIcreateTask();
![Page 27: APIs: A Better Alternative to Page Objects](https://reader033.vdocuments.us/reader033/viewer/2022052821/554a1927b4c90507558b53c5/html5/thumbnails/27.jpg)
How do we start?
![Page 28: APIs: A Better Alternative to Page Objects](https://reader033.vdocuments.us/reader033/viewer/2022052821/554a1927b4c90507558b53c5/html5/thumbnails/28.jpg)
How do we start?
• figure out what the functions are
• talk to your devs!
• start with new functionality
• greenfield projects
![Page 29: APIs: A Better Alternative to Page Objects](https://reader033.vdocuments.us/reader033/viewer/2022052821/554a1927b4c90507558b53c5/html5/thumbnails/29.jpg)
Wait a minute...
![Page 30: APIs: A Better Alternative to Page Objects](https://reader033.vdocuments.us/reader033/viewer/2022052821/554a1927b4c90507558b53c5/html5/thumbnails/30.jpg)
Wait a minute...
• requires a ton of cooperation from devs
• huge upfront cost
• doesn’t actually replace page objects
![Page 31: APIs: A Better Alternative to Page Objects](https://reader033.vdocuments.us/reader033/viewer/2022052821/554a1927b4c90507558b53c5/html5/thumbnails/31.jpg)
Summary
• APIs are awesome
• ...and a pain in the ass to start using
• complimentary to page objects