From 53fc8b749abd9411d896dad3431ef13b5d45ffa9 Mon Sep 17 00:00:00 2001 From: Colin But Date: Sat, 18 Jun 2016 15:40:03 +0100 Subject: [PATCH 01/14] Page Object pattern implementation --- page-object/pom.xml | 40 ++++ page-object/sample-application/pom.xml | 35 ++++ .../java/com/iluwatar/pageobject/App.java | 93 +++++++++ .../src/main/resources/credentials.txt | 25 +++ .../main/resources/sample-ui/album-list.html | 60 ++++++ .../main/resources/sample-ui/album-page.html | 74 +++++++ .../resources/sample-ui/css/album-list.css | 22 +++ .../main/resources/sample-ui/css/style.css | 3 + .../src/main/resources/sample-ui/login.html | 48 +++++ page-object/test-automation/pom.xml | 48 +++++ .../src/main/java/com/iluwatar/Page.java | 57 ++++++ .../com/iluwatar/pages/AlbumListPage.java | 95 +++++++++ .../java/com/iluwatar/pages/AlbumPage.java | 185 ++++++++++++++++++ .../java/com/iluwatar/pages/LoginPage.java | 120 ++++++++++++ .../pageobject/AlbumListPageTest.java | 45 +++++ .../iluwatar/pageobject/AlbumPageTest.java | 56 ++++++ .../iluwatar/pageobject/LoginPageTest.java | 45 +++++ pom.xml | 3 +- 18 files changed, 1053 insertions(+), 1 deletion(-) create mode 100644 page-object/pom.xml create mode 100644 page-object/sample-application/pom.xml create mode 100644 page-object/sample-application/src/main/java/com/iluwatar/pageobject/App.java create mode 100644 page-object/sample-application/src/main/resources/credentials.txt create mode 100644 page-object/sample-application/src/main/resources/sample-ui/album-list.html create mode 100644 page-object/sample-application/src/main/resources/sample-ui/album-page.html create mode 100644 page-object/sample-application/src/main/resources/sample-ui/css/album-list.css create mode 100644 page-object/sample-application/src/main/resources/sample-ui/css/style.css create mode 100644 page-object/sample-application/src/main/resources/sample-ui/login.html create mode 100644 page-object/test-automation/pom.xml create mode 100644 page-object/test-automation/src/main/java/com/iluwatar/Page.java create mode 100644 page-object/test-automation/src/main/java/com/iluwatar/pages/AlbumListPage.java create mode 100644 page-object/test-automation/src/main/java/com/iluwatar/pages/AlbumPage.java create mode 100644 page-object/test-automation/src/main/java/com/iluwatar/pages/LoginPage.java create mode 100644 page-object/test-automation/src/test/java/com/iluwatar/pageobject/AlbumListPageTest.java create mode 100644 page-object/test-automation/src/test/java/com/iluwatar/pageobject/AlbumPageTest.java create mode 100644 page-object/test-automation/src/test/java/com/iluwatar/pageobject/LoginPageTest.java diff --git a/page-object/pom.xml b/page-object/pom.xml new file mode 100644 index 000000000..00f87ac9d --- /dev/null +++ b/page-object/pom.xml @@ -0,0 +1,40 @@ + + + + 4.0.0 + + com.iluwatar + java-design-patterns + 1.12.0-SNAPSHOT + + page-object + pom + + sample-application + test-automation + + diff --git a/page-object/sample-application/pom.xml b/page-object/sample-application/pom.xml new file mode 100644 index 000000000..74116fdb3 --- /dev/null +++ b/page-object/sample-application/pom.xml @@ -0,0 +1,35 @@ + + + + 4.0.0 + + page-object + com.iluwatar + 1.12.0-SNAPSHOT + + sample-application + diff --git a/page-object/sample-application/src/main/java/com/iluwatar/pageobject/App.java b/page-object/sample-application/src/main/java/com/iluwatar/pageobject/App.java new file mode 100644 index 000000000..155097c73 --- /dev/null +++ b/page-object/sample-application/src/main/java/com/iluwatar/pageobject/App.java @@ -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. + * + *

+ * 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. + * + *

+ * 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 + * + *

+ * 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... + * + *

+ * 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(); + } + + } + } +} diff --git a/page-object/sample-application/src/main/resources/credentials.txt b/page-object/sample-application/src/main/resources/credentials.txt new file mode 100644 index 000000000..6f1bf2fb6 --- /dev/null +++ b/page-object/sample-application/src/main/resources/credentials.txt @@ -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 \ No newline at end of file diff --git a/page-object/sample-application/src/main/resources/sample-ui/album-list.html b/page-object/sample-application/src/main/resources/sample-ui/album-list.html new file mode 100644 index 000000000..e02e65cf3 --- /dev/null +++ b/page-object/sample-application/src/main/resources/sample-ui/album-list.html @@ -0,0 +1,60 @@ + + + + + + Album List + + + + +

+

My Album Viewer

+
+ +
+
+ + + + + + + + + + + + + + + +
Album TitleAlbum YearAlbum RatingNumber of SongsArtist
212011A11Adele
+
+
+ + + \ No newline at end of file diff --git a/page-object/sample-application/src/main/resources/sample-ui/album-page.html b/page-object/sample-application/src/main/resources/sample-ui/album-page.html new file mode 100644 index 000000000..5bf843be2 --- /dev/null +++ b/page-object/sample-application/src/main/resources/sample-ui/album-page.html @@ -0,0 +1,74 @@ + + + + + + Album Page + + + +
+

21

+
+ +
+
+
+ + + + + + + + + + + + + + + + + + + +
Title:
Artist:
Year: + +
Rating:
Number of Songs:
+
+
+
+ + + \ No newline at end of file diff --git a/page-object/sample-application/src/main/resources/sample-ui/css/album-list.css b/page-object/sample-application/src/main/resources/sample-ui/css/album-list.css new file mode 100644 index 000000000..9c828e1a0 --- /dev/null +++ b/page-object/sample-application/src/main/resources/sample-ui/css/album-list.css @@ -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; +} \ No newline at end of file diff --git a/page-object/sample-application/src/main/resources/sample-ui/css/style.css b/page-object/sample-application/src/main/resources/sample-ui/css/style.css new file mode 100644 index 000000000..6efb32df9 --- /dev/null +++ b/page-object/sample-application/src/main/resources/sample-ui/css/style.css @@ -0,0 +1,3 @@ +body { + font-family: "Trebuchet MS", Arial, Helvetica, sans-serif; +} \ No newline at end of file diff --git a/page-object/sample-application/src/main/resources/sample-ui/login.html b/page-object/sample-application/src/main/resources/sample-ui/login.html new file mode 100644 index 000000000..1d7786057 --- /dev/null +++ b/page-object/sample-application/src/main/resources/sample-ui/login.html @@ -0,0 +1,48 @@ + + + + + + Login + + + +
+

Login

