The information contained in these materials is provided for informational purposes only, and is provided AS IS without warranty of any kind, express or implied. IBM shall not be responsible for any damages arising out of the use of, or otherwise related to, these materials. Nothing contained in these materials is intended to, nor shall have the effect of, creating any warranties or representations from IBM or its suppliers or licensors, or altering the terms and conditions of the applicable license agreement governing the use of IBM software. References in these materials to IBM products, programs, or services do not imply that they will be available in all countries in which IBM operates. Maximo Test Automation The Maximo Test Automation Framework is a Java framework based on the Rational Functional Tester (RFT) API. It is used to create automated functional tests against Maximo-based products. Using RFT, we are able to dynamically find and use objects in Maximo. This framework is based on a common architecture created by the IBM Quality Software Engineering group and it consists of four tiers: “Appobject” classes that logically group GUI elements together by application. These classes consist of discrete, granular private object maps that contain a small number of related GUI elements, along with routines that provide access to these elements. “Apptask” tasks or methods that execute commonly-travelled paths through the GUI. Test cases that invoke the tasks, verify the state of the application, and log the results. Test suites that group a set of test cases together by function or test area. Test script and test suite execution depends on a properties file at execution time. The properties file contains variables (such as the url, username, password and database information) that define the test environment the script will be executed against. Automation Project Structure The Maximo automation framework is comprised of two projects – Common and TIVAUTOMATION (stands for Tivoli Automation). The Common project contains utility files used to manipulate the environment and/or test data. The TIVAUTOMATION project contains all of the framework files used to navigate through the Maximo screens, as well as the files that store the fields, common tasks and test cases. We will talk more about each of these projects. Project layout: Common Tivautomation com ibm tivoli industrysolutions ….. maximo common database lib util widget uitest appobjects apptasks testcases testsuites ibm Common project The Common project is where the utility files that control the environment and data it may use. Some examples are properties files, XML files for MEA testing and various datastore files for runtime data manipulation. One of the most important files for our automation execution, the maximo.properties file, resides in this location. In this file, we specify the url to be used, the user name and password, the database information, such as the driver and db.url. This allows us to call these properties at runtime instead of having the user specify them when the test is run, or to hard-code them into test cases. Another type of properties file found in this location is the properties file used when the BVT (Build Verification Test) is run. When the BVT is run, all new data is created to perform the test so that we do not need to rely on maxdemo data. When the Setup portion of the script completes, the records created are written to a properties file. Each of the subsequent tests reads that same properties file to retrieve the records it needs to properly run the script. Tivautomation project The Tivautomation project contains the framework files, as well as our object getters, common tasks, test cases and test suites. The Tivautomation project is organized into 4 folders: com, etc and ibm. com.ibm.tivoli folder The com.ibm.tivoli folder contains all of the Maximo-specific classes, including the common Maximo framework tasks, as well as all of the object getters, test cases and test suites. The folder is organized by project (core Maximo vs. Maximo add on), and each of the projects contains a uitest folder and 4 sub-folders in uitest: appobjects, apptasks, testcases and testsuites, all found in subfolder called uitest (e.g.: maximo.uitest). The Maximo folder contains the Maximo framework code used in the project. common folder The com.ibm.tivoli.maximo.common folder contains the Maximo framework classes that contain the common actions across applications. database folder The database folder contains the class files that allow the scripts to access and query the database. lib folder The lib folder contains the .jar files that a user needs to import upon project creation to run the Maximo automation project. util folder The util folder houses the utility files that contain the actions that are common across Maximo. There are files relating to MEA and how to interact with it, browser interaction, string manipulation, and the most used file in Maximo automation, the WebUtil file. WebUtil file The WebUtil file is one of the most important files in the framework. Most of the common actions in Maximo reside in this class file. Some examples of methods in the WebUtil file: click field, checkbox state verification field value verification browser readiness (ready, exists) open tabs within an application navigating the Go To and Select Action menus select a button select a checkbox select a detail menu select a link select a value from a Select Value dialog select a toolbar button set text in a field widget folder The widget folder contains classes that allow the user to interact with different controls in the UI. Some of the class files contained in the folder are files that interact with menus, checkboxes, dialogs, radio buttons and toolbars. There are two important framework files contained in this folder, Component and ComponentsTable, that allow a user to interact with fields and tables. Component class The Component class is the class that contains the methods that allow the scripts to interact with a text field. The method to get the text field, check box or radio button is found in this class, as well as the methods to interact with it once found. Once the object is found, any associated description fields, buttons (long description, detail menu, select value) and rich text editors can also be found. Examples of some of the methods found in the class that interact with the field and/or buttons: check or uncheck a checkbox clear text from a field verify a field, checkbox or radio button exists select a detail menu and select a menu item select a GL Account from the dialog select a radio button select a Select Value lookup and choose a value from the dialog set text in a field or description field verify the state of a checkbox verify the text in a field is the expected text ComponentsTable class The ComponenstTable class is the class that contains the methods that allow the scripts to interact with a table. The method to get the table, as well as methods to interact it once found, are found in this class file. Once the table is found, the associated filter, images, New Row button, etc can also be found. Examples of some of the methods found in the class that interact with the table: open and close row details delete and undelete a row select an image in a row filter the table get the row count select a button (e.g. New Row) select the Select All Records checkbox select the Select Record checkbox for a row select any of the table header images (e.g. Clear Filter Fields, Next Page) uitest folder The uitest folder contains the object getters, application methods, test cases and test suites. There are also a few classes located in the root that are common actions throughout Maximo. A few examples are the BaseActions, BaseConstants, BaseLogin, and BaseObjects classes. BaseActions class The BaseActions class contains actions that are common to most Maximo applications. When a change is made to the functionality or logic of a set of steps to complete an action, a change needs to be made in this file only. Some examples of the common actions in the class file: using the various dialogs associated with Advanced Search change the status of a record manipulating the classification tree filtering a table on a dialog or page opening the Help -> System Information dialog using the various dialogs associated with the Profile menu searching for a record using the quick search field selecting a line type (e.g. the Line Type dropdown in the PO application) BaseConstants class The BaseConstants class contains enums of some of the constants used when creating and manipulating records in Maximo. If the name or abbreviation of one of these is changed, an update needs to be made in this one class only. For example: an enum with the names of the various statuses available when changing a record status an enum with the names of the toolbar buttons an enum of the application names BaseLogin class The BaseLogin class contains code that manages logging into Maximo. There are various methods, depending on what type of environment you are logging into, and what type of information the user needs to provide (url, username, password, etc). BaseObjects class The BaseObjects class contains most of the core object code that many of the other class files use. When changes are made in the Maximo UI, many of the changes are made within this class file. appobjects folder The appobjects folder is where all test objects and their getters are stored. The folder is organized by application (each application has its own folder), and the classes within the folder are organized by main application page and then by dialog. Examples: - The assets folder contains a class called AssetPage, which contains all objects found on the tabs in the Assets application. - The assets folder contains a class called ChangeItemNumberDialog, which contains all objects found in the Change Item Number dialog. The appobjects file is organized by object (field, table, menu item, tab) title and the getter. By keeping all of the labels and getters in one place, if a field (or tab, table, or menu item) name changes (or a client customizes a label), updates only need to be done in one place, and test cases will continue to run. Example: - public final static String ASSET = “Asset”; is the definition of the Asset field label. The object getter will use this label to find the field and its associated description field, and any associated icons. If the Asset field label changes, it only needs to be changed in this one place instead of in every test case that uses the getter. apptasks folder The apptasks folder contains all application-specific method libraries. Like the appobjects folder, the apptasks folder is organized by application, and the classes within the folder are organized by main application page and then by dialog. Methods contained in these files are things like a new record creation, adding table records to a record, etc. Reusable methods that are specific to one application reside in this location. If a change is made to logic or process, a change needs to be made in just one place instead of within test cases, allowing the test cases to continue to run. testcases folder The testcases folder contains all test case files, organized into folders by their function (e.g. Build Verification Test (BVT)), and/or their functional area (e.g. inventory). testsuites folder The testsuites folder contains all test suite files, consisting of suite files compromised of classes from the testcases folder. ibm folder The ibm folder contains the core common IBM framework classes such as the Widget class and the VisualReporter logger class. The ibm folder contains subfolders that contain libraries of core automation classes that complement the Rational automation classes. The folders are broken down into several categories such as loggers, tools, util, widgets, etc. loggers folder The loggers folder contains the class files for the custom logging available in the Maximo automation framework. widgets folder The widgets folder contains the class files for the different object types used in the automation framework. The class files in this folder contain the getters for the various widgets available to the tester. These widgets are used to get the objects in Maximo and are extended in the framework to manipulate the widgets. Some of the widgets contained in this folder are button, checkbox, combobox, image, link, radio button, static text, table and text field. Examples of how the classes interact with each other : From the Assets appobjects class: /** text field label for "Asset" */ public final static String ASSET = "Asset"; /** get text field "Asset" */ public Component getTextField_Asset() { return new Component(ASSET); } From the Assets apptasks class: public void createNewAsset(boolean goToApp, String asset, String assetDescription, String parent, String location, String vendor, String manufacturer, boolean saveRecord) { VisualReporter.logTestCaseInfo("Create asset " + asset); if (goToApp) goto_Assets(); // Insert a new asset insert(); // Give it a name and description assetsPage.getTextField_Asset().setText(asset); assetsPage.getTextField_Asset().setText_Description(assetDescription); .... The createNewAsset method calls the appobject (field getter) for the Asset field from the appobjects class. The setText and setText_Description methods are called from the Component class. If you wanted to change the Asset’s status to Active, the changeStatus method is called from the BaseActions class. The constant Active from the BaseConstants class is used as the status. BaseActions.changeStatus(Status.Active); The WebUtil class is used in many different ways in test cases. Examples: To go to a tab within an application, the openPage method is called from WebUtil, and the tab name comes from the appobjects class. WebUtil.openPage(AssetsPage.TAB_ASSET); To select a menu item from the Select Action menu, the selectAction method is called from WebUtil and the action name comes from the appobjects class. WebUtil.selectActionMenu(AssetsPage.SA_MANAGEMETERREADINGHISTORY);