Page Object pattern implementation
This commit is contained in:
		| @@ -0,0 +1,93 @@ | ||||
| /** | ||||
|  * The MIT License | ||||
|  * Copyright (c) 2014 Ilkka Seppälä | ||||
|  * | ||||
|  * Permission is hereby granted, free of charge, to any person obtaining a copy | ||||
|  * of this software and associated documentation files (the "Software"), to deal | ||||
|  * in the Software without restriction, including without limitation the rights | ||||
|  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||||
|  * copies of the Software, and to permit persons to whom the Software is | ||||
|  * furnished to do so, subject to the following conditions: | ||||
|  * | ||||
|  * The above copyright notice and this permission notice shall be included in | ||||
|  * all copies or substantial portions of the Software. | ||||
|  * | ||||
|  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||||
|  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||||
|  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||||
|  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||||
|  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||||
|  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | ||||
|  * THE SOFTWARE. | ||||
|  */ | ||||
| package com.iluwatar.pageobject; | ||||
|  | ||||
| import java.awt.Desktop; | ||||
| import java.io.File; | ||||
| import java.io.IOException; | ||||
|  | ||||
| /** | ||||
|  * Page Object pattern wraps an UI component with an application specific API allowing you to | ||||
|  * manipulate the UI elements without having to dig around with the underlying UI technology used. This is | ||||
|  * especially useful for testing as it means your tests will be less brittle. Your tests can concentrate on | ||||
|  * the actual test cases where as the manipulation of the UI can be left to the internals of the page object | ||||
|  * itself. | ||||
|  * | ||||
|  * <p> | ||||
|  * Due to this reason, it has become very popular within the test automation community. | ||||
|  * In particular, it is very common in that the page object is used to represent the html pages of a | ||||
|  * web application that is under test. This web application is referred to as AUT (Application Under Test). | ||||
|  * A web browser automation tool/framework like Selenium for instance, is then used to drive the automating | ||||
|  * of the browser navigation and user actions journeys through this web application. Your test class would | ||||
|  * therefore only be responsible for particular test cases and page object would be used by the test class | ||||
|  * for UI manipulation required for the tests. | ||||
|  * | ||||
|  * <p> | ||||
|  * In this implementation rather than using Selenium, the HtmlUnit library is used as a replacement to | ||||
|  * represent the specific html elements and to drive the browser. The purpose of this example is just to | ||||
|  * provide a simple version that showcase the intentions of this pattern and how this pattern is used | ||||
|  * in order to understand it. | ||||
|  */ | ||||
| public final class App { | ||||
|  | ||||
|   private App() { | ||||
|   } | ||||
|  | ||||
|   /** | ||||
|    * Application entry point | ||||
|    * | ||||
|    * <p> | ||||
|    * The application under development is a web application. Normally you would probably have a | ||||
|    * backend that is probably implemented in an object-oriented language (e.g. Java) that serves | ||||
|    * the frontend which comprises of a series of HTML, CSS, JS etc... | ||||
|    * | ||||
|    * <p> | ||||
|    * For illustrations purposes only, a very simple static html app is used here. This main method | ||||
|    * just fires up this simple web app in a default browser. | ||||
|    * | ||||
|    * @param args arguments | ||||
|    */ | ||||
|   public static void main(String[] args) { | ||||
|  | ||||
|     String currentWorkingDir = System.getProperty("user.dir"); | ||||
|     File applicationFile = new File(currentWorkingDir | ||||
|         + "/page-object/sample-application/src/main/resources/sample-ui/login.html"); | ||||
|  | ||||
|     // should work for unix like OS (mac, unix etc...) | ||||
|     if (Desktop.isDesktopSupported()) { | ||||
|       try { | ||||
|         Desktop.getDesktop().open(applicationFile); | ||||
|       } catch (IOException e) { | ||||
|         e.printStackTrace(); | ||||
|       } | ||||
|     } else { | ||||
|       // java Desktop not supported - above unlikely to work for Windows so try following instead... | ||||
|       try { | ||||
|         Runtime.getRuntime().exec("cmd.exe start " + applicationFile); | ||||
|       } catch (IOException e) { | ||||
|         e.printStackTrace(); | ||||
|       } | ||||
|  | ||||
|     } | ||||
|   } | ||||
| } | ||||
| @@ -0,0 +1,25 @@ | ||||
| ==== | ||||
|     The MIT License | ||||
|     Copyright (c) 2014 Ilkka Seppälä | ||||
|  | ||||
|     Permission is hereby granted, free of charge, to any person obtaining a copy | ||||
|     of this software and associated documentation files (the "Software"), to deal | ||||
|     in the Software without restriction, including without limitation the rights | ||||
|     to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||||
|     copies of the Software, and to permit persons to whom the Software is | ||||
|     furnished to do so, subject to the following conditions: | ||||
|  | ||||
|     The above copyright notice and this permission notice shall be included in | ||||
|     all copies or substantial portions of the Software. | ||||
|  | ||||
|     THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||||
|     IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||||
|     FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||||
|     AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||||
|     LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||||
|     OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | ||||
|     THE SOFTWARE. | ||||
| ==== | ||||
|  | ||||
| username - admin | ||||
| password - password | ||||
| @@ -0,0 +1,60 @@ | ||||
| <!-- | ||||
|  | ||||
|     The MIT License | ||||
|     Copyright (c) 2014 Ilkka Seppälä | ||||
|  | ||||
|     Permission is hereby granted, free of charge, to any person obtaining a copy | ||||
|     of this software and associated documentation files (the "Software"), to deal | ||||
|     in the Software without restriction, including without limitation the rights | ||||
|     to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||||
|     copies of the Software, and to permit persons to whom the Software is | ||||
|     furnished to do so, subject to the following conditions: | ||||
|  | ||||
|     The above copyright notice and this permission notice shall be included in | ||||
|     all copies or substantial portions of the Software. | ||||
|  | ||||
|     THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||||
|     IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||||
|     FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||||
|     AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||||
|     LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||||
|     OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | ||||
|     THE SOFTWARE. | ||||
|  | ||||
| --> | ||||
| <!DOCTYPE html> | ||||
| <html lang="en"> | ||||
| <head> | ||||
|     <meta charset="UTF-8"> | ||||
|     <title>Album List</title> | ||||
|     <link rel="stylesheet" href="css/style.css"> | ||||
|     <link rel="stylesheet" href="css/album-list.css"> | ||||
| </head> | ||||
| <body> | ||||
|     <header> | ||||
|     	<h1>My Album Viewer</h1> | ||||
|     </header> | ||||
|  | ||||
|     <section> | ||||
|     	<div> | ||||
|     		<table> | ||||
|     			<tr> | ||||
|                     <th>Album Title</th> | ||||
|                     <th>Album Year</th> | ||||
|                     <th>Album Rating</th> | ||||
|                     <th>Number of Songs</th> | ||||
|                     <th>Artist</th> | ||||
|                 </tr> | ||||
|     			<tr class="album"> | ||||
|     				<td><a href="album-page.html">21</a></td> | ||||
|                     <td>2011</td> | ||||
|                     <td>A</td> | ||||
|                     <td>11</td> | ||||
|                     <td>Adele</td> | ||||
|     			</tr> | ||||
|     		</table> | ||||
|     	</div> | ||||
|     </section> | ||||
|  | ||||
| </body> | ||||
| </html> | ||||
| @@ -0,0 +1,74 @@ | ||||
| <!-- | ||||
|  | ||||
|     The MIT License | ||||
|     Copyright (c) 2014 Ilkka Seppälä | ||||
|  | ||||
|     Permission is hereby granted, free of charge, to any person obtaining a copy | ||||
|     of this software and associated documentation files (the "Software"), to deal | ||||
|     in the Software without restriction, including without limitation the rights | ||||
|     to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||||
|     copies of the Software, and to permit persons to whom the Software is | ||||
|     furnished to do so, subject to the following conditions: | ||||
|  | ||||
|     The above copyright notice and this permission notice shall be included in | ||||
|     all copies or substantial portions of the Software. | ||||
|  | ||||
|     THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||||
|     IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||||
|     FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||||
|     AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||||
|     LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||||
|     OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | ||||
|     THE SOFTWARE. | ||||
|  | ||||
| --> | ||||
| <!DOCTYPE html> | ||||
| <html lang="en"> | ||||
| <head> | ||||
|     <meta charset="UTF-8"> | ||||
|     <title>Album Page</title> | ||||
|     <link rel="stylesheet" href="css/style.css"> | ||||
| </head> | ||||
| <body> | ||||
|     <header> | ||||
|     	<h1 id="pageHeader">21</h1> | ||||
|     </header> | ||||
|  | ||||
|     <section> | ||||
|     	<div> | ||||
|             <form> | ||||
|         		<table> | ||||
|                     <tr><td>Title:</td><td><input type="text" id="albumTitle" value="21"></td></tr> | ||||
|                     <tr><td>Artist:</td><td><input type="text" id="albumArtist" value="Adele"></td></tr> | ||||
|                     <tr> | ||||
|                         <td>Year:</td> | ||||
|                         <td> | ||||
|                             <select id="albumYear"> | ||||
|                                 <option>2011</option> | ||||
|                                 <option>2012</option>     | ||||
|                                 <option>2013</option> | ||||
|                                 <option>2014</option> | ||||
|                                 <option>2015</option> | ||||
|                                 <option>2016</option> | ||||
|                             </select> | ||||
|                         </td> | ||||
|                     </tr> | ||||
|                     <tr> | ||||
|                         <td>Rating:</td> | ||||
|                         <td><input type="text" id="albumRating" value="A"></td> | ||||
|                     </tr> | ||||
|                     <tr> | ||||
|                         <td>Number of Songs:</td> | ||||
|                         <td><input type="number" id="numberOfSongs" value="12"></td> | ||||
|                     </tr> | ||||
|                     <tr> | ||||
|                         <td><input type="submit" id="cancelButton" value="Cancel"></td> | ||||
|                         <td><input type="submit" id="saveButton" value="Save"></td> | ||||
|                     </tr> | ||||
|                 </table> | ||||
|             </form>     | ||||
|     	</div> | ||||
|     </section> | ||||
|  | ||||
| </body> | ||||
| </html> | ||||
| @@ -0,0 +1,22 @@ | ||||
| table { | ||||
|     font-size: 16px; | ||||
|     border-collapse: collapse; | ||||
| } | ||||
|  | ||||
| th { | ||||
|     background-color: #FFFFFF; | ||||
|     border: 1px solid black; | ||||
|     color: black; | ||||
|     width: 150px; | ||||
|     height: 20px; | ||||
| } | ||||
|  | ||||
| td { | ||||
|     border: 1px solid black; | ||||
|     background-color: white; | ||||
| } | ||||
|  | ||||
| th, td { | ||||
|     padding: 15px; | ||||
|     text-align: left; | ||||
| } | ||||
| @@ -0,0 +1,3 @@ | ||||
| body { | ||||
|     font-family: "Trebuchet MS", Arial, Helvetica, sans-serif; | ||||
| } | ||||
| @@ -0,0 +1,48 @@ | ||||
| <!-- | ||||
|  | ||||
|     The MIT License | ||||
|     Copyright (c) 2014 Ilkka Seppälä | ||||
|  | ||||
|     Permission is hereby granted, free of charge, to any person obtaining a copy | ||||
|     of this software and associated documentation files (the "Software"), to deal | ||||
|     in the Software without restriction, including without limitation the rights | ||||
|     to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||||
|     copies of the Software, and to permit persons to whom the Software is | ||||
|     furnished to do so, subject to the following conditions: | ||||
|  | ||||
|     The above copyright notice and this permission notice shall be included in | ||||
|     all copies or substantial portions of the Software. | ||||
|  | ||||
|     THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||||
|     IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||||
|     FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||||
|     AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||||
|     LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||||
|     OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | ||||
|     THE SOFTWARE. | ||||
|  | ||||
| --> | ||||
| <!DOCTYPE html> | ||||
| <html lang="en"> | ||||
| <head> | ||||
|     <meta charset="UTF-8"> | ||||
|     <title>Login</title> | ||||
|     <link rel="stylesheet" href="css/style.css"> | ||||
| </head> | ||||
| <body> | ||||
| <header> | ||||
|     <h1>Login</h1> | ||||
| </header> | ||||
|  | ||||
| <section> | ||||
|     <form method="post" action="album-list.html"> | ||||
|         <table> | ||||
|             <tr><td>Username:</td><td><input type="text" id="username"></td></tr> | ||||
|             <tr><td>Password:</td><td><input type="password" id="password"></td></tr> | ||||
|             <tr><td><input type="submit" id="loginButton" value="Login"></td></tr> | ||||
|         </table> | ||||
|  | ||||
|     </form> | ||||
| </section> | ||||
| </body> | ||||
| </html> | ||||
		Reference in New Issue
	
	Block a user