+
+ +
+
+ + + + +
Username:
Password:
+ +
+
+ + \ No newline at end of file diff --git a/page-object/test-automation/pom.xml b/page-object/test-automation/pom.xml new file mode 100644 index 000000000..feac74bd9 --- /dev/null +++ b/page-object/test-automation/pom.xml @@ -0,0 +1,48 @@ + + + + 4.0.0 + + page-object + com.iluwatar + 1.12.0-SNAPSHOT + + test-automation + + + junit + junit + test + + + net.sourceforge.htmlunit + htmlunit + 2.22 + + + + diff --git a/page-object/test-automation/src/main/java/com/iluwatar/Page.java b/page-object/test-automation/src/main/java/com/iluwatar/Page.java new file mode 100644 index 000000000..515872efc --- /dev/null +++ b/page-object/test-automation/src/main/java/com/iluwatar/Page.java @@ -0,0 +1,57 @@ +/** + * 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; + +import com.gargoylesoftware.htmlunit.WebClient; + +/** + * Encapsulation for a generic 'Page' + */ +public abstract class Page { + + /** + * Application Under Test path + * This directory location is where html web pages are located + */ + public static final String AUT_PATH = "../sample-application/src/main/resources/sample-ui/"; + + protected WebClient webClient; + + /** + * Constructor + * + * @param webClient {@link WebClient} + */ + public Page(WebClient webClient) { + this.webClient = webClient; + } + + /** + * Checks that the current page is actually the page this page object represents + * + * @return true if so, otherwise false + */ + public abstract boolean isAt(); + + +} diff --git a/page-object/test-automation/src/main/java/com/iluwatar/pages/AlbumListPage.java b/page-object/test-automation/src/main/java/com/iluwatar/pages/AlbumListPage.java new file mode 100644 index 000000000..00edc5688 --- /dev/null +++ b/page-object/test-automation/src/main/java/com/iluwatar/pages/AlbumListPage.java @@ -0,0 +1,95 @@ +/** + * 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.pages; + +import com.gargoylesoftware.htmlunit.WebClient; +import com.gargoylesoftware.htmlunit.html.HtmlAnchor; +import com.gargoylesoftware.htmlunit.html.HtmlPage; +import com.iluwatar.Page; + +import java.io.IOException; +import java.net.MalformedURLException; +import java.util.List; + +/** + * Page Object encapsulating the Album List page (album-list.html) + */ +public class AlbumListPage extends Page { + + private static final String ALBUM_LIST_HTML_FILE = "album-list.html"; + private static final String PAGE_URL = "file:" + AUT_PATH + ALBUM_LIST_HTML_FILE; + + private HtmlPage page; + + private List albumLinks; + + + /** + * Constructor + */ + public AlbumListPage(WebClient webClient) { + super(webClient); + try { + page = this.webClient.getPage(PAGE_URL); + + // uses XPath to find list of html anchor tags with the class album in it + albumLinks = (List) page.getByXPath("//tr[@class='album']//a"); + + } catch (MalformedURLException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + + } + + /** + * {@inheritDoc} + */ + @Override + public boolean isAt() { + return "Album List".equals(page.getTitleText()); + } + + /** + * Selects an album by the given album title + * + * @param albumTitle the title of the album to click + * @return the album page + */ + public AlbumPage selectAlbum(String albumTitle) { + for (HtmlAnchor anchor : albumLinks) { + if (anchor.getTextContent().equals(albumTitle)) { + try { + anchor.click(); + return new AlbumPage(webClient); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + throw new IllegalArgumentException("No links with the album title: " + albumTitle); + } + + +} diff --git a/page-object/test-automation/src/main/java/com/iluwatar/pages/AlbumPage.java b/page-object/test-automation/src/main/java/com/iluwatar/pages/AlbumPage.java new file mode 100644 index 000000000..5f72be8fd --- /dev/null +++ b/page-object/test-automation/src/main/java/com/iluwatar/pages/AlbumPage.java @@ -0,0 +1,185 @@ +/** + * 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.pages; + +import com.gargoylesoftware.htmlunit.WebClient; +import com.gargoylesoftware.htmlunit.html.HtmlNumberInput; +import com.gargoylesoftware.htmlunit.html.HtmlOption; +import com.gargoylesoftware.htmlunit.html.HtmlPage; +import com.gargoylesoftware.htmlunit.html.HtmlSelect; +import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput; +import com.gargoylesoftware.htmlunit.html.HtmlTextInput; +import com.iluwatar.Page; + +import java.io.IOException; +import java.net.MalformedURLException; + +/** + * Page Object encapsulating the Album Page (album-page.html) + */ +public class AlbumPage extends Page { + + private static final String ALBUM_PAGE_HTML_FILE = "album-page.html"; + private static final String PAGE_URL = "file:" + AUT_PATH + ALBUM_PAGE_HTML_FILE; + + private HtmlPage page; + + private HtmlTextInput albumTitleInputTextField; + private HtmlTextInput artistInputTextField; + private HtmlSelect albumYearSelectOption; + private HtmlTextInput albumRatingInputTextField; + private HtmlNumberInput numberOfSongsNumberField; + + private HtmlSubmitInput cancelButton; + private HtmlSubmitInput saveButton; + + /** + * Constructor + */ + public AlbumPage(WebClient webClient) { + super(webClient); + try { + page = this.webClient.getPage(PAGE_URL); + initializeHtmlElements(); + } catch (MalformedURLException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } catch (Exception e) { + e.printStackTrace(); + } + + } + + + private void initializeHtmlElements() { + albumTitleInputTextField = (HtmlTextInput) page.getElementById("albumTitle"); + artistInputTextField = (HtmlTextInput) page.getElementById("albumArtist"); + albumYearSelectOption = (HtmlSelect) page.getElementById("albumYear"); + albumRatingInputTextField = (HtmlTextInput) page.getElementById("albumRating"); + numberOfSongsNumberField = (HtmlNumberInput) page.getElementById("numberOfSongs"); + + cancelButton = (HtmlSubmitInput) page.getElementById("cancelButton"); + saveButton = (HtmlSubmitInput) page.getElementById("saveButton"); + } + + + /** + * {@inheritDoc} + */ + @Override + public boolean isAt() { + return "Album Page".equals(page.getTitleText()); + } + + + /** + * Sets the album title input text field + * + * @param albumTitle the new album title value to set + * @return {@link AlbumPage} + */ + public AlbumPage changeAlbumTitle(String albumTitle) { + albumTitleInputTextField.setText(albumTitle); + return this; + } + + + /** + * Sets the artist input text field + * + * @param artist the new artist value to set + * @return {@link AlbumPage} + */ + public AlbumPage changeArtist(String artist) { + artistInputTextField.setText(artist); + return this; + } + + + /** + * Selects the select's option value based on the year value given + * + * @param year the new year value to set + * @return {@link AlbumPage} + */ + public AlbumPage changeAlbumYear(int year) { + HtmlOption yearOption = albumYearSelectOption.getOptionByValue(Integer.toString(year)); + albumYearSelectOption.setSelectedAttribute(yearOption, true); + return this; + } + + + /** + * Sets the album rating input text field + * + * @param albumRating the new album rating value to set + * @return {@link AlbumPage} + */ + public AlbumPage changeAlbumRating(String albumRating) { + albumRatingInputTextField.setText(albumRating); + return this; + } + + /** + * Sets the number of songs number input field + * + * @param numberOfSongs the new number of songs value to be set + * @return {@link AlbumPage} + */ + public AlbumPage changeNumberOfSongs(int numberOfSongs) { + numberOfSongsNumberField.setText(Integer.toString(numberOfSongs)); + return this; + } + + + /** + * Cancel changes made by clicking the cancel button + * + * @return {@link AlbumListPage} + */ + public AlbumListPage cancelChanges() { + try { + cancelButton.click(); + } catch (IOException e) { + e.printStackTrace(); + } + return new AlbumListPage(webClient); + } + + + /** + * Saves changes made by clicking the save button + * + * @return {@link AlbumPage} + */ + public AlbumPage saveChanges() { + try { + saveButton.click(); + } catch (IOException e) { + e.printStackTrace(); + } + return this; + } + +} diff --git a/page-object/test-automation/src/main/java/com/iluwatar/pages/LoginPage.java b/page-object/test-automation/src/main/java/com/iluwatar/pages/LoginPage.java new file mode 100644 index 000000000..19810f354 --- /dev/null +++ b/page-object/test-automation/src/main/java/com/iluwatar/pages/LoginPage.java @@ -0,0 +1,120 @@ +/** + * 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.pages; + +import com.gargoylesoftware.htmlunit.WebClient; +import com.gargoylesoftware.htmlunit.html.HtmlPage; +import com.gargoylesoftware.htmlunit.html.HtmlPasswordInput; +import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput; +import com.gargoylesoftware.htmlunit.html.HtmlTextInput; +import com.iluwatar.Page; +import java.io.IOException; +import java.net.MalformedURLException; + +/** + * Page Object encapsulating the Login Page (login.html) + */ +public class LoginPage extends Page { + + private static final String LOGIN_PAGE_HTML_FILE = "login.html"; + private static final String PAGE_URL = "file:" + AUT_PATH + LOGIN_PAGE_HTML_FILE; + + private HtmlPage page; + + private HtmlTextInput usernameInputTextField; + private HtmlPasswordInput passwordInputPasswordField; + private HtmlSubmitInput loginButton; + + + /** + * Constructor + * + * @param webClient {@link WebClient} + */ + public LoginPage(WebClient webClient) { + super(webClient); + try { + page = this.webClient.getPage(PAGE_URL); + + usernameInputTextField = (HtmlTextInput) page.getElementById("username"); + passwordInputPasswordField = (HtmlPasswordInput) page.getElementById("password"); + loginButton = (HtmlSubmitInput) page.getElementById("loginButton"); + + } catch (MalformedURLException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + + /** + * {@inheritDoc} + */ + @Override + public boolean isAt() { + return "Login".equals(page.getTitleText()); + } + + + /** + * Enters the username into the username input text field + * + * @param username the username to enter + * @return {@link LoginPage} + */ + public LoginPage enterUsername(String username) { + usernameInputTextField.setText(username); + return this; + } + + + /** + * Enters the password into the password input password field + * + * @param password the password to enter + * @return {@link LoginPage} + */ + public LoginPage enterPassword(String password) { + passwordInputPasswordField.setText(password); + return this; + } + + + /** + * Clicking on the login button to 'login' + * + * @return {@link AlbumListPage} + * - this is the page that user gets navigated to once successfully logged in + */ + public AlbumListPage login() { + try { + loginButton.click(); + } catch (IOException e) { + e.printStackTrace(); + } + return new AlbumListPage(webClient); + } + + +} diff --git a/page-object/test-automation/src/test/java/com/iluwatar/pageobject/AlbumListPageTest.java b/page-object/test-automation/src/test/java/com/iluwatar/pageobject/AlbumListPageTest.java new file mode 100644 index 000000000..3b420e366 --- /dev/null +++ b/page-object/test-automation/src/test/java/com/iluwatar/pageobject/AlbumListPageTest.java @@ -0,0 +1,45 @@ +/** + * 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 com.gargoylesoftware.htmlunit.WebClient; +import com.iluwatar.pages.AlbumListPage; +import com.iluwatar.pages.AlbumPage; +import org.junit.Test; + +import static org.junit.Assert.assertTrue; + + +public class AlbumListPageTest { + + @Test + public void testSelectAlbum() { + AlbumListPage albumListPage = new AlbumListPage(new WebClient()); + + AlbumPage albumPage = albumListPage.selectAlbum("21"); + + assertTrue(albumPage.isAt()); + } + +} diff --git a/page-object/test-automation/src/test/java/com/iluwatar/pageobject/AlbumPageTest.java b/page-object/test-automation/src/test/java/com/iluwatar/pageobject/AlbumPageTest.java new file mode 100644 index 000000000..8ca464165 --- /dev/null +++ b/page-object/test-automation/src/test/java/com/iluwatar/pageobject/AlbumPageTest.java @@ -0,0 +1,56 @@ +/** + * 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 com.gargoylesoftware.htmlunit.WebClient; +import com.iluwatar.pages.AlbumListPage; +import com.iluwatar.pages.AlbumPage; +import org.junit.Test; + +import static org.junit.Assert.assertTrue; + +public class AlbumPageTest { + + private AlbumPage albumPage = new AlbumPage(new WebClient()); + + @Test + public void testSaveAlbum() { + + AlbumPage albumPageAfterChanges = albumPage.changeAlbumTitle("25") + .changeArtist("Adele Laurie Blue Adkins") + .changeAlbumYear(2015) + .changeAlbumRating("B") + .changeNumberOfSongs(20) + .saveChanges(); + + assertTrue(albumPageAfterChanges.isAt()); + + } + + @Test + public void testCancelChanges() { + AlbumListPage albumListPage = albumPage.cancelChanges(); + assertTrue(albumListPage.isAt()); + } + +} diff --git a/page-object/test-automation/src/test/java/com/iluwatar/pageobject/LoginPageTest.java b/page-object/test-automation/src/test/java/com/iluwatar/pageobject/LoginPageTest.java new file mode 100644 index 000000000..322a4b97c --- /dev/null +++ b/page-object/test-automation/src/test/java/com/iluwatar/pageobject/LoginPageTest.java @@ -0,0 +1,45 @@ +/** + * 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 com.gargoylesoftware.htmlunit.WebClient; +import com.iluwatar.pages.AlbumListPage; +import com.iluwatar.pages.LoginPage; +import org.junit.Test; + +import static org.junit.Assert.assertTrue; + +public class LoginPageTest { + + @Test + public void testLogin() { + LoginPage loginPage = new LoginPage(new WebClient()); + + AlbumListPage albumListPage = loginPage.enterUsername("admin") + .enterPassword("password") + .login(); + + assertTrue(albumListPage.isAt()); + } + +} diff --git a/pom.xml b/pom.xml index 0e3318fb6..0e28a8081 100644 --- a/pom.xml +++ b/pom.xml @@ -31,7 +31,7 @@ UTF-8 5.0.1.Final 4.2.4.RELEASE - 1.3.3.RELEASE + 1.3.3.RELEASE 1.9.2.RELEASE 1.4.190 4.12 @@ -126,6 +126,7 @@ semaphore hexagonal abstract-document + page-object From c8f04d2f0d1ea59404eb713785d26e939a572d74 Mon Sep 17 00:00:00 2001 From: Colin But Date: Sat, 18 Jun 2016 19:20:29 +0100 Subject: [PATCH 02/14] added Class Diagram --- page-object/etc/page-object.png | Bin 0 -> 78043 bytes page-object/etc/page-object.ucls | 60 +++++++++++++++++++++++++++++++ 2 files changed, 60 insertions(+) create mode 100644 page-object/etc/page-object.png create mode 100644 page-object/etc/page-object.ucls diff --git a/page-object/etc/page-object.png b/page-object/etc/page-object.png new file mode 100644 index 0000000000000000000000000000000000000000..27b99b4490631740c2fe68c119290435c6db08f0 GIT binary patch literal 78043 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

rOge6I`XBAL3}}erSA|U;!qiat9!h8E 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file From 0282d6663f06816da33b7dd4e919018ab56bf742 Mon Sep 17 00:00:00 2001 From: Colin But Date: Sat, 18 Jun 2016 21:08:15 +0100 Subject: [PATCH 03/14] README --- page-object/README.md | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 page-object/README.md diff --git a/page-object/README.md b/page-object/README.md new file mode 100644 index 000000000..e66e184c3 --- /dev/null +++ b/page-object/README.md @@ -0,0 +1,32 @@ +--- +layout: pattern +title: Page Object +folder: page-object +permalink: /patterns/page-object/ +categories: Testing +tags: +- Testing +- Web Development +- Encapsulation +--- + +## Intent + +Page Object encapsulates the UI, hiding the underlying UI widgetry of an application (commonly a web application) and providing an application-specific API to allow the manipulation of UI components required for tests. In doing so, it allows the test class itself to focus on the test logic instead. + + +![alt text](./etc/page-object.png "Page Object") + + +## Applicability + +Use the Page Object pattern when + +* You are writing automated tests for your web application and you want to separate the UI manipulation required for the tests from the actual test logic. +* Make your tests less brittle, and more readable and robust + +## Credits + +* [Martin Fowler - PageObject](http://martinfowler.com/bliki/PageObject.html) +* [Selenium - Page Objects](https://github.com/SeleniumHQ/selenium/wiki/PageObjects) + From 27e4e9afee10dc6306fcb511bfa30092f02b5222 Mon Sep 17 00:00:00 2001 From: Colin But Date: Tue, 28 Jun 2016 21:53:55 +0100 Subject: [PATCH 04/14] Feedback changes - restructed project structure --- page-object/etc/page-object.ucls | 8 ++-- page-object/pom.xml | 17 +++++-- page-object/sample-application/pom.xml | 35 -------------- .../java/com/iluwatar/pageobject/App.java | 2 +- .../src/main/resources/credentials.txt | 0 .../main/resources/sample-ui/album-list.html | 0 .../main/resources/sample-ui/album-page.html | 0 .../resources/sample-ui/css/album-list.css | 0 .../main/resources/sample-ui/css/style.css | 0 .../src/main/resources/sample-ui/login.html | 0 .../pageobject/AlbumListPageTest.java | 4 +- .../iluwatar/pageobject/AlbumPageTest.java | 4 +- .../iluwatar/pageobject/LoginPageTest.java | 4 +- .../pageobject}/pages/AlbumListPage.java | 3 +- .../iluwatar/pageobject}/pages/AlbumPage.java | 3 +- .../iluwatar/pageobject}/pages/LoginPage.java | 3 +- .../com/iluwatar/pageobject/pages}/Page.java | 4 +- page-object/test-automation/pom.xml | 48 ------------------- 18 files changed, 28 insertions(+), 107 deletions(-) delete mode 100644 page-object/sample-application/pom.xml rename page-object/{sample-application => }/src/main/java/com/iluwatar/pageobject/App.java (97%) rename page-object/{sample-application => }/src/main/resources/credentials.txt (100%) rename page-object/{sample-application => }/src/main/resources/sample-ui/album-list.html (100%) rename page-object/{sample-application => }/src/main/resources/sample-ui/album-page.html (100%) rename page-object/{sample-application => }/src/main/resources/sample-ui/css/album-list.css (100%) rename page-object/{sample-application => }/src/main/resources/sample-ui/css/style.css (100%) rename page-object/{sample-application => }/src/main/resources/sample-ui/login.html (100%) rename page-object/{test-automation => }/src/test/java/com/iluwatar/pageobject/AlbumListPageTest.java (93%) rename page-object/{test-automation => }/src/test/java/com/iluwatar/pageobject/AlbumPageTest.java (94%) rename page-object/{test-automation => }/src/test/java/com/iluwatar/pageobject/LoginPageTest.java (94%) rename page-object/{test-automation/src/main/java/com/iluwatar => src/test/java/com/iluwatar/pageobject}/pages/AlbumListPage.java (98%) rename page-object/{test-automation/src/main/java/com/iluwatar => src/test/java/com/iluwatar/pageobject}/pages/AlbumPage.java (99%) rename page-object/{test-automation/src/main/java/com/iluwatar => src/test/java/com/iluwatar/pageobject}/pages/LoginPage.java (98%) rename page-object/{test-automation/src/main/java/com/iluwatar => src/test/java/com/iluwatar/pageobject/pages}/Page.java (93%) delete mode 100644 page-object/test-automation/pom.xml diff --git a/page-object/etc/page-object.ucls b/page-object/etc/page-object.ucls index 2d6bc0722..2e633af43 100644 --- a/page-object/etc/page-object.ucls +++ b/page-object/etc/page-object.ucls @@ -1,7 +1,7 @@ - - - - 1.12.0-SNAPSHOT page-object - pom - - sample-application - test-automation - + + + junit + junit + test + + + net.sourceforge.htmlunit + htmlunit + 2.22 + + diff --git a/page-object/sample-application/pom.xml b/page-object/sample-application/pom.xml deleted file mode 100644 index 74116fdb3..000000000 --- a/page-object/sample-application/pom.xml +++ /dev/null @@ -1,35 +0,0 @@ - - - - 4.0.0 - - page-object - com.iluwatar - 1.12.0-SNAPSHOT - - sample-application - diff --git a/page-object/sample-application/src/main/java/com/iluwatar/pageobject/App.java b/page-object/src/main/java/com/iluwatar/pageobject/App.java similarity index 97% rename from page-object/sample-application/src/main/java/com/iluwatar/pageobject/App.java rename to page-object/src/main/java/com/iluwatar/pageobject/App.java index 155097c73..67b3f947b 100644 --- a/page-object/sample-application/src/main/java/com/iluwatar/pageobject/App.java +++ b/page-object/src/main/java/com/iluwatar/pageobject/App.java @@ -71,7 +71,7 @@ public final class App { String currentWorkingDir = System.getProperty("user.dir"); File applicationFile = new File(currentWorkingDir - + "/page-object/sample-application/src/main/resources/sample-ui/login.html"); + + "/page-object/src/main/resources/sample-ui/login.html"); // should work for unix like OS (mac, unix etc...) if (Desktop.isDesktopSupported()) { diff --git a/page-object/sample-application/src/main/resources/credentials.txt b/page-object/src/main/resources/credentials.txt similarity index 100% rename from page-object/sample-application/src/main/resources/credentials.txt rename to page-object/src/main/resources/credentials.txt diff --git a/page-object/sample-application/src/main/resources/sample-ui/album-list.html b/page-object/src/main/resources/sample-ui/album-list.html similarity index 100% rename from page-object/sample-application/src/main/resources/sample-ui/album-list.html rename to page-object/src/main/resources/sample-ui/album-list.html diff --git a/page-object/sample-application/src/main/resources/sample-ui/album-page.html b/page-object/src/main/resources/sample-ui/album-page.html similarity index 100% rename from page-object/sample-application/src/main/resources/sample-ui/album-page.html rename to page-object/src/main/resources/sample-ui/album-page.html diff --git a/page-object/sample-application/src/main/resources/sample-ui/css/album-list.css b/page-object/src/main/resources/sample-ui/css/album-list.css similarity index 100% rename from page-object/sample-application/src/main/resources/sample-ui/css/album-list.css rename to page-object/src/main/resources/sample-ui/css/album-list.css diff --git a/page-object/sample-application/src/main/resources/sample-ui/css/style.css b/page-object/src/main/resources/sample-ui/css/style.css similarity index 100% rename from page-object/sample-application/src/main/resources/sample-ui/css/style.css rename to page-object/src/main/resources/sample-ui/css/style.css diff --git a/page-object/sample-application/src/main/resources/sample-ui/login.html b/page-object/src/main/resources/sample-ui/login.html similarity index 100% rename from page-object/sample-application/src/main/resources/sample-ui/login.html rename to page-object/src/main/resources/sample-ui/login.html diff --git a/page-object/test-automation/src/test/java/com/iluwatar/pageobject/AlbumListPageTest.java b/page-object/src/test/java/com/iluwatar/pageobject/AlbumListPageTest.java similarity index 93% rename from page-object/test-automation/src/test/java/com/iluwatar/pageobject/AlbumListPageTest.java rename to page-object/src/test/java/com/iluwatar/pageobject/AlbumListPageTest.java index 3b420e366..5afc05f55 100644 --- a/page-object/test-automation/src/test/java/com/iluwatar/pageobject/AlbumListPageTest.java +++ b/page-object/src/test/java/com/iluwatar/pageobject/AlbumListPageTest.java @@ -24,8 +24,8 @@ package com.iluwatar.pageobject; import com.gargoylesoftware.htmlunit.WebClient; -import com.iluwatar.pages.AlbumListPage; -import com.iluwatar.pages.AlbumPage; +import com.iluwatar.pageobject.pages.AlbumListPage; +import com.iluwatar.pageobject.pages.AlbumPage; import org.junit.Test; import static org.junit.Assert.assertTrue; diff --git a/page-object/test-automation/src/test/java/com/iluwatar/pageobject/AlbumPageTest.java b/page-object/src/test/java/com/iluwatar/pageobject/AlbumPageTest.java similarity index 94% rename from page-object/test-automation/src/test/java/com/iluwatar/pageobject/AlbumPageTest.java rename to page-object/src/test/java/com/iluwatar/pageobject/AlbumPageTest.java index 8ca464165..811ffd02a 100644 --- a/page-object/test-automation/src/test/java/com/iluwatar/pageobject/AlbumPageTest.java +++ b/page-object/src/test/java/com/iluwatar/pageobject/AlbumPageTest.java @@ -23,8 +23,8 @@ package com.iluwatar.pageobject; import com.gargoylesoftware.htmlunit.WebClient; -import com.iluwatar.pages.AlbumListPage; -import com.iluwatar.pages.AlbumPage; +import com.iluwatar.pageobject.pages.AlbumListPage; +import com.iluwatar.pageobject.pages.AlbumPage; import org.junit.Test; import static org.junit.Assert.assertTrue; diff --git a/page-object/test-automation/src/test/java/com/iluwatar/pageobject/LoginPageTest.java b/page-object/src/test/java/com/iluwatar/pageobject/LoginPageTest.java similarity index 94% rename from page-object/test-automation/src/test/java/com/iluwatar/pageobject/LoginPageTest.java rename to page-object/src/test/java/com/iluwatar/pageobject/LoginPageTest.java index 322a4b97c..b9e8e782d 100644 --- a/page-object/test-automation/src/test/java/com/iluwatar/pageobject/LoginPageTest.java +++ b/page-object/src/test/java/com/iluwatar/pageobject/LoginPageTest.java @@ -23,8 +23,8 @@ package com.iluwatar.pageobject; import com.gargoylesoftware.htmlunit.WebClient; -import com.iluwatar.pages.AlbumListPage; -import com.iluwatar.pages.LoginPage; +import com.iluwatar.pageobject.pages.AlbumListPage; +import com.iluwatar.pageobject.pages.LoginPage; import org.junit.Test; import static org.junit.Assert.assertTrue; diff --git a/page-object/test-automation/src/main/java/com/iluwatar/pages/AlbumListPage.java b/page-object/src/test/java/com/iluwatar/pageobject/pages/AlbumListPage.java similarity index 98% rename from page-object/test-automation/src/main/java/com/iluwatar/pages/AlbumListPage.java rename to page-object/src/test/java/com/iluwatar/pageobject/pages/AlbumListPage.java index 00edc5688..7f4e50fb5 100644 --- a/page-object/test-automation/src/main/java/com/iluwatar/pages/AlbumListPage.java +++ b/page-object/src/test/java/com/iluwatar/pageobject/pages/AlbumListPage.java @@ -20,12 +20,11 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ -package com.iluwatar.pages; +package com.iluwatar.pageobject.pages; import com.gargoylesoftware.htmlunit.WebClient; import com.gargoylesoftware.htmlunit.html.HtmlAnchor; import com.gargoylesoftware.htmlunit.html.HtmlPage; -import com.iluwatar.Page; import java.io.IOException; import java.net.MalformedURLException; diff --git a/page-object/test-automation/src/main/java/com/iluwatar/pages/AlbumPage.java b/page-object/src/test/java/com/iluwatar/pageobject/pages/AlbumPage.java similarity index 99% rename from page-object/test-automation/src/main/java/com/iluwatar/pages/AlbumPage.java rename to page-object/src/test/java/com/iluwatar/pageobject/pages/AlbumPage.java index 5f72be8fd..b2df6ef33 100644 --- a/page-object/test-automation/src/main/java/com/iluwatar/pages/AlbumPage.java +++ b/page-object/src/test/java/com/iluwatar/pageobject/pages/AlbumPage.java @@ -20,7 +20,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ -package com.iluwatar.pages; +package com.iluwatar.pageobject.pages; import com.gargoylesoftware.htmlunit.WebClient; import com.gargoylesoftware.htmlunit.html.HtmlNumberInput; @@ -29,7 +29,6 @@ import com.gargoylesoftware.htmlunit.html.HtmlPage; import com.gargoylesoftware.htmlunit.html.HtmlSelect; import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput; import com.gargoylesoftware.htmlunit.html.HtmlTextInput; -import com.iluwatar.Page; import java.io.IOException; import java.net.MalformedURLException; diff --git a/page-object/test-automation/src/main/java/com/iluwatar/pages/LoginPage.java b/page-object/src/test/java/com/iluwatar/pageobject/pages/LoginPage.java similarity index 98% rename from page-object/test-automation/src/main/java/com/iluwatar/pages/LoginPage.java rename to page-object/src/test/java/com/iluwatar/pageobject/pages/LoginPage.java index 19810f354..ac12f720f 100644 --- a/page-object/test-automation/src/main/java/com/iluwatar/pages/LoginPage.java +++ b/page-object/src/test/java/com/iluwatar/pageobject/pages/LoginPage.java @@ -20,14 +20,13 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ -package com.iluwatar.pages; +package com.iluwatar.pageobject.pages; import com.gargoylesoftware.htmlunit.WebClient; import com.gargoylesoftware.htmlunit.html.HtmlPage; import com.gargoylesoftware.htmlunit.html.HtmlPasswordInput; import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput; import com.gargoylesoftware.htmlunit.html.HtmlTextInput; -import com.iluwatar.Page; import java.io.IOException; import java.net.MalformedURLException; diff --git a/page-object/test-automation/src/main/java/com/iluwatar/Page.java b/page-object/src/test/java/com/iluwatar/pageobject/pages/Page.java similarity index 93% rename from page-object/test-automation/src/main/java/com/iluwatar/Page.java rename to page-object/src/test/java/com/iluwatar/pageobject/pages/Page.java index 515872efc..340a72800 100644 --- a/page-object/test-automation/src/main/java/com/iluwatar/Page.java +++ b/page-object/src/test/java/com/iluwatar/pageobject/pages/Page.java @@ -20,7 +20,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ -package com.iluwatar; +package com.iluwatar.pageobject.pages; import com.gargoylesoftware.htmlunit.WebClient; @@ -33,7 +33,7 @@ public abstract class Page { * Application Under Test path * This directory location is where html web pages are located */ - public static final String AUT_PATH = "../sample-application/src/main/resources/sample-ui/"; + public static final String AUT_PATH = "src/main/resources/sample-ui/"; protected WebClient webClient; diff --git a/page-object/test-automation/pom.xml b/page-object/test-automation/pom.xml deleted file mode 100644 index feac74bd9..000000000 --- a/page-object/test-automation/pom.xml +++ /dev/null @@ -1,48 +0,0 @@ - - - - 4.0.0 - - page-object - com.iluwatar - 1.12.0-SNAPSHOT - - test-automation - - - junit - junit - test - - - net.sourceforge.htmlunit - htmlunit - 2.22 - - - - From 8efaf441707d55f442703194568b13111392ed9f Mon Sep 17 00:00:00 2001 From: Colin But Date: Tue, 28 Jun 2016 22:02:03 +0100 Subject: [PATCH 05/14] Feedback changes - sort out dependency --- page-object/pom.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/page-object/pom.xml b/page-object/pom.xml index 537fdb197..47c13bcc5 100644 --- a/page-object/pom.xml +++ b/page-object/pom.xml @@ -41,7 +41,6 @@ net.sourceforge.htmlunit htmlunit - 2.22 From c212ee5cb1df6a8316b3fd778529f8d1e37a7337 Mon Sep 17 00:00:00 2001 From: Colin But Date: Tue, 28 Jun 2016 22:03:57 +0100 Subject: [PATCH 06/14] Feedback changes - fix dependency in pom --- pom.xml | 805 ++++++++++++++++++++++++++++---------------------------- 1 file changed, 407 insertions(+), 398 deletions(-) diff --git a/pom.xml b/pom.xml index 80c7e9cb0..986dc493e 100644 --- a/pom.xml +++ b/pom.xml @@ -17,414 +17,423 @@ 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. ---> - 4.0.0 +--> + + 4.0.0 - com.iluwatar - java-design-patterns - 1.12.0-SNAPSHOT - pom + com.iluwatar + java-design-patterns + 1.12.0-SNAPSHOT + pom - 2014 + 2014 - - UTF-8 - 5.0.1.Final - 4.2.4.RELEASE - 1.3.3.RELEASE - 1.9.2.RELEASE - 1.4.190 - 4.12 - 3.0 - 4.0.0 - 0.7.2.201409121644 - 1.4 - 2.16.1 - 1.2.17 - 19.0 - 1.15.1 - 1.10.19 - 4.12.1 - 4.5.2 - - - abstract-factory - builder - factory-method - prototype - singleton - adapter - bridge - composite - dao - data-mapper - decorator - facade - flyweight - proxy - chain - command - interpreter - iterator - mediator - memento - model-view-presenter - observer - state - strategy - template-method - visitor - double-checked-locking - servant - service-locator - null-object - event-aggregator - callback - execute-around - property - intercepting-filter - producer-consumer - poison-pill - reader-writer-lock - lazy-loading - service-layer - specification - tolerant-reader - model-view-controller - flux - double-dispatch - multiton - resource-acquisition-is-initialization - thread-pool - twin - private-class-data - object-pool - dependency-injection - naked-objects - front-controller - repository - async-method-invocation - monostate - step-builder - business-delegate - half-sync-half-async - layers - message-channel - fluentinterface - reactor - caching - publish-subscribe - delegation - event-driven-architecture - api-gateway - factory-kit - feature-toggle - value-object - monad - mute-idiom - mutex - semaphore - hexagonal - abstract-document - aggregator-microservices - page-object - + + UTF-8 + 5.0.1.Final + 4.2.4.RELEASE + 1.3.3.RELEASE + 1.9.2.RELEASE + 1.4.190 + 4.12 + 3.0 + 4.0.0 + 0.7.2.201409121644 + 1.4 + 2.16.1 + 1.2.17 + 19.0 + 1.15.1 + 1.10.19 + 4.12.1 + 4.5.2 + 2.22 + + + abstract-factory + builder + factory-method + prototype + singleton + adapter + bridge + composite + dao + data-mapper + decorator + facade + flyweight + proxy + chain + command + interpreter + iterator + mediator + memento + model-view-presenter + observer + state + strategy + template-method + visitor + double-checked-locking + servant + service-locator + null-object + event-aggregator + callback + execute-around + property + intercepting-filter + producer-consumer + poison-pill + reader-writer-lock + lazy-loading + service-layer + specification + tolerant-reader + model-view-controller + flux + double-dispatch + multiton + resource-acquisition-is-initialization + thread-pool + twin + private-class-data + object-pool + dependency-injection + naked-objects + front-controller + repository + async-method-invocation + monostate + step-builder + business-delegate + half-sync-half-async + layers + message-channel + fluentinterface + reactor + caching + publish-subscribe + delegation + event-driven-architecture + api-gateway + factory-kit + feature-toggle + value-object + monad + mute-idiom + mutex + semaphore + hexagonal + abstract-document + aggregator-microservices + page-object + - - - - org.hibernate - hibernate-core - ${hibernate.version} - - - org.hibernate - hibernate-entitymanager - ${hibernate.version} - - - org.springframework - spring-test - ${spring.version} - - - org.springframework.boot - spring-boot-dependencies - ${spring-boot.version} - pom - import - - - org.springframework.data - spring-data-jpa - ${spring-data.version} - - - org.springframework - spring-webmvc - ${spring.version} - - - org.springframework.boot - spring-boot-starter-web - ${spring-boot.version} - - - org.apache.httpcomponents - httpclient - ${apache-httpcomponents.version} - - - com.h2database - h2 - ${h2.version} - - - commons-dbcp - commons-dbcp - ${commons-dbcp.version} - - - org.apache.camel - camel-core - ${camel.version} - - - org.apache.camel - camel-stream - ${camel.version} - - - junit - junit - ${junit.version} - test - - - org.mockito - mockito-core - ${mockito.version} - test - - - log4j - log4j - ${log4j.version} - - - com.google.guava - guava - ${guava.version} - - - com.github.stefanbirkner - system-rules - ${systemrules.version} - test - - - de.bechte.junit - junit-hierarchicalcontextrunner - ${hierarchical-junit-runner-version} - test - - - + + + + org.hibernate + hibernate-core + ${hibernate.version} + + + org.hibernate + hibernate-entitymanager + ${hibernate.version} + + + org.springframework + spring-test + ${spring.version} + + + org.springframework.boot + spring-boot-dependencies + ${spring-boot.version} + pom + import + + + org.springframework.data + spring-data-jpa + ${spring-data.version} + + + org.springframework + spring-webmvc + ${spring.version} + + + org.springframework.boot + spring-boot-starter-web + ${spring-boot.version} + + + org.apache.httpcomponents + httpclient + ${apache-httpcomponents.version} + + + com.h2database + h2 + ${h2.version} + + + commons-dbcp + commons-dbcp + ${commons-dbcp.version} + + + org.apache.camel + camel-core + ${camel.version} + + + org.apache.camel + camel-stream + ${camel.version} + + + junit + junit + ${junit.version} + test + + + org.mockito + mockito-core + ${mockito.version} + test + + + log4j + log4j + ${log4j.version} + + + com.google.guava + guava + ${guava.version} + + + com.github.stefanbirkner + system-rules + ${systemrules.version} + test + + + de.bechte.junit + junit-hierarchicalcontextrunner + ${hierarchical-junit-runner-version} + test + + + net.sourceforge.htmlunit + htmlunit + ${htmlunit.version} + test + + + - - - - - - org.eclipse.m2e - lifecycle-mapping - 1.0.0 - - - - - - org.jacoco - - jacoco-maven-plugin - - - [0.6.2,) - - - prepare-agent - - - - - - - - - - - - + + + + + + org.eclipse.m2e + lifecycle-mapping + 1.0.0 + + + + + + org.jacoco + + jacoco-maven-plugin + + + [0.6.2,) + + + prepare-agent + + + + + + + + + + + + - - - - org.apache.maven.plugins - maven-compiler-plugin - ${compiler.version} - - 1.8 - 1.8 - - - - org.eluder.coveralls - coveralls-maven-plugin - ${coveralls.version} - - jb6wYzxkVvjolD6qOWpzWdcWBzYk2fAmF - - - - org.jacoco - jacoco-maven-plugin - ${jacoco.version} - - - - - domainapp/dom/modules/simple/QSimpleObject.class - - - - - prepare-agent - - prepare-agent - - - - - - - - org.apache.maven.plugins - maven-checkstyle-plugin - 2.17 - - - validate - - check - - validate - - checkstyle.xml - checkstyle-suppressions.xml - UTF-8 - true - true - true - - - - - - - org.jacoco - jacoco-maven-plugin - 0.7.5.201505241946 - - - - prepare-agent - - - - report - prepare-package - - report - - - - - - org.apache.maven.plugins - maven-surefire-plugin - 2.18.1 - - - org.apache.maven.surefire - surefire-junit47 - 2.18.1 - - - - -Xmx1024M ${argLine} - - + + - org.apache.maven.plugins - maven-pmd-plugin - 3.6 - - true - 5 - true - - - - - check - - - exclude-pmd.properties - - - + org.apache.maven.plugins + maven-compiler-plugin + ${compiler.version} + + 1.8 + 1.8 + + + + org.eluder.coveralls + coveralls-maven-plugin + ${coveralls.version} + + jb6wYzxkVvjolD6qOWpzWdcWBzYk2fAmF + + + + org.jacoco + jacoco-maven-plugin + ${jacoco.version} + + + + + domainapp/dom/modules/simple/QSimpleObject.class + + + + + prepare-agent + + prepare-agent + + + - - com.mycila - license-maven-plugin - 2.11 - -

com/mycila/maven/plugin/license/templates/MIT.txt
- - Ilkka Seppälä - - true - - - - install-format - install - - format - - - - - - + + + org.apache.maven.plugins + maven-checkstyle-plugin + 2.17 + + + validate + + check + + validate + + checkstyle.xml + checkstyle-suppressions.xml + UTF-8 + true + true + true + + + + - - - - org.apache.maven.plugins - maven-pmd-plugin - 3.6 - - - + + org.jacoco + jacoco-maven-plugin + 0.7.5.201505241946 + + + + prepare-agent + + + + report + prepare-package + + report + + + + + + org.apache.maven.plugins + maven-surefire-plugin + 2.18.1 + + + org.apache.maven.surefire + surefire-junit47 + 2.18.1 + + + + -Xmx1024M ${argLine} + + + + org.apache.maven.plugins + maven-pmd-plugin + 3.6 + + true + 5 + true + + + + + check + + + exclude-pmd.properties + + + + + + + com.mycila + license-maven-plugin + 2.11 + +
com/mycila/maven/plugin/license/templates/MIT.txt
+ + Ilkka Seppälä + + true +
+ + + install-format + install + + format + + + +
+ + + + + + + org.apache.maven.plugins + maven-pmd-plugin + 3.6 + + + From 4eac37c6b50176ec4c430b5250d885f68c10687c Mon Sep 17 00:00:00 2001 From: Colin But Date: Tue, 28 Jun 2016 22:04:39 +0100 Subject: [PATCH 07/14] Feedback changes - removed file --- .../src/main/resources/credentials.txt | 25 ------------------- 1 file changed, 25 deletions(-) delete mode 100644 page-object/src/main/resources/credentials.txt diff --git a/page-object/src/main/resources/credentials.txt b/page-object/src/main/resources/credentials.txt deleted file mode 100644 index 6f1bf2fb6..000000000 --- a/page-object/src/main/resources/credentials.txt +++ /dev/null @@ -1,25 +0,0 @@ -==== - 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 \ No newline at end of file From b1e40d9c925800b06c535e92f8f1c13ebb23d7a3 Mon Sep 17 00:00:00 2001 From: Colin But Date: Sun, 3 Jul 2016 21:12:09 +0100 Subject: [PATCH 08/14] Feedback changes - final and refactored code --- .../pageobject/AlbumListPageTest.java | 12 +++-- .../iluwatar/pageobject/AlbumPageTest.java | 10 +++- .../iluwatar/pageobject/LoginPageTest.java | 15 ++++-- .../pageobject/pages/AlbumListPage.java | 22 +++++---- .../iluwatar/pageobject/pages/AlbumPage.java | 48 ++++++++----------- .../iluwatar/pageobject/pages/LoginPage.java | 27 +++++------ .../com/iluwatar/pageobject/pages/Page.java | 2 +- 7 files changed, 73 insertions(+), 63 deletions(-) diff --git a/page-object/src/test/java/com/iluwatar/pageobject/AlbumListPageTest.java b/page-object/src/test/java/com/iluwatar/pageobject/AlbumListPageTest.java index 5afc05f55..b97410036 100644 --- a/page-object/src/test/java/com/iluwatar/pageobject/AlbumListPageTest.java +++ b/page-object/src/test/java/com/iluwatar/pageobject/AlbumListPageTest.java @@ -26,6 +26,7 @@ package com.iluwatar.pageobject; import com.gargoylesoftware.htmlunit.WebClient; import com.iluwatar.pageobject.pages.AlbumListPage; import com.iluwatar.pageobject.pages.AlbumPage; +import org.junit.Before; import org.junit.Test; import static org.junit.Assert.assertTrue; @@ -33,12 +34,17 @@ import static org.junit.Assert.assertTrue; public class AlbumListPageTest { + private AlbumListPage albumListPage = new AlbumListPage(new WebClient()); + + @Before + public void setUp() { + albumListPage.navigateToPage(); + } + @Test public void testSelectAlbum() { - AlbumListPage albumListPage = new AlbumListPage(new WebClient()); - AlbumPage albumPage = albumListPage.selectAlbum("21"); - + albumPage.navigateToPage(); assertTrue(albumPage.isAt()); } diff --git a/page-object/src/test/java/com/iluwatar/pageobject/AlbumPageTest.java b/page-object/src/test/java/com/iluwatar/pageobject/AlbumPageTest.java index 811ffd02a..01461cc8d 100644 --- a/page-object/src/test/java/com/iluwatar/pageobject/AlbumPageTest.java +++ b/page-object/src/test/java/com/iluwatar/pageobject/AlbumPageTest.java @@ -25,6 +25,7 @@ package com.iluwatar.pageobject; import com.gargoylesoftware.htmlunit.WebClient; import com.iluwatar.pageobject.pages.AlbumListPage; import com.iluwatar.pageobject.pages.AlbumPage; +import org.junit.Before; import org.junit.Test; import static org.junit.Assert.assertTrue; @@ -33,10 +34,16 @@ public class AlbumPageTest { private AlbumPage albumPage = new AlbumPage(new WebClient()); + @Before + public void setUp() { + albumPage.navigateToPage(); + } + @Test public void testSaveAlbum() { - AlbumPage albumPageAfterChanges = albumPage.changeAlbumTitle("25") + AlbumPage albumPageAfterChanges = albumPage + .changeAlbumTitle("25") .changeArtist("Adele Laurie Blue Adkins") .changeAlbumYear(2015) .changeAlbumRating("B") @@ -50,6 +57,7 @@ public class AlbumPageTest { @Test public void testCancelChanges() { AlbumListPage albumListPage = albumPage.cancelChanges(); + albumListPage.navigateToPage(); assertTrue(albumListPage.isAt()); } diff --git a/page-object/src/test/java/com/iluwatar/pageobject/LoginPageTest.java b/page-object/src/test/java/com/iluwatar/pageobject/LoginPageTest.java index b9e8e782d..659df0629 100644 --- a/page-object/src/test/java/com/iluwatar/pageobject/LoginPageTest.java +++ b/page-object/src/test/java/com/iluwatar/pageobject/LoginPageTest.java @@ -25,20 +25,27 @@ package com.iluwatar.pageobject; import com.gargoylesoftware.htmlunit.WebClient; import com.iluwatar.pageobject.pages.AlbumListPage; import com.iluwatar.pageobject.pages.LoginPage; +import org.junit.Before; import org.junit.Test; import static org.junit.Assert.assertTrue; public class LoginPageTest { + private LoginPage loginPage = new LoginPage(new WebClient()); + + @Before + public void setUp() { + loginPage.navigateToPage(); + } + @Test public void testLogin() { - LoginPage loginPage = new LoginPage(new WebClient()); - - AlbumListPage albumListPage = loginPage.enterUsername("admin") + AlbumListPage albumListPage = loginPage + .enterUsername("admin") .enterPassword("password") .login(); - + albumListPage.navigateToPage(); assertTrue(albumListPage.isAt()); } diff --git a/page-object/src/test/java/com/iluwatar/pageobject/pages/AlbumListPage.java b/page-object/src/test/java/com/iluwatar/pageobject/pages/AlbumListPage.java index 7f4e50fb5..fb322ff53 100644 --- a/page-object/src/test/java/com/iluwatar/pageobject/pages/AlbumListPage.java +++ b/page-object/src/test/java/com/iluwatar/pageobject/pages/AlbumListPage.java @@ -27,7 +27,6 @@ import com.gargoylesoftware.htmlunit.html.HtmlAnchor; import com.gargoylesoftware.htmlunit.html.HtmlPage; import java.io.IOException; -import java.net.MalformedURLException; import java.util.List; /** @@ -40,26 +39,27 @@ public class AlbumListPage extends Page { private HtmlPage page; - private List albumLinks; - /** * Constructor */ public AlbumListPage(WebClient webClient) { super(webClient); + } + + + /** + * Navigates to the Album List Page + * + * @return {@link AlbumListPage} + */ + public AlbumListPage navigateToPage() { try { page = this.webClient.getPage(PAGE_URL); - - // uses XPath to find list of html anchor tags with the class album in it - albumLinks = (List) page.getByXPath("//tr[@class='album']//a"); - - } catch (MalformedURLException e) { - e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } - + return this; } /** @@ -77,6 +77,8 @@ public class AlbumListPage extends Page { * @return the album page */ public AlbumPage selectAlbum(String albumTitle) { + // uses XPath to find list of html anchor tags with the class album in it + List albumLinks = (List) page.getByXPath("//tr[@class='album']//a"); for (HtmlAnchor anchor : albumLinks) { if (anchor.getTextContent().equals(albumTitle)) { try { diff --git a/page-object/src/test/java/com/iluwatar/pageobject/pages/AlbumPage.java b/page-object/src/test/java/com/iluwatar/pageobject/pages/AlbumPage.java index b2df6ef33..4dffb93dd 100644 --- a/page-object/src/test/java/com/iluwatar/pageobject/pages/AlbumPage.java +++ b/page-object/src/test/java/com/iluwatar/pageobject/pages/AlbumPage.java @@ -31,7 +31,6 @@ import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput; import com.gargoylesoftware.htmlunit.html.HtmlTextInput; import java.io.IOException; -import java.net.MalformedURLException; /** * Page Object encapsulating the Album Page (album-page.html) @@ -43,43 +42,27 @@ public class AlbumPage extends Page { private HtmlPage page; - private HtmlTextInput albumTitleInputTextField; - private HtmlTextInput artistInputTextField; - private HtmlSelect albumYearSelectOption; - private HtmlTextInput albumRatingInputTextField; - private HtmlNumberInput numberOfSongsNumberField; - - private HtmlSubmitInput cancelButton; - private HtmlSubmitInput saveButton; /** * Constructor */ public AlbumPage(WebClient webClient) { super(webClient); - try { - page = this.webClient.getPage(PAGE_URL); - initializeHtmlElements(); - } catch (MalformedURLException e) { - e.printStackTrace(); - } catch (IOException e) { - e.printStackTrace(); - } catch (Exception e) { - e.printStackTrace(); - } - } - private void initializeHtmlElements() { - albumTitleInputTextField = (HtmlTextInput) page.getElementById("albumTitle"); - artistInputTextField = (HtmlTextInput) page.getElementById("albumArtist"); - albumYearSelectOption = (HtmlSelect) page.getElementById("albumYear"); - albumRatingInputTextField = (HtmlTextInput) page.getElementById("albumRating"); - numberOfSongsNumberField = (HtmlNumberInput) page.getElementById("numberOfSongs"); - - cancelButton = (HtmlSubmitInput) page.getElementById("cancelButton"); - saveButton = (HtmlSubmitInput) page.getElementById("saveButton"); + /** + * Navigates to the album page + * + * @return {@link AlbumPage} + */ + public AlbumPage navigateToPage() { + try { + page = this.webClient.getPage(PAGE_URL); + } catch (IOException e) { + e.printStackTrace(); + } + return this; } @@ -99,6 +82,7 @@ public class AlbumPage extends Page { * @return {@link AlbumPage} */ public AlbumPage changeAlbumTitle(String albumTitle) { + HtmlTextInput albumTitleInputTextField = (HtmlTextInput) page.getElementById("albumTitle"); albumTitleInputTextField.setText(albumTitle); return this; } @@ -111,6 +95,7 @@ public class AlbumPage extends Page { * @return {@link AlbumPage} */ public AlbumPage changeArtist(String artist) { + HtmlTextInput artistInputTextField = (HtmlTextInput) page.getElementById("albumArtist"); artistInputTextField.setText(artist); return this; } @@ -123,6 +108,7 @@ public class AlbumPage extends Page { * @return {@link AlbumPage} */ public AlbumPage changeAlbumYear(int year) { + HtmlSelect albumYearSelectOption = (HtmlSelect) page.getElementById("albumYear"); HtmlOption yearOption = albumYearSelectOption.getOptionByValue(Integer.toString(year)); albumYearSelectOption.setSelectedAttribute(yearOption, true); return this; @@ -136,6 +122,7 @@ public class AlbumPage extends Page { * @return {@link AlbumPage} */ public AlbumPage changeAlbumRating(String albumRating) { + HtmlTextInput albumRatingInputTextField = (HtmlTextInput) page.getElementById("albumRating"); albumRatingInputTextField.setText(albumRating); return this; } @@ -147,6 +134,7 @@ public class AlbumPage extends Page { * @return {@link AlbumPage} */ public AlbumPage changeNumberOfSongs(int numberOfSongs) { + HtmlNumberInput numberOfSongsNumberField = (HtmlNumberInput) page.getElementById("numberOfSongs"); numberOfSongsNumberField.setText(Integer.toString(numberOfSongs)); return this; } @@ -158,6 +146,7 @@ public class AlbumPage extends Page { * @return {@link AlbumListPage} */ public AlbumListPage cancelChanges() { + HtmlSubmitInput cancelButton = (HtmlSubmitInput) page.getElementById("cancelButton"); try { cancelButton.click(); } catch (IOException e) { @@ -173,6 +162,7 @@ public class AlbumPage extends Page { * @return {@link AlbumPage} */ public AlbumPage saveChanges() { + HtmlSubmitInput saveButton = (HtmlSubmitInput) page.getElementById("saveButton"); try { saveButton.click(); } catch (IOException e) { diff --git a/page-object/src/test/java/com/iluwatar/pageobject/pages/LoginPage.java b/page-object/src/test/java/com/iluwatar/pageobject/pages/LoginPage.java index ac12f720f..d4bd0850c 100644 --- a/page-object/src/test/java/com/iluwatar/pageobject/pages/LoginPage.java +++ b/page-object/src/test/java/com/iluwatar/pageobject/pages/LoginPage.java @@ -28,7 +28,6 @@ import com.gargoylesoftware.htmlunit.html.HtmlPasswordInput; import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput; import com.gargoylesoftware.htmlunit.html.HtmlTextInput; import java.io.IOException; -import java.net.MalformedURLException; /** * Page Object encapsulating the Login Page (login.html) @@ -40,11 +39,6 @@ public class LoginPage extends Page { private HtmlPage page; - private HtmlTextInput usernameInputTextField; - private HtmlPasswordInput passwordInputPasswordField; - private HtmlSubmitInput loginButton; - - /** * Constructor * @@ -52,21 +46,22 @@ public class LoginPage extends Page { */ public LoginPage(WebClient webClient) { super(webClient); + } + + /** + * Navigates to the Login page + * + * @return {@link LoginPage} + */ + public LoginPage navigateToPage() { try { page = this.webClient.getPage(PAGE_URL); - - usernameInputTextField = (HtmlTextInput) page.getElementById("username"); - passwordInputPasswordField = (HtmlPasswordInput) page.getElementById("password"); - loginButton = (HtmlSubmitInput) page.getElementById("loginButton"); - - } catch (MalformedURLException e) { - e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } + return this; } - /** * {@inheritDoc} */ @@ -83,6 +78,7 @@ public class LoginPage extends Page { * @return {@link LoginPage} */ public LoginPage enterUsername(String username) { + HtmlTextInput usernameInputTextField = (HtmlTextInput) page.getElementById("username"); usernameInputTextField.setText(username); return this; } @@ -95,6 +91,7 @@ public class LoginPage extends Page { * @return {@link LoginPage} */ public LoginPage enterPassword(String password) { + HtmlPasswordInput passwordInputPasswordField = (HtmlPasswordInput) page.getElementById("password"); passwordInputPasswordField.setText(password); return this; } @@ -107,6 +104,7 @@ public class LoginPage extends Page { * - this is the page that user gets navigated to once successfully logged in */ public AlbumListPage login() { + HtmlSubmitInput loginButton = (HtmlSubmitInput) page.getElementById("loginButton"); try { loginButton.click(); } catch (IOException e) { @@ -115,5 +113,4 @@ public class LoginPage extends Page { return new AlbumListPage(webClient); } - } diff --git a/page-object/src/test/java/com/iluwatar/pageobject/pages/Page.java b/page-object/src/test/java/com/iluwatar/pageobject/pages/Page.java index 340a72800..b0b328e7c 100644 --- a/page-object/src/test/java/com/iluwatar/pageobject/pages/Page.java +++ b/page-object/src/test/java/com/iluwatar/pageobject/pages/Page.java @@ -35,7 +35,7 @@ public abstract class Page { */ public static final String AUT_PATH = "src/main/resources/sample-ui/"; - protected WebClient webClient; + protected final WebClient webClient; /** * Constructor From 88321890c78ccf710eca84a648beb7a33d86f424 Mon Sep 17 00:00:00 2001 From: Colin But Date: Sun, 3 Jul 2016 21:12:48 +0100 Subject: [PATCH 09/14] remove old class diagram --- page-object/etc/page-object.png | Bin 78043 -> 0 bytes page-object/etc/page-object.ucls | 60 ------------------------------- 2 files changed, 60 deletions(-) delete mode 100644 page-object/etc/page-object.png delete mode 100644 page-object/etc/page-object.ucls diff --git a/page-object/etc/page-object.png b/page-object/etc/page-object.png deleted file mode 100644 index 27b99b4490631740c2fe68c119290435c6db08f0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 78043 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

rOge6I`XBAL3}}erSA|U;!qiat9!h8E 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 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file From 4a069ee93a2efed1da6758bf21641833380090e1 Mon Sep 17 00:00:00 2001 From: Colin But Date: Sun, 3 Jul 2016 21:36:03 +0100 Subject: [PATCH 10/14] new class diagrams --- page-object/etc/page-object.png | Bin 0 -> 49696 bytes page-object/etc/page-object.ucls | 10 ++++++++++ 2 files changed, 10 insertions(+) create mode 100644 page-object/etc/page-object.png create mode 100644 page-object/etc/page-object.ucls diff --git a/page-object/etc/page-object.png b/page-object/etc/page-object.png new file mode 100644 index 0000000000000000000000000000000000000000..4240b438efbb2179ff5efc7f1795d4a1b431e580 GIT binary patch literal 49696 zcma&ObzGI})-{ZQD2OO2AfSRGt)z&6h|-~-e_dLJ%F9YtlYR)mo81wd)krKwmCd0)&O4r8Ob6yul3P(*Zgc5;e%Lw|cTt4^vF>3YYY5DKi4Rl+!8-Y_((ZV(_f;= zpWFhQ{$S2iKWL=%tu{_*)30}q}y52Tk?ZNH#zz|AgqTQ6H5TSx4~d%W@95c%>pxw6a@t&l<8M)JxyEh#9ZNij)ET$PU3WGS&6Eu&K_ZcT1>+{33=>TPb5 z^!1LEEy-m<5{On$bL=b)<)<_b?H@VruCG_vn4~99SdhZ2j8#hZbahEd`cD~8P1Uru zNm^RUJ+`8@!|k1bsad*&Bv2cPl9j!49K~k9DFgc}d4Qz^f9?{-?aSzWPdDv~S@q6> zVe9&_SUw{qW$w@rEf*q2DeW^+ABzfWs#-~Lup1A9i_2Pe@C!3WMv11cPhI1Zzmlf) zWzh}~_Lf@Hg>mE2(njNwr-~)7p&B&=t+%bEJ5txjVpE$xQ$&Y^P7a`V8EbTi+7&oV z*Dw0vJo8I$Uq?N)4<5{r7pI^w6BOj#9hbnPqO`TKF&*rzL}-j`Y)sHAT9>kXJKTkl z_qc}=u}>4?vwpKR!?|!lco${qe(u!vQ@ir~)kTF=Lzm!D6g&AV+S=!#?ea$gFY;jf3Kdmtm7 z-(uQFO_=FCpGtcutFqZ)Mjjc>b#Sm~KA!q$b}seG*a0g6oSpZ0f5thE3M{aQ?R&H` z;dc_gn>_Z!ey*MFkUXSPK<*P#C0|#9o36Fh@Aw$CJ}Q3QNmxwn?>DnRznMdeJ#T8g z7tQ!%<{qovSi+EPE_vr82iRDV_}|ROkIhE(op*=Q*hO72$HTjc|9&tEwLSjOR;2Y) z+v2i{dBB;auD#_T6V#B?$-EvbPKmn|3A2x=~$+ zNqQE9j!~a{qRH1&&hZXhd=WqNT%%%VVRvF-Qi6TRP#f=X#C-I6E+gGLe!^8*e=;G{ z-{f3VF|n)Z_ZdwG^Q!8XmzSd=Ng-^is7A@n2JqL*kmn2ZWiFbSC@+l+_|Elb8Hg7U zGwuiLYm^b1=<0q=N;)~1r^w09l;^dls1CRS6Y$I)y%iFt=2Dwha{cukSR`Fs=jVD? z3vdnIaqO2}@Wz&`d4g=)F(c`!5PfBkd(xHEVi>@8kerA_dM6}MI<9zTOF(#A9XYaH zj}v$Ch-!;ui&+Y1p%R{rpY(a19T-_H70yn_+M;=u7YyYK%&Rn>?+_EGmX!_XX{E_=v#d+h`KYol z|DH~Q0Ffb+@cf`D1WO{C)37_a1DRK%AphU{iOt$Xr2G@*IdWnB3J0kQ-rwR&;XG+f zq7JUq^FvwLAIODw)!Fv5G_=)^m^D;;D4n<3&Yxy3^*f(Ahj@80a1&8eU!doAdbi&c zvZtjJg!RU34drcM=aBAn;&3Z8OR>j%D4&mZP30C5;eT($n2Ik5ex$~Fks$2k(RbF- z%eyDpUO}`j>5{rq`1 zOL@F&MpF2@;uMn7eyl@I9SD>iX4T zjyDBxB8~D@3d(pL3bSMqo`wnvdgZIkSQ=XHZ%~@_OR%!C-cAY$3VN`A?gLv`yTP(f^%UZ{lb!QM+~V*TNJy+ zn;qp`Q)<_wG-V_NbzKX?en@~r*++YLHVd78y!O*`N&&on+4+CPwNI)M8?tkO2mH(e{+{HN|oxcIxKQ0pMNByevkdE56H#J>o z_~E_?c#lEJj|9cAg5u_((fv9_7P`d$*E8VPf7n~m)6&jTx3xidDzh7oJ`*LGjyOu^L+i&7WZ0Nl zdBo>ZogD`{_}4|2wev{%0bTyE*V+gV%14EvA^6`kW$kWlI3-E zu_j00(1dR76gQHbmX@3zLdz#&2}%FER)P#^Ir|65vkk%4INmM8wH!6a<^H13%B|}7 zBAo`){L9_S)=R{Hz;gvZPqlAj~Oygep?#j@W;^(LB za>~(McBw@Ax-?NyN&uI1_AK{Xns0HP#zqG(%^V+SNkrm5<6QXV9a?xBmVd(iPeCw@ zl86~}UGA4bus%p9FV_(;?$2H`uUbv>-QNFwV#rEoMC2%0UFWOjxNVp=i2C6aS<~9) zfunZm>PAA#)>y^X6I)YCI4G^n?pR(I&OfnP>^|J;;29oK6N@H4Wi*yv4*!i?_*@Cm zo8DgG2+QMnZPj7pH4PEKyMpf-0+^~-NW&p1i0BS9@^09LWw-WbxaJ|X1&^vu55pqK zPxDzDBy*8;K~jA7!8dQM%ul?2nYz&)`wp_@Ppm(osu0O-sk<2Q$T|J(-WnId{cT#D znzegB-UX@WM7bakWE#mTF!#2#LLZPr1qPHF-Wi(>R5}qz?aBm=av^|oh_0H*?PGg< zWXfzy!=qLY8G<-E18S$stM1&ye;%pbOJS2!jLGne|ZX6Mtk!tcsIFQ;~vr@5ou z1tro-ZuiPiEqZnA!orq@i*R!S)iG@pH#_7XAM5FTCLcJ%U#CIFLlx9BWi@xzpuz(k z@GhZoS@)c0?n14n&H7MJl1{_i;v)HC6d6SCAHKf6yc%&sFI97q2g`ZpLv5FgtRPwr zeoJsJL72fje`j$RY)jCr7?%I=RBUf;-P}AmRjA0g@Abw+yP%hCO3QIHS6Y64aQZ{L zwacfB?WnhE$;?4ko7<+trQd5mT)>&leMn2|aX7s^VvH)ST;XgQDKVlJ+TPf*+S|1q zDYYPDyAH<$;jT1NZs)jpPdI>ix)s+|C33ocr|K7v{fR@2mzPOAA4Q|7M&&IW2w?lS z(Xe~+tb|ZQPw)QLR*&BBgFJ%{DW`9enq!gk9U;2L3*F3iVSW+giBgr0c4gm)PWN?M z_r}eWYv3T>J*(~uNk|Cuu?s7!?lT=`cW#fF#15O?t73nmGI$3)XMYOEPi1GH#@9xz z^eWS*mYYI;N%Na^CkdC&wZ-=Ia1omeHU#7u_GdF6<=yLBq4_J!^^T$*u;{rY3VpD& z>d~w?lnUiRWA=X)z`r4YlKl0n|8vw$b~>YowOD-wPjY7X2 z8oK=xGXDc-Z?yW)40&&FW8;b_JTTl`XH5IaQSrPaD1BpGC2-@fJaHKSZ;p1sDcv!T zuW6fWIPs~ECYi(T%Ewlo2ffe#1|zQ#r<3CMs&6%yr-{Ee^xl)^9D|Bl z7>tE?ZOielGObj0VM$50O3&cn;8#(CH1Y6L7w*~C$Pd5=1S1Y=@g7~frsPIW2B+}- z8#G#!^UF)Yt_(S}3z}|F-d^g9Yi)qzPQ}g@!^k8lFW3K|RDsQ^wt{98;-+!m_Rt7& z7NM{f1+e1_7niPL9jHJQYRPPvz2cicaV@IQxbHRxhfnm&-Ir?R-5K(( z12c1}v5&t8pYE=W#wkrrytdh#i4t&kf@*7V!O(e4o!!xH53=9+^H2OKSIu>GC#K%G z9&C$BV z33IqfMP;!%+@2~KYiedv16m2b&!^VR$pcNa0)Zgh_^*$EjJB zUJK+L-d97Ab0HzzGeKOvI>!H2u-NlOyI{2tQAG6DuLzy`ZEfR$+#ojtgor^0f{b@K ze&w=C*gf%jk>tuSG3oL2H04N+5Kb<|EG6yGLJb209{Ox`?&_8ne?`PFI|X{K2+=V? zc7umY*RY-<;#ZVx!q4%>;@{h*#=5$%&CNwKi>RnK)B6QFX)OH zD#bogYHG?th6xCa>bG8I^h5@^%+0xzpNLo$K%EG)n`~kj%=ozwnW5Yf1{<-VHZnSv z$Dn}LQsn#h1oR$F_*1=|w_>9oa1h z&EG}>p-|e=86iZvx_XRodn2`L%fj1Orhfj1P)t@BXWD_|isbK1o4PAb<1Fk&$8(gt zX;NxM8|T<+zqf{5Tk~)EI`UWGx^Y|=33TJgj{_4@ipSq%1~r|NH7g~)7qZ84Fc?<5 zv8=8bQ$D?^a*6z}klzT?Q}!BAM|CehMAx-ID+=m>E)mDdEHMiLQX6soKA4l*+tk-|Cj)+B@q(yEe9D_`?fiSK3 z_;^aPC%s)=!`0P3><)$ej*|MYVK3ntizmBWD;0_2W|KLziH`a4168UeQR(bRMe$*= z2dkh7xEiJ$Y#6`%PH<6NTJ$J?w%3i67J^CuB{GBRqJ02s*&rn@B=7j zh>X-wBg_W{b8Sb7T2)nAG?jp_`T6(mOU4Y&oSxty^NnpO(bGeNj>nsi><~^)s_LcR zJg_0O0_(6CEHMk@6HuE9BBCli-x4aIR7Ya%a$eZPDl$>K3I&UCA3enr_HsLx5A+53 z!BAz1RIN=^yVtG&ufbpHV1u<6Y<6m#r#?h{z0+vh&=soLrTW>H?+QbJ5r#Q{GB)nX zRJ^b_V4Ip|Uidwuy15WPN)Lh99MBr?p80s?gjSmJtK6Sib-MZ|GSs7J%&iY0ewOn+ z9yFh<$xFWu=QsCv>p~~d;Z$8t03}7&z<|F$ZiVaFbyBzA(?^e7pG8w&_&pzwwdf-? zCL*_CyjG(b)pn*Yyk^`H>zgZ+aGb3opdhNTghCQ2LczeIywThW>}Q>?@OW8KxSAOP zp&Cm6q!)|6H{0lVt}Vmm^W@veG zNH?RLUm(4-sOWOQ`m&A(56${fqT$8^POgTeTTMeUY=@3cu}Q5cNH>1|xC?Sn)4z0b zdI5OMb}feY-CKjGot*)}#s|IW+P@aZDlTqf`IGfc5~p1n$ZI&+?y=R-Fk4h3R5(4D z*RVYKfa(k8pNJdeb#*C7O4`9Xsjl(R@+Tj#n``~KvGF?UhXr-6Chtgcvf|3lDE*i{ zI_PZv2|6E;qOa5$&Zd;r#p$Wk)x}dK%WeJd-W9rbb7E`%w=5KGKYucp+jTfsnbzE8 zVd2Uhig%?<&f+_82PpkLO3T$hO)}(>!x5*Xu&~-;WCW1eR#qV~F@%-;f#s^3SgiyP z*6|E)EODzuZg2Z%*8^8}xLplgkNnA>+3UNNo6}=S9b}eOidqX%q_aLQK}_m@oDrLv|lytsrSgy-C6SHreA+2XqIn>LG<>fYjJs-v+H>_G1wr94LFV=GYPQCRTkgrW-BK^cZh*3-E4^pcaLw_D z0BK(c(S{7Esft6c4@I-Y!~0{O6wTb{GKuI_aHq$1WcrXs6Uy&%M$ zw}~xILPB?|PP>w*Ek_EpeCc+L51QNgRDQ%|>HOL8fB0WF5(DG^CpP#W(Dwh8LIxCi zA?jSLSVGbjjIWk|qWG;fl%Y@aWIOP^SpU0rmHc2%Xlm0xZ?rJANS~AEbf$1(z*6LI zp-XlQ_0DM|U??i3s!k@Mkfjg!J>V3xzbKtTg}k%$jrA{#Eh5|I-lZSL8~{n9Z0HW`<<7!?&eoeylL4vSEi3cxU*3{y<5htS4F5?GNeFpvTH3mSl0GPV zliP6Zzn~LDMiyF|aDUeB+00|xs##{u2s`1K4SFXuHaIce(?N(pjN>$mlJba%AcZIe zn1Gzi_OTsvRNH8Yd8My!g@?zY8>W_n1E*dn9i0h8EH3t5>gi25%Sxif(~UtX3L?_u zhC1@@igNC~y$|59qRaIAv=R&a_L~?;liODE<;8Uq)v;MhIo%0@1t9sPvobJZ2&Yg=D3fSdhW&KKlbm9)9ciclrV^u>|9S+n^TnnwY zLn{sMr#_&$m%2Iq?jXI;nkO9Uyb;*=V;Abs_4D$K2EAgp!}dZWh_$c0tZxv816W`rPYVT)f~fz_j*X6v;QBcK3r*eQeHYVmg{CzRs1X!1 z61O0;WXKex{)W|rMHnvQ_(GcT>({L1z_U5eCqipp#56op(>-qVAtA~I{+o4Ys$y%# zO(}}$GA{kuw==I^+g<*5;z=_Ll5XyhPHWm-)oA+gXXXD$L=PTvY3R^i^@)DB(43mi z){_1#M6SiTBa-}r`yL(?e|LZ_SC@MmFavB@u-m+CI5S0yQ*Co70icONw`fjD13qec z`s9~52FB85_ErHQA-Iac)Q>nhC(61q#jODAS6!h9F@$Juxf9`UR=ZNMY4RpYn z+z+j|Hgk2py7VF8iBfWC+8vjC78EU}7wm9T?&xEe~{W(5zP6;#$ zOaGUm){62wvi*M6{@sx|_efZlT{N`YECPAQ08Jso+^^vREZ@lK%}p0b3G6LyeU{f$#0>JN7r|fftQ- zjJe0j`6V*?TlX2B#Pf<%A>d zNn~i~HgN5qKNoM?30YW7&duHD=B9H3y|Sp6K;MusA{t;ue@^uI|9-*mKHGSH6FNP7CFg^>V+G+*^}h9UT=?6b$`?Kc8^{-nS+*P11aq;kSeqcuDW@9JsucN&AE#BN?SO;SP@1xom*WAg(S<0Oq2Vvrx z&3&sb-Cx@c@EepKC3GxudL&q&)39>ah8&HohyPV+Rk;Ole+xWecud5%*?qLB=aZ7M z2$&Nn0wV+Et%+(8On;!iMv6?fkJhn1vSQcCM{_d6Zo1vukDk*%iB>Mm9Mg4UVk3-+ zO*uE__6e`7c9|15CzDz1H~kb5hvR)ib@g{f<}W||U7m!^U7}a~%gXVOqUOdwB!GV~ zSagZVpa=;Q*>5o$|45f~KFA;mX-$DS&r@PX)i=ts5US(&rSD!@!|PT3t6HNAMrxOs zC7X|d2>^gNpzuI9O#ZVUItQDxtZV^R9OB`hE9|ZC81giEAKiVU`@AL*BJWl>2OHaz zDzPF+x{A5S-oaG^Y3KgRzKsph(fnsm(_d%!l9ZH{4we{BwpQ$JLY*<=HRy=?!fCQOb57yi z=~KD~>CvHzJD?w+bw;Lz)zxCxvzkih3QqIWsQc!l!zN~CyG^u28J_o>_G0*}ROB{7 zenB!svkipDWN`q3wOpMYCw|uGw=LPOp?ru{ij427O#(#<@E|ElDTnM=gYbiNRH=n( zp603wH=}8UyL)K4<21;NcMlrEJU(7cZiZ@5Sm^VcP!K%ua4Ezbb@laoD;(A4e)hin zYkp--5%(!n>NTrwAMAPhzsNj3`E-L9Eze>zC`;XBOO-|-hNCz_hD+@9e5v>=Yx??v zu;tS(1%`Y*&vASCp`~u#%1Q{WbS}{A*Gh7LqX-UB7RN>mwnpz^66v>JW#{C4>}cBq z)E0o8I6hvXP@RU|#r_;KkY`iGzu&*_sqi3s)0f2|e}_@?>0ys_^zrV_v zlzO2d;ZUj<9^QCmMF$G?ky9WP=-;Am4@bXg)0<^!@~SO{+htZRC@d{5_GQS^va)Ut z7nz*LB*b`D^d5Qc&5IAnMKT_38PqR9WzLteDnd-;Oe?bAe(iPZag{hUd}azKM3EVR z;DF|Tmp4xK)~h~1#st8#_^ety1C3PX+;fT@_lh4qVoQIhD-sUT@olt8=ht1(l)5Qy zZwXX>40U!^TOH*I`0=T-l6mim1eC-SJo+s;y3XPf>ZfyUbi5VKXGi1hRd$&sw>LKXx*ivrMpXlQ6r(axtE)Vu5BXH#`J zlT$btw;w*_dge!{kEnMpA9S4`FpGmV<& zfc?zJ-0ZQu{?}~!0Rz|_}DI>@0t~?+*WxU;*iz_hTlAY{M zdFANX0wvofSCMff%d3r9U?D_-3L|1LmYwZMYiKlnxTj-e)EslsTm5q1Jj7llsbbF` zHynRGhHyRf8Jr7Hc;92GA(PQ5zJv_zC9srL0LH5eI0Vi;NFyMoACLpBxErA0?cIX* zC`=A$O&c*}qch;jO7Ducu0BGu(n+NRG1?Z*WtH}rhv(?$hYNroIXO8|t1(>WW0#4o zFy6CXoV)ZXsHW9lG1>JsYS04fK8YdzNs4IZ7es;CNH&^Co%Eu56UAkxA21HZYr)$| zWe`p6tg>iFA^nCwZGim-fH^x=j3^e3ctZ!WBWKpv>F7%JEVmc(2lC_z@QH&)6RH$Q z@mV_?(mawU6el5~4ApXN&ASSOg1yBO@@mvrK^j&cFrDim()45H;m=0NpA;^q%f`#j zex@iG!Zs2#8!3C|z?rhiHO@E@M?6KWOl^Tjs8w#;*4QYr=1gYGlV;SD>gnmJM`nP5 z@d16vk{?Eh;hnr&@D+@;jI==1T2|EMCTdojc=^>QIMfUXYkg>PJr+; z2Fi1>zAdT`KtJC>G|=&p=HE(6W+;t~AdHl!Z9?+5u`aZ->Ul2c)gHa~60CTzS)({@ z95yB%nsA#a1x7~7wuJ3eRE$O>1gU}imIpimC)eFK$w5IMl9Fs*zb4t0|A01B@I%U< z`RV3<644dO&Gr@zwr^}cL)CIE-CaBj8_w7BO-h<>31^v&+m?!b(iYEOmHqrG#%*vt z0^9NK>!8)NawWNEj-*e7^W!hr>>2x0hhTp@;<{G{tN{}!SlGIBa8|`ULTHs?OJ{%E zMTOMFjQ!vS@+F@&wA)#SJT%Pnq%yv>$_EqkC-@De^t&eF`xtyR-sC?{481Dmt z&U}=(uT|Y}>s8|^k&{FgeU1P_1|M0IT zkEvBd_!n~g+8N0XD1cHNU)puEzWqgK)!${@@q4VQ`9+SArUcCw|xZ_%2Iok|?VM=)vrl>zxgGW%XHs1AAWufwN>*>i6%mgJFnU69%#@BN& zM%;PGfFC}5us%txQb>&|F(0>G8MNq1eEHl?@?BzLqMMsrO-&8dm3OSQKF(LWV~v46 zgFrw?AuMCTcpm_7ZFnEWB|}V1yfxR>(%3kmfA8Ks6%~~VhaIt>YZ;dzFQ>Y19qyPs zxoyxMbEAxhz8c2j@9)orKs~S)21yI1(vXaso4b4bSx`$*Ty%WA^bRYF5+PHCxJiD9@jp1^2!mxnzPw&>RMTCf$t1^lmyIX;Jk^d526gu<|ap;Uec-*0imeX-x{~_ z+jK}|F9{3!uJ7|tWLIsZ*lcuk)b;GdF5&1r#y$pwiVH~FRWk1AzAR;{acN%1T|Yki>9nQfNPgGT zWYG{^de?(lk|%GhOD`@4`-Fstliau=@Zr~K-BpaQ=(m-ehN*&U$G_`fMeCm4fBg9I zg9jpmpEJm6J#p2_ZJDa#uJ!)%CTOYTU#fvOzIE%?;odqP&gJ*bP|mUY%*^P@%l8O+ zT@zJ4-R_YV5)#^0PS?!154qLb+dCUL=4gm;>+q26g|6J(+{44enqA4drlzKY%@&rN zoE&+1d5<+5jAz$iC{}}2u2tUNO?KnXwARAC7u3{7bO0%-mv(k^NJ~rSLC#kA+9aPQ zHF+Y|ys=s`9u*lW8Ob`kI#Tj{4-;d93SyDxbpirGW%V zt!V9|K3u@U9;M!y{yp8G0U9x?^bzI!`DZDxz)?TpNWlB#X;m@9vqQJ$JGhK{MHV#E z8J7EV*f=>g0m5`roWnTAZN-&w)Cb4<#Ke2o&Xb##mX_Am)*EID-;oy6La=LjY?ih+ zCI!(e1UFuiaB(?JmrWw$Limx~a(QaA)C(&X)mb5<(@5rWvNHhAo-0?bpa<|B5J)dk zS=iN^55G!AbHaIgzW0(~V`~d65d>u<#vO}2X=Y|-Uby68v9V0nS{T<^VAhy`VpAN* z)o^xp{+;_i_|05vB%6Ng^)iyEpD+k4JW5k@bJx>jdw8GsBCze3gq4)S%F7)g3vBp_ zT*)`+p!^Y+coB4rJed0!ZmY2hM_TmFDd6U9?~eDsXJsun22pQqZF#Ku3jJGJNJ~pI0Ky9fqKtk(DSE`e)~n9eV0O%<#oQs^EG{hka5|7%_-sh1TOH1* z@#Pd1R zqc6aO3wTT4PP#=#lJcE~(VshaE}GK}9|qe5wyOqzasvdyW$M=z^t;TVr}KSpuL2yl zlcPPH(Hpo15aVD=5y9_YXqoiu{{>(VVgr-&HvT0_|Ga{7FW8(2K7 z1jmHQr_P6kFb>cY8%&nYJ>Z3HCI+SPXCU&Y1p@OYVZvY$pYJ^<{PpYCO;S=OmHdlm z+gQ(xAWkWS!|76c^$H;589^EK-9*(Q;{Zxtc;m#00WDXvzRb|Hw0Q{CbTGV5cDS_< zD}+p_C8n{SH%Hj64nt&x$@sppHp=4zJpv&RAko2w9UETRa%O%WqGF|Xt>?RH%ON() znMNR*aYk`0EMUbqf4g78bvQjnb~>MXCI~B&iRm1Md-ba6P`;kNerl)l4Qj|mxY*d} zx0!|uYrXJFii&t)xacbg;0pR*Fs+WeD~q$U9^*|!K81yaaHQb@LBWB6z*+5(vguEx z7-2Y}QH$cc-%~HWu2DGbt)1+yswEuV)y&V&-`?KdV0rrdH;ndRf1llKcpGvrdb@L6 zn!A*KQ9AA^n3Zv`v71|32+COAG&DCawa4iq+`F!zPk)(P z`&psjQu??n|HRr@DfC;6yNu+0C1u6IPfMnzn!AKAantQidU|sU4;ru6*IxpynyCL$ zB&Ii*b_2yO3qHI^BpuFN_k??Bdv!S!EEW7D|N3D{A{dh{k74cLd%pgDg))~;J~gnel# zIZ%!kPaI`6*Idtzdj2^*2t>r_=xB+!r|&7`?&~TIU5-pN?w0sxx6JRix7Zs8Mn+bl zm4SYKCVBs`n2aqoAepA-_whj+^j3J_DP?9nycqsHkeVz5+Ffkd$NKB)PKS$PvoA&N z1U*kp&tPvu>FV8M(s)t~EFo0AP}mYFh@FyuhGH4?tL<%iF2u^u=bRv{f()NM3#KnG z+-2sH$n8`RGCC(}`kuafyAP#j@R=vID=rdgBh&ARzK)$m!W;pad8K9x}-hWaW;J5`H&w9L1f z(lsl}1m!jsh!2#ApF~DB;9j+k=a+7763tL8YKC4V%V>+lo5s*%gBUM;`{hrUjr=WI z8b*hcC!sVYo&>9x;n@o6>ZMa+uv`A~@btuhm4pPr#cgnSb2Vn)y%L#tE;5mO&eM8- zV~W#EePzWsSDkwjYFNxr3H8Tw^JyIsHx?#dD<*l~;IOqV*1;{aGcN~P0Q(x4XM^2n zf6Q>|9R7>t?)A({*aSu-Si~dg|L(p?+MgbfVOx5-dVcjXlL${8=baKc3QQ|`&gY*m zyI?oJvOWY%$YH(Exw2xa8@Bm875H7>oDut){_ zbVb;$=(S5fM{2)x zsg6KpB|ZJR3kVqG>05<3-OJ%>8L4haI`KQgzo@a-Nmw*5Ub+Ox{OD-CN?4yrw2^Qp z^imXgDiDGB1?_psx3@OlwzcyChA4bulb!C;6#QtktSFT5oi;zeoswuGClK3&a?m41 zXIO9aAIa7yl<=2NNJyI}uKYbYO|><$#H2Jw2Ttd`HFiaS^f7J$T7sjg?JcHKh?FSo zxzrVpTQ}TGTZaL*LR&^{O%0?juU7itK)R&|{v2G`FF3=F=?>nYdv}fxYQ4NPG$_b9 z3u&ouQBta>_*}DV`EIV2hjve?2(U@rxpTo}p!ng#&Xg+P<-VC4AYl_-+UzAvB5Vi? zOYMDx?d;+|ft6E;X_X}R{Ij87GTSoLBAS|-Kv+~cA91o~z4$00tK!}D?|z>6Q*=Mi zX^R&0^E6!fPd^XVQy2eBICDan9=EzMnsk)_PC*Fi;a(4=DOM=NJ8Q%^0;cIs%78?T_ThI9T_|Omp z@fNr<+KB$|J16Vvn~j$B4GumAdp|!vRV1d-dw68%^;X=Ap`KqlvH{K)BSy=dk9J*; ze`B%Y$k}E1Be@;voL_I3wliERi5aN1Q^5es|AwZ(y?YVStORnR3iNXNvygecyrQF` z>g($66hs8F7}M`OMD?Rcr#WTBN zkuOCo$NN*Et%;62Lz&*2W?x*ft}&a+WxslC%w^)|2Y{G&JF?%*h>MCg`C?ioKg{@m zOn7Md|JQS*-CwP;8#2;_o9~WA-9q$sbH;e_5T=2YoLmIkW&hJ0q?#{6USMG&BU|Ei zdNA+&TOEsV;q*ih%yg5v#K4S&9$^6$2!vUIa)@EXYee%i<8ZONS5D;=f3q^s($YSD zJXl|UpNUDbFj6tuN%r9iiFC6%BTZvaP0G^T+)9cyYrFikV6geE@TM4o0fIED2%-B? zt|8xmBqgH%l2)-W&>>z{X)2@(<{Z@ncPz_9CpbmWaUu7k6gtV6+U;$L%d?cF{d}+^ z*$hgN$SY_&9sY6em+aRFF}0|d$4 z^VuI+pleEKp}@XE+DI&WeHIkV60_x+X0Vy$D0e6+E0=>`^$Niu8&^+N6&H?@Ds7I+ zru2$s9>o<98Jo}o`vGu$(0<3t#+IL-DMgY1;<<(JSCawG?MI0=%brkfrSU-r1$Xog z7?*aTbxW1w1mY1mukP||DONu9MADgM==^IdQAMf%lm)YqRmgqGTqv9}Tj`A}!Km|v z5XANejA$7M_%x&g=47)5;{%xtm!BB%&?fMhXGC_)|JKlQTeN&ODSFqHA%AO-Z3c!6F(L|}av$j&qP>a3A&aSp9ehU$AljF!ejE5E+Q7^NeH=KFo}Sn4u_-|3 zrdf%BG@g%CX0q?~5iwulc6L$aD3D6z@G>OsFw=x<#Ps2@C1uusEB@!MtOf@@W=IJi-i_8{*wQYc!)w8a%O#d8!D3W zN^^`f6XZdTM~{-MT`AFv5NJLLBy_S)%}+Cs7p->e zeIWWkO=0E{dqi}1*pt*?5w|J@MY%|ulS3P21Y0fj-;@{nJc`pA$w;Y36JovF6 zPDe(Oy-b`ejp;22WTi&S9)m{;&_nrE^l;+Aq<`Z`G5VMq{W2(kGVDdjxU+D)e&smy z1%!f$@3w3^O6Duu1u59Y9v-;UV=q_+P@Q`3W6J#{{lSr6Q~ZE#V{yjk!4s2ycKzQ> z2lMzfdY3sS?hnncgHyjDU|skP-d<-Vj!W3Rhg>NvHWK%OF1lu9USwn7;<6hqG=h4O z-+Cdi-atuqE9ILuKOdjl66ieNo8YK+(cqo}pN?IlSi{DptMZEX==CkaUVq8E!q_31 z(a{NNg2OMjFGCJm?z37N^wyHALUEgkb~|#NtSI*X^rv>rB|YxTeVBU!dhhJJ4fE~q zH;}3v&PvktZu;LBw5jtUCPouc@M`G4NVV$Fw|`gKJp*H!kD@b2h>$Rw{@&Y5Zoybi zj*sWb3O7NN<|%M@VYz`u4TeeUl|iSzOz%Q{TOw^_ZH z4#+r8duxSmZ$qJr02;BCs-Op|5-IR`2tIL>+J4fYfCN3bs(hsbCBvqamkc9LFGJq(xW{O+UsSRe z%;&CCx&K5PvELjn?@^(pqFw{s8WGr8jfK-g4Voseb5JOVy zpzUo?@Tx~0v&!8}JB#mWroVTb&qPweL>v8*mr?mGLB6)2W7%zs@8a5G&OQCPFHU0E z7q=|s0wS(31Cj|GPWjg%cZeh+Au)LK2A`5LE<8LfC^E&VQiSl@5#x{87}Ev8^N#Pi zn3-dk6knB!@eQMH3-|s+iD0|6>Ur9AaC|sjc0V4#?9!r__m_D0owj08T}*jx^yrja z49vHd8LZU#(1q;rDNG47lj?EjJV=qH-_li!usPBdTb$aWL}9S3$A>0AW~#KrnN(Ok zbFpTzDP#AI?Z1J*SctPa zQl3wH6P(I=;<3Et8B(!(c+#E1OK?PC@>9+D=vlp3)f`m_XAx6aC^MW zW*HEmv93N{Bn!Srt&8n$(^$m_o0W7Mh%K#5DYw=6yU`=Ag%Kn0cR!OYe*e0j=6l#P zevVvx1(QleMHJnInUVZ%%7y5w!VcKdPR&hwFsB!Lbeb7~?7`ooVeNsU4qOQ-E%<7y z?Xd-mrc&{Iuk=s8n4gc6tOUFzK^7uLMsS>x+1;KEngEzU;U@~g|Y1puYryK8e5KwqR@Kj;$m zexy3u+CecfeywtHZXdHmEJ3i8yYdIjr~9!j4}RC-FzJtZY%vwhWge&!_#VKx0yG0% zS0JN5YIWG0@s5wz0-o!iKfTNU=K56t`?|z5QW;rDZ(p2v z*sOztodE}m?|~c1e)ULm!+8j4Wh>J7td1iSb%uY#a{`~l@`cSI%hx~^DnizmHiuen za>`a9eq_YNdg%Ud%m5by2fI>@&HUXqM>=3&hu+y5!jlV2=tdsavncXEf}|kJ~l^??W(E_ z26D~FI5KNpFrp7%8yS^B^9y`zgSB9HT}vd^;_bI5E>4&ucWpA1^LD}hZZgt8yD?c8 z>=usG%=l8YJ1;&QOt; zmB;xcl6(%ojoTow5bHN^q*SB3!S;!civ-z>u6}O_v`tbkI(&0 z8NKoS+PPc}==M{kP8@;L96s9_C}F&HfbNY&PQJPu>$FJ|X&-dTk`F z+;0hd{_=^PuON`F@e7`i%TQ!AwQ$&H(jG5tyLA^f?dPu8WOJvQKSXksB;#A}Qz$73 zPBtmFx^Z2yTP<>`Cu#B=r^~OXTeyQ-tDkQnMQ~}>c$}apn3yhR?NuF>P8kGE5Z5K z;K-XXV!#9Bwh$sHHSlYH`ByTS~Kv za(;4hI87Q$EC9N|S{`3-x!K3g)p%p(GAnvt(FHZKET4rXPTystJ9)C7=;OD9H4^Ci z#r}+^?;BUumO;}ey~{Si$BxyFgf|R;M?CHZw2Mvu>VXbeYc5G*T)){^<`q^8Mfx`aD`)TYtGBcxTm7W z+dcPZlAzi8K8yMfTnhfmMEK0X3b$40s;;*$Z9PUK7=lU661L^c`M??pQv+~n_ zeFpTZuA}0QkbBHms}u1plUqNw%9-4e_hCXaFCXvRbQ2Q>pd*e$oB& zhr#BE=5Q9QXDZL{(Ei%+HN+yj#)|WaV6m|wmR#gvXzjfCWqM2?Y%DTwRff4K2>eg? zk?Tf@#Knq8=XJh+;o)}wtlbh@y@$b?+#CBW7E_>EEY$P$3!Y?dbguZ4Kj&E!)OMJ* zvCfFyaOPRK;i&kO*U|R*9M_KoRvt!rj*Gr`hG*${j%HfIMb2@{jaLiEv!Oqy;ZgBg zfT-pb(c#x9`T_;|eB|WIIBS{HauKNK7_yeS%}Gzt9jB^`B?@mt4-d;|fUtni>r@@* zM=wG5QF>fWxCzp9Xb@a{GN3M9M1M-aciX|utxR?n+<6Rkw6lmPT{E+=m>*Ht|98LY zSQRP@iq!t^kenBnj0-lCgoXE))8t<+gYEKRRf(mt<$-0ko5q9e5+_-5V-;Zb)R?@l z-7e9x9M}TyNbB9?<$>v$T&*?jJ8dzf`(Pwn4C6n(J`E(U+=o~7hOY|IxYw+%Q>LT8 zcrNi}5}|dd5nz7+lS}Ol@vAb7zBGJ){VudNqmkOn3;ylc zZi;2Wr|t1)nExMZUmaED)_1FPcXvy7h$5ZRAl(g;(n!aqkw!wg1*Ac`yAcp6r5llM z?n2Lbzw^ECy?2an+&hMUxW^gCy`S~0^;>hzIe&9OAZub>-Vmg9;LU1q%1le!0BW?2 zlUPWi3N3IAM`+Apc&0pm0$Onr5_lZH-gIatG-35LDNSkSojIP%iZBn>T5>Y(Ra8U` z-sJJ|wEEsF$-o*D<{C|mN}3+XvETE(ekFC3y{r!y2*?HSKYq>+M%~qa zcq+Bu4ZX^`nlT-DZH`?G^u z&NYI-F4ux}_Rod`hc}g*`VMXO-@Q`vPIN#b#hI0`2&kJxc>91=31glD1p;}OF;e#OYo+Tz&zZ^+Rh1OBaEanzO7p zJb0U9_r~BzCdZ5}L=dsO+yVS+7ISsBcxkonzqUXd#7n*;Pfg(2t?tf6r>((1k%3gb zZ;Fr>k;$YqA3>t}EqDOB;2{(zvF-J-59 zdB{6KfA6S~PXVSte(dilz})cU03auvdd}xhy{`<92$4E9j|`kZkjTgQczGb9fEFIO z;yl;lywZk-wx_|13VBfScSlxkbTS?L-S@%U=O89*?;#Uw01_+0#H^{655U_)#y~Mp zx+gxfDI0(Gz2=Q_WuvB!EzN9cq3ziPt)Y|Os?++(CXI5$8cYY0J3FOCnBibuh`9>T zRY5nJAVCCVUsTzo(pCo_9Kh+eqZyElV+D7|E$|DSf$^irz^hu6^gqOGQl3?EBKM*BC2`0jV)HrXsY-a6D!a@JA&j)M34! zsU(oAeymn!apx7J(4KeqbProDEohm;Ym{e5f3?Om*@+h6 z%&ek*Y!d5~;R#v;flG^fyTH#8jrL$4H)r;Tt zla*%Pm>3PwXQ_94YH;V1;9axuj6A$+kfJd>B5$g#kb=eT<0S;14zN;K>t8|pPa+4O zG%b&OzHut?Ct4wTtNxkk=>qy@&_c?<@rHjNS|W_I>%~BC0o*<>?#@)@id~5`QpRlt z2es0b_`y71=IA+?;bd z!q~hF_F7JF8U7#kYgIe*+JTHJ zY2ZCV0dKQ4%ZOkSCg3E-p$-y5fT26$WH<_@I8U(nMA^-bOq_WY-b}n(`rr))M8_BTk{56NK-8#( zMW1=FG^8g7WzQ=mRo!f?-Vtm-7Z){IFJBtcn#AIOgq;~-cq4#R9evw{6GIG7!_PV; z*E$;qA6R}DrxJ~ZqbD`|JCCBSYj9yF0+{KenCVfAt;`t^{DAnYx&Vr7+|BKa0Z9j0 zu(iriZqR|8uj7r;zaP>O{Kbsn*}}`E!E1MAX_@Ep(j7(vqk_dZL=S;n=nFDPoZlB) zING8H(K^hEt0G++auj`TvPt3+)bJ95xp}JlJz}26K9~J3fTQB#q)G$w#%zu^%FUdA zw2QiEwSBa$&lC4hzXjx5XG(ST=_Y3@mM_t2C3KAq((p5u{E(#2>vWICJefYenlQ39iSxI!r;nfXYh zUAss~dlYYA+@Rl&iq=riP0RKJ@5WO#V*^>-1z9fx>f`un95K)&MgF2OQl1Q8b#TbX zDLy}-bznk7CEZzGetUmM$?LH(3>Uru5DmlRP_H0C!a`}GVzjb1urY^CipUsAd3N}) zrXGdQ*jSw3dE+g}wwV$+T|+T2Bt8sZsB07^IF-;UFj#|hk|hN&9=_!8THEqz1=UCG z{(``j0c>kOE&+xldmX5Yx5vkQc7yqX*1{BbJ_paijR+fJ@o#bcN_GZ z6v}Yk{Yfl&bx5HETRep^>~Hy=Vs2XZ&+r6{E!^l)lO})`HD@T$J!$NpnC?B<-F8`05R#EK8~3;ubS`nzDO1s(gD^Iqdte*^X(iOx!%M(^ ztHcVrM`p@eCV4tSC-h7T&+k=TC^q;NE&WBkO+*?E%|6qk3%6%B527nAk6{Fd8t~{^J%u zALkv-vvivopyQ;B(Z+I_{cHspsp5|Z85v%ualdf{u^S@*CL_Nj&%^^k9A;NLB}0hgS*QD|rMhL1BC>H@@RFcZ&ImZj{+zfrQ8M$Zlz}(l#2uP_1 z(avan5D^efrE!9x6!f&sfbGQCcZ67eMWL*Y(OOA}+t?7w(Y&D!`cNKpcVwV87Qo43 zy9h!OfGb8uh-Q8J+f;vl`_fX}E0F8)y;VOhpn@Kx`u1ez{op0lQpV~z=#Om)cYYqb z5(ss0w(qTrs&)Dp+Kc8sN@EB2^!JbDq%VHFONq_$sZ4MC>h$S$*4k1pD`~<4w$Z}w zT;D$;P(&D(0hAB4+$<-V_{1S)J(tsGfdl13|^82JghsAcY zib*PP#o-VWGcLLhCivyR(H1L^maMH!FPJJR)q?<8S^=(B^AVcxA$aug!-VTr@8f|& z*{|a?kOF5VkS#f6E(1@CU#zQi0GcYj<6q{qNGfp_A7MmVO4XE<$7uC4zuCz>SP%%+ zEbvm26p!3nYAJJ$Dk)h7c}2wz7l+22KfrQPK2f4L_{KE``UgS#J6?jRjaB*w(>ntN zZNR`2ivsWM(Q*;$n=;94RWPEI92x`Kow|voPsKXXOTZYJjy< z5*A7PN=}$`wBJ2bIYAqp{4TS_{&C62xjDQE@^!kbWO{mf#+Uv?eF(}YF~Q*>>^%EL z2tf5j3ZTn(#71rwG4l5a#E^b%O^QBNh0jZuY2`A^0 z-!^;hD@>NL03PmFcl-9aEXY$h!%ew6n^aK znKn83%4oeW+M=nc$$7^ViD~a^IsUbqAO%G`ampb*X%yCMoh|=szg0*G{6rcG&g)=H zLrUu>*7kiAV^m{tPg2F~PD1AEnWoDciXTzW+#;E(K5oJ%;_E8Y32`o8Ug;4%gZUu3 z9q!}PHE&v!4>u5Oc_R3SkeHbFgj4Qp@g~E-iy_Fr_AbOf9xH!V$A_j76)%eC2xHouN3?$ zN{8vbJZ_aMbS|_~8*cGwd*`a5^rg2Y7r@v<~Xb#>QVE%JPGpd&QI zkcGnf2{-YYmbP%l^t%bP0n~ehlry4Nk#TJkM|-Ij^~q@#3fZ z+s3nPlgzlI)V4PKq0-Wu_O346HNK~_(QUbNeVd5D>j1|h$!|ON^oH9qMpaF%ccB5> zz{BigdirVgm>|ghArop_1}UM$yyEoS#I)>=YvW})@9T9f0uIe8M?fd@0M6QmJ(NPN5 zB`BABO$DG4MO!OnbFEviwb_2Dc|cjYTC;ZdE1Rgt5)#+TsW$gta&QDBT!RL_i(`AI zLu~b_$b0oU7kqXl;qwI7 zltieQAiwrBkT{=R%5eJQd)z_$_PS4_Ff1`P;D^{}jKYNZ2}B6UW?0fS6zkwc8(%QJ zPRPjkbc6BgWba$R^?CFsT|zkPt?8lBuV23`F2V}=)3NFBhTwugGWfI~xJ;rQPRfz1 zedH0-F5~O^4BQ|+%Cs%#G+*|9bTV3K>3(a1g;6rBYi^FD!sZS}t7KPh9Eu^tux$)!&Balo*rxdd{__z&K4=A2TvO1c=)4r@2eD1{-HjD*nfNt&YD)0c*Lg#T^R*z zo|hk5J-xMr}8}&cjra=7))|jjttU`#p$=EjRTz zT(EL=gNmo8>rqiWH-{@dozU=;T5mT;X~3GfdBU!aV<*#RxA<&|5!zHbeH{gqzJ0Ln zrAgMbSO{MnF|R_%21ckKLm@8_kqZgYuJhpIhqQQpt-W-pkxh?+>Lm*xM>MG+F_}uq zf;wVG>?CmEeFoNlgKL@1`9Zx4v)B4d(E4Qa_AU3d1%Iv|#}2dipZWgq4U<6}J2twO z-i~4v+|ZIl0f;bRfdUZ}iWm))(oi_yqc@m{|HF@=@x<8iXf!mzILW#?K?YT>ajvXu zS~N#E+3R0Gkxk2n-e*IEdGY%ncFvktfno3yW%tiQkFmg9L!{z^k@>HWVM+1Ckj*FY zx=TkpuC>5GCP`m;(eRR2;d^zGw}TsNN?+#M90TN8X$tEbo35 z`l7nNlldX>b7x~0y{Lm{tt;o8E6NcwbYQa#l_jYob;V}LC3qtW3NN6crGAmzSzWNT zEj%*~bsAE;|Jrtk{PynW{ax6`{rCH{9wGAbceAq<-+k{tc&9B54w7umjC6kcX0$&C zDdWikmFOMm5Rs6NDH!CT1_vYbRGn5Yvgf7cYt?|BT4bnDYnR2`I3t8^wU9|lfiKXuG z))pCqHE>_Td4{hKN#q7t+gk68`cVsZj@G?%)|Ii=Ibw&a_+bS->)K~#K9(|)W$4W*0UbbK~S1y z4C?bYh7tQm_ZXjjwS&hEe^OovICFONO=L-Zh z3h8qkZU@~O`YEq1EN(#@mjC_LC90cq&G!mQ(d>>ZBOUrM7A;6KQs!F}F;k3G9i__~O%lFQS_}XPG!%g6Y-t|ePqKpUV z?~ee$iRR|47#z~mEhqWeBLcyn{9*LK%PzHWqf zdTO>%#Zk<@Fq$r3uFvwq?b9P(?;H2C)7?yf+x!`F+rhpoX@Gc>-h>DZ2}xt1dSH+5i89G?&e4&Zgf#|fN+A4qi>Qxc zx2buSwFJHINaa^nH>sUE0>GUM-Z2AGfg_`z-%zvfVR48CY2MABmgl^d3dcz?YqfXbZ`Ie|T)X+(AM4xiaBGe-)I|cpH zp;Uez9OPUa^T-&U?fH$QeNPDeGh+rUX)S9cA5)()PaL)yi3LTEVKbwuiueO)^lEAj zvL?Cs*OV!UP3y`0lo?Cju-jcA6cZ+9`Vr^&{Jhf@GCMF{~_7KBsCCAxGIP zH345dPpghkPfhVE+coabJJku1@rd9Of&tmCQV2WsyVN<;Vq#$Lb8N~UJAUXP(1t)R(^2%l-ki0vO!Ts!A< za$HF^!^baQ*VWIa*{k4nCJ_&}5WNJ@q~l#STM=oL%NCvsw_r`+N@L~#Ze~Ojd5laB$-716wt8XbF~tEbGO%i zL+{U1k_8SCl&$gOh+V{}>{a^P(^4hvKFo|DFoo*so&;mb{=yIG$4Qb=@Zq7itYNq4 z4(+hAie*%!{DBdOrj8s?s&rRPvVl&5o${sde)`K7wQS;shPSmiNrR6VyEfhD>(*yg zOzxB@<*?V_QZ(It?i$47&Fp6}I>?T@8Gd6d!6JA_S=oq4z0qgTmuHxSS|YmfYxNsa zenYOoFruw(Sr&Q;DnGj!hQ%G5YqbUZ$+n5_T7O9DYYbAtAGhc4Pj$n@E79H4eMV7#8Z!3MAwR)>#Q|-WeL2 zpe`O9qS6+RwczIBkr6e;q(f_&cnpyWVf}$V@X74_^pZ`Y(?>M(Q)IvHjPge|M9R@O5}(Oz4GQ7IZ|j={t(@E?B^-@qNU)yTxXyoAc5I)!*dJ5x0O*0w?iGR)8NV+8n6r3? zT@m=m->7riN7H5YTp6H;ks**x5GLi9w)-jLEo!P{uz$;D*0<@8fl-qB`o{57Gw?J7 z0l2*;0Cd2}Tl!`|5;ZLuwZS`}uzyW%$=UFjDtxBGcUdfF+f ze=fObBY|5ooQIQ*0F0=3BZNq5e>RfGAK*02s-FhrI1@WrHOkfeL{m_!H za`pbIxI}~b8<9F9faCb`|A*5#0hHTMvR0p4uCw})#8^6dn0n%vT3Mtut$nyPE%|_& z{-{Hqh(>B&Ub!zr;{^(&)@EjC$;r;_e0(NW6X(>GZt7J~i;Y@OpFc0vYpSTd!o}qQ zF1ym_ZXcllnEa}WG%>5Wx;BN~c0{twWEX<+#;yTvPN*l}%<%LXCkf{R0U=O0UAD*$ z)&a%XB&Os(*#BB;C5NS3WVF}d>Rc|5TIterj!xO+9h__MTXA*1-2B3K%zU9^Xl<>g zo-}i$@CV)XPkMNSfz#-Y+1XFupO>3`9hN>fzn0SyP{izNP(By@jI3MfN1*Hi2cb_w z)_jqm&h}S3`&W9ZBM(HKVREV1zxH-?+L?L>db>e{Vb|#B+?OxFwHmT+VOHksv}<8B zVRmsSa(}bQyT+`E(d=Y_bzNIzDevx%u@UX-`vA2Z-ewA(F));0UVB=7GzCuBalF#w zxmwQTbZ}=$k(omUIT}Q}n1FVYK9CRziO75XW!TltV`?e1#YUF~%iPo{Y&FA4noPhj zCD~aP?JYLJTlWCc;V%0tzY~lJYuhH(~3y{~6 zCVE*GvzbBMC3TmmQDD5r5sA;b_v@JW-8)d;vd0Z?z1l0${WgV6x->o}g^c0t?``L|*HXB?Xy;1I z0Lfd=-XG-XRCF%t~+TruxXs zK}>gbYb(i%fKI@AtU&7+7!(x7PMC(m;Z>cTS?pi!W=;4D$f9M?5-mx9p?YJw#S0Ku7F&wNF3u~QlXy53mXb0A%nHhI?Q!Ih(tP;An*)4f} z$Kj{2xZq2*Ppb+fC8n{}9&t2!x>;w_f&HkWeA>y>q7THtB;~`S9}Edj(xIFyZPb59 zqe6A^kCV1WI^WnZXT~1tN?>SZj-u>QoEt#h!)>8w)sKKYRw`OddVLx@Vf^=#26JfV zKJrK+5ddefh}ZOUMKKFS=uNS2RloF)tSEjR>yKV=G5$i{-%ZJ>78xg$+THf)-R-x* zM5F$nziF9xR6-0K?q@6y`pxbeRc20_DXN986_2sXf{53{akC9$FTw)9 zPiSxqhKAw?4P#0MqLQZx1x)~I21Dh}G{rJEXD5u&4@r#jna{pQTZpM60?&Fs)2nn;t*S-TNXHVov%3*j|O1YU-<*Nz_9Jbc=?Jp>$GN3?KUb>Omy;#(6?wymp*cz|a52 z#!sASSyD^4ISE@561P*uw6r6MI5WWN1`Q%DxHvo~yrjmvRN+U(7!%XR~ zG~S*=F`Ra|lYfFcB}sw<&$AjcNZWlY#>;>kDlaGOg_dhuvV+ThzQhH?FM*Oj7fVq4s4)dE zG01)I8eoRF6!?7v(xMoQ^BoExl8C4sRG2!%#MW3?otUV#!b z;8h751`bYbu4T;pmufc8gIL}Xa6DyUQCVkzArbYTon^-`HP!!IQE08f6=Ptkka?$} zsHg$4TZ2m#_JC6&6#M}gtG*;6q+HQtx_(r0&D*F*I)FA}YU}@1^1)V`v#b{%yc5M6 zy&%2tfG#)iKb;Ms$gnC(v&u>{$O?C|nUHakTP3g)iE{uvgwgUZN-Qohh2Ke_4W8}B z-jlf=WC;Xtfb(LdoP46+2SAdBGl0|}#0@M6=G{AzOQoX3LDd7W9~i-JgB|eL`|gI7 z<+!j|+2!<+GVIMw@Nt2W121oqgGAo`zU@m{)ecv;y-@tR&vuKVmb576^xy`cgO!y> zyGG|v{l~|J>7hx%4zQzO7o?(=*a1%x-XW(IO{d_M+JnGbu@#yjDH;FwE8Z;+l!QNG z=66rBbjP1os+rh`B@XjcjVGr+`+jtlH?mBKI}k?u2GpkW-ksec5lR;Zk6*@=o|71} z4P1!FA6u|^N08R1C2+>`5obf*(M}Uj=VUZOfrg%k`r@pwPo>C*yYn+Lpw{Z`?yF;m zO@-+wV%!|)lIU1W(Ev(Kk(s3vejX%idlrE3V=Tf(OT7eSCB#^wc+uld3+UpBDRL}P zuki(GPV(>&DBKOaZoDuQ_m~2MKWApRk41iu7a$;8#Whctk^hq;b~KqUWPt!q<5L2tdB$FT+}ja)zR}AgGYRVYyzTtvc=ba%>4lrfrPNRiFp{uwbH}W2uG1D2NFt5V z=Gv71Q6XafBKT*X@KrFLDJ#X8C2Q2%;dx&RCVjYJWMj8b5Vo@ul^b5j%k!=HVD+Up zTjKD<`s*N_{1G60%`Q<<6G1DAVP?(YFAw0MlOtIFZ-8XkTu2cc;cpsE z5BxDe8vjB8eAfq;nb*zUqfN+wFir3klK+9(h85`v>Ob`Zw=Mk z_HCr%M0M|~W0oo?p}aoe`fXDmzc&!X9a)o1`AyN>_C_H+Y6~!<# zl02e=AV-@DyVzF%|<@^3;3L zW-U=PxVZEHP}BF$%zqYYef?)@ii;$nT>||hWV{((>zNDrG-L4Fsw@)4O6S>84(p#W6YY%y|yH*mRY z!P1h&LelKNrHy*%7z>8}YSXZSSmHt#u1+K>eEgQ|Zk3xJN=}H`XJxzjI+7bAxR6U9 za4)7|!oWZ|9BdRG9vO$RgZ5nD=B!b=(EZI1Ef%0&f(hpF7(}H5#W|q6Bk-p|lX~w# zVrQL_g^dk?d!?uqU)ETKqr(l5g!;&TmNUc?(~^J?|C@_nHhF-bi9vk9XA^oc|DCKT zWDxY%!J#>;#3Az&()0842}uQ= z^vYrN^-U2G(2>Eu$}fO4!O-g4>Dm5E&X--n0hGz5>7^~Ce<^-P&^>oL`k6KS0=ZQDl{9FGB(Lp%jHZ7i z=3{hLh7cNn%+9@UkC~savBeguQJAiyRQ$NQa@6DGZ?Bs6l|Ykzo2D4KK+%Cw3N$1F zp}z#p8zy)038FJLFX@^_(et0=q+I48Jy}Bf`s(e>G;aMR0Vc{Lt6)P|t>+#6f2y?f zuXz)8)=I{>=e(7CLC8mUs1l^y8f)0c**h^X2aq~6Fi#RD#Ok(1*>z|p`&L$>N z@v39(?aDj2AiijZQtX3{>=>w4U`NJGkl}KPH0mSh+h?Qqq@TQ(RB8l0&`IoR{o9OLRUcjDFVAL;h2nU#0SovdQ=Ok=X2u*ccOhQ7-#)O2>0*_Xsdl+%+s2ccxZ(SIO1TkO>k?4_x za0+(P>gtkA)fx*g1D24dwye3i8`QN^FX)qm6rwuVy+dFGaIPz5miMhLf9HxFfGTH) zvWkEL#Q2-UvxR<0rt!?d#G1Tqfa|JOD#dHw9ClX6FLig5qK>(Gs9hJ*yYa*r!g7dP zn%`TaX`i$Wa$;h?5YUY!B-!h;ktINy_J#fUk<-g7M8`u>^m|{fK4M#ut zflS}zaZ?iiOuye9u^QI_Fw1j7y3{ULQHL z+|i2oPKeuOF(!yRApfC03Z8j*VW@Sn3r>thMI0e*m`Mi+#( zrDmeV1_d!fNX7HMMwc0QwS}vTZDV? z0|+7M`Y#BP{WJ9hKfRkyq>56rskVfeF_;L~c)wdw^W`^3`e$*CX(0v6JjvAbQ~juX zjt5W(t=a;q%>yw@Q)mLR&KTmherY3YZC)RJ27y=PGmBM&WA17dZK?b#LivnOJ%)MP zY&mNi|3<3lN1$43JPg07BNy$HXL*JLt*Sa)){`;q*)Jc{hi^mxZD>x@ba+^IV}Bp5 z3(AoDhgoM4<<;&3qsmnNs29_fq8aA>AKB@Q=`$mW1g*4Dp3n6@#UugR2S`l;1;|zI z<;0x2IF%Vj@)3>PU0T$h<(Wc(3tuv-BiP>1?%3jB3K#10eificG1UF>$H75>_}jPO z!c1x{y3ZfSo6X12W}7eNjUs}#8Mt^fSv1)hVSdOWt*hytwdiV6CfTZ&72V~;&(eT% zfzagKG%D_@mDRVzbrOLK!D}^V8W%ov`7UdM;~(j`w0t}D`Qo*-_MCZqwa{Z&q%g|F zKg_A$hL0!J#1NCdXECzP8MFj56^>fo7n7FH@+)B8l7c_dKN4loE_CHVS)~S0Btl3} zh+4?;YnZ$*1@?msVP#Y5v0H`_qq^1Nupe?a7pG$S93?l~xFSk=#n<1X^g&Z64fQ>kkP z4>AEO7ybaSWR<}(SDp&u76FGdd}|H9SIc=O$eqD@{}>~lEonRM%jX{P9nHn0?nzq| zp>vP;h$mEo>Vo1lrPy?5yL3P#>*H&~&+mqkDtML6xIG&20%Hr>LgUgND4Va+!fh4l z*k!6sM8Use0Veu#;nyABofjyB{)Qg$_h4BT1?~JLIguG^CZmit%JpkzIfm~1ReyfVQy_4xZ;c#w%;1Q`x=B+3m>rGdWC`x(lmGm zJM10akYK|tX87i%p&|KMc@j~lY!6^cF16Ed_7N<f2Nec+PgdZAYs^Y%48)-K{V;lW2AVufyth*p9O+j#b<0RvFR01@1$iGOF zC4RJQVE`ZzC^$Q2lqvg3ISUo`55J zU_-r9y+tL7fv7F%9Xqm|E^BEiLkwEJ1=t!-ZjX4%mj5=dUiFU*u?d}@e2F%x@x9*v zAw}NPLH8|?4(uG!GxZlL7 zCW_;&?(e)^|E6FftJtND3P3bBFpIK3+an{xAR-rY7OX zv)GJA_sM;=gCp|e6V1ugmA@V|GbWhck^hF0b40sNz~FV*Ry=Zd{~Q2}2Q80WmRj|S zWqc=Orbz#ua^Z1c!r8=m6rq=Q3Q{fH(a7JjMxU2Lz7`M38pC)~Iubu@==u;}CvHpC!;x|$8 zyh`-D(tUX~ot4W2aTKSV?L~r%H~b*NFxnDU6>9r=JXZA01J^_-OM&welXIP`i`cXo zO`0hg3!#2XDturga*?&{QXYE(AEMDzM*cO0L-oWuPJ(i#nZ%d(ETk4%_yn>Ccp5#=N+nd?a>-yasLwF?9%_iA$|X` z3Jd#D!;BW$E!Ak9gLrde;8xNc`RvwyV13jcLWTU7W!(&mFf{@!o(2r%4F`A<<$Nb-xp;-CH5=F94pT~WZvO!`}zW2QkPk#=)& zady~RYH2zJ9;kGIlwAE}5zqCU&rXF%&%QTll*vX1v0;*Nb~nhNh6S`xO#e5d7hD=A zv=|z2WY9%fFQJo5tbx;q1L4ERqGIG;Yb5JHP@mOV>foK6qyj7L6_S%>u`cq_Z@-nxc5FsJ zs&Dbhw`$le8!fHW4)c*1%kwqKsfVwItQFXLR{(2B6A>JlFBKn+<9oc|A0I!WkY_%r zXnG4kdgxOMJ`mOm@`SApb!_TdZ(W}-CH-yu#TVyD5E(62eZDc8{@HQ@<@s}KMa8dk zb0PCpFFcnzjQ*wNRSttQFF3DOE+V3xVYdc=3zh!?`1xm-Ab+5_Ln#p70+)=~PA@l8 z_J$f~izuCQGX98dxcpxVqD;(`_JIPDpI?l${%Lf$lxx)3Wrf*>>eqXGLFX;#C8WkK zMthZLA|h~m*FgsrDO`+qn^KLGs3Vu5aHhvG-TbVk;PJ2l!F31Odv6=X>>GE~#$le0 zNMYRIvA3kpUXZ`{ zRP(obViA!n^i`M=4YmjG`WN!o6lgH8QLT>o;u0x3^=KWR$b6f90XKlhmN76OKYx`) z=a{>MKk=+%xTeU+u#MVLjLL0-EZ}`oLFM~y>g+qFn`U4s3pE2E-rqmB0yV%QN0fQ^ z0&$mH#~OH?{k~J7>9^f!xx0@CAyVTGS_}Lk&-(N&{_;m%F1j@-gE0KRJXijg#=7o$+cCJe(l1!M(^`ofHul z?+E4^su|$4oKsV|sj-4g2cld7<}^}bXpaOHJ1dxMT>WL}xK zZ&xK@J>NVfA%+QM>7}vIKaft^nu_nY9%*Vhh+~ixoN*BbtJQ72cdtb0rzZY| zo5xC$2Ei&WP3mpZ7D5COLA?yXq``A}9vbI3rzA@8GVx^0^OkN`CvC0g`Z(&}LCd&b zLYDzJsT=N#64oFe(7uA3dq>C>nLj~K&1ZY?zZo|M7`8j-+sK=Ky(hf4{&FN#s+x2h z90JVDO3BdW8_`onY%4oE;9@#x`}INgweuab&E4GrT|LbQ3upBc7qBkE9u6=`?;1|P z0U*@)>HEONSP*XpXi`b+M+CUMYRsv}AwE-oTh4%2k)oAZ_bDky>ifsCKRTdNBE{G# zveHsqetXt5J(xN}3rwO3Dt-lUc1~dL$HpwMA9VV0_`ei&R0Z1404lM^BkDHi?eAJd zy4b1J6cN~fFR!p(8#51AP>nYi4~U^?nCPh%m(rYS|12M#LB&1w*KAt=M`P9ih%4YI zAdmsJ=0lJuztZdx|K=_5n|1CY(FdnTE2YrN>IYd>I)ly^NxQiPc!20E4a6Vts{ie~ zhuSWoiopACdZ}%N=>8bW9vpDaze&_|fV)nTuZ04ro2*dR z*19>~OX{ws5kMS0LmYtSX=7*Sx~GZ9`$E{`vMJOXfgHi3)CWTF+pCrWtiiG`XL23) zg4_vTg%*t{bkj{gzOoE*D&022{(en%)?D05CYfnz$4hegBJ2#!4eIlXX*xy&^It_HG~Zj<`P zmSuF=C^-Kjt&`Ha&f|Orx=YwVpetms8BD$Ul7$7B|KoVMYV%Q-QaHYuAb!c*WAHG= zHqz{mnp}CFJJFF_*=($==ws3HfxeN75dG!w-$u08$G*S?3ao?(P7g*j)~KRzIaeui zpLdC56Y!J|_BW*zOlr8od^FOJxu%=5Q!EL@v=7n0*et zVhC*PFy4v}pi*JZSOKxtMhOEIGtch(rzxCbOtI_JU5K6`u;{eWRlZrpstFKdUXps} z)laqkj`WwP{0!i>@$4xZ{J|AgDaL#QA4Q8qNsLYvfu$7)+s!Be@Ba|qpN|d>So@`D zBs|X8iksQbQlG)8%fASq1L7_4D~rwnaioS@?P12jnE}TJfH4@4zj?o<;O52<3#S93 zZC%hps6zY!7nS_OplxaGP?rw0e|}t&nS%@l)XhZ^^OTf8XvcIu4d_RgF1i%|g6kEH z$D3}&^tnoc>XR)^E&!B(HH-4Q{zv|H^ojl3c-07;ZMChR%A|F1F~(ubt^hj6lA{~J zC0Y%>2)#~lZb-LTvp*w8jXqOdGH+GLD7y2^Rvs2vU(~SLeN__jmN01OTQzjh~* z9e!=U{w%$e`H5U@c<2!%tQMcsk)DKQNO^F=HQVDW}S%(6xppRhP zOIB7i&+|`Q!nq{>#mmEO#XbP}baC>|#L>tal1Umqq(IN4%63gJrSCoyM^|AFQv~HK z&Ykqlzq&ix_Kl^dW;R}F*iX7eS75WyE483fYSrvV)?mcZ^1;Zndn06wqw(p!9|}Cx5vOxH{JnC;C$ZoUhPM9 z^$lU5*N%>&S$}2ap1r9fk$h((zcdSn{et-*n&3Qpx*8&=b*#rcw5mkQC6yHm;CD#Z5@C;6=i-mDBa1Yi`_C za)ej(2KlL}MBmgG@msmTCBT3B?YINw-ylMj`oGBj4HgXWUl#OCSf)NmLZv4u8R|IRTt6e>8A4dVJ!uWrKRlrfFFrIy$1?8z_xs1S_KK~9^lgtZJr1iz=z zoY>*yBsZAvG*iA3Mf;#rqRw_`cXtSwagEqQ`vZ_L34dWj(IUHUj^a`rko>ck@D+Xe zFXum;_4B$vGPTGeB`=Y%7S(-%sG0{>H@b|{A=QvmoXwT4GKJ}%ATdqrE0|o z!=R}l?JcC70JE4DQ3w7nr($uMfT>)u5 zBtV2hlkUuvna0eV_4v$HiuO?eX`N-Mu&e7H(8{zx;9l$AbEi(t$l3GXnAcB?FLnke zVq|1Qlg{}3w+GL1$jyItjZ)Hty1z}4;bC}0>@d8(X=xHPy49;AZsmwkHnYGE|8W6y zcJRra6E<{Qg^#c@!T?rLOI0zA+dCNjm*kq3R{^h0C~##2m>HiaZ30bz@!9Cyh>WGX zt+g_+`Ozacs_Hi5afjNnyt0!eEdP66rHUT@o0kt_hV_TK=10)K=@8z_*VQA%9gJQs z(TG=v7k^>D4#0W72-~P#4M`^vJ6v{~Uxa~X1-YX?5LPLr2`# zbzbN7I$!H888hlZ0K$}^QoV4bLp@cyI7j_O2x7S22F=y%HU7Q$8e3rQCp788FlN2X zTRUFN&qBV?n{!2NKu1QG1^|P&ci2A1s@Kg;Y>n%g*_! zH3EF&F;&(?bsC?o0;%PAc|Bx9GS!)C_3=wZMDAU_f#@G?=SDu&h6p*UOh@|#e8&k$~fT+4jWyrHp;o#cMTWevcCT5HhHuMY(fMN z$dBFH!EntkrmsU;hIK|W3)N+wQ@YbUR_u&~{Ap1{bMwQ%Ku6cd2F^)LHX0*~!~JP= zXg{`TJe({N18>N9Y;T(sQRp6YJ>b-Ev~KW^TmI?ayncG2kac2N^KV4>Tr@T1RY6iD zP;h|wi>foK_VCNF9Dpo@P!K|{!h6d@?CkLE+XP?LCqS@xNkm2|9>us$A(ldX&b5(P z2&M@!r)8d|Ne|z%L%cs)#YGM&3>j=e%EM#ok&#!@)QJv#Y(G!|m%X!L_v9nH?x_2nu-bQ^0| z2*V?pbxmb^OYJ>07{Eo|RI6(^0JcC(xMTic5o5ZrJPsflIJ9+GME&Kc2&Iude<4bA z7Hegqu>N%*CNg0WPW170`@xn?_BoW6?3pCv%1f5M<(t7?#LPKy-ycDQ0=A(Pi!HnL zwhq<4Eh<@8(~Qg?2`^~&(ctykroi+}%cL?X>zjAWID!GVAV;z&rcNuqJTQ}(<_F{` zFcrU1U_BOD2oJ5R(buobs7p=wF>3MeC8U)nsKBqHtJB4gw0(B z`Hu6s?jN`X&s(6ftYrOvE^MVQ#G=2M+t2U5knfo`oVjmd+<$(vqf%`$*Iu(=3M%FJT|LD}0YEAAlPlyU;&?A#KhcFoX+NOR)l!Qg83E>DMjW;2&5lWVyp4EIhY5 zCi#i)vOVXXSum&(Ubh7Wkz`~rMY6(sNx1?*OW+Ezrj5cSw|QN&k@?YFWURI&pG0}F z0Kqet5=U28!zx#^j$A#(+vThxCr%uqgx^OjR68~iEFGTP>(>qG*9W{-tROh7B9#Fn8+SL5M@#okiL_X2ANRgl5GlfuI##WK$67H`B<;`N@ek6 z!M02|1g1VOHitbwu4ogsU~)#K7E_a*-|mefWx>(#@_mAr4xjBScqaoQa(=Mq?uU4L zneB7*V5erLBwEJ`VU$0IzG(EY+2l}E;EzIB-Z1yj9(K1qVih6;DEd?x?$9+t+Y^^Q zbwhiEk;^YffjW2>Q=d1#h60mYo10*n;W4B*?_NwUP_uy);pFC4lYmfcM@NKL$13#bbsz#nNSHEDIsGH65`+H8|{hx$g2P<>S~9f)sz4P>U0ml zbaUdj9vBYvzNz#P$k=XZJaRnJ?6Ho4bj@jZkSzH&M}#32^}w(^Q|+sz%}cz^#?~%~ zQ(|#8z7ItfA4uDJUl9=)DBJSLpWk@_$-`*&%^X}jYt;9GE-#O-K(Q9yd0%Q zh9@plvk3W>{Ss;iJes;3HG>u4v|QRxvT_v^O&XZmU)7w2IpsHibLL)#^OoI_ODGnq zT+!~22shcyt!nV#_TpkGKnc~&ILn0mVv?*0IQC5l7z6njZ}ul@lRD_2`lf#>rRn|q zvOHhw8o9QJNbw+#TQLgaz-gvvLlSk`KYC=bCGlY|jjV28Ud1~i%I*|1g}4}oq&v)z zy!Mr3;yL?7y_g8j)F(K1w*}zm)czOHti#dUo5j-=x3w+AqJysA<;8Ua4n7A2VO}m5 z+@W)>+{6rC7*j#smZ3mUha*hOox8VC!zU*qty7e@RE9~(t_ySu^=cq}$t4U!%XTm) zwJl)hV8JHO_ILSPVqCjWH0@Y={Z1;yU55TNB6Kf`C-|4UKsaZ%XXNx9vg~<%c;5xe zU2Y{%n&f!c`XAwndV#T9v14VqL(uM`#Ahrj4(B0lrxG(+T+eZ;4$VFE6>pa34yPPy zY6et0CSk#20siY&IeR<%2F@@%39$Ini|?$B)4Ay04E9D{%bNW7X2bWWA3Ll$Yy+#KL)R)l%y?KR+Yk zH`>PDJ(94{)Xgb9n@1r5%v@nI?&OqSf`eIL@Jf@-soGnNw7YK(wto+(W?$eI5_(mi zMy#YJ#g5Xrk0`qG#rUgiVwtQ|{V*+lyi3#aVkJ>$Sg>uC7 zj5rk)EDTce^<9CCtD$I6$LV%xU974UMMPZDbizta_0z&qhn?LXAB|m$f7VqnJ9~(G zn2)Mf3ksT^-MD&}ram=069juMF3EA6X%IPbYOS>HZe0>BloSz>R)mk251Y09ZaOuv zw7Oc|#wMpuLGLiSSMbSMqut%bWp8(JPZ{*-_#7*I`>O5<_WO+xz3(+QWPM|B%Ek8w z=&sg$H!xzjzh3Gsqa$46JA@lfuA^z$2wIsy-*QgAI$J`yjV3zTGaf|k0-mnEMOS2H zGk)xdNfvuw9&YbY)wNM&NzV~@!h_m<7AA2{I8lAsAv&gA8ob3NdMLjbX+uyxGnfp? zQ%z-es2ewf>?yu=sd`Fw<{zAyb;rO!NrA>BvvGFn$=&rAc*|EV^3^j34y0It@u{}% zNOjGqsfzQ%T!Jg5<-(cIJYrwGedd~J))~;xwdwGV*KS6Chl2{i^hZ= zKNo5?$gE7pBFDU|VyQdYjb^6$d+O6V7AFF<@Wr6L07~ZnOj$6Q^bG!GAKkCL+VFfy z`<>^2!me-0XF4X9L5uYJSNWi&4V4~okzf&mlf5H}caUT*xHm=tDOz#Do?4366JSTI=uAUkJH$f;OH$KmX!m$s3R zg1<<|(O_74KNj^^hv|z#4;RU3inPYGwydlrL^tUgYR?~&*wpIzGcPNf zJdzcqcc$5RYx%-{);6nb8o9fQb$6c(hy`Net&dHmAl}N|Chp-3teU%*mpfuS3oORm z@>vvIEZ+48+Gx->J`ojZ9sPG&Z3hZyh-qL3?OZ@7WJ@B5h>2r+lG;|6oGiwC@S{-0 z0zGXZvdVecK&y$O(VnZP^`*Z*y{v&;6Cgp99Rn<7OJ;}j`8~PhEq_K&Plo95!|W3E z&%#s&TME+CO*dhs8AeHK36^<&o2Jou9SJo$Uq-76o?H=6NNP`j+HCTpHP_SYM@Hr# zdjb4AJxLyz_P^0TA;>Q=r{$x8kRFVoPb(<6Io0`9{b+2Iq=}G6DSPnI2U<(u32K$| zzZ^yBt*BF75Bhmjx4HkItjsSV+*&nt(~;WfIY{nmWJj+w=}M3k2KY7qobFj zm4GLNNJd8^+oOE5{X8t8uO6daa4bW=3S>zP4>BnuYlRKjXr@l-+`34A0!z}YuDSgO z29^bUJS@b@GtApcdf%jpDL(y?NBd<RT~ljNgeWm5v7QGA*XydCAgSv-XQ&U4i*7Ryn-y} zISXi!+9_QEvnmvjj^_6E-RK*5n_=(M`qQe+Fgw>T+-gD36m1v-H3BotWG5#uK_dnc z-XlWo0U3OkIXSu2Xe6{c+tl^@+abk(;p1o0(u81SFxU3xG{33a^77%K1{Ns@WL;{2 zTHk`psn6y7Ry386kbBSpUn6XuEv=+98ZXio-fan+TD#v!+m(XvFK?{|Wvzp^4RaZ0 z3biDp!<*tHGt;yrh`?gQ^vypu5v)I8-#$!6Po}+`qsLdmaJCj?5H+=9BPqRJYH)Is zCVOeD+~zTP#fmpKmkYmFn;mMhbD|Rg`w{QVkgOymCi+!CB>@4jf5gJU<*;VF@*eU} z0U+eqt~~Y>`PVbTBJzJFF9m=mKbejK-n3RMjIISx65ZrWo()w{vj{aG@f` z07%zK41k>V1_1fgg|@?WFTK>z5U|$d3tog2YDV)n=ba{HgT@~);A;hDK63g5Ubt)9LGc@4RhY#W{(8bD^3;_f@*02%?$9M~ktEY1Nj_uU52juk2F= zJ8rNh2nQm)4-yl_#8w(-=0Xs#QEU>D_*#PhN6=F*Wlu47W)?}{o(@2!9s38ZM_v6E z#cDEG=kl3GMwS^(c{KNFB$~~M_3w@IUvcK~H}M>RGkyK{Vdkw}n3*fILzw8)x7eyL znsUe|T-L3Ki%DjBkoW$zFV(izS-Lx>mL#LBTmu4ZfOM|&;sFb?OW*UZ73jC>?-UQOC{Moy)+$R>hC1eJ;NAMnA z{o~)Wir~s{ff`Flh@n7&T1j^m+5g|Kn&{dhcnja~pO}9qehUgU=NuBbWGR0AxAN~H zJ|*7_+y+EC1aCTy0hi+oj8c(7GvQd^Teds9K(QafQD9*ktf19>x!+@wv-%k-H8K30 z)6v~LlWxu}AK#iBLn`PprIY&p6!DMrRQUv=oEPNR=xFljR_*XRBbXe|X|oeF7C}ov zHL+~#a&pg8tZkic{BSn0o^H@g-wW&hMuG2YB`?|2IpNGZ0Z{B++FX9X`B)mrwEc3s z{N@rD%n@@B;_upnCO#|&LedNR%Xb1kxy^H$!KxW@k@Uf3sjwY z<@v_?Ldp*ObVM}>N6^*bJS3z1Q@JhTlw5!Ewqk7l3ZC=86-@2PU}lt;O1mv^?%X<; zF+QC-i|E$?*Z>6=n~xi+kp|s$0v0oX63;op=k%>V?UPzrF^SkXKROddhQKTR;Och$ zU=PaT;@pQAkVI1-c_K*+j#=P+eEgSKE0gLs;(HSnWs_?Qb9F`UF$uQLjG!-bj@_i+ zms|<7R#A5k{<`p`v6!N{xn*LdtQ{hcUPuUo!+u~Oo&Y~mMLhzO=e3=Hjwj$bX^tHe zG^`=<>J=YKIo+@ddisHYb>0zjaNEt)r@H_X}0Ny=8}ih?S-PL+k2U1Y{Dv^ zoh*2{F6{@G9OI$#uIX{1K`N%WMBpO?mwYc^+FV;v6%}HR$F~|oqH0}Wl|ymKy=POq z1RK9OG~6YP_$KYqWbiJJwp=M}PUEW)yn?p`8hxY#_sBy` zZ=JO1VyvrEdI7rK{*>)!0`d{5!pwgMzWZjxOZNYOF1Dd%{@G6jhLqRLdhytuHrFipP2pOerByvwHCOlc2UK7hW^8|G zDS;{GiBH=8h~L!F*lAnBi*YX{jei~iN+W_$OVg4kD)eEHKs_V)6#yYw~%3sPdfKK+-Rv0RvP zg)@aPXU~M)jYRNY;x$8+*W0qRk8yj=TmbW|(;j+~mW$T;rCP3iyeG3Y0+@C)$5+N( z8}~Dp>D10%VcVJxw-j_FfO!)1L!!^0CKcS&mjGu4oZ7`%Me=ddmr@Swg?AKDot>5t zxK1Ii=YO#8x1+$TZG-O5vtDP(Irw}Az}(D9c{dRPI~ON_T5EL1R7e)rD-Z5D@Zuae z(b@yXuW_0f({Qpj49mpwnL!h%-#dFJG#%&9?jU zBC4;R{8X@jETe~_v!td{zgH$vty{caI_DV>2d&666&vs_}YUVeCwwDH1 z{&>-dFfwl9*V~ols|Xdt9~C22GU_t+_8KlLPhn*c5$QU-Et4#D%p(Ce*@+Xo7Jcz8kY821M zm6tb6MV%qIQ8S!rhbwa8P(Joux)pv$I1u{hIM~?qqnG1DLP`?Ouv(zitQ@TRpE;Pa zOA(%j8FKInDlu4I(!U+Fo}PNa-s$@FMo*jr&vSA@$FmFc%k75z%O2?I(@@c{Qc|~IW6y;qU?y?S7mj9{iNa7KKVRh}?{~=a zhx62j79VVLP!Cf28OvI|Ob*kD+I{YyzD-U{$roSv+-K)_&USqe^R+Ji;kkP@_Of-& zqIIOTM-jNP*mW-`hSGwx)jFL=j%W#ad^;{$c=_#EK{5n?S(<02*et3KMoOP!745yb zzCu{}enD$L90;lU@dH4D@mIJc`4qhu9%~Eh#<|B|i)(#6i$XO1iE1kmELu z!f@Dbe1|LF@C+yW^Cib)R8HO|&xEmghx3+a-;CX=#J2FeY*cnFgd6v-k4{;6gf%K5 z&(OJuMLb^+kJMQBpp=*Vo6a87fLFviwvS#EnSN9x)zBcjy0Xz0D@#N3G;52a?NEqV zsI!sLy(&*W+y*QPfd}F^#I&@EmmMvjY+@LZ0)eU7S>l*!fB78UM2{6GDOMq&`W6tE zpJwt|#+f*h3?K1R8ZIvzC%1Yp2Q!Lkmc<`D-~uOG{V|BA3@&(ydXQb%g_>eVX}k-&VTm4E{Gmy(tZ!u|}0Li(|k!(ZWv z5N{jPma^X(d%&|}M9(`h+0yqWj`yO#Mb5Yss4`|aNDuxtXxyd`y?&dl|JbpDa2~|= z_9M^ljo3#OB0M%YEQgA-t*r7X8-_-!)<1Pyrk0kp9P51f;^uX}+#i+fHy%kO&rDml zn7o+}V{%`bT(HaR23}iRJ2s&t&73y(o4>`&?t@gXuny4hl1P(`K|z(3y}h4y9hO;L zodoH4FpBt$v&VX|KeuH9( zyzq6^vC+BrhHSIo?a)XXwyDSQ)Cs;_@w@!TN0+Vf%*&)Ddh zI#m5JVG-6xAWZ!oak!=2R6gSSwnj5=8D`Kj2DmEReAAxO)o?q=xF3luKFnU8E5sD7 zr$>E~t$S&8by8Ec##{Wtg?ffLblu5$w0V;tc;`h6O?$B0MynIauOh}zL$lt>?fQuE z^V5%=N|p)gNJILbqzOqKN_Vd7`Zj`FSlSlSgbI;IDa)h4UHIq#yX4dIa$HMlQS+

z=d}wJ$nvbZHJF#gk^92mk##Ws_(+xzV{`KnnyDUff!<^Au^c_zSM;)lub)yqF@+E+ z&A6a!W>#EsBmQ!g`P%DZ*DuE72bqu*ALie6)TOev27HO~Q&0ZE(;WUHEnQX;AL-nM zesqeVoN^>usT5zyT$hz0w7R0_NEwe^i2#2A;v{_~6^ZBilA%l4-39k=S(OC^-+YM4 zYw=?I`B0Ca^|pMQfuOo^c^mEhil~qTWj_Z`PEHO&>Cow + + + + + + + \ No newline at end of file From ef2ada4fdf87d6500eb348d3bd3424bce5233784 Mon Sep 17 00:00:00 2001 From: Colin But Date: Sun, 3 Jul 2016 21:47:07 +0100 Subject: [PATCH 11/14] syncing fork --- pom.xml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/pom.xml b/pom.xml index 0b797b9b8..73aa7bcfd 100644 --- a/pom.xml +++ b/pom.xml @@ -229,6 +229,12 @@ ${hierarchical-junit-runner-version} test + + net.sourceforge.htmlunit + htmlunit + ${htmlunit.version} + test + From 7be98fa829efd68c792197e33930c6862023fe47 Mon Sep 17 00:00:00 2001 From: Colin But Date: Sat, 9 Jul 2016 22:20:13 +0100 Subject: [PATCH 12/14] added missing licence headers to 2 files --- .../resources/sample-ui/css/album-list.css | 24 +++++++++++++++++++ .../main/resources/sample-ui/css/style.css | 24 +++++++++++++++++++ 2 files changed, 48 insertions(+) diff --git a/page-object/src/main/resources/sample-ui/css/album-list.css b/page-object/src/main/resources/sample-ui/css/album-list.css index 9c828e1a0..f7a077a70 100644 --- a/page-object/src/main/resources/sample-ui/css/album-list.css +++ b/page-object/src/main/resources/sample-ui/css/album-list.css @@ -1,3 +1,27 @@ + table { font-size: 16px; border-collapse: collapse; diff --git a/page-object/src/main/resources/sample-ui/css/style.css b/page-object/src/main/resources/sample-ui/css/style.css index 6efb32df9..500180d4d 100644 --- a/page-object/src/main/resources/sample-ui/css/style.css +++ b/page-object/src/main/resources/sample-ui/css/style.css @@ -1,3 +1,27 @@ + body { font-family: "Trebuchet MS", Arial, Helvetica, sans-serif; } \ No newline at end of file From 85f432fb545f25bd96a89b34c1cdf8cf19f4879c Mon Sep 17 00:00:00 2001 From: Colin But Date: Sat, 9 Jul 2016 22:24:17 +0100 Subject: [PATCH 13/14] exclude library class from jacoco code coverage --- pom.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/pom.xml b/pom.xml index 73aa7bcfd..6f3e0d698 100644 --- a/pom.xml +++ b/pom.xml @@ -307,6 +307,7 @@ domainapp/dom/modules/simple/QSimpleObject.class + **com.steadystate* From f182e87ee175dd7aa970a6ec659c9ef3eebfe6fb Mon Sep 17 00:00:00 2001 From: Colin But Date: Sun, 10 Jul 2016 20:51:52 +0100 Subject: [PATCH 14/14] fixed app launch --- .../java/com/iluwatar/pageobject/App.java | 24 ++++++++----------- 1 file changed, 10 insertions(+), 14 deletions(-) diff --git a/page-object/src/main/java/com/iluwatar/pageobject/App.java b/page-object/src/main/java/com/iluwatar/pageobject/App.java index 67b3f947b..235eedd25 100644 --- a/page-object/src/main/java/com/iluwatar/pageobject/App.java +++ b/page-object/src/main/java/com/iluwatar/pageobject/App.java @@ -69,25 +69,21 @@ public final class App { */ public static void main(String[] args) { - String currentWorkingDir = System.getProperty("user.dir"); - File applicationFile = new File(currentWorkingDir - + "/page-object/src/main/resources/sample-ui/login.html"); + try { + File applicationFile = new File(App.class.getClassLoader().getResource("sample-ui/login.html").getPath()); - // should work for unix like OS (mac, unix etc...) - if (Desktop.isDesktopSupported()) { - try { + // should work for unix like OS (mac, unix etc...) + if (Desktop.isDesktopSupported()) { 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 { + + } else { + // java Desktop not supported - above unlikely to work for Windows so try following instead... Runtime.getRuntime().exec("cmd.exe start " + applicationFile); - } catch (IOException e) { - e.printStackTrace(); } + } catch (IOException ex) { + ex.printStackTrace(); } + } }