From ec72365a048960a4b1af0614e1ef0e7b7fa72792 Mon Sep 17 00:00:00 2001 From: Meeran Date: Fri, 12 May 2017 17:08:39 +0530 Subject: [PATCH 1/2] api executor implementation --- .../bots/controller/editParamsCtrl.js | 5 +- .../dashboard/bots/tabs/editParams.html | 2 +- server/app/engine/bots/apiExecutor.js | 105 + server/app/model/bots/1.1/bot.js | 5 + server/app/services/botService.js | 206 +- .../.DS_Store | Bin 0 -> 6148 bytes .../chef/sensu_install/.kitchen.yml | 16 + .../Check_BOTs/chef/sensu_install/Berksfile | 3 + .../chef/sensu_install/CHANGELOG.md | 13 + .../Check_BOTs/chef/sensu_install/Gemfile | 18 + .../Check_BOTs/chef/sensu_install/README.md | 68 + .../Check_BOTs/chef/sensu_install/Thorfile | 12 + .../Check_BOTs/chef/sensu_install/Vagrantfile | 90 + .../chef/sensu_install/attributes/default.rb | 6 + .../Check_BOTs/chef/sensu_install/chefignore | 1 + .../Check_BOTs/chef/sensu_install/metadata.rb | 33 + .../chef/sensu_install/recipes/default.rb | 97 + .../templates/default/client.json.erb | 9 + .../templates/default/config.json.erb | 9 + .../Code/Check_BOTs/script.js | 0 .../Code/Composite_BOTs/script.js | 0 .../Code/RUN_BOTs/script.js | 0 .../diskUsageRemediation.py | 51 + .../disk_utility_bot/diskUtility.py | 84 + .../extract_host_ip_bot/extract_host_ip.sh | 2 + .../https_scanner_bot/httpsScanner.sh | 29 + .../nginx_remediation_bot/nginxRemediation.py | 59 + .../pagerduty_create_bot/pagerdutyCreate.py | 73 + .../pagerduty_update_bot/pagerdutyUpdate.py | 83 + .../servicenow_create_bot/servicenowCreate.py | 55 + .../servicenow_update_bot/servicenowUpdate.py | 60 + .../slackNotification.py | 59 + .../Script_BOTs/ssl_check_bot/sslcheck.py | 91 + .../value_predictor_bot/valuePredictor.py | 68 + .../cookbooks/AD_UserCreation/CHANGELOG.md | 11 + .../cookbooks/AD_UserCreation/README.md | 80 + .../AD_UserCreation/attributes/default.rb | 4 + .../AD_UserCreation/attributes/path.json | 45 + .../cookbooks/AD_UserCreation/metadata.rb | 27 + .../AD_UserCreation/recipes/default.rb | 29 + .../cookbooks/AD_UserDeletion/CHANGELOG.md | 11 + .../cookbooks/AD_UserDeletion/README.md | 80 + .../AD_UserDeletion/attributes/default.rb | 2 + .../cookbooks/AD_UserDeletion/metadata.rb | 18 + .../AD_UserDeletion/recipes/default.rb | 20 + .../cookbooks/LDAP_UserCreation/CHANGELOG.md | 11 + .../cookbooks/LDAP_UserCreation/README.md | 80 + .../LDAP_UserCreation/attributes/default.rb | 10 + .../cookbooks/LDAP_UserCreation/metadata.rb | 50 + .../LDAP_UserCreation/recipes/default.rb | 42 + .../templates/default/new.erb | 13 + .../cookbooks/LDAP_UserDeletion/CHANGELOG.md | 11 + .../cookbooks/LDAP_UserDeletion/README.md | 80 + .../LDAP_UserDeletion/attributes/default.rb | 5 + .../cookbooks/LDAP_UserDeletion/metadata.rb | 31 + .../LDAP_UserDeletion/recipes/default.rb | 23 + .../Code/Task_BOTs/script.js | 0 .../Code/Task_BOTs/script/AWS_CLI.sh | 8 + .../Code/Task_BOTs/script/AWS_alert.sh | 85 + .../Task_BOTs/script/Cat_Host_IPAddress.sh | 1 + .../Task_BOTs/script/Cat_User_Creation.sh | 36 + .../script/Meta_bot_Cat_user_creation.sh | 63 + .../Task_BOTs/script/packer_AMI_script.sh | 60 + .../Task_BOTs/script/packer_Docker_image.sh | 83 + ...esults - Feature__EmailLoginAndLogout.html | 664 ++++ .../Gmail_UserCreation/catalyst-Test.iml | 101 + .../UI_BOTs/Gmail_UserCreation/desktop.ini | 4 + .../lib/JSErrorCollector-0.6.jar | Bin 0 -> 9828 bytes .../org/junit/runner/annotations.xml | 5 + .../Code/UI_BOTs/Gmail_UserCreation/pom.xml | 277 ++ .../main/java/com/rl/qa/FileUtilities.java | 155 + .../com/rl/qa/browsers/BrowserDriver.java | 275 ++ .../com/rl/qa/browsers/BrowserFactory.java | 324 ++ .../java/com/rl/qa/browsers/BrowserType.java | 31 + .../main/java/com/rl/qa/steps/CFTSteps.java | 265 ++ .../com/rl/qa/steps/ChefServerSetupSteps.java | 156 + ...igBlueprintForOSImageUsingProAWSSteps.java | 43 + ...figBlueprintForSSTempUsingProAWSSteps.java | 89 + .../qa/steps/ConfigureNexusServerSteps.java | 33 + .../rl/qa/steps/ConfigureProviderSteps.java | 123 + .../qa/steps/ConfigurePuppetServerSteps.java | 44 + .../rl/qa/steps/CreateEditDelBGroupSteps.java | 95 + .../qa/steps/CreateEditDelDesignerSteps.java | 156 + .../rl/qa/steps/CreateEditDelDockerSteps.java | 104 + .../rl/qa/steps/CreateEditDelEnvSteps.java | 136 + .../qa/steps/CreateEditDelJenkinsSteps.java | 36 + .../rl/qa/steps/CreateEditDelOrgSteps.java | 137 + .../qa/steps/CreateEditDelProjectSteps.java | 70 + .../qa/steps/CreateEditDeleteTeamSteps.java | 43 + .../rl/qa/steps/ImportNodeFromChefSteps.java | 154 + .../main/java/com/rl/qa/steps/LoginSteps.java | 317 ++ .../com/rl/qa/steps/ProivderSyncSteps.java | 39 + .../java/com/rl/qa/steps/TemplateSteps.java | 59 + .../java/com/rl/qa/steps/VMImageSteps.java | 43 + .../rl/qa/utils/AjaxEnabledPageFactory.java | 54 + .../main/java/com/rl/qa/utils/BaseView.java | 339 ++ .../java/com/rl/qa/utils/CucumberContext.java | 434 +++ .../com/rl/qa/utils/ForceWaitForItem.java | 16 + .../com/rl/qa/utils/SeleniumUtilities.java | 2730 +++++++++++++++++ .../com/rl/qa/utils/SpreadsheetUtils.java | 235 ++ .../StaleReferenceAwareFieldDecorator.java | 82 + .../main/java/com/rl/qa/utils/ThreadPool.java | 152 + .../main/java/com/rl/qa/views/CFTViews.java | 488 +++ .../com/rl/qa/views/ChefServerSetupViews.java | 269 ++ ...igBlueprintForOSImageUsingProAWSViews.java | 86 + ...figBlueprintForSSTempUsingProAWSViews.java | 170 + .../qa/views/ConfigureNexusServerViews.java | 62 + .../rl/qa/views/ConfigureProviderViews.java | 353 +++ .../qa/views/ConfigurePuppetServerViews.java | 82 + .../rl/qa/views/CreateEditDelBGroupViews.java | 204 ++ .../qa/views/CreateEditDelDesignerViews.java | 383 +++ .../rl/qa/views/CreateEditDelDockerViews.java | 206 ++ .../rl/qa/views/CreateEditDelEnvViews.java | 330 ++ .../qa/views/CreateEditDelJenkinsViews.java | 66 + .../rl/qa/views/CreateEditDelOrgViews.java | 309 ++ .../qa/views/CreateEditDelProjectViews.java | 142 + .../qa/views/CreateEditDeleteTeamViews.java | 127 + .../rl/qa/views/ImportNodesFromChefViews.java | 356 +++ .../main/java/com/rl/qa/views/LoginViews.java | 234 ++ .../java/com/rl/qa/views/TemplateViews.java | 136 + .../java/com/rl/qa/views/VMImageViews.java | 88 + .../src/main/resources/IEDriverServer.exe | Bin 0 -> 2568704 bytes .../main/resources/JSErrorCollector-0.6.jar | Bin 0 -> 9828 bytes .../src/main/resources/chromedriver.exe | Bin 0 -> 7066112 bytes .../main/resources/firebug/firebug-1.9.2.xpi | Bin 0 -> 1335949 bytes .../src/main/resources/log4j.properties | 16 + .../src/main/resources/lx-selenium.properties | 11 + .../resources/users/Administrator.properties | 3 + .../main/resources/users/Broker.properties | 6 + .../main/resources/users/Delete.properties | 3 + .../src/main/resources/users/Edit.properties | 3 + .../users/NoAccessInAdminDash.properties | 3 + .../main/resources/users/No_Access.properties | 3 + .../src/main/resources/users/View.properties | 3 + .../test/java/CreateOrganizationRunner.java | 22 + .../test/java/DeleteOrganizationRunner.java | 20 + .../src/test/java/Mail.java | 24 + .../src/test/java/TestRunner1.java | 52 + .../src/test/java/TestRunner2.java | 24 + .../src/test/java/TestRunner3.java | 22 + .../src/test/java/TestRunner4.java | 25 + .../src/test/java/TestRunner5.java | 24 + .../src/test/java/TestRunner6.java | 21 + .../src/test/java/TestRunner7.java | 22 + .../ConfigBlueprintForCFTUsingProAWS.feature | 201 ++ ...nfigBlueprintForOSImageUsingProAWS.feature | 34 + ...onfigBlueprintForSSTempUsingProAWS.feature | 349 +++ .../CreateCloudFormationBlueprint.feature | 52 + ...DataInSettModuleReqForDesignModule.feature | 160 + .../CreateSoftwareStackBlueprint.feature | 51 + .../test/resources/Upload/JavaStack.template | 78 + .../resources/Upload/azureTestTemplate.json | 188 ++ .../jagadeesh12_ChefServerFile/knife.rb | 11 + .../src/test/resources/Upload/knife.rb | 11 + .../Upload/pcjoshi9_ChefServerFile/knife.rb | 13 + .../settings/ServiceController.feature | 30 + .../catalyst/settings/StackName.feature | 50 + .../configsetup/ChefServerSetup.feature | 124 + .../ConfigurePuppetServerUsingPass.feature | 30 + .../ConfigurePuppetServerUsingPem.feature | 16 + .../configsetup/CreateChefServer.feature | 33 + .../CreateEditDelEnvByCreatingNewEnv.feature | 127 + .../configsetup/CreateEnvFromChef.feature | 25 + .../CreateEnvUsingEnvFromChefServer.feature | 124 + .../configsetup/CreateNewEnvironment.feature | 28 + .../configsetup/ImportNodesFromChef.feature | 354 +++ .../devopssetup/1CreateAWSProvider.feature | 34 + .../ConfigAWSProviderWithInvalidKey.feature | 57 + ...ConfigureAWSProviderUsingAccessKey.feature | 94 + .../ConfigureAWSProviderUsingIAMRole.feature | 73 + .../ConfigureAzureProvider.feature | 87 + .../devopssetup/ConfigureNexusServer.feature | 83 + .../ConfigureOpenStackProvider.feature | 92 + .../ConfigureVMWareProvider.feature | 86 + .../devopssetup/CreateEditDelDocker.feature | 87 + .../devopssetup/CreateEditDelJenkins.feature | 84 + .../devopssetup/CreateVMImgAWS.feature | 28 + .../1CreateSoftwareStackTemp.feature | 27 + .../CreateCloudFormationTemp.feature | 26 + .../CreateEditDelCloudFormationTemp.feature | 90 + .../CreateEditDelDockerTemplate.feature | 89 + .../CreateEditDelSoftwareStackTemp.feature | 120 + ...EditDelVMImageUsingProviderTypeAWS.feature | 115 + ...lVMImageUsingProviderTypeOpenStack.feature | 120 + ...tDelVMImageUsingProviderTypeVMware.feature | 116 + .../CreateEditDeleteARMTemplate.feature | 90 + ...eleteVMImageUsingProviderTypeAzure.feature | 114 + .../orgsetup/1CreateOrganization.feature | 24 + .../orgsetup/CreateBusinessGroup.feature | 21 + .../orgsetup/CreateEditDelBGroup.feature | 89 + .../orgsetup/CreateEditDelOrg.feature | 54 + .../orgsetup/CreateEditDelProject.feature | 133 + .../settings/orgsetup/CreateProject.feature | 57 + .../orgsetup/DeleteOrganization.feature | 19 + .../providersync/providersync.feature | 275 ++ .../userssetup/CreateEditDelDesigner.feature | 97 + .../userssetup/CreateEditDelOrgAdmin.feature | 99 + .../CreateEditDelSuperadmin.feature | 99 + .../userssetup/CreateEditDeleteTeams.feature | 170 + .../settings/userssetup/CreateNewTeam.feature | 26 + .../userssetup/CreateOrgAdmin.feature | 35 + ...teOrgAndVerifyFourAutoCreatedTeams.feature | 59 + .../userssetup/CreateSuperadmin.feature | 28 + .../emailLoginAndLogout.feature | 11 + .../Jira_UserCreation/catalyst-Test.iml | 186 ++ .../UI_BOTs/Jira_UserCreation/desktop.ini | 4 + .../lib/JSErrorCollector-0.6.jar | Bin 0 -> 9828 bytes .../org/junit/runner/annotations.xml | 5 + .../Code/UI_BOTs/Jira_UserCreation/pom.xml | 274 ++ .../main/java/com/rl/qa/FileUtilities.java | 155 + .../com/rl/qa/browsers/BrowserDriver.java | 275 ++ .../com/rl/qa/browsers/BrowserFactory.java | 316 ++ .../java/com/rl/qa/browsers/BrowserType.java | 31 + .../main/java/com/rl/qa/steps/CFTSteps.java | 265 ++ .../com/rl/qa/steps/ChefServerSetupSteps.java | 156 + ...igBlueprintForOSImageUsingProAWSSteps.java | 43 + ...figBlueprintForSSTempUsingProAWSSteps.java | 89 + .../qa/steps/ConfigureNexusServerSteps.java | 33 + .../rl/qa/steps/ConfigureProviderSteps.java | 123 + .../qa/steps/ConfigurePuppetServerSteps.java | 44 + .../rl/qa/steps/CreateEditDelBGroupSteps.java | 95 + .../qa/steps/CreateEditDelDesignerSteps.java | 156 + .../rl/qa/steps/CreateEditDelDockerSteps.java | 104 + .../rl/qa/steps/CreateEditDelEnvSteps.java | 136 + .../qa/steps/CreateEditDelJenkinsSteps.java | 36 + .../rl/qa/steps/CreateEditDelOrgSteps.java | 137 + .../qa/steps/CreateEditDelProjectSteps.java | 70 + .../qa/steps/CreateEditDeleteTeamSteps.java | 43 + .../rl/qa/steps/ImportNodeFromChefSteps.java | 154 + .../main/java/com/rl/qa/steps/JiraSteps.java | 114 + .../main/java/com/rl/qa/steps/LoginSteps.java | 307 ++ .../com/rl/qa/steps/ProivderSyncSteps.java | 39 + .../java/com/rl/qa/steps/TemplateSteps.java | 59 + .../java/com/rl/qa/steps/VMImageSteps.java | 43 + .../rl/qa/utils/AjaxEnabledPageFactory.java | 54 + .../main/java/com/rl/qa/utils/BaseView.java | 339 ++ .../java/com/rl/qa/utils/CucumberContext.java | 434 +++ .../com/rl/qa/utils/ForceWaitForItem.java | 16 + .../com/rl/qa/utils/SeleniumUtilities.java | 2730 +++++++++++++++++ .../com/rl/qa/utils/SpreadsheetUtils.java | 235 ++ .../StaleReferenceAwareFieldDecorator.java | 82 + .../main/java/com/rl/qa/utils/ThreadPool.java | 152 + .../main/java/com/rl/qa/views/CFTViews.java | 488 +++ .../com/rl/qa/views/ChefServerSetupViews.java | 269 ++ ...igBlueprintForOSImageUsingProAWSViews.java | 86 + ...figBlueprintForSSTempUsingProAWSViews.java | 170 + .../qa/views/ConfigureNexusServerViews.java | 62 + .../rl/qa/views/ConfigureProviderViews.java | 353 +++ .../qa/views/ConfigurePuppetServerViews.java | 82 + .../rl/qa/views/CreateEditDelBGroupViews.java | 204 ++ .../qa/views/CreateEditDelDesignerViews.java | 383 +++ .../rl/qa/views/CreateEditDelDockerViews.java | 206 ++ .../rl/qa/views/CreateEditDelEnvViews.java | 330 ++ .../qa/views/CreateEditDelJenkinsViews.java | 66 + .../rl/qa/views/CreateEditDelOrgViews.java | 309 ++ .../qa/views/CreateEditDelProjectViews.java | 142 + .../qa/views/CreateEditDeleteTeamViews.java | 127 + .../rl/qa/views/ImportNodesFromChefViews.java | 356 +++ .../main/java/com/rl/qa/views/JIRAViews.java | 184 ++ .../main/java/com/rl/qa/views/LoginViews.java | 112 + .../java/com/rl/qa/views/TemplateViews.java | 136 + .../java/com/rl/qa/views/VMImageViews.java | 88 + .../src/main/resources/IEDriverServer.exe | Bin 0 -> 2568704 bytes .../main/resources/JSErrorCollector-0.6.jar | Bin 0 -> 9828 bytes .../src/main/resources/chromedriver.exe | Bin 0 -> 5285376 bytes .../main/resources/firebug/firebug-1.9.2.xpi | Bin 0 -> 1335949 bytes .../src/main/resources/log4j.properties | 16 + .../src/main/resources/lx-selenium.properties | 11 + .../resources/users/Administrator.properties | 3 + .../main/resources/users/Broker.properties | 6 + .../main/resources/users/Delete.properties | 3 + .../src/main/resources/users/Edit.properties | 3 + .../users/NoAccessInAdminDash.properties | 3 + .../main/resources/users/No_Access.properties | 3 + .../src/main/resources/users/View.properties | 3 + .../src/test/java/CreateJiraUserRunner.java | 24 + .../test/java/CreateOrganizationRunner.java | 22 + .../test/java/DeleteOrganizationRunner.java | 20 + .../src/test/java/TestRunner1.java | 53 + .../src/test/java/TestRunner2.java | 24 + .../src/test/java/TestRunner3.java | 22 + .../src/test/java/TestRunner4.java | 25 + .../src/test/java/TestRunner5.java | 24 + .../src/test/java/TestRunner6.java | 21 + .../src/test/java/TestRunner7.java | 22 + .../ConfigBlueprintForCFTUsingProAWS.feature | 201 ++ ...nfigBlueprintForOSImageUsingProAWS.feature | 34 + ...onfigBlueprintForSSTempUsingProAWS.feature | 349 +++ .../CreateCloudFormationBlueprint.feature | 52 + ...DataInSettModuleReqForDesignModule.feature | 160 + .../CreateSoftwareStackBlueprint.feature | 51 + .../test/resources/Upload/JavaStack.template | 78 + .../resources/Upload/azureTestTemplate.json | 188 ++ .../jagadeesh12_ChefServerFile/knife.rb | 11 + .../src/test/resources/Upload/knife.rb | 11 + .../Upload/pcjoshi9_ChefServerFile/knife.rb | 13 + .../JiraScenarios/createJiraUser.feature | 23 + .../settings/ServiceController.feature | 30 + .../catalyst/settings/StackName.feature | 50 + .../configsetup/ChefServerSetup.feature | 124 + .../ConfigurePuppetServerUsingPass.feature | 30 + .../ConfigurePuppetServerUsingPem.feature | 16 + .../configsetup/CreateChefServer.feature | 33 + .../CreateEditDelEnvByCreatingNewEnv.feature | 127 + .../configsetup/CreateEnvFromChef.feature | 25 + .../CreateEnvUsingEnvFromChefServer.feature | 124 + .../configsetup/CreateNewEnvironment.feature | 28 + .../configsetup/ImportNodesFromChef.feature | 354 +++ .../devopssetup/1CreateAWSProvider.feature | 34 + .../ConfigAWSProviderWithInvalidKey.feature | 57 + ...ConfigureAWSProviderUsingAccessKey.feature | 94 + .../ConfigureAWSProviderUsingIAMRole.feature | 73 + .../ConfigureAzureProvider.feature | 87 + .../devopssetup/ConfigureNexusServer.feature | 83 + .../ConfigureOpenStackProvider.feature | 92 + .../ConfigureVMWareProvider.feature | 86 + .../devopssetup/CreateEditDelDocker.feature | 87 + .../devopssetup/CreateEditDelJenkins.feature | 84 + .../devopssetup/CreateVMImgAWS.feature | 28 + .../1CreateSoftwareStackTemp.feature | 27 + .../CreateCloudFormationTemp.feature | 26 + .../CreateEditDelCloudFormationTemp.feature | 90 + .../CreateEditDelDockerTemplate.feature | 89 + .../CreateEditDelSoftwareStackTemp.feature | 120 + ...EditDelVMImageUsingProviderTypeAWS.feature | 115 + ...lVMImageUsingProviderTypeOpenStack.feature | 120 + ...tDelVMImageUsingProviderTypeVMware.feature | 116 + .../CreateEditDeleteARMTemplate.feature | 90 + ...eleteVMImageUsingProviderTypeAzure.feature | 114 + .../orgsetup/1CreateOrganization.feature | 24 + .../orgsetup/CreateBusinessGroup.feature | 21 + .../orgsetup/CreateEditDelBGroup.feature | 89 + .../orgsetup/CreateEditDelOrg.feature | 54 + .../orgsetup/CreateEditDelProject.feature | 133 + .../settings/orgsetup/CreateProject.feature | 57 + .../orgsetup/DeleteOrganization.feature | 19 + .../providersync/providersync.feature | 275 ++ .../userssetup/CreateEditDelDesigner.feature | 97 + .../userssetup/CreateEditDelOrgAdmin.feature | 99 + .../CreateEditDelSuperadmin.feature | 99 + .../userssetup/CreateEditDeleteTeams.feature | 170 + .../settings/userssetup/CreateNewTeam.feature | 26 + .../userssetup/CreateOrgAdmin.feature | 35 + ...teOrgAndVerifyFourAutoCreatedTeams.feature | 59 + .../userssetup/CreateSuperadmin.feature | 28 + .../New_Jira_UserCreation/catalyst-Test.iml | 102 + .../UI_BOTs/New_Jira_UserCreation/desktop.ini | 4 + .../lib/JSErrorCollector-0.6.jar | Bin 0 -> 9828 bytes .../org/junit/runner/annotations.xml | 5 + .../UI_BOTs/New_Jira_UserCreation/pom.xml | 283 ++ .../main/java/com/rl/qa/FileUtilities.java | 155 + .../com/rl/qa/browsers/BrowserDriver.java | 275 ++ .../com/rl/qa/browsers/BrowserFactory.java | 316 ++ .../java/com/rl/qa/browsers/BrowserType.java | 31 + .../main/java/com/rl/qa/steps/CFTSteps.java | 265 ++ .../com/rl/qa/steps/ChefServerSetupSteps.java | 156 + ...igBlueprintForOSImageUsingProAWSSteps.java | 43 + ...figBlueprintForSSTempUsingProAWSSteps.java | 89 + .../qa/steps/ConfigureNexusServerSteps.java | 33 + .../rl/qa/steps/ConfigureProviderSteps.java | 123 + .../qa/steps/ConfigurePuppetServerSteps.java | 44 + .../rl/qa/steps/CreateEditDelBGroupSteps.java | 95 + .../qa/steps/CreateEditDelDesignerSteps.java | 156 + .../rl/qa/steps/CreateEditDelDockerSteps.java | 104 + .../rl/qa/steps/CreateEditDelEnvSteps.java | 136 + .../qa/steps/CreateEditDelJenkinsSteps.java | 36 + .../rl/qa/steps/CreateEditDelOrgSteps.java | 137 + .../qa/steps/CreateEditDelProjectSteps.java | 70 + .../qa/steps/CreateEditDeleteTeamSteps.java | 43 + .../rl/qa/steps/ImportNodeFromChefSteps.java | 154 + .../main/java/com/rl/qa/steps/JiraSteps.java | 187 ++ .../main/java/com/rl/qa/steps/LoginSteps.java | 337 ++ .../com/rl/qa/steps/ProivderSyncSteps.java | 39 + .../java/com/rl/qa/steps/TemplateSteps.java | 59 + .../java/com/rl/qa/steps/VMImageSteps.java | 43 + .../rl/qa/utils/AjaxEnabledPageFactory.java | 54 + .../main/java/com/rl/qa/utils/BaseView.java | 339 ++ .../java/com/rl/qa/utils/CucumberContext.java | 434 +++ .../com/rl/qa/utils/ForceWaitForItem.java | 16 + .../com/rl/qa/utils/SeleniumUtilities.java | 2730 +++++++++++++++++ .../com/rl/qa/utils/SpreadsheetUtils.java | 235 ++ .../StaleReferenceAwareFieldDecorator.java | 82 + .../main/java/com/rl/qa/utils/ThreadPool.java | 152 + .../main/java/com/rl/qa/views/CFTViews.java | 488 +++ .../com/rl/qa/views/ChefServerSetupViews.java | 269 ++ ...igBlueprintForOSImageUsingProAWSViews.java | 86 + ...figBlueprintForSSTempUsingProAWSViews.java | 170 + .../qa/views/ConfigureNexusServerViews.java | 62 + .../rl/qa/views/ConfigureProviderViews.java | 353 +++ .../qa/views/ConfigurePuppetServerViews.java | 82 + .../rl/qa/views/CreateEditDelBGroupViews.java | 204 ++ .../qa/views/CreateEditDelDesignerViews.java | 383 +++ .../rl/qa/views/CreateEditDelDockerViews.java | 206 ++ .../rl/qa/views/CreateEditDelEnvViews.java | 330 ++ .../qa/views/CreateEditDelJenkinsViews.java | 66 + .../rl/qa/views/CreateEditDelOrgViews.java | 309 ++ .../qa/views/CreateEditDelProjectViews.java | 142 + .../qa/views/CreateEditDeleteTeamViews.java | 127 + .../rl/qa/views/ImportNodesFromChefViews.java | 356 +++ .../main/java/com/rl/qa/views/JIRAViews.java | 187 ++ .../main/java/com/rl/qa/views/LoginViews.java | 113 + .../java/com/rl/qa/views/TemplateViews.java | 136 + .../java/com/rl/qa/views/VMImageViews.java | 88 + .../src/main/resources/IEDriverServer.exe | Bin 0 -> 2568704 bytes .../main/resources/JSErrorCollector-0.6.jar | Bin 0 -> 9828 bytes .../src/main/resources/chromedriver.exe | Bin 0 -> 5285376 bytes .../main/resources/firebug/firebug-1.9.2.xpi | Bin 0 -> 1335949 bytes .../src/main/resources/log4j.properties | 16 + .../src/main/resources/lx-selenium.properties | 13 + .../resources/users/Administrator.properties | 3 + .../main/resources/users/Broker.properties | 6 + .../main/resources/users/Delete.properties | 3 + .../src/main/resources/users/Edit.properties | 3 + .../users/NoAccessInAdminDash.properties | 3 + .../main/resources/users/No_Access.properties | 3 + .../src/main/resources/users/View.properties | 3 + .../src/test/java/CreateJiraUserRunner.java | 24 + .../test/java/CreateOrganizationRunner.java | 22 + .../src/test/java/DeleteJiraUserRunner.java | 23 + .../test/java/DeleteOrganizationRunner.java | 20 + .../src/test/java/TestRunner1.java | 53 + .../src/test/java/TestRunner2.java | 24 + .../src/test/java/TestRunner3.java | 22 + .../src/test/java/TestRunner4.java | 25 + .../src/test/java/TestRunner5.java | 24 + .../src/test/java/TestRunner6.java | 21 + .../src/test/java/TestRunner7.java | 22 + .../ConfigBlueprintForCFTUsingProAWS.feature | 201 ++ ...nfigBlueprintForOSImageUsingProAWS.feature | 34 + ...onfigBlueprintForSSTempUsingProAWS.feature | 349 +++ .../CreateCloudFormationBlueprint.feature | 52 + ...DataInSettModuleReqForDesignModule.feature | 160 + .../CreateSoftwareStackBlueprint.feature | 51 + .../test/resources/Upload/JavaStack.template | 78 + .../resources/Upload/azureTestTemplate.json | 188 ++ .../jagadeesh12_ChefServerFile/knife.rb | 11 + .../src/test/resources/Upload/knife.rb | 11 + .../Upload/pcjoshi9_ChefServerFile/knife.rb | 13 + .../JiraScenarios/createJiraUser.feature | 25 + .../JiraScenarios/deleteJiraUser.feature | 20 + .../settings/ServiceController.feature | 30 + .../catalyst/settings/StackName.feature | 50 + .../configsetup/ChefServerSetup.feature | 124 + .../ConfigurePuppetServerUsingPass.feature | 30 + .../ConfigurePuppetServerUsingPem.feature | 16 + .../configsetup/CreateChefServer.feature | 33 + .../CreateEditDelEnvByCreatingNewEnv.feature | 127 + .../configsetup/CreateEnvFromChef.feature | 25 + .../CreateEnvUsingEnvFromChefServer.feature | 124 + .../configsetup/CreateNewEnvironment.feature | 28 + .../configsetup/ImportNodesFromChef.feature | 354 +++ .../devopssetup/1CreateAWSProvider.feature | 34 + .../ConfigAWSProviderWithInvalidKey.feature | 57 + ...ConfigureAWSProviderUsingAccessKey.feature | 94 + .../ConfigureAWSProviderUsingIAMRole.feature | 73 + .../ConfigureAzureProvider.feature | 87 + .../devopssetup/ConfigureNexusServer.feature | 83 + .../ConfigureOpenStackProvider.feature | 92 + .../ConfigureVMWareProvider.feature | 86 + .../devopssetup/CreateEditDelDocker.feature | 87 + .../devopssetup/CreateEditDelJenkins.feature | 84 + .../devopssetup/CreateVMImgAWS.feature | 28 + .../1CreateSoftwareStackTemp.feature | 27 + .../CreateCloudFormationTemp.feature | 26 + .../CreateEditDelCloudFormationTemp.feature | 90 + .../CreateEditDelDockerTemplate.feature | 89 + .../CreateEditDelSoftwareStackTemp.feature | 120 + ...EditDelVMImageUsingProviderTypeAWS.feature | 115 + ...lVMImageUsingProviderTypeOpenStack.feature | 120 + ...tDelVMImageUsingProviderTypeVMware.feature | 116 + .../CreateEditDeleteARMTemplate.feature | 90 + ...eleteVMImageUsingProviderTypeAzure.feature | 114 + .../orgsetup/1CreateOrganization.feature | 24 + .../orgsetup/CreateBusinessGroup.feature | 21 + .../orgsetup/CreateEditDelBGroup.feature | 89 + .../orgsetup/CreateEditDelOrg.feature | 54 + .../orgsetup/CreateEditDelProject.feature | 133 + .../settings/orgsetup/CreateProject.feature | 57 + .../orgsetup/DeleteOrganization.feature | 19 + .../providersync/providersync.feature | 275 ++ .../userssetup/CreateEditDelDesigner.feature | 97 + .../userssetup/CreateEditDelOrgAdmin.feature | 99 + .../CreateEditDelSuperadmin.feature | 99 + .../userssetup/CreateEditDeleteTeams.feature | 170 + .../settings/userssetup/CreateNewTeam.feature | 26 + .../userssetup/CreateOrgAdmin.feature | 35 + ...teOrgAndVerifyFourAutoCreatedTeams.feature | 59 + .../userssetup/CreateSuperadmin.feature | 28 + .../target/classes/IEDriverServer.exe | Bin 0 -> 3624849 bytes .../target/classes/JSErrorCollector-0.6.jar | Bin 0 -> 16385 bytes .../target/classes/chromedriver.exe | Bin 0 -> 8946951 bytes .../classes/com/rl/qa/FileUtilities.class | Bin 0 -> 4387 bytes .../com/rl/qa/browsers/BrowserDriver$1.class | Bin 0 -> 1146 bytes .../BrowserDriver$BrowserCleanup.class | Bin 0 -> 1367 bytes .../com/rl/qa/browsers/BrowserDriver.class | Bin 0 -> 10734 bytes .../com/rl/qa/browsers/BrowserFactory$1.class | Bin 0 -> 1030 bytes .../com/rl/qa/browsers/BrowserFactory.class | Bin 0 -> 8726 bytes .../com/rl/qa/browsers/BrowserType.class | Bin 0 -> 2008 bytes .../classes/com/rl/qa/steps/CFTSteps.class | Bin 0 -> 12283 bytes .../rl/qa/steps/ChefServerSetupSteps.class | Bin 0 -> 7515 bytes ...gBlueprintForOSImageUsingProAWSSteps.class | Bin 0 -> 2323 bytes ...igBlueprintForSSTempUsingProAWSSteps.class | Bin 0 -> 4452 bytes .../qa/steps/ConfigureNexusServerSteps.class | Bin 0 -> 2116 bytes .../rl/qa/steps/ConfigureProviderSteps.class | Bin 0 -> 5755 bytes .../qa/steps/ConfigurePuppetServerSteps.class | Bin 0 -> 2259 bytes .../qa/steps/CreateEditDelBGroupSteps.class | Bin 0 -> 4349 bytes .../qa/steps/CreateEditDelDesignerSteps.class | Bin 0 -> 6602 bytes .../qa/steps/CreateEditDelDockerSteps.class | Bin 0 -> 4868 bytes .../rl/qa/steps/CreateEditDelEnvSteps.class | Bin 0 -> 6371 bytes .../qa/steps/CreateEditDelJenkinsSteps.class | Bin 0 -> 2001 bytes .../rl/qa/steps/CreateEditDelOrgSteps.class | Bin 0 -> 6097 bytes .../qa/steps/CreateEditDelProjectSteps.class | Bin 0 -> 3282 bytes .../qa/steps/CreateEditDeleteTeamSteps.class | Bin 0 -> 2534 bytes .../rl/qa/steps/ImportNodeFromChefSteps.class | Bin 0 -> 6813 bytes .../classes/com/rl/qa/steps/JiraSteps.class | Bin 0 -> 5143 bytes .../classes/com/rl/qa/steps/LoginSteps.class | Bin 0 -> 7118 bytes .../com/rl/qa/steps/ProivderSyncSteps.class | Bin 0 -> 1637 bytes .../com/rl/qa/steps/TemplateSteps.class | Bin 0 -> 3068 bytes .../com/rl/qa/steps/VMImageSteps.class | Bin 0 -> 2394 bytes .../rl/qa/utils/AjaxEnabledPageFactory.class | Bin 0 -> 2919 bytes .../classes/com/rl/qa/utils/BaseView.class | Bin 0 -> 10762 bytes .../com/rl/qa/utils/CucumberContext$1.class | Bin 0 -> 704 bytes .../com/rl/qa/utils/CucumberContext.class | Bin 0 -> 7746 bytes .../com/rl/qa/utils/ForceWaitForItem.class | Bin 0 -> 964 bytes .../com/rl/qa/utils/SeleniumUtilities$1.class | Bin 0 -> 1701 bytes .../com/rl/qa/utils/SeleniumUtilities$2.class | Bin 0 -> 1334 bytes .../com/rl/qa/utils/SeleniumUtilities$3.class | Bin 0 -> 1089 bytes .../qa/utils/SeleniumUtilities$Locators.class | Bin 0 -> 1461 bytes .../com/rl/qa/utils/SeleniumUtilities.class | Bin 0 -> 68806 bytes .../com/rl/qa/utils/SpreadsheetUtils.class | Bin 0 -> 6929 bytes ...or$StaleReferenceAwareElementLocator.class | Bin 0 -> 3073 bytes .../StaleReferenceAwareFieldDecorator.class | Bin 0 -> 1832 bytes .../classes/com/rl/qa/utils/ThreadPool.class | Bin 0 -> 3313 bytes .../classes/com/rl/qa/views/CFTViews.class | Bin 0 -> 14449 bytes .../rl/qa/views/ChefServerSetupViews.class | Bin 0 -> 8314 bytes ...gBlueprintForOSImageUsingProAWSViews.class | Bin 0 -> 3337 bytes ...igBlueprintForSSTempUsingProAWSViews.class | Bin 0 -> 5858 bytes .../qa/views/ConfigureNexusServerViews.class | Bin 0 -> 2864 bytes .../rl/qa/views/ConfigureProviderViews.class | Bin 0 -> 11062 bytes .../qa/views/ConfigurePuppetServerViews.class | Bin 0 -> 2786 bytes .../qa/views/CreateEditDelBGroupViews.class | Bin 0 -> 6416 bytes .../qa/views/CreateEditDelDesignerViews.class | Bin 0 -> 9908 bytes .../qa/views/CreateEditDelDockerViews.class | Bin 0 -> 5959 bytes .../rl/qa/views/CreateEditDelEnvViews.class | Bin 0 -> 9902 bytes .../qa/views/CreateEditDelJenkinsViews.class | Bin 0 -> 3051 bytes .../rl/qa/views/CreateEditDelOrgViews.class | Bin 0 -> 9207 bytes .../qa/views/CreateEditDelProjectViews.class | Bin 0 -> 5158 bytes .../qa/views/CreateEditDeleteTeamViews.class | Bin 0 -> 4534 bytes .../qa/views/ImportNodesFromChefViews.class | Bin 0 -> 11267 bytes .../classes/com/rl/qa/views/JIRAViews.class | Bin 0 -> 4764 bytes .../classes/com/rl/qa/views/LoginViews.class | Bin 0 -> 3220 bytes .../com/rl/qa/views/TemplateViews.class | Bin 0 -> 5598 bytes .../com/rl/qa/views/VMImageViews.class | Bin 0 -> 3463 bytes .../target/classes/firebug/firebug-1.9.2.xpi | Bin 0 -> 2378264 bytes .../target/classes/log4j.properties | 16 + .../target/classes/lx-selenium.properties | 13 + .../classes/users/Administrator.properties | 3 + .../target/classes/users/Broker.properties | 6 + .../target/classes/users/Delete.properties | 3 + .../target/classes/users/Edit.properties | 3 + .../users/NoAccessInAdminDash.properties | 3 + .../target/classes/users/No_Access.properties | 3 + .../target/classes/users/View.properties | 3 + .../target/cucumber/formatter.js | 228 ++ .../target/cucumber/index.html | 14 + .../target/cucumber/jquery-1.8.2.min.js | 2 + .../target/cucumber/report.js | 203 ++ .../target/cucumber/style.css | 96 + .../target/reports/json/CreateJiraUser.json | 222 ++ .../target/reports/json/DeleteJiraUser.json | 208 ++ .../enterUsername19012017_062412.png | Bin 0 -> 27145 bytes .../test-classes/CreateJiraUserRunner.class | Bin 0 -> 683 bytes .../CreateOrganizationRunner.class | Bin 0 -> 704 bytes .../test-classes/DeleteJiraUserRunner.class | Bin 0 -> 683 bytes .../DeleteOrganizationRunner.class | Bin 0 -> 706 bytes .../ConfigBlueprintForCFTUsingProAWS.feature | 201 ++ ...nfigBlueprintForOSImageUsingProAWS.feature | 34 + ...onfigBlueprintForSSTempUsingProAWS.feature | 349 +++ .../CreateCloudFormationBlueprint.feature | 52 + ...DataInSettModuleReqForDesignModule.feature | 160 + .../CreateSoftwareStackBlueprint.feature | 51 + .../target/test-classes/TestRunner1.class | Bin 0 -> 670 bytes .../target/test-classes/TestRunner2.class | Bin 0 -> 595 bytes .../target/test-classes/TestRunner3.class | Bin 0 -> 603 bytes .../target/test-classes/TestRunner4.class | Bin 0 -> 596 bytes .../target/test-classes/TestRunner5.class | Bin 0 -> 600 bytes .../target/test-classes/TestRunner6.class | Bin 0 -> 943 bytes .../target/test-classes/TestRunner7.class | Bin 0 -> 846 bytes .../test-classes/Upload/JavaStack.template | 78 + .../Upload/azureTestTemplate.json | 188 ++ .../jagadeesh12_ChefServerFile/knife.rb | 11 + .../target/test-classes/Upload/knife.rb | 11 + .../Upload/pcjoshi9_ChefServerFile/knife.rb | 13 + .../JiraScenarios/createJiraUser.feature | 25 + .../JiraScenarios/deleteJiraUser.feature | 20 + .../settings/ServiceController.feature | 30 + .../catalyst/settings/StackName.feature | 50 + .../configsetup/ChefServerSetup.feature | 124 + .../ConfigurePuppetServerUsingPass.feature | 30 + .../ConfigurePuppetServerUsingPem.feature | 16 + .../configsetup/CreateChefServer.feature | 33 + .../CreateEditDelEnvByCreatingNewEnv.feature | 127 + .../configsetup/CreateEnvFromChef.feature | 25 + .../CreateEnvUsingEnvFromChefServer.feature | 124 + .../configsetup/CreateNewEnvironment.feature | 28 + .../configsetup/ImportNodesFromChef.feature | 354 +++ .../devopssetup/1CreateAWSProvider.feature | 34 + .../ConfigAWSProviderWithInvalidKey.feature | 57 + ...ConfigureAWSProviderUsingAccessKey.feature | 94 + .../ConfigureAWSProviderUsingIAMRole.feature | 73 + .../ConfigureAzureProvider.feature | 87 + .../devopssetup/ConfigureNexusServer.feature | 83 + .../ConfigureOpenStackProvider.feature | 92 + .../ConfigureVMWareProvider.feature | 86 + .../devopssetup/CreateEditDelDocker.feature | 87 + .../devopssetup/CreateEditDelJenkins.feature | 84 + .../devopssetup/CreateVMImgAWS.feature | 28 + .../1CreateSoftwareStackTemp.feature | 27 + .../CreateCloudFormationTemp.feature | 26 + .../CreateEditDelCloudFormationTemp.feature | 90 + .../CreateEditDelDockerTemplate.feature | 89 + .../CreateEditDelSoftwareStackTemp.feature | 120 + ...EditDelVMImageUsingProviderTypeAWS.feature | 115 + ...lVMImageUsingProviderTypeOpenStack.feature | 120 + ...tDelVMImageUsingProviderTypeVMware.feature | 116 + .../CreateEditDeleteARMTemplate.feature | 90 + ...eleteVMImageUsingProviderTypeAzure.feature | 114 + .../orgsetup/1CreateOrganization.feature | 24 + .../orgsetup/CreateBusinessGroup.feature | 21 + .../orgsetup/CreateEditDelBGroup.feature | 89 + .../orgsetup/CreateEditDelOrg.feature | 54 + .../orgsetup/CreateEditDelProject.feature | 133 + .../settings/orgsetup/CreateProject.feature | 57 + .../orgsetup/DeleteOrganization.feature | 19 + .../providersync/providersync.feature | 275 ++ .../userssetup/CreateEditDelDesigner.feature | 97 + .../userssetup/CreateEditDelOrgAdmin.feature | 99 + .../CreateEditDelSuperadmin.feature | 99 + .../userssetup/CreateEditDeleteTeams.feature | 170 + .../settings/userssetup/CreateNewTeam.feature | 26 + .../userssetup/CreateOrgAdmin.feature | 35 + ...teOrgAndVerifyFourAutoCreatedTeams.feature | 59 + .../userssetup/CreateSuperadmin.feature | 28 + .../UI_BOTs/Org_Creation/catalyst-Test.iml | 104 + .../Code/UI_BOTs/Org_Creation/desktop.ini | 4 + .../Org_Creation/lib/JSErrorCollector-0.6.jar | Bin 0 -> 9828 bytes .../org/junit/runner/annotations.xml | 5 + .../Code/UI_BOTs/Org_Creation/pom.xml | 275 ++ .../main/java/com/rl/qa/FileUtilities.java | 155 + .../com/rl/qa/browsers/BrowserDriver.java | 275 ++ .../com/rl/qa/browsers/BrowserFactory.java | 316 ++ .../java/com/rl/qa/browsers/BrowserType.java | 31 + .../main/java/com/rl/qa/steps/CFTSteps.java | 231 ++ .../com/rl/qa/steps/ChefServerSetupSteps.java | 156 + ...igBlueprintForOSImageUsingProAWSSteps.java | 43 + ...figBlueprintForSSTempUsingProAWSSteps.java | 89 + .../qa/steps/ConfigureNexusServerSteps.java | 33 + .../rl/qa/steps/ConfigureProviderSteps.java | 123 + .../qa/steps/ConfigurePuppetServerSteps.java | 44 + .../rl/qa/steps/CreateEditDelBGroupSteps.java | 95 + .../qa/steps/CreateEditDelDesignerSteps.java | 156 + .../rl/qa/steps/CreateEditDelDockerSteps.java | 104 + .../rl/qa/steps/CreateEditDelEnvSteps.java | 136 + .../qa/steps/CreateEditDelJenkinsSteps.java | 36 + .../rl/qa/steps/CreateEditDelOrgSteps.java | 131 + .../qa/steps/CreateEditDelProjectSteps.java | 70 + .../qa/steps/CreateEditDeleteTeamSteps.java | 43 + .../rl/qa/steps/ImportNodeFromChefSteps.java | 154 + .../main/java/com/rl/qa/steps/LoginSteps.java | 231 ++ .../com/rl/qa/steps/ProivderSyncSteps.java | 39 + .../java/com/rl/qa/steps/TemplateSteps.java | 59 + .../java/com/rl/qa/steps/VMImageSteps.java | 43 + .../rl/qa/utils/AjaxEnabledPageFactory.java | 54 + .../main/java/com/rl/qa/utils/BaseView.java | 339 ++ .../java/com/rl/qa/utils/CucumberContext.java | 434 +++ .../com/rl/qa/utils/ForceWaitForItem.java | 16 + .../com/rl/qa/utils/SeleniumUtilities.java | 2730 +++++++++++++++++ .../com/rl/qa/utils/SpreadsheetUtils.java | 235 ++ .../StaleReferenceAwareFieldDecorator.java | 82 + .../main/java/com/rl/qa/utils/ThreadPool.java | 152 + .../main/java/com/rl/qa/views/CFTViews.java | 415 +++ .../com/rl/qa/views/ChefServerSetupViews.java | 269 ++ .../rl/qa/views/ChefServerSetupViews.java~ | 269 ++ ...igBlueprintForOSImageUsingProAWSViews.java | 86 + ...figBlueprintForSSTempUsingProAWSViews.java | 170 + .../qa/views/ConfigureNexusServerViews.java | 62 + .../rl/qa/views/ConfigureProviderViews.java | 353 +++ .../qa/views/ConfigurePuppetServerViews.java | 82 + .../rl/qa/views/CreateEditDelBGroupViews.java | 204 ++ .../qa/views/CreateEditDelDesignerViews.java | 383 +++ .../rl/qa/views/CreateEditDelDockerViews.java | 206 ++ .../rl/qa/views/CreateEditDelEnvViews.java | 330 ++ .../qa/views/CreateEditDelJenkinsViews.java | 66 + .../rl/qa/views/CreateEditDelOrgViews.java | 285 ++ .../rl/qa/views/CreateEditDelOrgViews.java~ | 285 ++ .../qa/views/CreateEditDelProjectViews.java | 142 + .../qa/views/CreateEditDeleteTeamViews.java | 127 + .../rl/qa/views/ImportNodesFromChefViews.java | 356 +++ .../main/java/com/rl/qa/views/LoginViews.java | 69 + .../java/com/rl/qa/views/TemplateViews.java | 136 + .../java/com/rl/qa/views/VMImageViews.java | 88 + .../src/main/resources/IEDriverServer.exe | Bin 0 -> 2568704 bytes .../main/resources/JSErrorCollector-0.6.jar | Bin 0 -> 9828 bytes .../src/main/resources/chromedriver.exe | Bin 0 -> 5285376 bytes .../main/resources/firebug/firebug-1.9.2.xpi | Bin 0 -> 1335949 bytes .../src/main/resources/log4j.properties | 16 + .../src/main/resources/lx-selenium.properties | 11 + .../resources/users/Administrator.properties | 3 + .../main/resources/users/Broker.properties | 6 + .../main/resources/users/Delete.properties | 3 + .../src/main/resources/users/Edit.properties | 3 + .../users/NoAccessInAdminDash.properties | 3 + .../main/resources/users/No_Access.properties | 3 + .../src/main/resources/users/View.properties | 3 + .../test/java/CreateOrganizationRunner.java | 22 + .../src/test/java/TestRunner1.java | 53 + .../src/test/java/TestRunner2.java | 24 + .../src/test/java/TestRunner3.java | 22 + .../src/test/java/TestRunner4.java | 25 + .../src/test/java/TestRunner5.java | 24 + .../src/test/java/TestRunner6.java | 21 + .../src/test/java/TestRunner7.java | 22 + .../ConfigBlueprintForCFTUsingProAWS.feature | 201 ++ ...nfigBlueprintForOSImageUsingProAWS.feature | 34 + ...onfigBlueprintForSSTempUsingProAWS.feature | 349 +++ ...DataInSettModuleReqForDesignModule.feature | 160 + .../test/resources/Upload/JavaStack.template | 78 + .../resources/Upload/azureTestTemplate.json | 188 ++ .../jagadeesh12_ChefServerFile/knife.rb | 11 + .../src/test/resources/Upload/knife.rb | 11 + .../Upload/pcjoshi9_ChefServerFile/knife.rb | 13 + .../settings/ServiceController.feature | 30 + .../catalyst/settings/StackName.feature | 50 + .../configsetup/ChefServerSetup.feature | 124 + .../ConfigurePuppetServerUsingPass.feature | 30 + .../ConfigurePuppetServerUsingPem.feature | 16 + .../configsetup/CreateChefServer.feature | 33 + .../CreateEditDelEnvByCreatingNewEnv.feature | 127 + .../configsetup/CreateEnvFromChef.feature | 25 + .../CreateEnvUsingEnvFromChefServer.feature | 124 + .../configsetup/CreateNewEnvironment.feature | 28 + .../configsetup/ImportNodesFromChef.feature | 354 +++ .../ConfigAWSProviderWithInvalidKey.feature | 57 + ...ConfigureAWSProviderUsingAccessKey.feature | 94 + .../ConfigureAWSProviderUsingIAMRole.feature | 73 + .../ConfigureAzureProvider.feature | 87 + .../devopssetup/ConfigureNexusServer.feature | 83 + .../ConfigureOpenStackProvider.feature | 92 + .../ConfigureVMWareProvider.feature | 86 + .../devopssetup/CreateAWSProvider.feature | 34 + .../devopssetup/CreateEditDelDocker.feature | 87 + .../devopssetup/CreateEditDelJenkins.feature | 84 + .../devopssetup/CreateVMImgAWS.feature | 28 + .../CreateCloudFormationTemp.feature | 26 + .../CreateEditDelCloudFormationTemp.feature | 90 + .../CreateEditDelDockerTemplate.feature | 89 + .../CreateEditDelSoftwareStackTemp.feature | 120 + ...EditDelVMImageUsingProviderTypeAWS.feature | 115 + ...lVMImageUsingProviderTypeOpenStack.feature | 120 + ...tDelVMImageUsingProviderTypeVMware.feature | 116 + .../CreateEditDeleteARMTemplate.feature | 90 + ...eleteVMImageUsingProviderTypeAzure.feature | 114 + .../CreateSoftwareStackTemp.feature | 27 + .../orgsetup/1CreateOrganization.feature | 23 + .../orgsetup/1CreateOrganization.feature~ | 23 + .../orgsetup/CreateBusinessGroup.feature | 41 + .../orgsetup/CreateEditDelBGroup.feature | 89 + .../orgsetup/CreateEditDelOrg.feature | 54 + .../orgsetup/CreateEditDelProject.feature | 133 + .../settings/orgsetup/CreateProject.feature | 57 + .../orgsetup/DeleteOrganization.feature | 19 + .../providersync/providersync.feature | 275 ++ .../userssetup/CreateEditDelDesigner.feature | 97 + .../userssetup/CreateEditDelOrgAdmin.feature | 99 + .../CreateEditDelSuperadmin.feature | 99 + .../userssetup/CreateEditDeleteTeams.feature | 170 + .../settings/userssetup/CreateNewTeam.feature | 26 + .../userssetup/CreateOrgAdmin.feature | 35 + ...teOrgAndVerifyFourAutoCreatedTeams.feature | 59 + .../userssetup/CreateSuperadmin.feature | 28 + .../UI_BOTs/Org_Deletion/catalyst-Test.iml | 104 + .../Code/UI_BOTs/Org_Deletion/desktop.ini | 4 + .../Org_Deletion/lib/JSErrorCollector-0.6.jar | Bin 0 -> 9828 bytes .../org/junit/runner/annotations.xml | 5 + .../Code/UI_BOTs/Org_Deletion/pom.xml | 275 ++ .../main/java/com/rl/qa/FileUtilities.java | 155 + .../com/rl/qa/browsers/BrowserDriver.java | 275 ++ .../com/rl/qa/browsers/BrowserFactory.java | 316 ++ .../java/com/rl/qa/browsers/BrowserType.java | 31 + .../main/java/com/rl/qa/steps/CFTSteps.java | 231 ++ .../com/rl/qa/steps/ChefServerSetupSteps.java | 156 + ...igBlueprintForOSImageUsingProAWSSteps.java | 43 + ...figBlueprintForSSTempUsingProAWSSteps.java | 89 + .../qa/steps/ConfigureNexusServerSteps.java | 33 + .../rl/qa/steps/ConfigureProviderSteps.java | 123 + .../qa/steps/ConfigurePuppetServerSteps.java | 44 + .../rl/qa/steps/CreateEditDelBGroupSteps.java | 95 + .../qa/steps/CreateEditDelDesignerSteps.java | 156 + .../rl/qa/steps/CreateEditDelDockerSteps.java | 104 + .../rl/qa/steps/CreateEditDelEnvSteps.java | 136 + .../qa/steps/CreateEditDelJenkinsSteps.java | 36 + .../rl/qa/steps/CreateEditDelOrgSteps.java | 131 + .../qa/steps/CreateEditDelProjectSteps.java | 70 + .../qa/steps/CreateEditDeleteTeamSteps.java | 43 + .../rl/qa/steps/ImportNodeFromChefSteps.java | 154 + .../main/java/com/rl/qa/steps/LoginSteps.java | 231 ++ .../com/rl/qa/steps/ProivderSyncSteps.java | 39 + .../java/com/rl/qa/steps/TemplateSteps.java | 59 + .../java/com/rl/qa/steps/VMImageSteps.java | 43 + .../rl/qa/utils/AjaxEnabledPageFactory.java | 54 + .../main/java/com/rl/qa/utils/BaseView.java | 339 ++ .../java/com/rl/qa/utils/CucumberContext.java | 434 +++ .../com/rl/qa/utils/ForceWaitForItem.java | 16 + .../com/rl/qa/utils/SeleniumUtilities.java | 2730 +++++++++++++++++ .../com/rl/qa/utils/SpreadsheetUtils.java | 235 ++ .../StaleReferenceAwareFieldDecorator.java | 82 + .../main/java/com/rl/qa/utils/ThreadPool.java | 152 + .../main/java/com/rl/qa/views/CFTViews.java | 415 +++ .../com/rl/qa/views/ChefServerSetupViews.java | 269 ++ .../rl/qa/views/ChefServerSetupViews.java~ | 269 ++ ...igBlueprintForOSImageUsingProAWSViews.java | 86 + ...figBlueprintForSSTempUsingProAWSViews.java | 170 + .../qa/views/ConfigureNexusServerViews.java | 62 + .../rl/qa/views/ConfigureProviderViews.java | 353 +++ .../qa/views/ConfigurePuppetServerViews.java | 82 + .../rl/qa/views/CreateEditDelBGroupViews.java | 204 ++ .../qa/views/CreateEditDelDesignerViews.java | 383 +++ .../rl/qa/views/CreateEditDelDockerViews.java | 206 ++ .../rl/qa/views/CreateEditDelEnvViews.java | 330 ++ .../qa/views/CreateEditDelJenkinsViews.java | 66 + .../rl/qa/views/CreateEditDelOrgViews.java | 285 ++ .../rl/qa/views/CreateEditDelOrgViews.java~ | 285 ++ .../qa/views/CreateEditDelProjectViews.java | 142 + .../qa/views/CreateEditDeleteTeamViews.java | 127 + .../rl/qa/views/ImportNodesFromChefViews.java | 356 +++ .../main/java/com/rl/qa/views/LoginViews.java | 69 + .../java/com/rl/qa/views/TemplateViews.java | 136 + .../java/com/rl/qa/views/VMImageViews.java | 88 + .../src/main/resources/IEDriverServer.exe | Bin 0 -> 2568704 bytes .../main/resources/JSErrorCollector-0.6.jar | Bin 0 -> 9828 bytes .../src/main/resources/chromedriver.exe | Bin 0 -> 5285376 bytes .../main/resources/firebug/firebug-1.9.2.xpi | Bin 0 -> 1335949 bytes .../src/main/resources/log4j.properties | 16 + .../src/main/resources/lx-selenium.properties | 11 + .../resources/users/Administrator.properties | 3 + .../main/resources/users/Broker.properties | 6 + .../main/resources/users/Delete.properties | 3 + .../src/main/resources/users/Edit.properties | 3 + .../users/NoAccessInAdminDash.properties | 3 + .../main/resources/users/No_Access.properties | 3 + .../src/main/resources/users/View.properties | 3 + .../test/java/DeleteOrganizationRunner.java | 20 + .../src/test/java/TestRunner1.java | 53 + .../src/test/java/TestRunner2.java | 24 + .../src/test/java/TestRunner3.java | 22 + .../src/test/java/TestRunner4.java | 25 + .../src/test/java/TestRunner5.java | 24 + .../src/test/java/TestRunner6.java | 21 + .../src/test/java/TestRunner7.java | 22 + .../ConfigBlueprintForCFTUsingProAWS.feature | 201 ++ ...nfigBlueprintForOSImageUsingProAWS.feature | 34 + ...onfigBlueprintForSSTempUsingProAWS.feature | 349 +++ ...DataInSettModuleReqForDesignModule.feature | 160 + .../test/resources/Upload/JavaStack.template | 78 + .../resources/Upload/azureTestTemplate.json | 188 ++ .../jagadeesh12_ChefServerFile/knife.rb | 11 + .../src/test/resources/Upload/knife.rb | 11 + .../Upload/pcjoshi9_ChefServerFile/knife.rb | 13 + .../settings/ServiceController.feature | 30 + .../catalyst/settings/StackName.feature | 50 + .../configsetup/ChefServerSetup.feature | 124 + .../ConfigurePuppetServerUsingPass.feature | 30 + .../ConfigurePuppetServerUsingPem.feature | 16 + .../configsetup/CreateChefServer.feature | 33 + .../CreateEditDelEnvByCreatingNewEnv.feature | 127 + .../configsetup/CreateEnvFromChef.feature | 25 + .../CreateEnvUsingEnvFromChefServer.feature | 124 + .../configsetup/CreateNewEnvironment.feature | 28 + .../configsetup/ImportNodesFromChef.feature | 354 +++ .../ConfigAWSProviderWithInvalidKey.feature | 57 + ...ConfigureAWSProviderUsingAccessKey.feature | 94 + .../ConfigureAWSProviderUsingIAMRole.feature | 73 + .../ConfigureAzureProvider.feature | 87 + .../devopssetup/ConfigureNexusServer.feature | 83 + .../ConfigureOpenStackProvider.feature | 92 + .../ConfigureVMWareProvider.feature | 86 + .../devopssetup/CreateAWSProvider.feature | 34 + .../devopssetup/CreateEditDelDocker.feature | 87 + .../devopssetup/CreateEditDelJenkins.feature | 84 + .../devopssetup/CreateVMImgAWS.feature | 28 + .../CreateCloudFormationTemp.feature | 26 + .../CreateEditDelCloudFormationTemp.feature | 90 + .../CreateEditDelDockerTemplate.feature | 89 + .../CreateEditDelSoftwareStackTemp.feature | 120 + ...EditDelVMImageUsingProviderTypeAWS.feature | 115 + ...lVMImageUsingProviderTypeOpenStack.feature | 120 + ...tDelVMImageUsingProviderTypeVMware.feature | 116 + .../CreateEditDeleteARMTemplate.feature | 90 + ...eleteVMImageUsingProviderTypeAzure.feature | 114 + .../CreateSoftwareStackTemp.feature | 27 + .../orgsetup/1CreateOrganization.feature | 23 + .../orgsetup/1CreateOrganization.feature~ | 23 + .../orgsetup/CreateBusinessGroup.feature | 41 + .../orgsetup/CreateEditDelBGroup.feature | 89 + .../orgsetup/CreateEditDelOrg.feature | 54 + .../orgsetup/CreateEditDelProject.feature | 133 + .../settings/orgsetup/CreateProject.feature | 57 + .../orgsetup/DeleteOrganization.feature | 19 + .../providersync/providersync.feature | 275 ++ .../userssetup/CreateEditDelDesigner.feature | 97 + .../userssetup/CreateEditDelOrgAdmin.feature | 99 + .../CreateEditDelSuperadmin.feature | 99 + .../userssetup/CreateEditDeleteTeams.feature | 170 + .../settings/userssetup/CreateNewTeam.feature | 26 + .../userssetup/CreateOrgAdmin.feature | 35 + ...teOrgAndVerifyFourAutoCreatedTeams.feature | 59 + .../userssetup/CreateSuperadmin.feature | 28 + .../Code/Workflow_Bots/script.js | 0 .../Code/script.js | 0 .../Docs/AD - Delete User.md | 28 + .../Docs/AD - User Creation.md | 30 + .../Docs/Gmail Login Logout.md | 28 + .../Docs/Jira User Creation.md | 28 + .../Docs/LDAP - User Creation.md | 29 + .../Docs/LDAP - Delete User.md | 27 + .../Docs/Org Creation.md | 31 + .../Docs/Org Deletion.md | 30 + .../Docs/Yahoo Login Logout.md | 28 + .../Docs/create_cat_user.md | 32 + .../Docs/images/Bot_History_small.png | Bin 0 -> 9521 bytes .../README.md | 2 + .../YAML/ad_create_user_bot.yaml | 69 + .../YAML/ad_creategroup_bot.yaml | 64 + .../YAML/ad_delete_user_bot.yaml | 56 + .../YAML/ad_deletegroup_bot.yaml | 56 + .../YAML/ad_disable_user_bot.yaml | 56 + .../YAML/ad_enable_user_bot.yaml | 53 + .../YAML/ad_password_reset.yaml | 61 + .../YAML/ad_query_bot.yaml | 53 + .../YAML/aws_iam_user_creation_bot.yaml | 84 + .../YAML/aws_instance_info_bot.yaml | 41 + .../YAML/bp_catalyst_bot.yaml | 59 + .../YAML/bp_chef_bot.yaml | 59 + .../YAML/build_catalyst_bot.yaml | 64 + .../YAML/build_catalyst_nexus_bot.yaml | 66 + .../YAML/build_petclinic_nexus_bot.yaml | 64 + .../YAML/cat_user_creation_bot.yaml | 69 + .../YAML/catalyst_ami_bot.yaml | 57 + .../catalyst_docker_image_creation_bot.yaml | 62 + .../YAML/catalyst_quality_test_bot.yaml | 63 + .../YAML/cft_stack_delete_bot.yaml | 53 + .../YAML/ci_cd_dashboard_restart_bot.yaml | 77 + .../YAML/clear_log_bot.yaml | 44 + .../YAML/demo_customer_name_bot.yaml | 59 + .../YAML/deploy_catalyst_bot.yaml | 64 + .../YAML/deploy_iis_bot.yaml | 57 + .../YAML/deploy_petclinic_bot.yaml | 104 + .../YAML/disk_usage_remediation_bot.yaml | 41 + .../YAML/disk_usage_utility_bot.yaml | 48 + .../YAML/disk_utility_bot.yaml | 46 + .../YAML/extract_host_ip_bot.yaml | 52 + .../YAML/file_save_in_s3_bot.yaml | 65 + .../YAML/https_scanner_bot.yaml | 35 + .../YAML/install_ant_bot.yaml | 57 + .../YAML/install_apache2_bot.yaml | 57 + .../YAML/install_chocolatey_bot.yaml | 57 + .../YAML/install_chrome_bot.yaml | 57 + .../YAML/install_docker_bot.yaml | 57 + .../YAML/install_firefox_bot.yaml | 57 + .../YAML/install_git_bot.yaml | 57 + .../YAML/install_java8_bot.yaml | 42 + .../YAML/install_jboss_bot.yaml | 57 + .../YAML/install_jenkins_bot.yaml | 57 + .../YAML/install_kibana_bot.yaml | 57 + .../YAML/install_mongodb_bot.yaml | 57 + .../YAML/install_mysql_bot.yaml | 57 + .../YAML/install_new_relic_bot.yaml | 57 + .../YAML/install_nexus_bot.yaml | 57 + .../YAML/install_php_bot.yaml | 57 + .../YAML/install_postgreysql_bot.yaml | 57 + .../YAML/install_python_bot.yaml | 57 + .../YAML/install_ruby_bot.yaml | 57 + .../YAML/install_zabbix_bot.yaml | 57 + .../YAML/jira_create_ticket_bot.yaml | 65 + .../YAML/jira_create_user_bot.yaml | 85 + .../YAML/jira_delete_user_bot.yaml | 81 + .../YAML/ldap_create _user.yaml | 79 + .../YAML/ldap_delete_user_bot.yaml | 67 + .../YAML/ldap_password_reset_bot.yaml | 71 + .../YAML/lifeRay_application_bot.yaml | 57 + .../YAML/new_stop1_instance_bot.yaml | 60 + .../YAML/nginx_remediation_bot.yaml | 38 + .../YAML/nginx_remidiatio_work_flow.yaml | 56 + .../YAML/old_nginx_remediation_bot.yaml | 60 + .../YAML/pagerduty_create_bot.yaml | 64 + .../YAML/pagerduty_update_bot.yaml | 47 + .../YAML/reboot_instance_bot.yaml | 63 + .../YAML/rl_catalyst_user_creation_bot.yaml | 75 + .../YAML/rl_jenkins_testmail_bot.yaml | 63 + .../YAML/rlcatalyst_create_org_bot.yaml | 87 + .../YAML/rlcatalyst_delete_org_bot.yaml | 87 + .../YAML/rlcatalyst_user_creation_bot.yaml | 83 + .../YAML/service_restart_bot.yaml | 58 + .../YAML/service_start_bot.yaml | 63 + .../YAML/service_stop _demo_bot.yaml | 62 + .../YAML/servicenow_create_bot.yaml | 84 + .../YAML/servicenow_update_bot.yaml | 81 + .../YAML/slack_notification_bot.yaml | 64 + .../YAML/ssl_check_bot.yaml | 41 + .../YAML/start_instance_bot.yaml | 64 + .../YAML/telemetry_notification_bot.yaml | 72 + .../YAML/terminate_instance_bot.yaml | 64 + .../YAML/tomcat_install_bot.yaml | 52 + .../YAML/value_predictor_bot.yaml | 60 + 1014 files changed, 99409 insertions(+), 141 deletions(-) create mode 100644 server/app/engine/bots/apiExecutor.js create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/.DS_Store create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Check_BOTs/chef/sensu_install/.kitchen.yml create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Check_BOTs/chef/sensu_install/Berksfile create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Check_BOTs/chef/sensu_install/CHANGELOG.md create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Check_BOTs/chef/sensu_install/Gemfile create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Check_BOTs/chef/sensu_install/README.md create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Check_BOTs/chef/sensu_install/Thorfile create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Check_BOTs/chef/sensu_install/Vagrantfile create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Check_BOTs/chef/sensu_install/attributes/default.rb create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Check_BOTs/chef/sensu_install/chefignore create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Check_BOTs/chef/sensu_install/metadata.rb create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Check_BOTs/chef/sensu_install/recipes/default.rb create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Check_BOTs/chef/sensu_install/templates/default/client.json.erb create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Check_BOTs/chef/sensu_install/templates/default/config.json.erb create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Check_BOTs/script.js create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Composite_BOTs/script.js create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/RUN_BOTs/script.js create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Script_BOTs/disk_usage_remediation_bot/diskUsageRemediation.py create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Script_BOTs/disk_utility_bot/diskUtility.py create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Script_BOTs/extract_host_ip_bot/extract_host_ip.sh create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Script_BOTs/https_scanner_bot/httpsScanner.sh create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Script_BOTs/nginx_remediation_bot/nginxRemediation.py create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Script_BOTs/pagerduty_create_bot/pagerdutyCreate.py create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Script_BOTs/pagerduty_update_bot/pagerdutyUpdate.py create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Script_BOTs/servicenow_create_bot/servicenowCreate.py create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Script_BOTs/servicenow_update_bot/servicenowUpdate.py create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Script_BOTs/slack_notification_bot/slackNotification.py create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Script_BOTs/ssl_check_bot/sslcheck.py create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Script_BOTs/value_predictor_bot/valuePredictor.py create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Task_BOTs/cookbooks/AD_UserCreation/CHANGELOG.md create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Task_BOTs/cookbooks/AD_UserCreation/README.md create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Task_BOTs/cookbooks/AD_UserCreation/attributes/default.rb create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Task_BOTs/cookbooks/AD_UserCreation/attributes/path.json create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Task_BOTs/cookbooks/AD_UserCreation/metadata.rb create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Task_BOTs/cookbooks/AD_UserCreation/recipes/default.rb create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Task_BOTs/cookbooks/AD_UserDeletion/CHANGELOG.md create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Task_BOTs/cookbooks/AD_UserDeletion/README.md create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Task_BOTs/cookbooks/AD_UserDeletion/attributes/default.rb create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Task_BOTs/cookbooks/AD_UserDeletion/metadata.rb create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Task_BOTs/cookbooks/AD_UserDeletion/recipes/default.rb create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Task_BOTs/cookbooks/LDAP_UserCreation/CHANGELOG.md create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Task_BOTs/cookbooks/LDAP_UserCreation/README.md create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Task_BOTs/cookbooks/LDAP_UserCreation/attributes/default.rb create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Task_BOTs/cookbooks/LDAP_UserCreation/metadata.rb create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Task_BOTs/cookbooks/LDAP_UserCreation/recipes/default.rb create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Task_BOTs/cookbooks/LDAP_UserCreation/templates/default/new.erb create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Task_BOTs/cookbooks/LDAP_UserDeletion/CHANGELOG.md create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Task_BOTs/cookbooks/LDAP_UserDeletion/README.md create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Task_BOTs/cookbooks/LDAP_UserDeletion/attributes/default.rb create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Task_BOTs/cookbooks/LDAP_UserDeletion/metadata.rb create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Task_BOTs/cookbooks/LDAP_UserDeletion/recipes/default.rb create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Task_BOTs/script.js create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Task_BOTs/script/AWS_CLI.sh create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Task_BOTs/script/AWS_alert.sh create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Task_BOTs/script/Cat_Host_IPAddress.sh create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Task_BOTs/script/Cat_User_Creation.sh create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Task_BOTs/script/Meta_bot_Cat_user_creation.sh create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Task_BOTs/script/packer_AMI_script.sh create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Task_BOTs/script/packer_Docker_image.sh create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/Test Results - Feature__EmailLoginAndLogout.html create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/catalyst-Test.iml create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/desktop.ini create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/lib/JSErrorCollector-0.6.jar create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/org/junit/runner/annotations.xml create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/pom.xml create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/FileUtilities.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/browsers/BrowserDriver.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/browsers/BrowserFactory.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/browsers/BrowserType.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/steps/CFTSteps.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/steps/ChefServerSetupSteps.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/steps/ConfigBlueprintForOSImageUsingProAWSSteps.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/steps/ConfigBlueprintForSSTempUsingProAWSSteps.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/steps/ConfigureNexusServerSteps.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/steps/ConfigureProviderSteps.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/steps/ConfigurePuppetServerSteps.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/steps/CreateEditDelBGroupSteps.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/steps/CreateEditDelDesignerSteps.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/steps/CreateEditDelDockerSteps.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/steps/CreateEditDelEnvSteps.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/steps/CreateEditDelJenkinsSteps.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/steps/CreateEditDelOrgSteps.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/steps/CreateEditDelProjectSteps.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/steps/CreateEditDeleteTeamSteps.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/steps/ImportNodeFromChefSteps.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/steps/LoginSteps.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/steps/ProivderSyncSteps.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/steps/TemplateSteps.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/steps/VMImageSteps.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/utils/AjaxEnabledPageFactory.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/utils/BaseView.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/utils/CucumberContext.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/utils/ForceWaitForItem.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/utils/SeleniumUtilities.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/utils/SpreadsheetUtils.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/utils/StaleReferenceAwareFieldDecorator.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/utils/ThreadPool.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/views/CFTViews.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/views/ChefServerSetupViews.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/views/ConfigBlueprintForOSImageUsingProAWSViews.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/views/ConfigBlueprintForSSTempUsingProAWSViews.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/views/ConfigureNexusServerViews.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/views/ConfigureProviderViews.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/views/ConfigurePuppetServerViews.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/views/CreateEditDelBGroupViews.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/views/CreateEditDelDesignerViews.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/views/CreateEditDelDockerViews.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/views/CreateEditDelEnvViews.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/views/CreateEditDelJenkinsViews.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/views/CreateEditDelOrgViews.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/views/CreateEditDelProjectViews.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/views/CreateEditDeleteTeamViews.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/views/ImportNodesFromChefViews.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/views/LoginViews.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/views/TemplateViews.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/views/VMImageViews.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/resources/IEDriverServer.exe create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/resources/JSErrorCollector-0.6.jar create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/resources/chromedriver.exe create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/resources/firebug/firebug-1.9.2.xpi create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/resources/log4j.properties create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/resources/lx-selenium.properties create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/resources/users/Administrator.properties create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/resources/users/Broker.properties create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/resources/users/Delete.properties create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/resources/users/Edit.properties create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/resources/users/NoAccessInAdminDash.properties create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/resources/users/No_Access.properties create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/resources/users/View.properties create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/test/java/CreateOrganizationRunner.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/test/java/DeleteOrganizationRunner.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/test/java/Mail.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/test/java/TestRunner1.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/test/java/TestRunner2.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/test/java/TestRunner3.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/test/java/TestRunner4.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/test/java/TestRunner5.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/test/java/TestRunner6.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/test/java/TestRunner7.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/test/resources/Design/ConfigBlueprintForCFTUsingProAWS.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/test/resources/Design/ConfigBlueprintForOSImageUsingProAWS.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/test/resources/Design/ConfigBlueprintForSSTempUsingProAWS.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/test/resources/Design/CreateCloudFormationBlueprint.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/test/resources/Design/CreateDataInSettModuleReqForDesignModule.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/test/resources/Design/CreateSoftwareStackBlueprint.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/test/resources/Upload/JavaStack.template create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/test/resources/Upload/azureTestTemplate.json create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/test/resources/Upload/jagadeesh12_ChefServerFile/knife.rb create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/test/resources/Upload/knife.rb create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/test/resources/Upload/pcjoshi9_ChefServerFile/knife.rb create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/test/resources/catalyst/settings/ServiceController.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/test/resources/catalyst/settings/StackName.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/test/resources/catalyst/settings/configsetup/ChefServerSetup.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/test/resources/catalyst/settings/configsetup/ConfigurePuppetServerUsingPass.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/test/resources/catalyst/settings/configsetup/ConfigurePuppetServerUsingPem.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/test/resources/catalyst/settings/configsetup/CreateChefServer.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/test/resources/catalyst/settings/configsetup/CreateEditDelEnvByCreatingNewEnv.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/test/resources/catalyst/settings/configsetup/CreateEnvFromChef.feature create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/test/resources/catalyst/settings/configsetup/CreateEnvUsingEnvFromChefServer.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/test/resources/catalyst/settings/configsetup/CreateNewEnvironment.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/test/resources/catalyst/settings/configsetup/ImportNodesFromChef.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/test/resources/catalyst/settings/devopssetup/1CreateAWSProvider.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/test/resources/catalyst/settings/devopssetup/ConfigAWSProviderWithInvalidKey.feature create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/test/resources/catalyst/settings/devopssetup/ConfigureAWSProviderUsingAccessKey.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/test/resources/catalyst/settings/devopssetup/ConfigureAWSProviderUsingIAMRole.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/test/resources/catalyst/settings/devopssetup/ConfigureAzureProvider.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/test/resources/catalyst/settings/devopssetup/ConfigureNexusServer.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/test/resources/catalyst/settings/devopssetup/ConfigureOpenStackProvider.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/test/resources/catalyst/settings/devopssetup/ConfigureVMWareProvider.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/test/resources/catalyst/settings/devopssetup/CreateEditDelDocker.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/test/resources/catalyst/settings/devopssetup/CreateEditDelJenkins.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/test/resources/catalyst/settings/devopssetup/CreateVMImgAWS.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/test/resources/catalyst/settings/gallerysetup/1CreateSoftwareStackTemp.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/test/resources/catalyst/settings/gallerysetup/CreateCloudFormationTemp.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/test/resources/catalyst/settings/gallerysetup/CreateEditDelCloudFormationTemp.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/test/resources/catalyst/settings/gallerysetup/CreateEditDelDockerTemplate.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/test/resources/catalyst/settings/gallerysetup/CreateEditDelSoftwareStackTemp.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/test/resources/catalyst/settings/gallerysetup/CreateEditDelVMImageUsingProviderTypeAWS.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/test/resources/catalyst/settings/gallerysetup/CreateEditDelVMImageUsingProviderTypeOpenStack.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/test/resources/catalyst/settings/gallerysetup/CreateEditDelVMImageUsingProviderTypeVMware.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/test/resources/catalyst/settings/gallerysetup/CreateEditDeleteARMTemplate.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/test/resources/catalyst/settings/gallerysetup/CreateEditDeleteVMImageUsingProviderTypeAzure.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/test/resources/catalyst/settings/orgsetup/1CreateOrganization.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/test/resources/catalyst/settings/orgsetup/CreateBusinessGroup.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/test/resources/catalyst/settings/orgsetup/CreateEditDelBGroup.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/test/resources/catalyst/settings/orgsetup/CreateEditDelOrg.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/test/resources/catalyst/settings/orgsetup/CreateEditDelProject.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/test/resources/catalyst/settings/orgsetup/CreateProject.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/test/resources/catalyst/settings/orgsetup/DeleteOrganization.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/test/resources/catalyst/settings/providersync/providersync.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/test/resources/catalyst/settings/userssetup/CreateEditDelDesigner.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/test/resources/catalyst/settings/userssetup/CreateEditDelOrgAdmin.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/test/resources/catalyst/settings/userssetup/CreateEditDelSuperadmin.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/test/resources/catalyst/settings/userssetup/CreateEditDeleteTeams.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/test/resources/catalyst/settings/userssetup/CreateNewTeam.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/test/resources/catalyst/settings/userssetup/CreateOrgAdmin.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/test/resources/catalyst/settings/userssetup/CreateOrgAndVerifyFourAutoCreatedTeams.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/test/resources/catalyst/settings/userssetup/CreateSuperadmin.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/test/resources/mailApplication/emailLoginAndLogout.feature create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/catalyst-Test.iml create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/desktop.ini create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/lib/JSErrorCollector-0.6.jar create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/org/junit/runner/annotations.xml create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/pom.xml create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/main/java/com/rl/qa/FileUtilities.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/main/java/com/rl/qa/browsers/BrowserDriver.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/main/java/com/rl/qa/browsers/BrowserFactory.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/main/java/com/rl/qa/browsers/BrowserType.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/main/java/com/rl/qa/steps/CFTSteps.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/main/java/com/rl/qa/steps/ChefServerSetupSteps.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/main/java/com/rl/qa/steps/ConfigBlueprintForOSImageUsingProAWSSteps.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/main/java/com/rl/qa/steps/ConfigBlueprintForSSTempUsingProAWSSteps.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/main/java/com/rl/qa/steps/ConfigureNexusServerSteps.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/main/java/com/rl/qa/steps/ConfigureProviderSteps.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/main/java/com/rl/qa/steps/ConfigurePuppetServerSteps.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/main/java/com/rl/qa/steps/CreateEditDelBGroupSteps.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/main/java/com/rl/qa/steps/CreateEditDelDesignerSteps.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/main/java/com/rl/qa/steps/CreateEditDelDockerSteps.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/main/java/com/rl/qa/steps/CreateEditDelEnvSteps.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/main/java/com/rl/qa/steps/CreateEditDelJenkinsSteps.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/main/java/com/rl/qa/steps/CreateEditDelOrgSteps.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/main/java/com/rl/qa/steps/CreateEditDelProjectSteps.java create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/main/java/com/rl/qa/steps/CreateEditDeleteTeamSteps.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/main/java/com/rl/qa/steps/ImportNodeFromChefSteps.java create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/main/java/com/rl/qa/steps/JiraSteps.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/main/java/com/rl/qa/steps/LoginSteps.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/main/java/com/rl/qa/steps/ProivderSyncSteps.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/main/java/com/rl/qa/steps/TemplateSteps.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/main/java/com/rl/qa/steps/VMImageSteps.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/main/java/com/rl/qa/utils/AjaxEnabledPageFactory.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/main/java/com/rl/qa/utils/BaseView.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/main/java/com/rl/qa/utils/CucumberContext.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/main/java/com/rl/qa/utils/ForceWaitForItem.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/main/java/com/rl/qa/utils/SeleniumUtilities.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/main/java/com/rl/qa/utils/SpreadsheetUtils.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/main/java/com/rl/qa/utils/StaleReferenceAwareFieldDecorator.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/main/java/com/rl/qa/utils/ThreadPool.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/main/java/com/rl/qa/views/CFTViews.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/main/java/com/rl/qa/views/ChefServerSetupViews.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/main/java/com/rl/qa/views/ConfigBlueprintForOSImageUsingProAWSViews.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/main/java/com/rl/qa/views/ConfigBlueprintForSSTempUsingProAWSViews.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/main/java/com/rl/qa/views/ConfigureNexusServerViews.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/main/java/com/rl/qa/views/ConfigureProviderViews.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/main/java/com/rl/qa/views/ConfigurePuppetServerViews.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/main/java/com/rl/qa/views/CreateEditDelBGroupViews.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/main/java/com/rl/qa/views/CreateEditDelDesignerViews.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/main/java/com/rl/qa/views/CreateEditDelDockerViews.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/main/java/com/rl/qa/views/CreateEditDelEnvViews.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/main/java/com/rl/qa/views/CreateEditDelJenkinsViews.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/main/java/com/rl/qa/views/CreateEditDelOrgViews.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/main/java/com/rl/qa/views/CreateEditDelProjectViews.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/main/java/com/rl/qa/views/CreateEditDeleteTeamViews.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/main/java/com/rl/qa/views/ImportNodesFromChefViews.java create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/main/java/com/rl/qa/views/JIRAViews.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/main/java/com/rl/qa/views/LoginViews.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/main/java/com/rl/qa/views/TemplateViews.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/main/java/com/rl/qa/views/VMImageViews.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/main/resources/IEDriverServer.exe create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/main/resources/JSErrorCollector-0.6.jar create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/main/resources/chromedriver.exe create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/main/resources/firebug/firebug-1.9.2.xpi create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/main/resources/log4j.properties create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/main/resources/lx-selenium.properties create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/main/resources/users/Administrator.properties create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/main/resources/users/Broker.properties create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/main/resources/users/Delete.properties create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/main/resources/users/Edit.properties create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/main/resources/users/NoAccessInAdminDash.properties create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/main/resources/users/No_Access.properties create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/main/resources/users/View.properties create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/test/java/CreateJiraUserRunner.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/test/java/CreateOrganizationRunner.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/test/java/DeleteOrganizationRunner.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/test/java/TestRunner1.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/test/java/TestRunner2.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/test/java/TestRunner3.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/test/java/TestRunner4.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/test/java/TestRunner5.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/test/java/TestRunner6.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/test/java/TestRunner7.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/test/resources/Design/ConfigBlueprintForCFTUsingProAWS.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/test/resources/Design/ConfigBlueprintForOSImageUsingProAWS.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/test/resources/Design/ConfigBlueprintForSSTempUsingProAWS.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/test/resources/Design/CreateCloudFormationBlueprint.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/test/resources/Design/CreateDataInSettModuleReqForDesignModule.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/test/resources/Design/CreateSoftwareStackBlueprint.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/test/resources/Upload/JavaStack.template create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/test/resources/Upload/azureTestTemplate.json create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/test/resources/Upload/jagadeesh12_ChefServerFile/knife.rb create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/test/resources/Upload/knife.rb create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/test/resources/Upload/pcjoshi9_ChefServerFile/knife.rb create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/test/resources/catalyst/settings/JiraScenarios/createJiraUser.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/test/resources/catalyst/settings/ServiceController.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/test/resources/catalyst/settings/StackName.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/test/resources/catalyst/settings/configsetup/ChefServerSetup.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/test/resources/catalyst/settings/configsetup/ConfigurePuppetServerUsingPass.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/test/resources/catalyst/settings/configsetup/ConfigurePuppetServerUsingPem.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/test/resources/catalyst/settings/configsetup/CreateChefServer.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/test/resources/catalyst/settings/configsetup/CreateEditDelEnvByCreatingNewEnv.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/test/resources/catalyst/settings/configsetup/CreateEnvFromChef.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/test/resources/catalyst/settings/configsetup/CreateEnvUsingEnvFromChefServer.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/test/resources/catalyst/settings/configsetup/CreateNewEnvironment.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/test/resources/catalyst/settings/configsetup/ImportNodesFromChef.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/test/resources/catalyst/settings/devopssetup/1CreateAWSProvider.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/test/resources/catalyst/settings/devopssetup/ConfigAWSProviderWithInvalidKey.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/test/resources/catalyst/settings/devopssetup/ConfigureAWSProviderUsingAccessKey.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/test/resources/catalyst/settings/devopssetup/ConfigureAWSProviderUsingIAMRole.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/test/resources/catalyst/settings/devopssetup/ConfigureAzureProvider.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/test/resources/catalyst/settings/devopssetup/ConfigureNexusServer.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/test/resources/catalyst/settings/devopssetup/ConfigureOpenStackProvider.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/test/resources/catalyst/settings/devopssetup/ConfigureVMWareProvider.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/test/resources/catalyst/settings/devopssetup/CreateEditDelDocker.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/test/resources/catalyst/settings/devopssetup/CreateEditDelJenkins.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/test/resources/catalyst/settings/devopssetup/CreateVMImgAWS.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/test/resources/catalyst/settings/gallerysetup/1CreateSoftwareStackTemp.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/test/resources/catalyst/settings/gallerysetup/CreateCloudFormationTemp.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/test/resources/catalyst/settings/gallerysetup/CreateEditDelCloudFormationTemp.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/test/resources/catalyst/settings/gallerysetup/CreateEditDelDockerTemplate.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/test/resources/catalyst/settings/gallerysetup/CreateEditDelSoftwareStackTemp.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/test/resources/catalyst/settings/gallerysetup/CreateEditDelVMImageUsingProviderTypeAWS.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/test/resources/catalyst/settings/gallerysetup/CreateEditDelVMImageUsingProviderTypeOpenStack.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/test/resources/catalyst/settings/gallerysetup/CreateEditDelVMImageUsingProviderTypeVMware.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/test/resources/catalyst/settings/gallerysetup/CreateEditDeleteARMTemplate.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/test/resources/catalyst/settings/gallerysetup/CreateEditDeleteVMImageUsingProviderTypeAzure.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/test/resources/catalyst/settings/orgsetup/1CreateOrganization.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/test/resources/catalyst/settings/orgsetup/CreateBusinessGroup.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/test/resources/catalyst/settings/orgsetup/CreateEditDelBGroup.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/test/resources/catalyst/settings/orgsetup/CreateEditDelOrg.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/test/resources/catalyst/settings/orgsetup/CreateEditDelProject.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/test/resources/catalyst/settings/orgsetup/CreateProject.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/test/resources/catalyst/settings/orgsetup/DeleteOrganization.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/test/resources/catalyst/settings/providersync/providersync.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/test/resources/catalyst/settings/userssetup/CreateEditDelDesigner.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/test/resources/catalyst/settings/userssetup/CreateEditDelOrgAdmin.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/test/resources/catalyst/settings/userssetup/CreateEditDelSuperadmin.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/test/resources/catalyst/settings/userssetup/CreateEditDeleteTeams.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/test/resources/catalyst/settings/userssetup/CreateNewTeam.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/test/resources/catalyst/settings/userssetup/CreateOrgAdmin.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/test/resources/catalyst/settings/userssetup/CreateOrgAndVerifyFourAutoCreatedTeams.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Jira_UserCreation/src/test/resources/catalyst/settings/userssetup/CreateSuperadmin.feature create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/catalyst-Test.iml create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/desktop.ini create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/lib/JSErrorCollector-0.6.jar create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/org/junit/runner/annotations.xml create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/pom.xml create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/main/java/com/rl/qa/FileUtilities.java create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/main/java/com/rl/qa/browsers/BrowserDriver.java create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/main/java/com/rl/qa/browsers/BrowserFactory.java create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/main/java/com/rl/qa/browsers/BrowserType.java create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/main/java/com/rl/qa/steps/CFTSteps.java create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/main/java/com/rl/qa/steps/ChefServerSetupSteps.java create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/main/java/com/rl/qa/steps/ConfigBlueprintForOSImageUsingProAWSSteps.java create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/main/java/com/rl/qa/steps/ConfigBlueprintForSSTempUsingProAWSSteps.java create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/main/java/com/rl/qa/steps/ConfigureNexusServerSteps.java create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/main/java/com/rl/qa/steps/ConfigureProviderSteps.java create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/main/java/com/rl/qa/steps/ConfigurePuppetServerSteps.java create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/main/java/com/rl/qa/steps/CreateEditDelBGroupSteps.java create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/main/java/com/rl/qa/steps/CreateEditDelDesignerSteps.java create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/main/java/com/rl/qa/steps/CreateEditDelDockerSteps.java create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/main/java/com/rl/qa/steps/CreateEditDelEnvSteps.java create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/main/java/com/rl/qa/steps/CreateEditDelJenkinsSteps.java create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/main/java/com/rl/qa/steps/CreateEditDelOrgSteps.java create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/main/java/com/rl/qa/steps/CreateEditDelProjectSteps.java create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/main/java/com/rl/qa/steps/CreateEditDeleteTeamSteps.java create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/main/java/com/rl/qa/steps/ImportNodeFromChefSteps.java create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/main/java/com/rl/qa/steps/JiraSteps.java create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/main/java/com/rl/qa/steps/LoginSteps.java create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/main/java/com/rl/qa/steps/ProivderSyncSteps.java create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/main/java/com/rl/qa/steps/TemplateSteps.java create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/main/java/com/rl/qa/steps/VMImageSteps.java create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/main/java/com/rl/qa/utils/AjaxEnabledPageFactory.java create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/main/java/com/rl/qa/utils/BaseView.java create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/main/java/com/rl/qa/utils/CucumberContext.java create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/main/java/com/rl/qa/utils/ForceWaitForItem.java create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/main/java/com/rl/qa/utils/SeleniumUtilities.java create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/main/java/com/rl/qa/utils/SpreadsheetUtils.java create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/main/java/com/rl/qa/utils/StaleReferenceAwareFieldDecorator.java create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/main/java/com/rl/qa/utils/ThreadPool.java create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/main/java/com/rl/qa/views/CFTViews.java create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/main/java/com/rl/qa/views/ChefServerSetupViews.java create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/main/java/com/rl/qa/views/ConfigBlueprintForOSImageUsingProAWSViews.java create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/main/java/com/rl/qa/views/ConfigBlueprintForSSTempUsingProAWSViews.java create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/main/java/com/rl/qa/views/ConfigureNexusServerViews.java create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/main/java/com/rl/qa/views/ConfigureProviderViews.java create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/main/java/com/rl/qa/views/ConfigurePuppetServerViews.java create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/main/java/com/rl/qa/views/CreateEditDelBGroupViews.java create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/main/java/com/rl/qa/views/CreateEditDelDesignerViews.java create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/main/java/com/rl/qa/views/CreateEditDelDockerViews.java create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/main/java/com/rl/qa/views/CreateEditDelEnvViews.java create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/main/java/com/rl/qa/views/CreateEditDelJenkinsViews.java create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/main/java/com/rl/qa/views/CreateEditDelOrgViews.java create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/main/java/com/rl/qa/views/CreateEditDelProjectViews.java create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/main/java/com/rl/qa/views/CreateEditDeleteTeamViews.java create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/main/java/com/rl/qa/views/ImportNodesFromChefViews.java create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/main/java/com/rl/qa/views/JIRAViews.java create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/main/java/com/rl/qa/views/LoginViews.java create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/main/java/com/rl/qa/views/TemplateViews.java create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/main/java/com/rl/qa/views/VMImageViews.java create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/main/resources/IEDriverServer.exe create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/main/resources/JSErrorCollector-0.6.jar create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/main/resources/chromedriver.exe create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/main/resources/firebug/firebug-1.9.2.xpi create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/main/resources/log4j.properties create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/main/resources/lx-selenium.properties create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/main/resources/users/Administrator.properties create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/main/resources/users/Broker.properties create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/main/resources/users/Delete.properties create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/main/resources/users/Edit.properties create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/main/resources/users/NoAccessInAdminDash.properties create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/main/resources/users/No_Access.properties create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/main/resources/users/View.properties create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/test/java/CreateJiraUserRunner.java create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/test/java/CreateOrganizationRunner.java create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/test/java/DeleteJiraUserRunner.java create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/test/java/DeleteOrganizationRunner.java create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/test/java/TestRunner1.java create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/test/java/TestRunner2.java create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/test/java/TestRunner3.java create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/test/java/TestRunner4.java create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/test/java/TestRunner5.java create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/test/java/TestRunner6.java create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/test/java/TestRunner7.java create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/test/resources/Design/ConfigBlueprintForCFTUsingProAWS.feature create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/test/resources/Design/ConfigBlueprintForOSImageUsingProAWS.feature create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/test/resources/Design/ConfigBlueprintForSSTempUsingProAWS.feature create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/test/resources/Design/CreateCloudFormationBlueprint.feature create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/test/resources/Design/CreateDataInSettModuleReqForDesignModule.feature create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/test/resources/Design/CreateSoftwareStackBlueprint.feature create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/test/resources/Upload/JavaStack.template create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/test/resources/Upload/azureTestTemplate.json create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/test/resources/Upload/jagadeesh12_ChefServerFile/knife.rb create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/test/resources/Upload/knife.rb create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/test/resources/Upload/pcjoshi9_ChefServerFile/knife.rb create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/test/resources/catalyst/settings/JiraScenarios/createJiraUser.feature create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/test/resources/catalyst/settings/JiraScenarios/deleteJiraUser.feature create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/test/resources/catalyst/settings/ServiceController.feature create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/test/resources/catalyst/settings/StackName.feature create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/test/resources/catalyst/settings/configsetup/ChefServerSetup.feature create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/test/resources/catalyst/settings/configsetup/ConfigurePuppetServerUsingPass.feature create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/test/resources/catalyst/settings/configsetup/ConfigurePuppetServerUsingPem.feature create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/test/resources/catalyst/settings/configsetup/CreateChefServer.feature create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/test/resources/catalyst/settings/configsetup/CreateEditDelEnvByCreatingNewEnv.feature create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/test/resources/catalyst/settings/configsetup/CreateEnvFromChef.feature create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/test/resources/catalyst/settings/configsetup/CreateEnvUsingEnvFromChefServer.feature create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/test/resources/catalyst/settings/configsetup/CreateNewEnvironment.feature create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/test/resources/catalyst/settings/configsetup/ImportNodesFromChef.feature create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/test/resources/catalyst/settings/devopssetup/1CreateAWSProvider.feature create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/test/resources/catalyst/settings/devopssetup/ConfigAWSProviderWithInvalidKey.feature create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/test/resources/catalyst/settings/devopssetup/ConfigureAWSProviderUsingAccessKey.feature create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/test/resources/catalyst/settings/devopssetup/ConfigureAWSProviderUsingIAMRole.feature create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/test/resources/catalyst/settings/devopssetup/ConfigureAzureProvider.feature create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/test/resources/catalyst/settings/devopssetup/ConfigureNexusServer.feature create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/test/resources/catalyst/settings/devopssetup/ConfigureOpenStackProvider.feature create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/test/resources/catalyst/settings/devopssetup/ConfigureVMWareProvider.feature create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/test/resources/catalyst/settings/devopssetup/CreateEditDelDocker.feature create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/test/resources/catalyst/settings/devopssetup/CreateEditDelJenkins.feature create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/test/resources/catalyst/settings/devopssetup/CreateVMImgAWS.feature create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/test/resources/catalyst/settings/gallerysetup/1CreateSoftwareStackTemp.feature create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/test/resources/catalyst/settings/gallerysetup/CreateCloudFormationTemp.feature create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/test/resources/catalyst/settings/gallerysetup/CreateEditDelCloudFormationTemp.feature create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/test/resources/catalyst/settings/gallerysetup/CreateEditDelDockerTemplate.feature create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/test/resources/catalyst/settings/gallerysetup/CreateEditDelSoftwareStackTemp.feature create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/test/resources/catalyst/settings/gallerysetup/CreateEditDelVMImageUsingProviderTypeAWS.feature create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/test/resources/catalyst/settings/gallerysetup/CreateEditDelVMImageUsingProviderTypeOpenStack.feature create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/test/resources/catalyst/settings/gallerysetup/CreateEditDelVMImageUsingProviderTypeVMware.feature create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/test/resources/catalyst/settings/gallerysetup/CreateEditDeleteARMTemplate.feature create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/test/resources/catalyst/settings/gallerysetup/CreateEditDeleteVMImageUsingProviderTypeAzure.feature create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/test/resources/catalyst/settings/orgsetup/1CreateOrganization.feature create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/test/resources/catalyst/settings/orgsetup/CreateBusinessGroup.feature create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/test/resources/catalyst/settings/orgsetup/CreateEditDelBGroup.feature create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/test/resources/catalyst/settings/orgsetup/CreateEditDelOrg.feature create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/test/resources/catalyst/settings/orgsetup/CreateEditDelProject.feature create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/test/resources/catalyst/settings/orgsetup/CreateProject.feature create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/test/resources/catalyst/settings/orgsetup/DeleteOrganization.feature create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/test/resources/catalyst/settings/providersync/providersync.feature create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/test/resources/catalyst/settings/userssetup/CreateEditDelDesigner.feature create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/test/resources/catalyst/settings/userssetup/CreateEditDelOrgAdmin.feature create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/test/resources/catalyst/settings/userssetup/CreateEditDelSuperadmin.feature create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/test/resources/catalyst/settings/userssetup/CreateEditDeleteTeams.feature create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/test/resources/catalyst/settings/userssetup/CreateNewTeam.feature create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/test/resources/catalyst/settings/userssetup/CreateOrgAdmin.feature create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/test/resources/catalyst/settings/userssetup/CreateOrgAndVerifyFourAutoCreatedTeams.feature create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/src/test/resources/catalyst/settings/userssetup/CreateSuperadmin.feature create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/classes/IEDriverServer.exe create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/classes/JSErrorCollector-0.6.jar create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/classes/chromedriver.exe create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/classes/com/rl/qa/FileUtilities.class create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/classes/com/rl/qa/browsers/BrowserDriver$1.class create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/classes/com/rl/qa/browsers/BrowserDriver$BrowserCleanup.class create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/classes/com/rl/qa/browsers/BrowserDriver.class create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/classes/com/rl/qa/browsers/BrowserFactory$1.class create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/classes/com/rl/qa/browsers/BrowserFactory.class create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/classes/com/rl/qa/browsers/BrowserType.class create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/classes/com/rl/qa/steps/CFTSteps.class create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/classes/com/rl/qa/steps/ChefServerSetupSteps.class create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/classes/com/rl/qa/steps/ConfigBlueprintForOSImageUsingProAWSSteps.class create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/classes/com/rl/qa/steps/ConfigBlueprintForSSTempUsingProAWSSteps.class create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/classes/com/rl/qa/steps/ConfigureNexusServerSteps.class create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/classes/com/rl/qa/steps/ConfigureProviderSteps.class create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/classes/com/rl/qa/steps/ConfigurePuppetServerSteps.class create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/classes/com/rl/qa/steps/CreateEditDelBGroupSteps.class create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/classes/com/rl/qa/steps/CreateEditDelDesignerSteps.class create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/classes/com/rl/qa/steps/CreateEditDelDockerSteps.class create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/classes/com/rl/qa/steps/CreateEditDelEnvSteps.class create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/classes/com/rl/qa/steps/CreateEditDelJenkinsSteps.class create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/classes/com/rl/qa/steps/CreateEditDelOrgSteps.class create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/classes/com/rl/qa/steps/CreateEditDelProjectSteps.class create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/classes/com/rl/qa/steps/CreateEditDeleteTeamSteps.class create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/classes/com/rl/qa/steps/ImportNodeFromChefSteps.class create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/classes/com/rl/qa/steps/JiraSteps.class create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/classes/com/rl/qa/steps/LoginSteps.class create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/classes/com/rl/qa/steps/ProivderSyncSteps.class create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/classes/com/rl/qa/steps/TemplateSteps.class create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/classes/com/rl/qa/steps/VMImageSteps.class create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/classes/com/rl/qa/utils/AjaxEnabledPageFactory.class create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/classes/com/rl/qa/utils/BaseView.class create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/classes/com/rl/qa/utils/CucumberContext$1.class create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/classes/com/rl/qa/utils/CucumberContext.class create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/classes/com/rl/qa/utils/ForceWaitForItem.class create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/classes/com/rl/qa/utils/SeleniumUtilities$1.class create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/classes/com/rl/qa/utils/SeleniumUtilities$2.class create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/classes/com/rl/qa/utils/SeleniumUtilities$3.class create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/classes/com/rl/qa/utils/SeleniumUtilities$Locators.class create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/classes/com/rl/qa/utils/SeleniumUtilities.class create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/classes/com/rl/qa/utils/SpreadsheetUtils.class create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/classes/com/rl/qa/utils/StaleReferenceAwareFieldDecorator$StaleReferenceAwareElementLocator.class create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/classes/com/rl/qa/utils/StaleReferenceAwareFieldDecorator.class create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/classes/com/rl/qa/utils/ThreadPool.class create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/classes/com/rl/qa/views/CFTViews.class create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/classes/com/rl/qa/views/ChefServerSetupViews.class create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/classes/com/rl/qa/views/ConfigBlueprintForOSImageUsingProAWSViews.class create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/classes/com/rl/qa/views/ConfigBlueprintForSSTempUsingProAWSViews.class create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/classes/com/rl/qa/views/ConfigureNexusServerViews.class create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/classes/com/rl/qa/views/ConfigureProviderViews.class create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/classes/com/rl/qa/views/ConfigurePuppetServerViews.class create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/classes/com/rl/qa/views/CreateEditDelBGroupViews.class create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/classes/com/rl/qa/views/CreateEditDelDesignerViews.class create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/classes/com/rl/qa/views/CreateEditDelDockerViews.class create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/classes/com/rl/qa/views/CreateEditDelEnvViews.class create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/classes/com/rl/qa/views/CreateEditDelJenkinsViews.class create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/classes/com/rl/qa/views/CreateEditDelOrgViews.class create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/classes/com/rl/qa/views/CreateEditDelProjectViews.class create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/classes/com/rl/qa/views/CreateEditDeleteTeamViews.class create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/classes/com/rl/qa/views/ImportNodesFromChefViews.class create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/classes/com/rl/qa/views/JIRAViews.class create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/classes/com/rl/qa/views/LoginViews.class create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/classes/com/rl/qa/views/TemplateViews.class create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/classes/com/rl/qa/views/VMImageViews.class create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/classes/firebug/firebug-1.9.2.xpi create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/classes/log4j.properties create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/classes/lx-selenium.properties create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/classes/users/Administrator.properties create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/classes/users/Broker.properties create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/classes/users/Delete.properties create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/classes/users/Edit.properties create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/classes/users/NoAccessInAdminDash.properties create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/classes/users/No_Access.properties create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/classes/users/View.properties create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/cucumber/formatter.js create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/cucumber/index.html create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/cucumber/jquery-1.8.2.min.js create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/cucumber/report.js create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/cucumber/style.css create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/reports/json/CreateJiraUser.json create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/reports/json/DeleteJiraUser.json create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/screenshots/enterUsername19012017_062412.png create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/test-classes/CreateJiraUserRunner.class create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/test-classes/CreateOrganizationRunner.class create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/test-classes/DeleteJiraUserRunner.class create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/test-classes/DeleteOrganizationRunner.class create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/test-classes/Design/ConfigBlueprintForCFTUsingProAWS.feature create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/test-classes/Design/ConfigBlueprintForOSImageUsingProAWS.feature create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/test-classes/Design/ConfigBlueprintForSSTempUsingProAWS.feature create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/test-classes/Design/CreateCloudFormationBlueprint.feature create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/test-classes/Design/CreateDataInSettModuleReqForDesignModule.feature create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/test-classes/Design/CreateSoftwareStackBlueprint.feature create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/test-classes/TestRunner1.class create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/test-classes/TestRunner2.class create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/test-classes/TestRunner3.class create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/test-classes/TestRunner4.class create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/test-classes/TestRunner5.class create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/test-classes/TestRunner6.class create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/test-classes/TestRunner7.class create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/test-classes/Upload/JavaStack.template create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/test-classes/Upload/azureTestTemplate.json create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/test-classes/Upload/jagadeesh12_ChefServerFile/knife.rb create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/test-classes/Upload/knife.rb create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/test-classes/Upload/pcjoshi9_ChefServerFile/knife.rb create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/test-classes/catalyst/settings/JiraScenarios/createJiraUser.feature create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/test-classes/catalyst/settings/JiraScenarios/deleteJiraUser.feature create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/test-classes/catalyst/settings/ServiceController.feature create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/test-classes/catalyst/settings/StackName.feature create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/test-classes/catalyst/settings/configsetup/ChefServerSetup.feature create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/test-classes/catalyst/settings/configsetup/ConfigurePuppetServerUsingPass.feature create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/test-classes/catalyst/settings/configsetup/ConfigurePuppetServerUsingPem.feature create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/test-classes/catalyst/settings/configsetup/CreateChefServer.feature create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/test-classes/catalyst/settings/configsetup/CreateEditDelEnvByCreatingNewEnv.feature create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/test-classes/catalyst/settings/configsetup/CreateEnvFromChef.feature create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/test-classes/catalyst/settings/configsetup/CreateEnvUsingEnvFromChefServer.feature create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/test-classes/catalyst/settings/configsetup/CreateNewEnvironment.feature create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/test-classes/catalyst/settings/configsetup/ImportNodesFromChef.feature create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/test-classes/catalyst/settings/devopssetup/1CreateAWSProvider.feature create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/test-classes/catalyst/settings/devopssetup/ConfigAWSProviderWithInvalidKey.feature create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/test-classes/catalyst/settings/devopssetup/ConfigureAWSProviderUsingAccessKey.feature create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/test-classes/catalyst/settings/devopssetup/ConfigureAWSProviderUsingIAMRole.feature create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/test-classes/catalyst/settings/devopssetup/ConfigureAzureProvider.feature create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/test-classes/catalyst/settings/devopssetup/ConfigureNexusServer.feature create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/test-classes/catalyst/settings/devopssetup/ConfigureOpenStackProvider.feature create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/test-classes/catalyst/settings/devopssetup/ConfigureVMWareProvider.feature create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/test-classes/catalyst/settings/devopssetup/CreateEditDelDocker.feature create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/test-classes/catalyst/settings/devopssetup/CreateEditDelJenkins.feature create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/test-classes/catalyst/settings/devopssetup/CreateVMImgAWS.feature create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/test-classes/catalyst/settings/gallerysetup/1CreateSoftwareStackTemp.feature create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/test-classes/catalyst/settings/gallerysetup/CreateCloudFormationTemp.feature create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/test-classes/catalyst/settings/gallerysetup/CreateEditDelCloudFormationTemp.feature create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/test-classes/catalyst/settings/gallerysetup/CreateEditDelDockerTemplate.feature create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/test-classes/catalyst/settings/gallerysetup/CreateEditDelSoftwareStackTemp.feature create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/test-classes/catalyst/settings/gallerysetup/CreateEditDelVMImageUsingProviderTypeAWS.feature create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/test-classes/catalyst/settings/gallerysetup/CreateEditDelVMImageUsingProviderTypeOpenStack.feature create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/test-classes/catalyst/settings/gallerysetup/CreateEditDelVMImageUsingProviderTypeVMware.feature create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/test-classes/catalyst/settings/gallerysetup/CreateEditDeleteARMTemplate.feature create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/test-classes/catalyst/settings/gallerysetup/CreateEditDeleteVMImageUsingProviderTypeAzure.feature create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/test-classes/catalyst/settings/orgsetup/1CreateOrganization.feature create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/test-classes/catalyst/settings/orgsetup/CreateBusinessGroup.feature create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/test-classes/catalyst/settings/orgsetup/CreateEditDelBGroup.feature create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/test-classes/catalyst/settings/orgsetup/CreateEditDelOrg.feature create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/test-classes/catalyst/settings/orgsetup/CreateEditDelProject.feature create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/test-classes/catalyst/settings/orgsetup/CreateProject.feature create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/test-classes/catalyst/settings/orgsetup/DeleteOrganization.feature create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/test-classes/catalyst/settings/providersync/providersync.feature create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/test-classes/catalyst/settings/userssetup/CreateEditDelDesigner.feature create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/test-classes/catalyst/settings/userssetup/CreateEditDelOrgAdmin.feature create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/test-classes/catalyst/settings/userssetup/CreateEditDelSuperadmin.feature create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/test-classes/catalyst/settings/userssetup/CreateEditDeleteTeams.feature create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/test-classes/catalyst/settings/userssetup/CreateNewTeam.feature create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/test-classes/catalyst/settings/userssetup/CreateOrgAdmin.feature create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/test-classes/catalyst/settings/userssetup/CreateOrgAndVerifyFourAutoCreatedTeams.feature create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/New_Jira_UserCreation/target/test-classes/catalyst/settings/userssetup/CreateSuperadmin.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/catalyst-Test.iml create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/desktop.ini create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/lib/JSErrorCollector-0.6.jar create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/org/junit/runner/annotations.xml create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/pom.xml create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/main/java/com/rl/qa/FileUtilities.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/main/java/com/rl/qa/browsers/BrowserDriver.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/main/java/com/rl/qa/browsers/BrowserFactory.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/main/java/com/rl/qa/browsers/BrowserType.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/main/java/com/rl/qa/steps/CFTSteps.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/main/java/com/rl/qa/steps/ChefServerSetupSteps.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/main/java/com/rl/qa/steps/ConfigBlueprintForOSImageUsingProAWSSteps.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/main/java/com/rl/qa/steps/ConfigBlueprintForSSTempUsingProAWSSteps.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/main/java/com/rl/qa/steps/ConfigureNexusServerSteps.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/main/java/com/rl/qa/steps/ConfigureProviderSteps.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/main/java/com/rl/qa/steps/ConfigurePuppetServerSteps.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/main/java/com/rl/qa/steps/CreateEditDelBGroupSteps.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/main/java/com/rl/qa/steps/CreateEditDelDesignerSteps.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/main/java/com/rl/qa/steps/CreateEditDelDockerSteps.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/main/java/com/rl/qa/steps/CreateEditDelEnvSteps.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/main/java/com/rl/qa/steps/CreateEditDelJenkinsSteps.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/main/java/com/rl/qa/steps/CreateEditDelOrgSteps.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/main/java/com/rl/qa/steps/CreateEditDelProjectSteps.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/main/java/com/rl/qa/steps/CreateEditDeleteTeamSteps.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/main/java/com/rl/qa/steps/ImportNodeFromChefSteps.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/main/java/com/rl/qa/steps/LoginSteps.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/main/java/com/rl/qa/steps/ProivderSyncSteps.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/main/java/com/rl/qa/steps/TemplateSteps.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/main/java/com/rl/qa/steps/VMImageSteps.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/main/java/com/rl/qa/utils/AjaxEnabledPageFactory.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/main/java/com/rl/qa/utils/BaseView.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/main/java/com/rl/qa/utils/CucumberContext.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/main/java/com/rl/qa/utils/ForceWaitForItem.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/main/java/com/rl/qa/utils/SeleniumUtilities.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/main/java/com/rl/qa/utils/SpreadsheetUtils.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/main/java/com/rl/qa/utils/StaleReferenceAwareFieldDecorator.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/main/java/com/rl/qa/utils/ThreadPool.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/main/java/com/rl/qa/views/CFTViews.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/main/java/com/rl/qa/views/ChefServerSetupViews.java create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/main/java/com/rl/qa/views/ChefServerSetupViews.java~ create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/main/java/com/rl/qa/views/ConfigBlueprintForOSImageUsingProAWSViews.java create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/main/java/com/rl/qa/views/ConfigBlueprintForSSTempUsingProAWSViews.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/main/java/com/rl/qa/views/ConfigureNexusServerViews.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/main/java/com/rl/qa/views/ConfigureProviderViews.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/main/java/com/rl/qa/views/ConfigurePuppetServerViews.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/main/java/com/rl/qa/views/CreateEditDelBGroupViews.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/main/java/com/rl/qa/views/CreateEditDelDesignerViews.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/main/java/com/rl/qa/views/CreateEditDelDockerViews.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/main/java/com/rl/qa/views/CreateEditDelEnvViews.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/main/java/com/rl/qa/views/CreateEditDelJenkinsViews.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/main/java/com/rl/qa/views/CreateEditDelOrgViews.java create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/main/java/com/rl/qa/views/CreateEditDelOrgViews.java~ create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/main/java/com/rl/qa/views/CreateEditDelProjectViews.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/main/java/com/rl/qa/views/CreateEditDeleteTeamViews.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/main/java/com/rl/qa/views/ImportNodesFromChefViews.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/main/java/com/rl/qa/views/LoginViews.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/main/java/com/rl/qa/views/TemplateViews.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/main/java/com/rl/qa/views/VMImageViews.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/main/resources/IEDriverServer.exe create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/main/resources/JSErrorCollector-0.6.jar create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/main/resources/chromedriver.exe create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/main/resources/firebug/firebug-1.9.2.xpi create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/main/resources/log4j.properties create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/main/resources/lx-selenium.properties create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/main/resources/users/Administrator.properties create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/main/resources/users/Broker.properties create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/main/resources/users/Delete.properties create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/main/resources/users/Edit.properties create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/main/resources/users/NoAccessInAdminDash.properties create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/main/resources/users/No_Access.properties create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/main/resources/users/View.properties create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/test/java/CreateOrganizationRunner.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/test/java/TestRunner1.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/test/java/TestRunner2.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/test/java/TestRunner3.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/test/java/TestRunner4.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/test/java/TestRunner5.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/test/java/TestRunner6.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/test/java/TestRunner7.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/test/resources/Design/ConfigBlueprintForCFTUsingProAWS.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/test/resources/Design/ConfigBlueprintForOSImageUsingProAWS.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/test/resources/Design/ConfigBlueprintForSSTempUsingProAWS.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/test/resources/Design/CreateDataInSettModuleReqForDesignModule.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/test/resources/Upload/JavaStack.template create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/test/resources/Upload/azureTestTemplate.json create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/test/resources/Upload/jagadeesh12_ChefServerFile/knife.rb create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/test/resources/Upload/knife.rb create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/test/resources/Upload/pcjoshi9_ChefServerFile/knife.rb create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/test/resources/catalyst/settings/ServiceController.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/test/resources/catalyst/settings/StackName.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/test/resources/catalyst/settings/configsetup/ChefServerSetup.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/test/resources/catalyst/settings/configsetup/ConfigurePuppetServerUsingPass.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/test/resources/catalyst/settings/configsetup/ConfigurePuppetServerUsingPem.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/test/resources/catalyst/settings/configsetup/CreateChefServer.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/test/resources/catalyst/settings/configsetup/CreateEditDelEnvByCreatingNewEnv.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/test/resources/catalyst/settings/configsetup/CreateEnvFromChef.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/test/resources/catalyst/settings/configsetup/CreateEnvUsingEnvFromChefServer.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/test/resources/catalyst/settings/configsetup/CreateNewEnvironment.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/test/resources/catalyst/settings/configsetup/ImportNodesFromChef.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/test/resources/catalyst/settings/devopssetup/ConfigAWSProviderWithInvalidKey.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/test/resources/catalyst/settings/devopssetup/ConfigureAWSProviderUsingAccessKey.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/test/resources/catalyst/settings/devopssetup/ConfigureAWSProviderUsingIAMRole.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/test/resources/catalyst/settings/devopssetup/ConfigureAzureProvider.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/test/resources/catalyst/settings/devopssetup/ConfigureNexusServer.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/test/resources/catalyst/settings/devopssetup/ConfigureOpenStackProvider.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/test/resources/catalyst/settings/devopssetup/ConfigureVMWareProvider.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/test/resources/catalyst/settings/devopssetup/CreateAWSProvider.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/test/resources/catalyst/settings/devopssetup/CreateEditDelDocker.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/test/resources/catalyst/settings/devopssetup/CreateEditDelJenkins.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/test/resources/catalyst/settings/devopssetup/CreateVMImgAWS.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/test/resources/catalyst/settings/gallerysetup/CreateCloudFormationTemp.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/test/resources/catalyst/settings/gallerysetup/CreateEditDelCloudFormationTemp.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/test/resources/catalyst/settings/gallerysetup/CreateEditDelDockerTemplate.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/test/resources/catalyst/settings/gallerysetup/CreateEditDelSoftwareStackTemp.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/test/resources/catalyst/settings/gallerysetup/CreateEditDelVMImageUsingProviderTypeAWS.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/test/resources/catalyst/settings/gallerysetup/CreateEditDelVMImageUsingProviderTypeOpenStack.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/test/resources/catalyst/settings/gallerysetup/CreateEditDelVMImageUsingProviderTypeVMware.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/test/resources/catalyst/settings/gallerysetup/CreateEditDeleteARMTemplate.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/test/resources/catalyst/settings/gallerysetup/CreateEditDeleteVMImageUsingProviderTypeAzure.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/test/resources/catalyst/settings/gallerysetup/CreateSoftwareStackTemp.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/test/resources/catalyst/settings/orgsetup/1CreateOrganization.feature create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/test/resources/catalyst/settings/orgsetup/1CreateOrganization.feature~ create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/test/resources/catalyst/settings/orgsetup/CreateBusinessGroup.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/test/resources/catalyst/settings/orgsetup/CreateEditDelBGroup.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/test/resources/catalyst/settings/orgsetup/CreateEditDelOrg.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/test/resources/catalyst/settings/orgsetup/CreateEditDelProject.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/test/resources/catalyst/settings/orgsetup/CreateProject.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/test/resources/catalyst/settings/orgsetup/DeleteOrganization.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/test/resources/catalyst/settings/providersync/providersync.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/test/resources/catalyst/settings/userssetup/CreateEditDelDesigner.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/test/resources/catalyst/settings/userssetup/CreateEditDelOrgAdmin.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/test/resources/catalyst/settings/userssetup/CreateEditDelSuperadmin.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/test/resources/catalyst/settings/userssetup/CreateEditDeleteTeams.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/test/resources/catalyst/settings/userssetup/CreateNewTeam.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/test/resources/catalyst/settings/userssetup/CreateOrgAdmin.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/test/resources/catalyst/settings/userssetup/CreateOrgAndVerifyFourAutoCreatedTeams.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Creation/src/test/resources/catalyst/settings/userssetup/CreateSuperadmin.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/catalyst-Test.iml create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/desktop.ini create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/lib/JSErrorCollector-0.6.jar create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/org/junit/runner/annotations.xml create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/pom.xml create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/main/java/com/rl/qa/FileUtilities.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/main/java/com/rl/qa/browsers/BrowserDriver.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/main/java/com/rl/qa/browsers/BrowserFactory.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/main/java/com/rl/qa/browsers/BrowserType.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/main/java/com/rl/qa/steps/CFTSteps.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/main/java/com/rl/qa/steps/ChefServerSetupSteps.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/main/java/com/rl/qa/steps/ConfigBlueprintForOSImageUsingProAWSSteps.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/main/java/com/rl/qa/steps/ConfigBlueprintForSSTempUsingProAWSSteps.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/main/java/com/rl/qa/steps/ConfigureNexusServerSteps.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/main/java/com/rl/qa/steps/ConfigureProviderSteps.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/main/java/com/rl/qa/steps/ConfigurePuppetServerSteps.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/main/java/com/rl/qa/steps/CreateEditDelBGroupSteps.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/main/java/com/rl/qa/steps/CreateEditDelDesignerSteps.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/main/java/com/rl/qa/steps/CreateEditDelDockerSteps.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/main/java/com/rl/qa/steps/CreateEditDelEnvSteps.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/main/java/com/rl/qa/steps/CreateEditDelJenkinsSteps.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/main/java/com/rl/qa/steps/CreateEditDelOrgSteps.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/main/java/com/rl/qa/steps/CreateEditDelProjectSteps.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/main/java/com/rl/qa/steps/CreateEditDeleteTeamSteps.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/main/java/com/rl/qa/steps/ImportNodeFromChefSteps.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/main/java/com/rl/qa/steps/LoginSteps.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/main/java/com/rl/qa/steps/ProivderSyncSteps.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/main/java/com/rl/qa/steps/TemplateSteps.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/main/java/com/rl/qa/steps/VMImageSteps.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/main/java/com/rl/qa/utils/AjaxEnabledPageFactory.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/main/java/com/rl/qa/utils/BaseView.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/main/java/com/rl/qa/utils/CucumberContext.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/main/java/com/rl/qa/utils/ForceWaitForItem.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/main/java/com/rl/qa/utils/SeleniumUtilities.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/main/java/com/rl/qa/utils/SpreadsheetUtils.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/main/java/com/rl/qa/utils/StaleReferenceAwareFieldDecorator.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/main/java/com/rl/qa/utils/ThreadPool.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/main/java/com/rl/qa/views/CFTViews.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/main/java/com/rl/qa/views/ChefServerSetupViews.java create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/main/java/com/rl/qa/views/ChefServerSetupViews.java~ create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/main/java/com/rl/qa/views/ConfigBlueprintForOSImageUsingProAWSViews.java create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/main/java/com/rl/qa/views/ConfigBlueprintForSSTempUsingProAWSViews.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/main/java/com/rl/qa/views/ConfigureNexusServerViews.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/main/java/com/rl/qa/views/ConfigureProviderViews.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/main/java/com/rl/qa/views/ConfigurePuppetServerViews.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/main/java/com/rl/qa/views/CreateEditDelBGroupViews.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/main/java/com/rl/qa/views/CreateEditDelDesignerViews.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/main/java/com/rl/qa/views/CreateEditDelDockerViews.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/main/java/com/rl/qa/views/CreateEditDelEnvViews.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/main/java/com/rl/qa/views/CreateEditDelJenkinsViews.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/main/java/com/rl/qa/views/CreateEditDelOrgViews.java create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/main/java/com/rl/qa/views/CreateEditDelOrgViews.java~ create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/main/java/com/rl/qa/views/CreateEditDelProjectViews.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/main/java/com/rl/qa/views/CreateEditDeleteTeamViews.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/main/java/com/rl/qa/views/ImportNodesFromChefViews.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/main/java/com/rl/qa/views/LoginViews.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/main/java/com/rl/qa/views/TemplateViews.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/main/java/com/rl/qa/views/VMImageViews.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/main/resources/IEDriverServer.exe create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/main/resources/JSErrorCollector-0.6.jar create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/main/resources/chromedriver.exe create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/main/resources/firebug/firebug-1.9.2.xpi create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/main/resources/log4j.properties create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/main/resources/lx-selenium.properties create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/main/resources/users/Administrator.properties create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/main/resources/users/Broker.properties create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/main/resources/users/Delete.properties create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/main/resources/users/Edit.properties create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/main/resources/users/NoAccessInAdminDash.properties create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/main/resources/users/No_Access.properties create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/main/resources/users/View.properties create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/test/java/DeleteOrganizationRunner.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/test/java/TestRunner1.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/test/java/TestRunner2.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/test/java/TestRunner3.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/test/java/TestRunner4.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/test/java/TestRunner5.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/test/java/TestRunner6.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/test/java/TestRunner7.java create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/test/resources/Design/ConfigBlueprintForCFTUsingProAWS.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/test/resources/Design/ConfigBlueprintForOSImageUsingProAWS.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/test/resources/Design/ConfigBlueprintForSSTempUsingProAWS.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/test/resources/Design/CreateDataInSettModuleReqForDesignModule.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/test/resources/Upload/JavaStack.template create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/test/resources/Upload/azureTestTemplate.json create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/test/resources/Upload/jagadeesh12_ChefServerFile/knife.rb create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/test/resources/Upload/knife.rb create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/test/resources/Upload/pcjoshi9_ChefServerFile/knife.rb create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/test/resources/catalyst/settings/ServiceController.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/test/resources/catalyst/settings/StackName.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/test/resources/catalyst/settings/configsetup/ChefServerSetup.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/test/resources/catalyst/settings/configsetup/ConfigurePuppetServerUsingPass.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/test/resources/catalyst/settings/configsetup/ConfigurePuppetServerUsingPem.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/test/resources/catalyst/settings/configsetup/CreateChefServer.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/test/resources/catalyst/settings/configsetup/CreateEditDelEnvByCreatingNewEnv.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/test/resources/catalyst/settings/configsetup/CreateEnvFromChef.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/test/resources/catalyst/settings/configsetup/CreateEnvUsingEnvFromChefServer.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/test/resources/catalyst/settings/configsetup/CreateNewEnvironment.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/test/resources/catalyst/settings/configsetup/ImportNodesFromChef.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/test/resources/catalyst/settings/devopssetup/ConfigAWSProviderWithInvalidKey.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/test/resources/catalyst/settings/devopssetup/ConfigureAWSProviderUsingAccessKey.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/test/resources/catalyst/settings/devopssetup/ConfigureAWSProviderUsingIAMRole.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/test/resources/catalyst/settings/devopssetup/ConfigureAzureProvider.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/test/resources/catalyst/settings/devopssetup/ConfigureNexusServer.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/test/resources/catalyst/settings/devopssetup/ConfigureOpenStackProvider.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/test/resources/catalyst/settings/devopssetup/ConfigureVMWareProvider.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/test/resources/catalyst/settings/devopssetup/CreateAWSProvider.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/test/resources/catalyst/settings/devopssetup/CreateEditDelDocker.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/test/resources/catalyst/settings/devopssetup/CreateEditDelJenkins.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/test/resources/catalyst/settings/devopssetup/CreateVMImgAWS.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/test/resources/catalyst/settings/gallerysetup/CreateCloudFormationTemp.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/test/resources/catalyst/settings/gallerysetup/CreateEditDelCloudFormationTemp.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/test/resources/catalyst/settings/gallerysetup/CreateEditDelDockerTemplate.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/test/resources/catalyst/settings/gallerysetup/CreateEditDelSoftwareStackTemp.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/test/resources/catalyst/settings/gallerysetup/CreateEditDelVMImageUsingProviderTypeAWS.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/test/resources/catalyst/settings/gallerysetup/CreateEditDelVMImageUsingProviderTypeOpenStack.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/test/resources/catalyst/settings/gallerysetup/CreateEditDelVMImageUsingProviderTypeVMware.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/test/resources/catalyst/settings/gallerysetup/CreateEditDeleteARMTemplate.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/test/resources/catalyst/settings/gallerysetup/CreateEditDeleteVMImageUsingProviderTypeAzure.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/test/resources/catalyst/settings/gallerysetup/CreateSoftwareStackTemp.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/test/resources/catalyst/settings/orgsetup/1CreateOrganization.feature create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/test/resources/catalyst/settings/orgsetup/1CreateOrganization.feature~ create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/test/resources/catalyst/settings/orgsetup/CreateBusinessGroup.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/test/resources/catalyst/settings/orgsetup/CreateEditDelBGroup.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/test/resources/catalyst/settings/orgsetup/CreateEditDelOrg.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/test/resources/catalyst/settings/orgsetup/CreateEditDelProject.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/test/resources/catalyst/settings/orgsetup/CreateProject.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/test/resources/catalyst/settings/orgsetup/DeleteOrganization.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/test/resources/catalyst/settings/providersync/providersync.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/test/resources/catalyst/settings/userssetup/CreateEditDelDesigner.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/test/resources/catalyst/settings/userssetup/CreateEditDelOrgAdmin.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/test/resources/catalyst/settings/userssetup/CreateEditDelSuperadmin.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/test/resources/catalyst/settings/userssetup/CreateEditDeleteTeams.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/test/resources/catalyst/settings/userssetup/CreateNewTeam.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/test/resources/catalyst/settings/userssetup/CreateOrgAdmin.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/test/resources/catalyst/settings/userssetup/CreateOrgAndVerifyFourAutoCreatedTeams.feature create mode 100755 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Org_Deletion/src/test/resources/catalyst/settings/userssetup/CreateSuperadmin.feature create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Workflow_Bots/script.js create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/script.js create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Docs/AD - Delete User.md create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Docs/AD - User Creation.md create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Docs/Gmail Login Logout.md create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Docs/Jira User Creation.md create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Docs/LDAP - User Creation.md create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Docs/LDAP - Delete User.md create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Docs/Org Creation.md create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Docs/Org Deletion.md create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Docs/Yahoo Login Logout.md create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Docs/create_cat_user.md create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Docs/images/Bot_History_small.png create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/README.md create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/YAML/ad_create_user_bot.yaml create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/YAML/ad_creategroup_bot.yaml create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/YAML/ad_delete_user_bot.yaml create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/YAML/ad_deletegroup_bot.yaml create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/YAML/ad_disable_user_bot.yaml create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/YAML/ad_enable_user_bot.yaml create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/YAML/ad_password_reset.yaml create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/YAML/ad_query_bot.yaml create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/YAML/aws_iam_user_creation_bot.yaml create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/YAML/aws_instance_info_bot.yaml create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/YAML/bp_catalyst_bot.yaml create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/YAML/bp_chef_bot.yaml create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/YAML/build_catalyst_bot.yaml create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/YAML/build_catalyst_nexus_bot.yaml create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/YAML/build_petclinic_nexus_bot.yaml create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/YAML/cat_user_creation_bot.yaml create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/YAML/catalyst_ami_bot.yaml create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/YAML/catalyst_docker_image_creation_bot.yaml create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/YAML/catalyst_quality_test_bot.yaml create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/YAML/cft_stack_delete_bot.yaml create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/YAML/ci_cd_dashboard_restart_bot.yaml create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/YAML/clear_log_bot.yaml create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/YAML/demo_customer_name_bot.yaml create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/YAML/deploy_catalyst_bot.yaml create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/YAML/deploy_iis_bot.yaml create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/YAML/deploy_petclinic_bot.yaml create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/YAML/disk_usage_remediation_bot.yaml create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/YAML/disk_usage_utility_bot.yaml create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/YAML/disk_utility_bot.yaml create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/YAML/extract_host_ip_bot.yaml create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/YAML/file_save_in_s3_bot.yaml create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/YAML/https_scanner_bot.yaml create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/YAML/install_ant_bot.yaml create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/YAML/install_apache2_bot.yaml create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/YAML/install_chocolatey_bot.yaml create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/YAML/install_chrome_bot.yaml create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/YAML/install_docker_bot.yaml create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/YAML/install_firefox_bot.yaml create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/YAML/install_git_bot.yaml create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/YAML/install_java8_bot.yaml create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/YAML/install_jboss_bot.yaml create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/YAML/install_jenkins_bot.yaml create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/YAML/install_kibana_bot.yaml create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/YAML/install_mongodb_bot.yaml create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/YAML/install_mysql_bot.yaml create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/YAML/install_new_relic_bot.yaml create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/YAML/install_nexus_bot.yaml create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/YAML/install_php_bot.yaml create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/YAML/install_postgreysql_bot.yaml create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/YAML/install_python_bot.yaml create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/YAML/install_ruby_bot.yaml create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/YAML/install_zabbix_bot.yaml create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/YAML/jira_create_ticket_bot.yaml create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/YAML/jira_create_user_bot.yaml create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/YAML/jira_delete_user_bot.yaml create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/YAML/ldap_create _user.yaml create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/YAML/ldap_delete_user_bot.yaml create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/YAML/ldap_password_reset_bot.yaml create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/YAML/lifeRay_application_bot.yaml create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/YAML/new_stop1_instance_bot.yaml create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/YAML/nginx_remediation_bot.yaml create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/YAML/nginx_remidiatio_work_flow.yaml create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/YAML/old_nginx_remediation_bot.yaml create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/YAML/pagerduty_create_bot.yaml create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/YAML/pagerduty_update_bot.yaml create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/YAML/reboot_instance_bot.yaml create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/YAML/rl_catalyst_user_creation_bot.yaml create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/YAML/rl_jenkins_testmail_bot.yaml create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/YAML/rlcatalyst_create_org_bot.yaml create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/YAML/rlcatalyst_delete_org_bot.yaml create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/YAML/rlcatalyst_user_creation_bot.yaml create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/YAML/service_restart_bot.yaml create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/YAML/service_start_bot.yaml create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/YAML/service_stop _demo_bot.yaml create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/YAML/servicenow_create_bot.yaml create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/YAML/servicenow_update_bot.yaml create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/YAML/slack_notification_bot.yaml create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/YAML/ssl_check_bot.yaml create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/YAML/start_instance_bot.yaml create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/YAML/telemetry_notification_bot.yaml create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/YAML/terminate_instance_bot.yaml create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/YAML/tomcat_install_bot.yaml create mode 100644 server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/YAML/value_predictor_bot.yaml diff --git a/client/cat3/src/partials/sections/dashboard/bots/controller/editParamsCtrl.js b/client/cat3/src/partials/sections/dashboard/bots/controller/editParamsCtrl.js index a1bc8dc6a..669f13dff 100644 --- a/client/cat3/src/partials/sections/dashboard/bots/controller/editParamsCtrl.js +++ b/client/cat3/src/partials/sections/dashboard/bots/controller/editParamsCtrl.js @@ -29,7 +29,7 @@ blueprintName:items.execution.name }; } - + console.log(items); $scope.botName = items.name; $scope.botParams = items.inputFormFields; $scope.botEditParams = {}; @@ -292,6 +292,9 @@ } reqBody.choiceParam = $scope.choiceParam; } + } else if ($scope.botType === 'api') { + reqBody.data = $scope.botEditParams; + reqBody.flowId = items.flowId; } $scope.botExecuteMethod(items.id,reqBody); } else if (type === 'blueprints') { diff --git a/client/cat3/src/partials/sections/dashboard/bots/tabs/editParams.html b/client/cat3/src/partials/sections/dashboard/bots/tabs/editParams.html index 7befe09f6..d4f9931f4 100644 --- a/client/cat3/src/partials/sections/dashboard/bots/tabs/editParams.html +++ b/client/cat3/src/partials/sections/dashboard/bots/tabs/editParams.html @@ -65,7 +65,7 @@
No Matching Blueprint Found in the Database
-
+
diff --git a/server/app/engine/bots/apiExecutor.js b/server/app/engine/bots/apiExecutor.js new file mode 100644 index 000000000..fe05c53de --- /dev/null +++ b/server/app/engine/bots/apiExecutor.js @@ -0,0 +1,105 @@ +/* + Copyright [2016] [Relevance Lab] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +var logger = require('_pr/logger')(module); +var async = require("async"); +var uuid = require('node-uuid'); +var logsDao = require('_pr/model/dao/logsdao.js'); +var noticeService = require('_pr/services/noticeService.js'); +var auditQueue = require('_pr/config/global-data.js'); +var request = require('request'); +const errorType = 'apiExecutor'; +var apiExecutor = module.exports = {}; + +apiExecutor.execute = function execute(botDetail,reqBody, auditTrail, userName,botHostDetails,callback) { + var actionLogId = uuid.v4(); + var reqBodyObj = { + "inputs": reqBody.data + }; + var botAuditTrailObj = { + botId: botDetail._id, + actionId: actionLogId + } + callback(null, botAuditTrailObj); + var serverUrl = "http://" + botHostDetails.hostIP + ':' + botHostDetails.hostPort; //currently hardcoded; will have to be made dynamic later + var executorUrl = '/bot/' + botDetail.id + '/exec'; + var options = { + url: serverUrl + executorUrl, + headers: { + 'Content-Type': 'application/json', + 'charset': 'utf-8' + }, + json: true, + body: reqBodyObj + }; + logger.info(serverUrl+executorUrl); + + request.post(options, function (err, res, body) { + if(res){ + if (res.statusCode === 200) { + var auditQueueDetails = { + userName: userName, + botId: botDetail.id, + bot_id: botDetail._id, + logRefId: [], + auditId: actionLogId, + instanceLog: '', + instanceIP: '', + auditTrailId: auditTrail._id, + remoteAuditId: res.body.ref, + link: res.body.link, + status: "pending", + serverUrl: serverUrl, + env: "local", + retryCount: 0 + } + auditQueue.setAudit(auditQueueDetails); + return; + } else { + logger.error(err); + var logData = { + botId: botDetail._id, + botRefId: actionLogId, + err: true, + log: "Error in BOT Engine executor:", + timestamp: new Date().getTime(), + } + logsDao.insertLog(logData); + noticeService.updater(actionId,'log',logData); + var resultTaskExecution = { + "actionStatus": 'failed', + "status": 'failed', + "endedOn": new Date().getTime(), + "actionLogId": actionLogId + }; + auditTrailService.updateAuditTrail('BOT', auditTrail._id, resultTaskExecution, function (err, data) { + if (err) { + logger.error("Failed to create or update bots Log: ", err); + } + noticeService.notice(userName, { + title: "API BOT Execution", + body: res.statusCode === 502?"Bot Enginge is not running":"Error in API executor" + }, "error", function (err, data) { + if (err) { + logger.error("Error in Notification Service, ", err); + } + return; + }); + }); + } + } + }) + } diff --git a/server/app/model/bots/1.1/bot.js b/server/app/model/bots/1.1/bot.js index c1b4fd3e1..7b6acc0a1 100644 --- a/server/app/model/bots/1.1/bot.js +++ b/server/app/model/bots/1.1/bot.js @@ -205,6 +205,11 @@ var BotSchema = new Schema ({ required: false, trim: true }, + flowId: { + type: String, + required: false, + trim: true + }, lastExecutionStatus: { type: String, required: false, diff --git a/server/app/services/botService.js b/server/app/services/botService.js index 9569d9a38..d849e295e 100644 --- a/server/app/services/botService.js +++ b/server/app/services/botService.js @@ -28,11 +28,12 @@ var scriptExecutor = require('_pr/engine/bots/scriptExecutor.js'); var chefExecutor = require('_pr/engine/bots/chefExecutor.js'); var blueprintExecutor = require('_pr/engine/bots/blueprintExecutor.js'); var jenkinsExecutor = require('_pr/engine/bots/jenkinsExecutor.js'); -var fileIo = require('_pr/lib/utils/fileio'); +var apiExecutor = require('_pr/engine/bots/apiExecutor.js'); var masterUtil = require('_pr/lib/utils/masterUtil.js'); var uuid = require('node-uuid'); var settingService = require('_pr/services/settingsService'); + const fileHound= require('filehound'); const yamlJs= require('yamljs'); const gitHubService = require('_pr/services/gitHubService.js'); @@ -41,85 +42,6 @@ const errorType = 'botService'; var botService = module.exports = {}; -botService.createNew = function createNew(reqBody,callback) { - fileUpload.getReadStreamFileByFileId(reqBody.fileId, function (err, fileDetail) { - if (err) { - logger.error("Error in reading YAML File."); - callback(err, null); - return; - } else { - var fileName = uuid.v4() + '_' + fileDetail.fileName; - var desPath = appConfig.scriptDir + fileName; - fileIo.writeFile(desPath, fileDetail.fileData, false, function (err) { - if (err) { - logger.error("Unable to write file"); - callback(err, null); - return; - } else { - yamlJs.load(desPath, function (result) { - if (result !== null) { - var paramObj = {}; - if (reqBody.type === 'chef') { - paramObj = { - data: { - runlist: reqBody.runlist, - attributes: reqBody.attributes - } - } - } else if (reqBody.type === 'script') { - paramObj = { - scriptId: reqBody.scriptId, - data: reqBody.params - } - } else if (reqBody.type === 'jenkins') { - paramObj = { - jenkinsServerId: reqBody.jenkinsServerId, - jenkinsBuildName: reqBody.jenkinsBuildName, - data: reqBody.params - } - } else { - paramObj = paramObj; - } - var botsObj = { - ymlJson: result, - name: result.name, - id: result.id, - desc: result.desc, - category: reqBody.category, - action: result.action, - execution: result.execution, - type: reqBody.type, - subType: reqBody.subType, - inputFormFields: result.input[0].form, - isParameterized:result.isParameterized?result.isParameterized:false, - outputOptions: result.output, - ymlDocFileId: reqBody.fileId, - orgId: reqBody.orgId, - orgName: reqBody.orgName, - manualExecutionTime: reqBody.standardTime, - params: paramObj, - source: "Catalyst" - } - botDao.createNew(botsObj, function (err, data) { - if (err) { - logger.error(err); - callback(err, null); - removeScriptFile(desPath); - return; - } else { - callback(null, data); - removeScriptFile(desPath); - return; - } - }); - - } - }) - } - }); - } - }); -} botService.updateBotsScheduler = function updateBotsScheduler(botId,botObj,callback) { if(botObj.scheduler && botObj.scheduler !== null && Object.keys(botObj.scheduler).length !== 0 && botObj.isScheduled && botObj.isScheduled === true) { @@ -287,11 +209,11 @@ botService.getBotsList = function getBotsList(botsQuery,actionStatus,serviceNowC callback(err,null); return; } - var resultObj = { - bots : results.botList.bots, - metaData : results.botList.metaData, - botSummary: results.botSummary - } + var resultObj = { + bots : results.botList.bots, + metaData : results.botList.metaData, + botSummary: results.botSummary + } callback(null,resultObj); return; }); @@ -307,7 +229,7 @@ botService.executeBots = function executeBots(botsId,reqBody,userName,executionT function(bots,next){ if(bots.length > 0) { botId = bots[0]._id; - if (reqBody !== null && reqBody !== '' && (bots[0].type === 'script' || bots[0].type === 'chef') && schedulerCallCheck === false) { + if (reqBody !== null && reqBody !== '' && (bots[0].type === 'script' || bots[0].type === 'chef' || bots[0].type === 'api') && schedulerCallCheck === false) { masterUtil.getBotRemoteServerDetailByOrgId(bots[0].orgId, function (err, botServerDetails) { if (err) { logger.error("Error while fetching BOTs Server Details"); @@ -316,7 +238,7 @@ botService.executeBots = function executeBots(botsId,reqBody,userName,executionT } else if (botServerDetails !== null) { botRemoteServerDetails.hostIP = botServerDetails.hostIP; botRemoteServerDetails.hostPort = botServerDetails.hostPort; - encryptedParam(reqBody, next); + next(null,bots); } else { var error = new Error(); error.message = 'BOTs Remote Engine is not configured or not in running mode'; @@ -326,7 +248,7 @@ botService.executeBots = function executeBots(botsId,reqBody,userName,executionT }); } else { - next(null, reqBody); + next(null,bots); } }else{ var error = new Error(); @@ -335,22 +257,6 @@ botService.executeBots = function executeBots(botsId,reqBody,userName,executionT next(error, null); } }, - function(paramObj,next) { - if(schedulerCallCheck === false) { - var botObj = { - params:paramObj - } - if(reqBody.nodeIds){ - botObj.params.nodeIds = reqBody.nodeIds; - } - botDao.updateBotsDetail(botId,botObj, next); - }else{ - next(null,paramObj); - } - }, - function(updateStatus,next) { - botDao.getBotsById(botId, next); - }, function(botDetails,next) { if(botDetails.length > 0){ async.parallel({ @@ -383,17 +289,27 @@ botService.executeBots = function executeBots(botsId,reqBody,userName,executionT function(auditTrail,next) { var uuid = require('node-uuid'); auditTrail.actionId = uuid.v4(); + logger.info('Valid BOT Type '+botDetails[0].type); if (botDetails[0].type === 'script') { - scriptExecutor.execute(botDetails[0], auditTrail, userName, executionType, botRemoteServerDetails, next); - } else if (botDetails[0].type === 'chef') { - chefExecutor.execute(botDetails[0], auditTrail, userName, executionType, botRemoteServerDetails, next); - } else if (botDetails[0].type === 'blueprints') { - reqBody = botDetails[0].params; + scriptExecutor.execute(botDetails[0],reqBody, auditTrail, userName, executionType, botRemoteServerDetails,schedulerCallCheck, next); + }else if (botDetails[0].type === 'chef') { + chefExecutor.execute(botDetails[0],reqBody, auditTrail, userName, executionType, botRemoteServerDetails,schedulerCallCheck, next); + }else if (botDetails[0].type === 'blueprints' || botDetails[0].type === 'blueprint') { + if(schedulerCallCheck === true) { + reqBody = botDetails[0].params; + } blueprintExecutor.execute(botDetails[0].id,auditTrail, reqBody, userName, next); - } else if (botDetails[0].type === 'jenkins') { - reqBody = botDetails[0].params; + }else if (botDetails[0].type === 'jenkins') { + if(schedulerCallCheck === true) { + reqBody = botDetails[0].params; + } jenkinsExecutor.execute(botDetails[0],auditTrail, reqBody, userName, next); - } else { + }else if (botDetails[0].type === 'api') { + if(schedulerCallCheck === true) { + reqBody = botDetails[0].params; + } + apiExecutor.execute(botDetails[0],reqBody,auditTrail, userName,botRemoteServerDetails, next); + }else { var err = new Error('Invalid BOT Type'); err.status = 400; err.msg = 'Invalid BOT Type'; @@ -411,13 +327,35 @@ botService.executeBots = function executeBots(botsId,reqBody,userName,executionT }) }, bots: function (callback) { - if(botDetails[0].type === 'script' || botDetails[0].type === 'chef' || botDetails[0].type === 'jenkins' || botDetails[0].type === 'blueprints') { + if((botDetails[0].type === 'api' || botDetails[0].type === 'script' || botDetails[0].type === 'chef' || botDetails[0].type === 'jenkins' || botDetails[0].type === 'blueprints' || botDetails[0].type === 'blueprint') + && schedulerCallCheck === true) { var botExecutionCount = botDetails[0].executionCount + 1; var botUpdateObj = { executionCount: botExecutionCount, - lastRunTime: new Date().getTime() + lastRunTime: new Date().getTime(), } botDao.updateBotsDetail(botId, botUpdateObj, callback); + } else if((botDetails[0].type === 'api' || botDetails[0].type === 'script' || botDetails[0].type === 'chef' || botDetails[0].type === 'jenkins' || botDetails[0].type === 'blueprints' || botDetails[0].type === 'blueprint') + && schedulerCallCheck === false) { + encryptedParam(reqBody,botDetails[0].inputFormFields,function(err,encryptData){ + if(err){ + var err = new Error('Data encryption is Failed'); + err.status = 400; + err.message = 'Data encryption is Failed'; + callback(err, null); + }else{ + var botExecutionCount = botDetails[0].executionCount + 1; + var botUpdateObj = { + executionCount: botExecutionCount, + lastRunTime: new Date().getTime(), + params:encryptData + } + if(reqBody.nodeIds){ + botUpdateObj.params.nodeIds = reqBody.nodeIds; + } + botDao.updateBotsDetail(botId, botUpdateObj, callback); + } + }); }else{ var err = new Error('Invalid BOT Type'); err.status = 400; @@ -434,7 +372,7 @@ botService.executeBots = function executeBots(botsId,reqBody,userName,executionT }); }else { next(null,botDetails); - } + } } ],function(err,results){ if(err){ @@ -491,7 +429,6 @@ botService.syncSingleBotsWithGitHub = function syncSingleBotsWithGitHub(botId,ca next(err, null); } else { var botsObj = { - ymlJson: result, name: result.name, id: result.id, desc: result.desc, @@ -643,7 +580,6 @@ botService.syncBotsWithGitHub = function syncBotsWithGitHub(gitHubId,callback){ }); }else{ var botsObj={ - ymlJson:result, name:result.name, gitHubId:gitHubDetails.botSync._id, gitHubRepoName:gitHubDetails.botSync.repositoryName, @@ -841,9 +777,10 @@ botService.getParticularBotsHistoryLogs= function getParticularBotsHistoryLogs(b if(bots.length > 0) { var logsDao = require('_pr/model/dao/logsdao.js'); logsDao.getLogsByReferenceId(historyId, timestamp,next); - }else{ + }else{ next({errCode:400, errMsg:"Bots is not exist in DB"},null) - } + } + } ],function(err,results){ if(err){ @@ -885,20 +822,23 @@ botService.updateLastBotExecutionStatus= function updateLastBotExecutionStatus(b } -function encryptedParam(paramDetails, callback) { +function encryptedParam(paramDetails,inputFormDetails, callback) { var cryptoConfig = appConfig.cryptoSettings; var cryptography = new Cryptography(cryptoConfig.algorithm, cryptoConfig.password); var encryptedObj = {}; - if (paramDetails.category === 'script' && paramDetails.data && paramDetails.data !== null) { - Object.keys(paramDetails.data).forEach(function (key) { - var encryptedText = cryptography.encryptText(paramDetails.data[key], cryptoConfig.encryptionEncoding, + if (paramDetails.type === 'script' && paramDetails.data && paramDetails.data !== null) { + inputFormDetails.forEach(function(formField){ + if(formField.type === 'password' || formField.type === 'restricted'){ + var encryptedText = cryptography.encryptText(paramDetails.data[formField.name], cryptoConfig.encryptionEncoding, cryptoConfig.decryptionEncoding); - encryptedObj[key] = encryptedText; - }); - paramDetails.data = encryptedObj; - callback(null, paramDetails); + paramDetails.data[formField.name] = encryptedText; + } + }) + callback(null, paramDetails); + return; }else{ callback(null, paramDetails); + return; } } @@ -1036,15 +976,3 @@ function addYmlFileDetailsForBots(bots,reqData,callback){ } } } - -function removeScriptFile(filePath) { - fileIo.removeFile(filePath, function(err, result) { - if (err) { - logger.error(err); - return; - } else { - logger.debug("Successfully Remove file"); - return - } - }) -} diff --git a/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/.DS_Store b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..96a0c6fc45248b333793cc8ba44c7aa7c9e21a2c GIT binary patch literal 6148 zcmeHKyG{c^3>?E1k!VssmDQqdt1M1v9u1od_NHsc3~WJ61V#*#gIv-YlT zit`zOt=={lz!JcM?uZW$z4^X-XD7v+63x$eU%zahciX3Y?(&ZjUOV6lJ8bZHP(NTI z|A5zyzr!VNadW^QJ71g>kOERb3P=Gdu&)4nw%g(?QBev=0V(jUfPWtv-El0O6XVmt z5F-F_ARWea%o4=r1aT~!6UoplONm)(HDXwnlW&zb7S4%T4y)nA>Sn76#o~6J-y$70 zCMrq+DX_1A&)&49_y249FY~|W$fST2_@@fkFs-K*U#@y<_nO{o8~vXCWz3CqhG@ma iXvKW+R($>=ulbt$W8s__<>aHBs2>5>MJ5IQLV-{3FdTjW literal 0 HcmV?d00001 diff --git a/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Check_BOTs/chef/sensu_install/.kitchen.yml b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Check_BOTs/chef/sensu_install/.kitchen.yml new file mode 100644 index 000000000..6b073c8f7 --- /dev/null +++ b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Check_BOTs/chef/sensu_install/.kitchen.yml @@ -0,0 +1,16 @@ +--- +driver: + name: vagrant + +provisioner: + name: chef_solo + +platforms: + - name: ubuntu-14.04 + - name: centos-7.1 + +suites: + - name: default + run_list: + - recipe[sensu-client::default] + attributes: diff --git a/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Check_BOTs/chef/sensu_install/Berksfile b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Check_BOTs/chef/sensu_install/Berksfile new file mode 100644 index 000000000..967b9a78b --- /dev/null +++ b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Check_BOTs/chef/sensu_install/Berksfile @@ -0,0 +1,3 @@ +source "https://supermarket.chef.io" + +metadata diff --git a/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Check_BOTs/chef/sensu_install/CHANGELOG.md b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Check_BOTs/chef/sensu_install/CHANGELOG.md new file mode 100644 index 000000000..ce7e226f1 --- /dev/null +++ b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Check_BOTs/chef/sensu_install/CHANGELOG.md @@ -0,0 +1,13 @@ +sensu-client CHANGELOG +====================== + +This file is used to list changes made in each version of the sensu-client cookbook. + +0.1.0 +----- +- [your_name] - Initial release of sensu-client + +- - - +Check the [Markdown Syntax Guide](http://daringfireball.net/projects/markdown/syntax) for help with Markdown. + +The [Github Flavored Markdown page](http://github.github.com/github-flavored-markdown/) describes the differences between markdown on github and standard markdown. diff --git a/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Check_BOTs/chef/sensu_install/Gemfile b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Check_BOTs/chef/sensu_install/Gemfile new file mode 100644 index 000000000..19e399def --- /dev/null +++ b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Check_BOTs/chef/sensu_install/Gemfile @@ -0,0 +1,18 @@ +source 'https://rubygems.org' + +gem 'berkshelf' + +# Uncomment these lines if you want to live on the Edge: +# +# group :development do +# gem "berkshelf", github: "berkshelf/berkshelf" +# gem "vagrant", github: "mitchellh/vagrant", tag: "v1.6.3" +# end +# +# group :plugins do +# gem "vagrant-berkshelf", github: "berkshelf/vagrant-berkshelf" +# gem "vagrant-omnibus", github: "schisamo/vagrant-omnibus" +# end + +gem "test-kitchen" +gem "kitchen-vagrant" diff --git a/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Check_BOTs/chef/sensu_install/README.md b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Check_BOTs/chef/sensu_install/README.md new file mode 100644 index 000000000..7dc8a1f95 --- /dev/null +++ b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Check_BOTs/chef/sensu_install/README.md @@ -0,0 +1,68 @@ +sensu-client Cookbook +===================== +TODO: Enter the cookbook description here. + +e.g. +This cookbook makes your favorite breakfast sandwich. + +Requirements +------------ +TODO: List your cookbook requirements. Be sure to include any requirements this cookbook has on platforms, libraries, other cookbooks, packages, operating systems, etc. + +e.g. +#### packages +- `toaster` - sensu-client needs toaster to brown your bagel. + +Attributes +---------- +TODO: List your cookbook attributes here. + +e.g. +#### sensu-client::default +
+ + + + + + + + + + + + +
KeyTypeDescriptionDefault
['sensu-client']['bacon']Booleanwhether to include bacontrue
+ +Usage +----- +#### sensu-client::default +TODO: Write usage instructions for each cookbook. + +e.g. +Just include `sensu-client` in your node's `run_list`: + +```json +{ + "name":"my_node", + "run_list": [ + "recipe[sensu-client]" + ] +} +``` + +Contributing +------------ +TODO: (optional) If this is a public cookbook, detail the process for contributing. If this is a private cookbook, remove this section. + +e.g. +1. Fork the repository on Github +2. Create a named feature branch (like `add_component_x`) +3. Write your change +4. Write tests for your change (if applicable) +5. Run the tests, ensuring they all pass +6. Submit a Pull Request using Github + +License and Authors +------------------- +Authors: TODO: List authors diff --git a/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Check_BOTs/chef/sensu_install/Thorfile b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Check_BOTs/chef/sensu_install/Thorfile new file mode 100644 index 000000000..7a0c0ffb3 --- /dev/null +++ b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Check_BOTs/chef/sensu_install/Thorfile @@ -0,0 +1,12 @@ +# encoding: utf-8 + +require 'bundler' +require 'bundler/setup' +require 'berkshelf/thor' + +begin + require "kitchen/thor_tasks" + Kitchen::ThorTasks.new +rescue LoadError + puts ">>>>> Kitchen gem not loaded, omitting tasks" unless ENV["CI"] +end diff --git a/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Check_BOTs/chef/sensu_install/Vagrantfile b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Check_BOTs/chef/sensu_install/Vagrantfile new file mode 100644 index 000000000..f2da4dc9a --- /dev/null +++ b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Check_BOTs/chef/sensu_install/Vagrantfile @@ -0,0 +1,90 @@ +# -*- mode: ruby -*- +# vi: set ft=ruby : + +# Vagrantfile API/syntax version. Don't touch unless you know what you're doing! +VAGRANTFILE_API_VERSION = '2' + +Vagrant.require_version '>= 1.5.0' + +Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| + # All Vagrant configuration is done here. The most common configuration + # options are documented and commented below. For a complete reference, + # please see the online documentation at vagrantup.com. + + config.vm.hostname = 'sensu-client-berkshelf' + + # Set the version of chef to install using the vagrant-omnibus plugin + # NOTE: You will need to install the vagrant-omnibus plugin: + # + # $ vagrant plugin install vagrant-omnibus + # + if Vagrant.has_plugin?("vagrant-omnibus") + config.omnibus.chef_version = 'latest' + end + + # Every Vagrant virtual environment requires a box to build off of. + # If this value is a shorthand to a box in Vagrant Cloud then + # config.vm.box_url doesn't need to be specified. + config.vm.box = 'chef/ubuntu-14.04' + + + # Assign this VM to a host-only network IP, allowing you to access it + # via the IP. Host-only networks can talk to the host machine as well as + # any other machines on the same network, but cannot be accessed (through this + # network interface) by any external networks. + config.vm.network :private_network, type: 'dhcp' + + # Create a forwarded port mapping which allows access to a specific port + # within the machine from a port on the host machine. In the example below, + # accessing "localhost:8080" will access port 80 on the guest machine. + + # Share an additional folder to the guest VM. The first argument is + # the path on the host to the actual folder. The second argument is + # the path on the guest to mount the folder. And the optional third + # argument is a set of non-required options. + # config.vm.synced_folder "../data", "/vagrant_data" + + # Provider-specific configuration so you can fine-tune various + # backing providers for Vagrant. These expose provider-specific options. + # Example for VirtualBox: + # + # config.vm.provider :virtualbox do |vb| + # # Don't boot with headless mode + # vb.gui = true + # + # # Use VBoxManage to customize the VM. For example to change memory: + # vb.customize ["modifyvm", :id, "--memory", "1024"] + # end + # + # View the documentation for the provider you're using for more + # information on available options. + + # The path to the Berksfile to use with Vagrant Berkshelf + # config.berkshelf.berksfile_path = "./Berksfile" + + # Enabling the Berkshelf plugin. To enable this globally, add this configuration + # option to your ~/.vagrant.d/Vagrantfile file + config.berkshelf.enabled = true + + # An array of symbols representing groups of cookbook described in the Vagrantfile + # to exclusively install and copy to Vagrant's shelf. + # config.berkshelf.only = [] + + # An array of symbols representing groups of cookbook described in the Vagrantfile + # to skip installing and copying to Vagrant's shelf. + # config.berkshelf.except = [] + + config.vm.provision :chef_solo do |chef| + chef.json = { + mysql: { + server_root_password: 'rootpass', + server_debian_password: 'debpass', + server_repl_password: 'replpass' + } + } + + chef.run_list = [ + 'recipe[sensu-client::default]' + ] + end +end diff --git a/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Check_BOTs/chef/sensu_install/attributes/default.rb b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Check_BOTs/chef/sensu_install/attributes/default.rb new file mode 100644 index 000000000..020f7871f --- /dev/null +++ b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Check_BOTs/chef/sensu_install/attributes/default.rb @@ -0,0 +1,6 @@ +default['sensu_install']['rabbitmq_host'] = 'sensu.relevancelab.com' +default['sensu_install']['rabbitmq_port'] = '5672' +default['sensu_install']['rabbitmq_username'] = 'sensu' +default['sensu_install']['rabbitmq_password'] = 'sensu' +default['sensu_install']['rabbitmq_vhostname']= '/sensu' +default['sensu_install']['instance-id'] = "i-d3411313" diff --git a/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Check_BOTs/chef/sensu_install/chefignore b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Check_BOTs/chef/sensu_install/chefignore new file mode 100644 index 000000000..7be3c6dfa --- /dev/null +++ b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Check_BOTs/chef/sensu_install/chefignore @@ -0,0 +1 @@ +.kitchen diff --git a/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Check_BOTs/chef/sensu_install/metadata.rb b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Check_BOTs/chef/sensu_install/metadata.rb new file mode 100644 index 000000000..d0508fab2 --- /dev/null +++ b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Check_BOTs/chef/sensu_install/metadata.rb @@ -0,0 +1,33 @@ +name 'sensu_install' +maintainer 'YOUR_COMPANY_NAME' +maintainer_email 'YOUR_EMAIL' +license 'All rights reserved' +description 'Installs/Configures sensu-client' +long_description IO.read(File.join(File.dirname(__FILE__), 'README.md')) +version '0.1.0' + +attribute 'sensu_install/rabbitmq_host', + display_name: 'RabbitMQ host IP Address', + description: "RabbitMQ host IP Address", + default: 'sensu.relevancelab.com' + +attribute 'sensu_install/rabbitmq_port', + display_name: 'RabbitMQ Port Number', + description: "RabbitMQ Port Number", + default: 5672 + +attribute 'sensu_install/rabbitmq_username', + display_name: 'RabbitMQ username', + description: "RabbitMQ username", + default: 'sensu' + +attribute 'sensu_install/rabbitmq_password', + display_name: 'RabbitMQ Password', + description: "RabbitMQ Password", + default: 'sensu' + +attribute 'sensu_install/rabbitmq_vhost', + display_name: 'RabbitMQ Vhost name', + description: "RabbitMQ Vhost Name", + default: '/sensu' + diff --git a/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Check_BOTs/chef/sensu_install/recipes/default.rb b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Check_BOTs/chef/sensu_install/recipes/default.rb new file mode 100644 index 000000000..7674689d9 --- /dev/null +++ b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Check_BOTs/chef/sensu_install/recipes/default.rb @@ -0,0 +1,97 @@ +# +# Cookbook Name:: sensu-client +# Recipe:: default +# +# Copyright 2015, Relevance labe +# Written by Manjunath contact support@Relevancelab.com +# +# All rights reserved - Do Not Redistribute +# + +ruby_block 'instance-details' do + block do + node.default['sensu_install']['instance-id'] = %x[curl http://169.254.169.254/latest/meta-data/instance-id] + node.default['sensu_install']['rabbitmq_host'] = %x[curl http://169.254.169.254/latest/meta-data/local-ipv4] + end +end + +case node['platform'] + + when 'debian', 'ubuntu' + + remote_file '/tmp/sensu_pubkey.gpg' do + source 'http://repos.sensuapp.org/apt/pubkey.gpg' + action :create + notifies :run, 'execute[add_sensu_gpg]', :immediately + end + + + execute "add_sensu_gpg" do + command 'cat /tmp/sensu_pubkey.gpg | apt-key add -' + user "root" + action :nothing + end + + execute "add_repo" do + command 'echo "deb http://repos.sensuapp.org/apt sensu main" > /etc/apt/sources.list.d/sensu.list' + not_if do ::File.exists?('/etc/apt/sources.list.d/sensu.list') end + notifies :run, 'execute[repo_update]', :immediately + end + + execute "repo_update" do + command 'apt-get update' + action :nothing + end + + when 'redhat', 'centos', 'fedora' + file '/etc/yum.repos.d/sensu.repo' do + content '[sensu] +name=sensu-main +baseurl=http://repos.sensuapp.org/yum/el/$releasever/$basearch/ +gpgcheck=0 +enabled=1 +' + action :create + notifies :run, 'execute[yum_update]', :immediately + end + + execute "yum_update" do + command "yum update" + action :nothing + end +end + + +package "Install Sensu client" do + package_name 'sensu' +end + +template '/etc/sensu/conf.d/rabbitmq.json' do + source 'config.json.erb' + mode '0755' + variables( + :rabbitmq_host => node['sensu_install']['rabbitmq_host'], + :rabbitmq_port => node['sensu_install']['rabbitmq_port'], + :rabbitmq_user => node['sensu_install']['rabbitmq_username'], + :rabbitmq_password => node['sensu_install']['rabbitmq_password'], + :rabbitmq_vhost => node['sensu_install']['rabbitmq_vhostname'] + ) +end + +template '/etc/sensu/conf.d/client.json' do + source 'client.json.erb' + mode '0755' + variables( + lazy{ + {:node_name => "#{node['fqdn']}", + :node_ip => "#{node['ipaddress']}", + :sensu_id => "#{node['sensu_install']['instance-id']}"} + } + ) + notifies :restart, 'service[sensu-client]', :immediately +end + +service 'sensu-client' do + action :nothing + supports :status => true, :start => true, :stop => true, :restart => true +end diff --git a/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Check_BOTs/chef/sensu_install/templates/default/client.json.erb b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Check_BOTs/chef/sensu_install/templates/default/client.json.erb new file mode 100644 index 000000000..1adb95ba7 --- /dev/null +++ b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Check_BOTs/chef/sensu_install/templates/default/client.json.erb @@ -0,0 +1,9 @@ +{ + "client": { + "name": "<%= @sensu_id %>", + "address": "<%= @node[:ipaddress] %>", + "subscriptions": [ + "<%= @sensu_id %>","test" + ] + } +} diff --git a/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Check_BOTs/chef/sensu_install/templates/default/config.json.erb b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Check_BOTs/chef/sensu_install/templates/default/config.json.erb new file mode 100644 index 000000000..499d1d6b7 --- /dev/null +++ b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Check_BOTs/chef/sensu_install/templates/default/config.json.erb @@ -0,0 +1,9 @@ +{ + "rabbitmq": { + "host": "<%= @rabbitmq_host %>", + "port": <%= @rabbitmq_port %>, + "user": "<%= @rabbitmq_user %>", + "password": "<%= @rabbitmq_password %>", + "vhost": "<%= @rabbitmq_vhost %>" + } +} diff --git a/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Check_BOTs/script.js b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Check_BOTs/script.js new file mode 100644 index 000000000..e69de29bb diff --git a/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Composite_BOTs/script.js b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Composite_BOTs/script.js new file mode 100644 index 000000000..e69de29bb diff --git a/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/RUN_BOTs/script.js b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/RUN_BOTs/script.js new file mode 100644 index 000000000..e69de29bb diff --git a/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Script_BOTs/disk_usage_remediation_bot/diskUsageRemediation.py b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Script_BOTs/disk_usage_remediation_bot/diskUsageRemediation.py new file mode 100644 index 000000000..ac3d68b06 --- /dev/null +++ b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Script_BOTs/disk_usage_remediation_bot/diskUsageRemediation.py @@ -0,0 +1,51 @@ +import os,sys +import json +# from subprocess import * +# from subprocess import Popen,PIPE,STDOUT,call + +def delete(filepath): + command = "rm " + filepath + result = os.system(command) + return result + +def create_successful_response(status, filepath): + jsonSuccessResponse = """{ + "status": "%s", + "outputParameters": { + "cleanedUpFile":"%s" + } + }"""%(status, filepath) + return jsonSuccessResponse + +def create_error_response(status, description): + jsonErrorResponse = """{ + "status": "%s", + "errorParameters": { + "description":"%s" + } + }"""%(status, description) + return jsonErrorResponse + +try: + findOutput=os.popen('find / -name "*.log" -type f -size +1c -exec du -b {} ";" | sort -rh | head -n1').readlines() + filepath = None + filesize = None + for i in findOutput: + temp = i.split("\t") + filepath = temp[1] + filesize = int(temp[0]) + + result = None + result = delete(filepath) + + if result == 0: + response = create_successful_response(result, filepath) + else : + response = create_error_response(1, "Delete Operation Failed") + print response + exit(0) +except Exception as e: + print "Exception %s" %e + jsonErrorResponse = create_error_response(1, e) + print >>sys.stderr, jsonErrorResponse + exit(1) diff --git a/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Script_BOTs/disk_utility_bot/diskUtility.py b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Script_BOTs/disk_utility_bot/diskUtility.py new file mode 100644 index 000000000..536077c66 --- /dev/null +++ b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Script_BOTs/disk_utility_bot/diskUtility.py @@ -0,0 +1,84 @@ +#!/usr/bin/python +import os, sys +import json + +def get_system_disk_info(): + used_Percentage = os.popen("df -h / | grep -v Filesystem | awk '{print $5}'").readline().strip() + disk = os.statvfs("/") + capacity = disk.f_bsize * disk.f_blocks + available = disk.f_bsize * disk.f_bavail + used = disk.f_bsize * (disk.f_blocks - disk.f_bavail) + return (capacity, used, available, used_Percentage) + +def create_file_size_for_warning (capacity, used, warningPercent): + warningFileSize = warningPercent * capacity + creationFileSize = warningFileSize - used + creationFileSizeKB = int(creationFileSize/1024) + command = "fallocate -l %sK warningFile.log" % creationFileSizeKB + os.system (command) + return (creationFileSize,creationFileSizeKB) + +def create_file_size_for_critical (capacity, used, criticalPercent): + criticalFileSize = criticalPercent * capacity + creationFileSize = criticalFileSize - used + creationFileSizeKB = int(creationFileSize/1024) + command = "fallocate -l %sK criticalFile.log" % creationFileSizeKB + os.system (command) + return (creationFileSize,creationFileSizeKB) + +def create_file_size_for_Complete_Volume(capacity, used, completePercent): + completeVolumeFileSize = completePercent * capacity + creationFileSize = completeVolumeFileSize - used + creationFileSizeKB =int(creationFileSize/1024) + command = "fallocate -l %sK completeVolumeFile.log" % creationFileSizeKB + os.system (command) + +def create_successful_response(status, completeVolumeSize, preUsedSpace, preAvailableSpace, preUsedPercent, postUsedSpace, postAvailableSpace, postUsedPercent): + jsonSuccessResponse = """{ + "status": "%s", + "outputParameters": { + "completeVolumeSize":"%s", + "preUsedSpace":"%s", + "preFreeSpace":"%s", + "preUsedPercentage":"%s", + "postUsedSpace":"%s", + "postFreeSpace":"%s", + "postUsedPercentage":"%s" + } + }"""%(status, completeVolumeSize, preUsedSpace, preAvailableSpace, preUsedPercent, postUsedSpace, postAvailableSpace, postUsedPercent) + return jsonSuccessResponse + +def create_error_response(status, description): + jsonErrorResponse = """{ + "status": "%s", + "errorParameters": { + "description":"%s"} + }"""%(status, description) + return jsonErrorResponse + +try: + + warningPercent=0.88 + criticalPercent=0.96 + completePercent=0.99 + option=sys.argv[1] + + completeVolumeSize, preUsedSpace, preAvailableSpace, preUsedPercent = get_system_disk_info() + + if option =='warning': + create_file_size_for_warning (completeVolumeSize, preUsedSpace, warningPercent) + elif option=='critical': + create_file_size_for_critical(completeVolumeSize, preUsedSpace, criticalPercent) + else: + create_file_size_for_Complete_Volume(completeVolumeSize, preUsedSpace, completePercent) + + completeVolumeSize, postUsedSpace, postAvailableSpace, postUsedPercent = get_system_disk_info() + + jsonSuccessResponse = create_successful_response(0, completeVolumeSize, preUsedSpace, preAvailableSpace, preUsedPercent, postUsedSpace, postAvailableSpace, postUsedPercent) + print jsonSuccessResponse + exit(0) + +except Exception as e: + jsonErrorResponse = create_error_response(1, e) + print >> sys.stderr, jsonErrorResponse + exit(1) \ No newline at end of file diff --git a/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Script_BOTs/extract_host_ip_bot/extract_host_ip.sh b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Script_BOTs/extract_host_ip_bot/extract_host_ip.sh new file mode 100755 index 000000000..e20d43caa --- /dev/null +++ b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Script_BOTs/extract_host_ip_bot/extract_host_ip.sh @@ -0,0 +1,2 @@ +apt-get install -y host +host $1 > /var/log/extract_host_ip_bot.log diff --git a/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Script_BOTs/https_scanner_bot/httpsScanner.sh b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Script_BOTs/https_scanner_bot/httpsScanner.sh new file mode 100644 index 000000000..b2e1dc9ff --- /dev/null +++ b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Script_BOTs/https_scanner_bot/httpsScanner.sh @@ -0,0 +1,29 @@ +#!/bin/bash +##### Checking for number of arguments +if [ "$#" -ne 1 ]; then + echo "Illegal number of parameters" + exit 1 +fi +##### Installing nmap +sudo apt-get install nmap +##### to get the open port +nmap -v -p443 -PN $1 | grep open | grep Discovered > /tmp/httpsReport.txt +####to filter out the IP from nmapreport + sed -e 's/\//g' /tmp/httpsReport.txt > test3 +rm -rf test2 + sed -e 's/\//g' test3 > test4 +rm -rf test3 + sed -e 's/\//g' test4 > test5 +rm -rf test4 + sed -e 's/\<443\>//g' test5 > test6 +rm -rf test5 + +## removin special chaaracter /##### +sed 's/\///' test6 > test7 +rm -rf test6 + sed -e 's/\//g' test7 > test8 +rm -rf test7 +sed -e 's/\//g' test8 > test9 +rm -rf test8 +sed 's/[[:blank:]]//g' test9 > /tmp/httpsReport.txt +rm -rf test9 diff --git a/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Script_BOTs/nginx_remediation_bot/nginxRemediation.py b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Script_BOTs/nginx_remediation_bot/nginxRemediation.py new file mode 100644 index 000000000..28e836379 --- /dev/null +++ b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Script_BOTs/nginx_remediation_bot/nginxRemediation.py @@ -0,0 +1,59 @@ +import os,sys +import json +from subprocess import * + +def startService(startCommand): + startFileObject = os.popen(startCommand) + output = startFileObject.read() + exitCode = startFileObject.close() + return output, exitCode + +def statusService(statusCommand): + statusFileObject = os.popen(statusCommand) + output = statusFileObject.read() + exitCode = statusFileObject.close() + return output.strip(), exitCode + +def create_successful_response(status, result): + jsonSuccessResponse = """{ + "status": "%s", + "outputParameters": + { + "statusDescription":"%s" + } + }"""%(status, result) + return jsonSuccessResponse + +def create_error_response(status, description): + jsonErrorResponse = """{ + "status": "%s", + "errorParameters": { + "description":"%s"} + }"""%(status, description) + return jsonErrorResponse + + +try: + startCommand = 'sudo service nginx start' + output, exitCode = startService(startCommand) + + if (exitCode) != None : + jsonErrorResponse = create_error_response(1, "check command") + print jsonErrorResponse + exit(1) + + statusCommand = 'sudo service nginx status' + output, exitCode = statusService(statusCommand) + + if (exitCode) != None : + jsonErrorResponse = create_error_response(1, "check command") + print jsonErrorResponse + + else : + jsonSuccessResponse = create_successful_response(0, output) + print jsonSuccessResponse + +except Exception as e: + jsonErrorResponse = create_error_response(1, e) + print >>sys.stderr, jsonErrorResponse + exit(1) \ No newline at end of file diff --git a/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Script_BOTs/pagerduty_create_bot/pagerdutyCreate.py b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Script_BOTs/pagerduty_create_bot/pagerdutyCreate.py new file mode 100644 index 000000000..d961e002f --- /dev/null +++ b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Script_BOTs/pagerduty_create_bot/pagerdutyCreate.py @@ -0,0 +1,73 @@ +import sys +import requests +from requests.auth import HTTPBasicAuth + +def create_pagerdutyIncident(service_key, event_type, description, client, client_url, details): + + url = "https://events.pagerduty.com/generic/2010-04-15/create_event.json" + headers = { + 'content-type': "application/json" + } + + payload = """ + { + "service_key": "%s", + "event_type": "%s", + "description": "%s", + "client": "%s", + "client_url": "%s", + "details": "%s", + "contexts":[ + { + "type": "link", + "href": "http://telemetry.rlcatalyst.com/#/events", + "text": "View Events on Telemetry" + },{ + "type": "link", + "href": "http://telemetry.rlcatalyst.com/#/sae/", + "text": "View SAE on Telemetry" + } + ] + } + """ %(service_key, event_type, description, client, client_url, details) + + response = requests.request("POST", url, data=payload, headers=headers) + return response + +def create_successful_response(status, result): + jsonSuccessResponse = """{ + "status": "%s", + "outputParameters": %s + }"""%(status, result) + return jsonSuccessResponse + +def create_error_response(status, description): + jsonErrorResponse = """{ + "status": "%s", + "errorParameters": { + "description":"%s"} + }"""%(status, description) + return jsonErrorResponse + +try: + service_key = sys.argv[1] + event_type = sys.argv[2] + description = sys.argv[3] + client = sys.argv[4] + client_url = sys.argv[5] + details = sys.argv[6] + + result = create_pagerdutyIncident(service_key, event_type, description, client, client_url, details) + if result.status_code not in [201,200]: + jsonErrorResponse = create_error_response(1, result.text) + print >> sys.stderr, jsonErrorResponse + exit(1) + + jsonSuccessResponse = create_successful_response(0, result.text) + print jsonSuccessResponse + exit(0) + +except Exception as e: + jsonErrorResponse = create_error_response(1, e) + print >> sys.stderr, jsonErrorResponse + exit(1) diff --git a/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Script_BOTs/pagerduty_update_bot/pagerdutyUpdate.py b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Script_BOTs/pagerduty_update_bot/pagerdutyUpdate.py new file mode 100644 index 000000000..d36e76db2 --- /dev/null +++ b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Script_BOTs/pagerduty_update_bot/pagerdutyUpdate.py @@ -0,0 +1,83 @@ + +import sys +import json +import requests +from requests.auth import HTTPBasicAuth + +def get_pagerdutyIncident(apiToken, incidentKey): + + url = "https://api.pagerduty.com/incidents" + + headers = { + "Authorization": "Token token="+ apiToken + } + + payload = { + "incident_key": incidentKey + } + response = requests.request("GET", url, params=payload, headers=headers) + return response + +def update_pagerdutyIncident(apiToken, emailId, pagerDutyId, status): + + url = "https://api.pagerduty.com/incidents" + "/" + pagerDutyId + + headers = { + "Content-Type": "application/json", + "From": emailId, + "Authorization": "Token token="+ apiToken + } + + payload = { + "incident": { + "type": "incident_reference", + "status": status + } + } + + response = requests.request("PUT", url, json=payload, headers=headers) + return response + +def create_successful_response(status, result): + jsonSuccessResponse = """{ + "status": "%s", + "outputParameters": %s + }"""%(status, result) + return jsonSuccessResponse + +def create_error_response(status, description): + jsonErrorResponse = """{ + "status": "%s", + "errorParameters": { + "description":"%s"} + }"""%(status, description) + return jsonErrorResponse + +try: + apiToken = sys.argv[1] + emailId = sys.argv[2] + incidentKey = sys.argv[3] + status = sys.argv[4] + + resultGet = get_pagerdutyIncident(apiToken, incidentKey) + if resultGet.status_code not in [201,200]: + jsonErrorResponse = create_error_response(1, resultGet.text) + print >> sys.stderr, jsonErrorResponse + exit(1) + + resultDictionary = json.loads(resultGet.text) + pagerDutyId = resultDictionary['incidents'][0]['id'] + resultPut = update_pagerdutyIncident(apiToken, emailId, pagerDutyId, status) + if resultPut.status_code not in [201,200]: + jsonErrorResponse = create_error_response(1, resultPut.text) + print >> sys.stderr, jsonErrorResponse + exit(1) + + jsonSuccessResponse = create_successful_response(0, resultPut.text) + print jsonSuccessResponse + exit(0) + +except Exception as e: + jsonErrorResponse = create_error_response(1, e) + print >> sys.stderr, jsonErrorResponse + exit(1) diff --git a/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Script_BOTs/servicenow_create_bot/servicenowCreate.py b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Script_BOTs/servicenow_create_bot/servicenowCreate.py new file mode 100644 index 000000000..74d06f5ab --- /dev/null +++ b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Script_BOTs/servicenow_create_bot/servicenowCreate.py @@ -0,0 +1,55 @@ +import sys +import requests +from requests.auth import HTTPBasicAuth + +def create_servicenowTicket(hostname, username, password, short_description, comments, x_14768_catalyst_first_name, + x_14768_catalyst_last_name, category, x_14768_catalyst_password, location): + url = hostname + "/api/now/v1/table/incident" + headers = { + 'content-type': "application/json" + } + payload = """{"short_description": '%s', "comments":'%s',"x_14768_catalyst_first_name":'%s', + "x_14768_catalyst_last_name":'%s',"category": '%s', + "x_14768_catalyst_password": "%s","location":'%s'}"""%(short_description, comments, x_14768_catalyst_first_name, + x_14768_catalyst_last_name, category, x_14768_catalyst_password, location) + response = requests.request("POST", url, data=payload,auth=HTTPBasicAuth(username, password), headers=headers) + return response + +def create_successful_response(status, result): + jsonSuccessResponse = """{ + "status": "%s", + "outputParameters": %s + }"""%(status, result) + return jsonSuccessResponse + +def create_error_response(status, description): + jsonErrorResponse = """{ + "status": "%s", + "errorParameters": { + "description":"%s"} + }"""%(status, description) + return jsonErrorResponse + +try: + hostname = sys.argv[1] + username = sys.argv[2] + password = sys.argv[3] + short_description = sys.argv[4] + comments = sys.argv[5] + x_14768_catalyst_first_name = sys.argv[6] + x_14768_catalyst_last_name = sys.argv[7] + category = sys.argv[8] + x_14768_catalyst_password = sys.argv[9] + location = sys.argv[10] + + result = create_servicenowTicket(hostname, username, password, short_description, comments, x_14768_catalyst_first_name, + x_14768_catalyst_last_name, category, x_14768_catalyst_password, location) + + jsonSuccessResponse = create_successful_response(0, result.text) + print jsonSuccessResponse + exit(0) + +except Exception as e: + jsonErrorResponse = create_error_response(1, e) + print >> sys.stderr, jsonErrorResponse + exit(1) diff --git a/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Script_BOTs/servicenow_update_bot/servicenowUpdate.py b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Script_BOTs/servicenow_update_bot/servicenowUpdate.py new file mode 100644 index 000000000..b80d5f990 --- /dev/null +++ b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Script_BOTs/servicenow_update_bot/servicenowUpdate.py @@ -0,0 +1,60 @@ +import sys +import requests +from requests.auth import HTTPBasicAuth + +def update_servicenowTicket(hostname, username, password, incidentId, short_description, comments, x_14768_catalyst_first_name, + x_14768_catalyst_last_name, category, x_14768_catalyst_password, location, state): + url = hostname + "/api/now/v1/table/incident/" + incidentId + querystring = {"sysparm_exclude_ref_link":"true"} + headers = { + 'content-type': "application/json" + } + payload = """{ + "short_description": "%s", "comments":"%s","x_14768_catalyst_first_name":"%s", + "x_14768_catalyst_last_name":"%s","category": "%s", + "x_14768_catalyst_password": "%s","location":'%s',"state":"%s"}"""%(short_description, comments, x_14768_catalyst_first_name, + x_14768_catalyst_last_name, category, x_14768_catalyst_password, location, state) + response = requests.request("PUT", url, data=payload, auth=HTTPBasicAuth(username, password), headers=headers, params=querystring) + return response + +def create_successful_response(status, result): + jsonSuccessResponse = """{ + "status": "%s", + "outputParameters": %s + }"""%(status, result) + return jsonSuccessResponse + +def create_error_response(status, description): + jsonErrorResponse = """{ + "status": "%s", + "errorParameters": { + "description":"%s"} + }"""%(status, description) + return jsonErrorResponse + +try: + hostname = sys.argv[1] + username = sys.argv[2] + password = sys.argv[3] + incidentId = sys.argv[4] + short_description = sys.argv[5] + comments = sys.argv[6] + x_14768_catalyst_first_name = sys.argv[7] + x_14768_catalyst_last_name = sys.argv[8] + category = sys.argv[9] + x_14768_catalyst_password = sys.argv[10] + location = sys.argv[11] + state = sys.argv[12] + + + result = update_servicenowTicket(hostname, username, password, incidentId, short_description, comments, x_14768_catalyst_first_name, + x_14768_catalyst_last_name, category, x_14768_catalyst_password, location, state) + + jsonSuccessResponse = create_successful_response(0, result.text) + print jsonSuccessResponse + exit(0) + +except Exception as e: + jsonErrorResponse = create_error_response(1, e) + print >> sys.stderr, jsonErrorResponse + exit(1) diff --git a/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Script_BOTs/slack_notification_bot/slackNotification.py b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Script_BOTs/slack_notification_bot/slackNotification.py new file mode 100644 index 000000000..5c40c0bbe --- /dev/null +++ b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Script_BOTs/slack_notification_bot/slackNotification.py @@ -0,0 +1,59 @@ +import requests +import sys + + +def slack_notification(hostname, channelName, msg, userName,icon,color): + url = hostname + attachmentTemplates = """ [ + { + "color": "%s", + "title": "%s", + "footer": "RLCatalyst-Telemetry", + "footer_icon": "https://platform.slack-edge.com/img/default_application_icon.png" + } + ] + """ + icon = '%s' + color = '%s' + attachment = attachmentTemplates%(color,msg) + payload = 'payload={"attachments": %s, "channel": "%s", "username": "%s", "iconEmoji": "%s"}'%(attachment, channelName, userName, icon) + headers = { + 'content-type': "application/x-www-form-urlencoded" + } + response = requests.request("POST", url, data=payload, headers=headers) + return response.text , response.status_code + +def create_successful_response(status, result): + jsonSuccessResponse = """{ + "status": "%s", + "outputParameters": { + "slackOutput":"%s" + } + }"""%(status, result) + return jsonSuccessResponse + +def create_error_response(status, description): + jsonErrorResponse = """{ + "status": "%s", + "errorParameters": { + "description":"%s"} + }"""%(status, description) + return jsonErrorResponse + +try: + hostname = sys.argv[1] + channelName = sys.argv[2] + msg = sys.argv[3] + userName = sys.argv[4] + icon = sys.argv[5] + color = sys.argv[6] + + result = slack_notification(hostname, channelName, msg, userName, icon, color) + jsonSuccessResponse = create_successful_response(0, result) + print jsonSuccessResponse + exit(0) + +except Exception as e: + jsonErrorResponse = create_error_response(1, e) + print >> sys.stderr, jsonErrorResponse + exit(1) diff --git a/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Script_BOTs/ssl_check_bot/sslcheck.py b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Script_BOTs/ssl_check_bot/sslcheck.py new file mode 100644 index 000000000..42bfd3ae3 --- /dev/null +++ b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Script_BOTs/ssl_check_bot/sslcheck.py @@ -0,0 +1,91 @@ +#!/usr/bin/python +# +# Check Expiration Date of SSL certificates +# +# Koen Van Impe +# +# Uses the file ceds.checks as input ; one entry per line, format : +# +# ceds.checks : www.google.com:443 +# imap.mydomain.tld:993 +# + +from OpenSSL import SSL +import socket, datetime +import smtplib +from email.mime.text import MIMEText +import json +import sys + +def ssl_check_expiration(host, port): + response = "" + try: + context = SSL.Context(SSL.SSLv23_METHOD) + sock = SSL.Connection(context, socket.socket(socket.AF_INET, socket.SOCK_STREAM)) + + try: + sock.connect( (str(host) , int(port)) ) + sock.send("\x00") # Send empty to trigger response + get_peer_cert=sock.get_peer_certificate() + sock.close() + + exp_date = datetime.datetime.strptime(get_peer_cert.get_notAfter(),'%Y%m%d%H%M%SZ') + days_to_expire = int((exp_date - cur_date).days) + + if days_to_expire < 0: + response = response + "\n %s EXPIRED" % (host) + elif alert_days > days_to_expire: + response = response + "\n %s expires in %s days " % (host, days_to_expire) + # print response + + return days_to_expire + except: + response = response + "\n Unable to connect to %s " % (host) + return None + except SSL.Error,e: + return None + +def create_successful_response(status, totalNumberOfCertificates, result): + jsonSuccessResponse = """{ + "status": "%s", + "outputParameters": { + "totalNumberOfCertificates":"%s", + "machine":%s + } + } + """%(status, totalNumberOfCertificates, result) + return jsonSuccessResponse + +def create_error_response(status, description): + jsonErrorResponse = """{ + "status": "%s", + "errorParameters": { + "description":"%s"} + }"""%(status, description) + return jsonErrorResponse + +try: + servers_to_check = sys.argv[1] + servers = open( servers_to_check, "r") + cur_date = datetime.datetime.utcnow() + cert_tested = 0 + data = [] + + for line in servers: + host = line.strip() + port = 443 + days_to_expire = ssl_check_expiration(host, port) + cert_tested = cert_tested + 1 + + dictionary = {} + dictionary["hostname"] = host + dictionary["daysRemaining"] = days_to_expire + data.append(dictionary) + + jsonSuccessResponse = create_successful_response(0, cert_tested, json.dumps(data)) + print jsonSuccessResponse + exit(0) +except Exception as e: + jsonErrorResponse = create_error_response(1, "Error Obtaining Certificate Expiry Details") + print >> sys.stderr, jsonErrorResponse + exit(1) diff --git a/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Script_BOTs/value_predictor_bot/valuePredictor.py b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Script_BOTs/value_predictor_bot/valuePredictor.py new file mode 100644 index 000000000..ef10f2798 --- /dev/null +++ b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Script_BOTs/value_predictor_bot/valuePredictor.py @@ -0,0 +1,68 @@ +from __future__ import division +import sys +import math + +def getResourceUsage(pCents, threshold): + + if ( threshold > 100 ) : + print "Threshold value should be between 1 to 100" + + period = len(pCents) + initialValue = int(pCents[0]) + presentValue = int(pCents[len(pCents) - 1]) + growthRate, usageLimit = growthPredictor(initialValue, presentValue, period, threshold) + return growthRate, usageLimit + + +def growthPredictor(initialValue, presentValue, period, threshold): + growthRate = math.pow((presentValue/initialValue), (1/period)) - 1.00 + usageLimit = math.log((threshold/initialValue), 10.00)/math.log((1 + growthRate), 10.00) + return growthRate, round(usageLimit) + + +def extractdata(filepath): + + f = open(filepath, 'r') + pCents = [] + for line in f: + k, v = line.strip().split(',') + pCents.append(v) + f.close() + + return pCents + +def create_successful_response(status, growthRate, threshold, timeUnit, expectedTime): + jsonSuccessResponse = """{ + "status": "%s", + "outputParameters": { + "growthRate":%s, + "threshold":%s, + "timeUnit":"%s", + "expectedTime":%s + } + }"""%(status, growthRate, threshold, timeUnit, expectedTime) + return jsonSuccessResponse + +def create_error_response(status, description): + jsonErrorResponse = """{ + "status": "%s", + "errorParameters": { + "description":"%s"} + }"""%(status, description) + return jsonErrorResponse + +try: + + filepath = sys.argv[1] + threshold = int(sys.argv[2]) + timeUnit = sys.argv[3] + pCents = extractdata(filepath) + growthRate, usageLimit = getResourceUsage(pCents, threshold) + jsonSuccessResponse = create_successful_response(0, growthRate, threshold, timeUnit, usageLimit) + print jsonSuccessResponse + exit(0) + +except Exception as e: + jsonErrorResponse = create_error_response(1, e) + print >> sys.stderr, jsonErrorResponse + exit(1) \ No newline at end of file diff --git a/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Task_BOTs/cookbooks/AD_UserCreation/CHANGELOG.md b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Task_BOTs/cookbooks/AD_UserCreation/CHANGELOG.md new file mode 100644 index 000000000..dc5c9d394 --- /dev/null +++ b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Task_BOTs/cookbooks/AD_UserCreation/CHANGELOG.md @@ -0,0 +1,11 @@ +# ad_user_creation CHANGELOG + +This file is used to list changes made in each version of the ad_user_creation cookbook. + +## 0.1.0 +- [your_name] - Initial release of ad_user_creation + +- - - +Check the [Markdown Syntax Guide](http://daringfireball.net/projects/markdown/syntax) for help with Markdown. + +The [Github Flavored Markdown page](http://github.github.com/github-flavored-markdown/) describes the differences between markdown on github and standard markdown. diff --git a/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Task_BOTs/cookbooks/AD_UserCreation/README.md b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Task_BOTs/cookbooks/AD_UserCreation/README.md new file mode 100644 index 000000000..8c3cd81eb --- /dev/null +++ b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Task_BOTs/cookbooks/AD_UserCreation/README.md @@ -0,0 +1,80 @@ +# ad_user_creation Cookbook + +TODO: Enter the cookbook description here. + +e.g. +This cookbook makes your favorite breakfast sandwich. + +## Requirements + +TODO: List your cookbook requirements. Be sure to include any requirements this cookbook has on platforms, libraries, other cookbooks, packages, operating systems, etc. + +e.g. +### Platforms + +- SandwichOS + +### Chef + +- Chef 12.0 or later + +### Cookbooks + +- `toaster` - ad_user_creation needs toaster to brown your bagel. + +## Attributes + +TODO: List your cookbook attributes here. + +e.g. +### ad_user_creation::default + + + + + + + + + + + + + + +
KeyTypeDescriptionDefault
['ad_user_creation']['bacon']Booleanwhether to include bacontrue
+ +## Usage + +### ad_user_creation::default + +TODO: Write usage instructions for each cookbook. + +e.g. +Just include `ad_user_creation` in your node's `run_list`: + +```json +{ + "name":"my_node", + "run_list": [ + "recipe[ad_user_creation]" + ] +} +``` + +## Contributing + +TODO: (optional) If this is a public cookbook, detail the process for contributing. If this is a private cookbook, remove this section. + +e.g. +1. Fork the repository on Github +2. Create a named feature branch (like `add_component_x`) +3. Write your change +4. Write tests for your change (if applicable) +5. Run the tests, ensuring they all pass +6. Submit a Pull Request using Github + +## License and Authors + +Authors: TODO: List authors + diff --git a/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Task_BOTs/cookbooks/AD_UserCreation/attributes/default.rb b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Task_BOTs/cookbooks/AD_UserCreation/attributes/default.rb new file mode 100644 index 000000000..b2f590ce8 --- /dev/null +++ b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Task_BOTs/cookbooks/AD_UserCreation/attributes/default.rb @@ -0,0 +1,4 @@ +default[:ad_user_creation][:name]=nil #FirstName +default[:ad_user_creation][:surname]=nil #LastName +default[:ad_user_creation][:password]=nil #Password which required one special character and one number +default[:ad_user_creation][:domain_name]=nil #domain name \ No newline at end of file diff --git a/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Task_BOTs/cookbooks/AD_UserCreation/attributes/path.json b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Task_BOTs/cookbooks/AD_UserCreation/attributes/path.json new file mode 100644 index 000000000..23bf4582b --- /dev/null +++ b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Task_BOTs/cookbooks/AD_UserCreation/attributes/path.json @@ -0,0 +1,45 @@ +// { +// "name":"somenode", +// "override_attributes": +// { +// "activeDir": +// { +// "name":"xyz" +// } +// }, +// "override_attributes": +// { +// "activeDir": +// { +// "surname":"abc" +// } +// }, +// "override_attributes": +// { +// "activeDir": +// { +// "password":"password@123" +// } +// }, +// "override_attributes": +// { +// "activeDir": +// { +// "domain_name":"myown.com" +// } +// } +// } +// =========== + +'{ + "override_attributes": + { + "ad_user_creation": {"activeDir":[{"name":"xyz"}, + {"surname": "abc"}, + {"password": "password@123"}, + {"domain_name": "myown.com"}] + } + }, + "run_list": + ["recipe[ad_user_creation]"] +}' \ No newline at end of file diff --git a/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Task_BOTs/cookbooks/AD_UserCreation/metadata.rb b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Task_BOTs/cookbooks/AD_UserCreation/metadata.rb new file mode 100644 index 000000000..92c06e3c5 --- /dev/null +++ b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Task_BOTs/cookbooks/AD_UserCreation/metadata.rb @@ -0,0 +1,27 @@ +name 'ad_user_creation' +maintainer 'YOUR_COMPANY_NAME' +maintainer_email 'YOUR_EMAIL' +license 'All rights reserved' +description 'Installs/Configures ad_user_creation' +long_description IO.read(File.join(File.dirname(__FILE__), 'README.md')) +version '0.1.0' + +attribute 'ad_user_creation/name', + display_name: 'First Name', + description: "User's first name", + default: nil + +attribute 'ad_user_creation/surname', + display_name: 'Sur Name', + description: "User's first name", + default: nil + +attribute 'ad_user_creation/password', + display_name: 'User Password', + description: "Password which required one special character and one number", + default: nil + +attribute 'ad_user_creation/domain_name', + display_name: 'Domain Name', + description: "Domain Name", + default: nil \ No newline at end of file diff --git a/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Task_BOTs/cookbooks/AD_UserCreation/recipes/default.rb b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Task_BOTs/cookbooks/AD_UserCreation/recipes/default.rb new file mode 100644 index 000000000..eb17c61b9 --- /dev/null +++ b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Task_BOTs/cookbooks/AD_UserCreation/recipes/default.rb @@ -0,0 +1,29 @@ +# +# Cookbook Name:: ad_user_creation +# Recipe:: default +# +# Copyright 2016, YOUR_COMPANY_NAME +# +# All rights reserved - Do Not Redistribute +# +puts "Printing out the attributes starts" +puts node[:ad_user_creation][:name] +puts node[:ad_user_creation][:surname] +puts node[:ad_user_creation][:domain_name] +puts node[:ad_user_creation][:password] +puts "Printing out the attributes ends" + +name = "#{node[:ad_user_creation][:name]}" +samName = name[0,2] + "#{node[:ad_user_creation][:surname]}" +prinicipalName= samName + "@"+ "#{node[:ad_user_creation][:domain_name]}" + +if name.empty? || samName.empty? || prinicipalName.empty? || node[:ad_user_creation][:password].empty? + #Chef::Application.fatal!("Please Provide the Name, Surname, password & domain name",123) + Chef::Log.info("Please Provide the Name, Surname, password & domain name") +else +powershell_script 'user' do + code <<-EOH + New-ADUser -UserPrincipalName "#{prinicipalName}" -Name "#{node[:ad_user_creation][:name]}" -GivenName "#{node[:ad_user_creation][:name]}" -Surname "#{node[:ad_user_creation][:surname]}" -SamAccountName "#{samName}" -AccountPassword (ConvertTo-SecureString "#{node[:ad_user_creation][:password]}" -AsPlainText -force) -Enabled $True -PasswordNeverExpires $True -PassThru + EOH +end +end \ No newline at end of file diff --git a/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Task_BOTs/cookbooks/AD_UserDeletion/CHANGELOG.md b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Task_BOTs/cookbooks/AD_UserDeletion/CHANGELOG.md new file mode 100644 index 000000000..bb81cf8f7 --- /dev/null +++ b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Task_BOTs/cookbooks/AD_UserDeletion/CHANGELOG.md @@ -0,0 +1,11 @@ +# ad_user_deletion CHANGELOG + +This file is used to list changes made in each version of the ad_user_deletion cookbook. + +## 0.1.0 +- [your_name] - Initial release of ad_user_deletion + +- - - +Check the [Markdown Syntax Guide](http://daringfireball.net/projects/markdown/syntax) for help with Markdown. + +The [Github Flavored Markdown page](http://github.github.com/github-flavored-markdown/) describes the differences between markdown on github and standard markdown. diff --git a/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Task_BOTs/cookbooks/AD_UserDeletion/README.md b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Task_BOTs/cookbooks/AD_UserDeletion/README.md new file mode 100644 index 000000000..3c819d30d --- /dev/null +++ b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Task_BOTs/cookbooks/AD_UserDeletion/README.md @@ -0,0 +1,80 @@ +# ad_user_deletion Cookbook + +TODO: Enter the cookbook description here. + +e.g. +This cookbook makes your favorite breakfast sandwich. + +## Requirements + +TODO: List your cookbook requirements. Be sure to include any requirements this cookbook has on platforms, libraries, other cookbooks, packages, operating systems, etc. + +e.g. +### Platforms + +- SandwichOS + +### Chef + +- Chef 12.0 or later + +### Cookbooks + +- `toaster` - ad_user_deletion needs toaster to brown your bagel. + +## Attributes + +TODO: List your cookbook attributes here. + +e.g. +### ad_user_deletion::default + + + + + + + + + + + + + + +
KeyTypeDescriptionDefault
['ad_user_deletion']['bacon']Booleanwhether to include bacontrue
+ +## Usage + +### ad_user_deletion::default + +TODO: Write usage instructions for each cookbook. + +e.g. +Just include `ad_user_deletion` in your node's `run_list`: + +```json +{ + "name":"my_node", + "run_list": [ + "recipe[ad_user_deletion]" + ] +} +``` + +## Contributing + +TODO: (optional) If this is a public cookbook, detail the process for contributing. If this is a private cookbook, remove this section. + +e.g. +1. Fork the repository on Github +2. Create a named feature branch (like `add_component_x`) +3. Write your change +4. Write tests for your change (if applicable) +5. Run the tests, ensuring they all pass +6. Submit a Pull Request using Github + +## License and Authors + +Authors: TODO: List authors + diff --git a/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Task_BOTs/cookbooks/AD_UserDeletion/attributes/default.rb b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Task_BOTs/cookbooks/AD_UserDeletion/attributes/default.rb new file mode 100644 index 000000000..989390988 --- /dev/null +++ b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Task_BOTs/cookbooks/AD_UserDeletion/attributes/default.rb @@ -0,0 +1,2 @@ +default[:ad_user_deletion][:name]=nil #FirstName +default[:ad_user_deletion][:surname]=nil #LastName \ No newline at end of file diff --git a/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Task_BOTs/cookbooks/AD_UserDeletion/metadata.rb b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Task_BOTs/cookbooks/AD_UserDeletion/metadata.rb new file mode 100644 index 000000000..cdc685597 --- /dev/null +++ b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Task_BOTs/cookbooks/AD_UserDeletion/metadata.rb @@ -0,0 +1,18 @@ +name 'ad_user_deletion' +maintainer 'YOUR_COMPANY_NAME' +maintainer_email 'YOUR_EMAIL' +license 'All rights reserved' +description 'Installs/Configures ad_user_deletion' +long_description IO.read(File.join(File.dirname(__FILE__), 'README.md')) +version '0.1.0' + +attribute 'ad_user_deletion/name', + display_name: 'First Name', + description: "User's first name", + default: nil + +attribute 'ad_user_deletion/surname', + display_name: 'Sur Name', + description: "User's Sur name", + default: nil + \ No newline at end of file diff --git a/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Task_BOTs/cookbooks/AD_UserDeletion/recipes/default.rb b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Task_BOTs/cookbooks/AD_UserDeletion/recipes/default.rb new file mode 100644 index 000000000..3089ac178 --- /dev/null +++ b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Task_BOTs/cookbooks/AD_UserDeletion/recipes/default.rb @@ -0,0 +1,20 @@ +# +# Cookbook Name:: ad_user_deletion +# Recipe:: default +# +# Copyright 2016, YOUR_COMPANY_NAME +# +# All rights reserved - Do Not Redistribute +# +name = "#{node[:ad_user_deletion][:name]}" +samName = name[0,2] + "#{node[:ad_user_deletion][:surname]}" + +if name.empty? || samName.empty? + Chef::Log.info("Please provide Name & surname") +else +powershell_script 'password reset' do + code <<-EOH + Remove-ADUser -Identity #{samName} -Confirm:$false + EOH +end +end \ No newline at end of file diff --git a/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Task_BOTs/cookbooks/LDAP_UserCreation/CHANGELOG.md b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Task_BOTs/cookbooks/LDAP_UserCreation/CHANGELOG.md new file mode 100644 index 000000000..67eef0eea --- /dev/null +++ b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Task_BOTs/cookbooks/LDAP_UserCreation/CHANGELOG.md @@ -0,0 +1,11 @@ +# opendj_user_creation CHANGELOG + +This file is used to list changes made in each version of the opendj_user_creation cookbook. + +## 0.1.0 +- [your_name] - Initial release of opendj_user_creation + +- - - +Check the [Markdown Syntax Guide](http://daringfireball.net/projects/markdown/syntax) for help with Markdown. + +The [Github Flavored Markdown page](http://github.github.com/github-flavored-markdown/) describes the differences between markdown on github and standard markdown. diff --git a/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Task_BOTs/cookbooks/LDAP_UserCreation/README.md b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Task_BOTs/cookbooks/LDAP_UserCreation/README.md new file mode 100644 index 000000000..2797116a9 --- /dev/null +++ b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Task_BOTs/cookbooks/LDAP_UserCreation/README.md @@ -0,0 +1,80 @@ +# opendj_user_creation Cookbook + +TODO: Enter the cookbook description here. + +e.g. +This cookbook makes your favorite breakfast sandwich. + +## Requirements + +TODO: List your cookbook requirements. Be sure to include any requirements this cookbook has on platforms, libraries, other cookbooks, packages, operating systems, etc. + +e.g. +### Platforms + +- SandwichOS + +### Chef + +- Chef 12.0 or later + +### Cookbooks + +- `toaster` - opendj_user_creation needs toaster to brown your bagel. + +## Attributes + +TODO: List your cookbook attributes here. + +e.g. +### opendj_user_creation::default + + + + + + + + + + + + + + +
KeyTypeDescriptionDefault
['opendj_user_creation']['bacon']Booleanwhether to include bacontrue
+ +## Usage + +### opendj_user_creation::default + +TODO: Write usage instructions for each cookbook. + +e.g. +Just include `opendj_user_creation` in your node's `run_list`: + +```json +{ + "name":"my_node", + "run_list": [ + "recipe[opendj_user_creation]" + ] +} +``` + +## Contributing + +TODO: (optional) If this is a public cookbook, detail the process for contributing. If this is a private cookbook, remove this section. + +e.g. +1. Fork the repository on Github +2. Create a named feature branch (like `add_component_x`) +3. Write your change +4. Write tests for your change (if applicable) +5. Run the tests, ensuring they all pass +6. Submit a Pull Request using Github + +## License and Authors + +Authors: TODO: List authors + diff --git a/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Task_BOTs/cookbooks/LDAP_UserCreation/attributes/default.rb b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Task_BOTs/cookbooks/LDAP_UserCreation/attributes/default.rb new file mode 100644 index 000000000..6cad10b0e --- /dev/null +++ b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Task_BOTs/cookbooks/LDAP_UserCreation/attributes/default.rb @@ -0,0 +1,10 @@ +default[:opendj_user_creation][:firstname] = 'vimal' +default[:opendj_user_creation][:lastname] = 'kumar' +default[:opendj_user_creation][:domain] = 'catalyst' +default[:opendj_user_creation][:group] = 'people' +default[:opendj_user_creation][:password] = 'kaushik' +default[:opendj_user_creation][:emailid] = 'vimalkumar.mishra@relevancelab.com' + +default[:opendj_user_creation][:port] = 389 +default[:opendj_user_creation][:loginName] = 'Directory Manager' +default[:opendj_user_creation][:loginPassword] = 'kaushik' diff --git a/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Task_BOTs/cookbooks/LDAP_UserCreation/metadata.rb b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Task_BOTs/cookbooks/LDAP_UserCreation/metadata.rb new file mode 100644 index 000000000..0e93166ad --- /dev/null +++ b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Task_BOTs/cookbooks/LDAP_UserCreation/metadata.rb @@ -0,0 +1,50 @@ +name 'opendj_user_creation' +maintainer 'YOUR_COMPANY_NAME' +maintainer_email 'YOUR_EMAIL' +license 'All rights reserved' +description 'Installs/Configures opendj_user_creation' +long_description IO.read(File.join(File.dirname(__FILE__), 'README.md')) +version '0.1.0' + +attribute 'opendj_user_creation/firstname', + :display_name => 'First Name', + :description => 'First Name for OpenDJ' + +attribute 'opendj_user_creation/lastname', + :display_name => 'Last Name', + :description => 'Last Name for OpenDJ' + +attribute 'opendj_user_creation/domain', + :display_name => 'Domain Name', + :description => 'Domain Name in OpenDJ', + :default => 'RLIndia' + +attribute 'opendj_user_creation/group', + :display_name => 'Group Name', + :description => 'Specific the Group to add in OpenDJ', + :default => 'people' + +attribute 'opendj_user_creation/password', + :display_name => 'New Passsword', + :description => 'Passsword for the user', + :default => 'password' + +attribute 'opendj_user_creation/emailid', + :display_name => 'Email ID', + :description => 'Email ID for the user' + +attribute 'opendj_user_creation/port', + :display_name => 'Port Number', + :description => 'Port Number of OpenDJ', + :default => '389' + +attribute 'opendj_user_creation/loginName', + :display_name => 'Login Name', + :description => 'Login Name for OpenDJ', + :default => 'Directory Manager' + +attribute 'opendj_user_creation/loginPassword', + :display_name => 'Login Passsword', + :description => 'Login Passsword for OpenDJ', + :default => 'kaushik' + diff --git a/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Task_BOTs/cookbooks/LDAP_UserCreation/recipes/default.rb b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Task_BOTs/cookbooks/LDAP_UserCreation/recipes/default.rb new file mode 100644 index 000000000..151f7f92d --- /dev/null +++ b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Task_BOTs/cookbooks/LDAP_UserCreation/recipes/default.rb @@ -0,0 +1,42 @@ +# +# Cookbook Name:: opendj_user_creation +# Recipe:: default +# +# Copyright 2016, YOUR_COMPANY_NAME +# +# All rights reserved - Do Not Redistribute +# +uname = 0 +if node[:opendj_user_creation][:firstname].length > 3 + if node[:opendj_user_creation][:lastname].length > 3 + uname = node[:opendj_user_creation][:firstname][0,3] + node[:opendj_user_creation][:lastname][0,3] + else + uname = node[:opendj_user_creation][:firstname][0,3] + node[:opendj_user_creation][:lastname] + end +else + if node[:opendj_user_creation][:lastname].length > 3 + uname = node[:opendj_user_creation][:firstname] + node[:opendj_user_creation][:lastname][0,3] + else + uname = node[:opendj_user_creation][:firstname] + node[:opendj_user_creation][:lastname] + end +end + + # id = uname+'@'+node[:opendj_user_creation][:domain]+'.com' + +template '/tmp/new.ldif' do + source 'new.erb' + mode '0777' + variables(:firstname => node[:opendj_user_creation][:firstname], :lastname => node[:opendj_user_creation][:lastname], :group => node[:opendj_user_creation][:group], :domain => node[:opendj_user_creation][:domain],:password => node[:opendj_user_creation][:password], :unqiname => uname, :emailid => node[:opendj_user_creation][:emailid]) + #notifies :run, 'execute[slapadd]', :immediately +end + +# execute 'slapadd' do +# command " /tmp/run.log < /opt/opendj/bin/ldapmodify --hostname kaushik.com --port #{node[:opendj_user_creation][:port]} --bindDN 'cn=#{node[:opendj_user_creation][:loginName]}' -w #{node[:opendj_user_creation][:loginPassword]} --defaultAdd --filename /tmp/new.ldif" +# end + +ruby_block 'reload_client_config' do + block do + `/opt/opendj/bin/ldapmodify --port #{node[:opendj_user_creation][:port]} --bindDN 'cn=#{node[:opendj_user_creation][:loginName]}' -w #{node[:opendj_user_creation][:loginPassword]} -f /tmp/new.ldif` + end + action :run +end \ No newline at end of file diff --git a/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Task_BOTs/cookbooks/LDAP_UserCreation/templates/default/new.erb b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Task_BOTs/cookbooks/LDAP_UserCreation/templates/default/new.erb new file mode 100644 index 000000000..3e7a5ad36 --- /dev/null +++ b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Task_BOTs/cookbooks/LDAP_UserCreation/templates/default/new.erb @@ -0,0 +1,13 @@ +dn: uid=<%= @unqiname %>,ou=<%= @group %>,dc=<%= @domain %>,dc=com +objectClass: top +objectClass: inetOrgPerson +objectClass: organizationalPerson +objectClass: person +mail: <%= @emailid %> +sn: <%= @lastname %> +cn: <%= @unqiname %> +givenName: <%= @firstname %> +uid: <%= @unqiname %> +userPassword: <%= @password %> + + diff --git a/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Task_BOTs/cookbooks/LDAP_UserDeletion/CHANGELOG.md b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Task_BOTs/cookbooks/LDAP_UserDeletion/CHANGELOG.md new file mode 100644 index 000000000..16f7695cf --- /dev/null +++ b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Task_BOTs/cookbooks/LDAP_UserDeletion/CHANGELOG.md @@ -0,0 +1,11 @@ +# opendj_user_deletion CHANGELOG + +This file is used to list changes made in each version of the opendj_user_deletion cookbook. + +## 0.1.0 +- [your_name] - Initial release of opendj_user_deletion + +- - - +Check the [Markdown Syntax Guide](http://daringfireball.net/projects/markdown/syntax) for help with Markdown. + +The [Github Flavored Markdown page](http://github.github.com/github-flavored-markdown/) describes the differences between markdown on github and standard markdown. diff --git a/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Task_BOTs/cookbooks/LDAP_UserDeletion/README.md b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Task_BOTs/cookbooks/LDAP_UserDeletion/README.md new file mode 100644 index 000000000..d8e5ebb13 --- /dev/null +++ b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Task_BOTs/cookbooks/LDAP_UserDeletion/README.md @@ -0,0 +1,80 @@ +# opendj_user_deletion Cookbook + +TODO: Enter the cookbook description here. + +e.g. +This cookbook makes your favorite breakfast sandwich. + +## Requirements + +TODO: List your cookbook requirements. Be sure to include any requirements this cookbook has on platforms, libraries, other cookbooks, packages, operating systems, etc. + +e.g. +### Platforms + +- SandwichOS + +### Chef + +- Chef 12.0 or later + +### Cookbooks + +- `toaster` - opendj_user_deletion needs toaster to brown your bagel. + +## Attributes + +TODO: List your cookbook attributes here. + +e.g. +### opendj_user_deletion::default + + + + + + + + + + + + + + +
KeyTypeDescriptionDefault
['opendj_user_deletion']['bacon']Booleanwhether to include bacontrue
+ +## Usage + +### opendj_user_deletion::default + +TODO: Write usage instructions for each cookbook. + +e.g. +Just include `opendj_user_deletion` in your node's `run_list`: + +```json +{ + "name":"my_node", + "run_list": [ + "recipe[opendj_user_deletion]" + ] +} +``` + +## Contributing + +TODO: (optional) If this is a public cookbook, detail the process for contributing. If this is a private cookbook, remove this section. + +e.g. +1. Fork the repository on Github +2. Create a named feature branch (like `add_component_x`) +3. Write your change +4. Write tests for your change (if applicable) +5. Run the tests, ensuring they all pass +6. Submit a Pull Request using Github + +## License and Authors + +Authors: TODO: List authors + diff --git a/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Task_BOTs/cookbooks/LDAP_UserDeletion/attributes/default.rb b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Task_BOTs/cookbooks/LDAP_UserDeletion/attributes/default.rb new file mode 100644 index 000000000..465f453a1 --- /dev/null +++ b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Task_BOTs/cookbooks/LDAP_UserDeletion/attributes/default.rb @@ -0,0 +1,5 @@ +default[:opendj_user_deletion][:email_id] = 'vimalkumar.mishra@relevancelab.com' +default[:opendj_user_deletion][:username] = 'Directory Manager' +default[:opendj_user_deletion][:password] = 'kaushik' +default[:opendj_user_deletion][:baseDN] = 'dc=catalyst,dc=com' +default[:opendj_user_deletion][:port] = 389 diff --git a/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Task_BOTs/cookbooks/LDAP_UserDeletion/metadata.rb b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Task_BOTs/cookbooks/LDAP_UserDeletion/metadata.rb new file mode 100644 index 000000000..95bbfd927 --- /dev/null +++ b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Task_BOTs/cookbooks/LDAP_UserDeletion/metadata.rb @@ -0,0 +1,31 @@ +name 'opendj_user_deletion' +maintainer 'YOUR_COMPANY_NAME' +maintainer_email 'YOUR_EMAIL' +license 'All rights reserved' +description 'Installs/Configures opendj_user_deletion' +long_description IO.read(File.join(File.dirname(__FILE__), 'README.md')) +version '0.1.0' + +attribute 'opendj_user_deletion/email_id', + :display_name => 'Email ID', + :description => 'Email ID for the user' + +attribute 'opendj_user_deletion/username', + :display_name => 'Login Name', + :description => 'Login Name for OpenDJ', + :default => 'Directory Manager' + +attribute 'opendj_user_deletion/password', + :display_name => 'Login Passsword', + :description => 'Login Passsword for OpenDJ', + :default => 'kaushik' + +attribute 'opendj_user_deletion/baseDN', + :display_name => 'Domain Name', + :description => 'Provide the baseDN', + :default => 'dc=RLIndia,dc=com' + +attribute 'opendj_user_deletion/port', + :display_name => 'Port Number', + :description => 'Port Number of OpenDJ', + :default => '389' diff --git a/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Task_BOTs/cookbooks/LDAP_UserDeletion/recipes/default.rb b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Task_BOTs/cookbooks/LDAP_UserDeletion/recipes/default.rb new file mode 100644 index 000000000..2b297c678 --- /dev/null +++ b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Task_BOTs/cookbooks/LDAP_UserDeletion/recipes/default.rb @@ -0,0 +1,23 @@ +# +# Cookbook Name:: opendj_user_deletion +# Recipe:: default +# +# Copyright 2016, YOUR_COMPANY_NAME +# +# All rights reserved - Do Not Redistribute +# +details = `/opt/opendj/bin/ldapsearch --port "#{node[:opendj_user_deletion][:port]}" --baseDN "#{node[:opendj_user_deletion][:baseDN]}" "(mail="#{node[:opendj_user_deletion][:email_id]}")"` + +puts details +puts details.class + +authID = details.split("\n") +uid = authID[0].split(":") +puts authID[0] +puts uid[1] + +# puts "`/opt/opendj/bin/ldappasswordmodify --authzID '\"#{authID[0]}\"' --newPassword '#{node[:opendj_user_deletion][:newpassword]}' --port \"#{node[:opendj_user_deletion][:port]}\" --bindDN \"cn=\"#{node[:opendj_user_deletion][:username]}\"\" --bindPassword \"#{node[:opendj_user_deletion][:password]}\"`" + +logs=`/opt/opendj/bin/ldapdelete --port "#{node[:opendj_user_deletion][:port]}" --bindDN 'cn=#{node[:opendj_user_deletion][:username]}' --bindPassword "#{node[:opendj_user_deletion][:password]}" --noPropertiesFile '#{uid[1]}'` + +puts logs diff --git a/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Task_BOTs/script.js b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Task_BOTs/script.js new file mode 100644 index 000000000..e69de29bb diff --git a/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Task_BOTs/script/AWS_CLI.sh b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Task_BOTs/script/AWS_CLI.sh new file mode 100755 index 000000000..8cc4d2583 --- /dev/null +++ b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Task_BOTs/script/AWS_CLI.sh @@ -0,0 +1,8 @@ +#! /bin/bash + +cd /tmp +curl -O https://bootstrap.pypa.io/get-pip.py +sudo python2.7 get-pip.py +sudo pip install awscli +sudo pip install awscli --ignore-installed six +sudo pip install --upgrade awscli diff --git a/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Task_BOTs/script/AWS_alert.sh b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Task_BOTs/script/AWS_alert.sh new file mode 100755 index 000000000..db0700f6e --- /dev/null +++ b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Task_BOTs/script/AWS_alert.sh @@ -0,0 +1,85 @@ +#! /bin/bash +# AWS_alert.sh AWS_access_key AWS_secret_key email_id +ackey=$1 +sckey=$2 +mailid=$3 + +#Installation of AWS CLI +cd /tmp +curl -O https://bootstrap.pypa.io/get-pip.py +sudo python2.7 get-pip.py +sudo pip install awscli +sudo pip install awscli --ignore-installed six +sudo pip install --upgrade awscli +rm -rf get-pip.py + +# Adding Creditionals for AWS CLI +mkdir ~/.aws +cd ~/.aws +echo "[default] +aws_access_key_id=$ackey +aws_secret_access_key=$sckey" >> credentials +echo "[default] +region=us-west-2 +output=text" >> config + +# Adding the Mail Template +echo 'Hi, + +PFA is running list of Non-Production instance in AWS Account. + +Thanks, +Catalyst Bot' > /tmp/detail.txt + +# List of region in AWS Account +region=('ap-south-1' 'eu-west-1' 'ap-northeast-2' 'ap-northeast-1' 'sa-east-1' 'ap-southeast-1' 'ap-southeast-2' 'eu-central-1' 'us-east-1' 'us-east-2' 'us-west-1' 'us-west-2' ); + +for i in "${region[@]}" +do + aws ec2 describe-instances --region "$i" --filters "Name=instance-state-name,Values=running" --query 'Reservations[].Instances[].[Tags[?Key==`Environment` && Value!=`Production`].Value,PrivateIpAddress,InstanceId,Placement.AvailabilityZone]' --output text >> /tmp/instance.xlsx | sed -i '/Non-Production/d' /tmp/instance.xlsx | sed -i '/QA/d' /tmp/instance.xlsx +done + +# Installation of ssmtp server +sudo apt-get update +sudo apt-get install ssmtp + + +# ssmtp template folder +sudo echo '# Config file for sSMTP sendmail + +# The person who gets all mail for userids < 1000 +# Make this empty to disable rewriting. +#root=postmaster +root=catalystservicebot@gmail.com + +# The place where the mail goes. The actual machine name is required no +# MX records are consulted. Commonly mailhosts are named mail.domain.com +#mailhub=mail +mailhub=smtp.gmail.com:587 + +AuthUser=catalystservicebot@gmail.com +AuthPass=catalyst@1234 +UseTLS=YES +UseSTARTTLS=YES + +# Where will the mail seem to come from? +#rewriteDomain= +rewriteDomain=gmail.com + +# The full hostname +#hostname=MyMediaServer.home +hostname=localhost + +# Are users allowed to set their own From: address? +# YES - Allow the user to specify their own From: address +# NO - Use the system generated From: address +FromLineOverride=YES' > /etc/ssmtp/ssmtp.conf + +sudo echo 'root:catalystservicebot@gmail.com:smtp.gmail.com:587' >> /etc/ssmtp/revaliases +sudo apt-get install mpack + +# Sending of the email +mpack -s 'Active list of Non-Production instances' /tmp/instance.xlsx -d /tmp/detail.txt $mailid + +# Deletion of the xlsx file +rm -rf /tmp/instance.xlsx diff --git a/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Task_BOTs/script/Cat_Host_IPAddress.sh b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Task_BOTs/script/Cat_Host_IPAddress.sh new file mode 100644 index 000000000..08342c733 --- /dev/null +++ b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Task_BOTs/script/Cat_Host_IPAddress.sh @@ -0,0 +1 @@ +host $1 diff --git a/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Task_BOTs/script/Cat_User_Creation.sh b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Task_BOTs/script/Cat_User_Creation.sh new file mode 100755 index 000000000..ab7886f43 --- /dev/null +++ b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Task_BOTs/script/Cat_User_Creation.sh @@ -0,0 +1,36 @@ +#!/bin/bash +#./Cat_User_Creation.sh catalyst_url catalyst_login_user_name catalyst_login_user_pass new_catalyst_user_name_toCreate new_catalyst_user_email_toCreate new_catalyst_user_pass_toCreate new_catalyst_user_role_toCreate +#./Cat_User_Creation.sh https://neocatalyst.rlcatalyst.com superadmin superadmin@123 jonny jonny@gmail pass@123 Consumer + +# Catalyst Initializations +cat_url=$1 +cat_user_name=$2 +cat_user_pass=$3 + +#echo $cat_url +#echo $cat_user_name +#echo $cat_user_pass + +# New Catalyst User Initializations +new_user=$4 +new_user_email=$5 +new_user_pass=$6 +new_user_role=$7 + +# Case condition to get role_id +case "$new_user_role" in + "Admin") new_user_role_id="61" + ;; + "Designer") new_user_role_id="62" + ;; + "Consumer") new_user_role_id="63" + ;; +esac + +# To get the Catalyst login Auth-Token +token=`curl -i -X POST -H "Content-Type: application/json" -H "Accept: application/json" $cat_url/auth/signin -d '{"username":"'"$cat_user_name"'","pass":"'"$cat_user_pass"'","authType":"token"}'| grep token | awk -F":" '{print $2}'|sed 's/\}//g'| sed 's/"//g'` + +#echo $token + +# User creation API +curl -i -X POST -H "Content-Type: application/json" -H "Accept: application/json" -H "x-catalyst-auth: $token" $cat_url/d4dMasters/savemasterjsonrownew/7/null/all -d '{"loginname":"'"$new_user"'","email":"'"$new_user_email"'","password":"'"$new_user_pass"'","cnfPassword":"'"$new_user_pass"'","userrolename":"'"$new_user_role"'","userrolename_rowid":"'"$new_user_role_id"'","orgname":"","orgname_rowid":"","teamname":"RL_DEV","teamname_rowid":"7df4b243-2902-48db-a118-f07975331c56"}' diff --git a/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Task_BOTs/script/Meta_bot_Cat_user_creation.sh b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Task_BOTs/script/Meta_bot_Cat_user_creation.sh new file mode 100755 index 000000000..aa07699b4 --- /dev/null +++ b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Task_BOTs/script/Meta_bot_Cat_user_creation.sh @@ -0,0 +1,63 @@ +#!/bin/bash +#./Cat_User_Creation.sh catalyst_url catalyst_login_user_name catalyst_login_user_pass new_catalyst_user_name_toCreate new_catalyst_user_email_toCreate new_catalyst_user_pass_toCreate new_catalyst_user_role_toCreate Slack_BOT_Name Slack_BOT_icon +#./Cat_User_Creation.sh https://neocatalyst.rlcatalyst.com superadmin superadmin@123 jonny jonny@gmail pass@123 Consumer Alert-BOT :bell: + +# Catalyst Initializations +cat_url=$1 +cat_user_name=$2 +cat_user_pass=$3 + +#echo $cat_url +#echo $cat_user_name +#echo $cat_user_pass + +# New Catalyst User Initializations +new_user=$4 +new_user_email=$5 +new_user_pass=$6 +new_user_role=$7 + +# Case condition to get role_id +case "$new_user_role" in + "Admin") new_user_role_id="61" + ;; + "Designer") new_user_role_id="62" + ;; + "Consumer") new_user_role_id="63" + ;; +esac + +# This to show that bot has started in slack + +webhook_url=T0FJN09DZ/B0J0BQN6R/TkffVKJuSkATi7tyiPLLYZFI +channel_name="catalyst_alert" +msg="User Creation BOT for $cat_url has been started for a new user $new_user." + +if [ "$8" == "" ] +then + bot_name='Alert-BOT' +else + bot_name=$8 +fi + +if [ "$9" == "" ] +then + icon=':bell:' +else + icon=$9 +fi +# This Script that post the message in slack +curl -X POST --data-urlencode 'payload={"text": "'"$msg"'", "channel": "#'"$channel_name"'", "username": "'"$bot_name"'", "icon_emoji": "'"$icon"'"}' https://hooks.slack.com/services/$webhook_url + +# To get the Catalyst login Auth-Token +token=`curl -i -X POST -H "Content-Type: application/json" -H "Accept: application/json" $cat_url/auth/signin -d '{"username":"'"$cat_user_name"'","pass":"'"$cat_user_pass"'","authType":"token"}'| grep token | awk -F":" '{print $2}'|sed 's/\}//g'| sed 's/"//g'` + +#echo $token + +# User creation API +curl -i -X POST -H "Content-Type: application/json" -H "Accept: application/json" -H "x-catalyst-auth: $token" $cat_url/d4dMasters/savemasterjsonrownew/7/null/all -d '{"loginname":"'"$new_user"'","email":"'"$new_user_email"'","password":"'"$new_user_pass"'","cnfPassword":"'"$new_user_pass"'","userrolename":"'"$new_user_role"'","userrolename_rowid":"'"$new_user_role_id"'","orgname":"","orgname_rowid":"","teamname":"RL_DEV","teamname_rowid":"7df4b243-2902-48db-a118-f07975331c56"}' +# Re-initiliaztion of slack bot +msg="User $new_user is created in $cat_url" + +# This the command to post the slack message +curl -X POST --data-urlencode 'payload={"text": "'"$msg"'", "channel": "#'"$channel_name"'", "username": "'"$bot_name"'", "icon_emoji": "'"$icon"'"}' https://hooks.slack.com/services/$webhook_url diff --git a/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Task_BOTs/script/packer_AMI_script.sh b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Task_BOTs/script/packer_AMI_script.sh new file mode 100755 index 000000000..a817ef326 --- /dev/null +++ b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Task_BOTs/script/packer_AMI_script.sh @@ -0,0 +1,60 @@ +#! /bin/bash +# packer_AMI_script.sh release_number 'access_key_of_aws_account' 'secret_key_of_awsaccount' + + +# Intialization of parameters +rlno=$1 +accesskey=$2 +secretkey=$3 +#echo $rlno +#echo $accesskey +#echo $secretkey + + +#Installation of packer +#To get the Architure type +arch=`uname -m` +#Based on Arch download the packer script +if [ ""$arch"" == 'x86_64' ] +then + download='https://releases.hashicorp.com/packer/0.12.0/packer_0.12.0_linux_amd64.zip' +else + download='https://releases.hashicorp.com/packer/0.12.0/packer_0.12.0_linux_386.zip' +fi +#Downloading the packer zip file +wget $download +#Installing the unzip package +sudo apt-get install -y unzip +#Getting the package name +filename=`echo $download | sed 's#.*/##'` +echo $filename +#Unzipping the packer download +unzip $filename +#Copying the packer runnable file to /usr/bin +cp packer /usr/bin/ +#removing the packer and zip folder +rm -rf packer $filename + + +# Cloning of the repo +#changing the directory to root +cd /root/ +#Installing git +sudo apt-get install -y git +#Doing a git clone of the catalyst packing repository +git clone https://catalyst-engg:catalyst_123@github.com/RLIndia/catalystpackaging.git +#Changing into the AWS AMI folder +cd catalystpackaging/RLCatalystImage +# Replacing to lastest release +sed -i -e "s/3.1.0/$rlno/g" rlcatalyst.sh +# Replacing the access key to required access key +sed -i -e "0,/XXXXXXX/s/XXXXXXX/$2/" rlcatalyst.json +# Replacing the secret key to require secret key +sed -i -e "s/XXXXXXX/$3/g" rlcatalyst.json +# Replacing the AMI Name to AMI name with release number +sed -i -e "s/3.3.1/$rlno/g" rlcatalyst.json + + +# Running of packer +# To build the AMI from packer script +sudo packer build rlcatalyst.json diff --git a/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Task_BOTs/script/packer_Docker_image.sh b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Task_BOTs/script/packer_Docker_image.sh new file mode 100755 index 000000000..a2b8eec69 --- /dev/null +++ b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/Task_BOTs/script/packer_Docker_image.sh @@ -0,0 +1,83 @@ +#! /bin/bash +# packer_Docker_script.sh release_number 'docker_account_username' 'docker_account_password' 'docker_account_registered_email' + + +#Initialization of script +rlno=$1 +dcusername=$2 +dcpassword=$3 +dcemail=$4 +#Packer Installation +#To get the Architure type +arch=`uname -m` +#Based on Arch download the packer script +if [ ""$arch"" == 'x86_64' ] +then + download='https://releases.hashicorp.com/packer/0.12.0/packer_0.12.0_linux_amd64.zip' +else + download='https://releases.hashicorp.com/packer/0.12.0/packer_0.12.0_linux_amd64.zip' +fi +#Downloading the packer zip file +wget $download +#Installing the unzip package +sudo apt-get install -y unzip +#Getting the package name +filename=`echo $download | sed 's#.*/##'` +echo $filename +#Unzipping the packer download +unzip $filename +#Copying the packer runnable file to /usr/bin +sudo cp packer /usr/bin/ +#removing the packer and zip folder +rm -rf packer $filename + + +#Docker Installation +sudo apt-get update -y +sudo apt-get install -y apt-transport-https ca-certificates +#Adding new GPG key +sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D +#To check for the release ubuntu release number +lsbno=`lsb_release -rs` +case ""$lsbno"" in + "12.04") download="deb https://apt.dockerproject.org/repo ubuntu-precise main" + ;; + "14.04") download="deb https://apt.dockerproject.org/repo ubuntu-trusty main" + ;; + "15.10") download="deb https://apt.dockerproject.org/repo ubuntu-wily main" + ;; + "16.04") download="deb https://apt.dockerproject.org/repo ubuntu-wily main" + ;; +esac +echo $download | sudo tee /etc/apt/sources.list.d/docker.list +sudo apt-get update -y +sudo apt-get install -y linux-image-generic-lts-trusty +sudo apt-get install -y docker-engine + +# To login to docker account +sudo docker login --username="$2" --password="$3" --email="$4" + + +# Cloning of the Repo +# Change of directory +sudo cd /opt/ +# Installing git +sudo apt-get install -y git +# Doing a git clone of the catalyst packing repository +git clone https://catalyst-engg:catalyst_123@github.com/RLIndia/catalystpackaging.git +# Changing into the AWS AMI folder +cd catalystpackaging/DockerRLCatalyst +# Replacing to lastest release +sed -i -e "s/3.4.0/$rlno/g" rlcatalyst.sh +# Replacing the tag Name +sed -i -e "s/3.4.2/$rlno/g" rlcatalyst.json + + +# Running Packer +# To build docker image using packer +sudo packer build rlcatalyst.json + +# To upload image +sudo docker push relevancelab/rlcatalyst:$rlno + + diff --git a/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/Test Results - Feature__EmailLoginAndLogout.html b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/Test Results - Feature__EmailLoginAndLogout.html new file mode 100644 index 000000000..f4c67f34a --- /dev/null +++ b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/Test Results - Feature__EmailLoginAndLogout.html @@ -0,0 +1,664 @@ + + + + +Test Results — Feature: EmailLoginAndLogout + + + + + + + + + +
+ +
+
    +
  • + +
    3 m 27 s
    +
    Feature: Login and Logout of Mail Application
    +
      +
    • + +
      3 m 27 s
      +
      Scenario Outline: Login and Logout of Mail Application
      +
        +
      • + +
        3 m 27 s
        +
        Examples:
        +
          +
        • + +
          1 m 38 s
          +
          Scenario: Line: 10
          +
            +
          • + +
            1 m 38 s
            +
            passedGiven I Login to catalyst using "https://www.gmail.com" and "servicedesk@relevancelab.com" and "#64J&uV%L1"access credentials
            +
          • +
          • + +
            0 ms
            +
            passedThen I logged out of application successfully
            +
          • +
          +
        • +
        • + +
          1 m 50 s
          +
          Scenario: Line: 11
          +
            +
          • + +
            1 m 50 s
            +
            failedGiven I Login to catalyst using "https://login.yahoo.com/" and "bjohn287@yahoo.com" and "1234%asd"access credentials
            +
              +
            • +junit.framework.AssertionFailedError: Unable to locate element: {"method":"xpath","selector":"//*[@id='uh-logo']"}
              Command duration or timeout: 24.81 seconds
              For documentation on this error, please visit: http://seleniumhq.org/exceptions/no_such_element.html
              Build info: version: '2.53.1', revision: 'a36b8b1cd5757287168e54b817830adce9b0158d', time: '2016-06-30 19:26:09'
              System info: host: 'RLE0372', ip: '192.168.152.125', os.name: 'Windows 7', os.arch: 'amd64', os.version: '6.1', java.version: '1.8.0_91'
              Driver info: org.openqa.selenium.firefox.FirefoxDriver
              Capabilities [{applicationCacheEnabled=true, rotatable=false, handlesAlerts=true, databaseEnabled=true, version=45.0, platform=WINDOWS, nativeEvents=false, acceptSslCerts=true, webStorageEnabled=true, locationContextEnabled=true, browserName=firefox, takesScreenshot=true, javascriptEnabled=true, cssSelectorsEnabled=true}]
              Session ID: a86e5ec8-215c-4e0c-9199-83f77639c2e6
              *** Element info: {Using=xpath, value=//*[@id='uh-logo']}
              at junit.framework.Assert.fail(Assert.java:57)
              at junit.framework.TestCase.fail(TestCase.java:227)
              at com.rl.qa.views.LoginViews.clickYahooLoginButton(LoginViews.java:121)
              at com.rl.qa.steps.LoginSteps.iLoginToCatalystUsingAndAndAccessCredentials(LoginSteps.java:271)
              at ✽.Given I Login to catalyst using "https://login.yahoo.com/" and "bjohn287@yahoo.com" and "1234%asd"access credentials(D:/qaautomationlibrary/Mail/src/test/resources/mailApplication/EmailLoginAndLogout.feature:4)
              +
            • +
            +
          • +
          • + +
            0 ms
            +
            ignoredThen I logged out of application successfully
            +
              +
            • +Skipped step
              +
            • +
            +
          • +
          +
        • +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + diff --git a/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/catalyst-Test.iml b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/catalyst-Test.iml new file mode 100755 index 000000000..07eab5865 --- /dev/null +++ b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/catalyst-Test.iml @@ -0,0 +1,101 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/desktop.ini b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/desktop.ini new file mode 100755 index 000000000..d957fd188 --- /dev/null +++ b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/desktop.ini @@ -0,0 +1,4 @@ +[ViewState] +Mode= +Vid= +FolderType=Generic diff --git a/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/lib/JSErrorCollector-0.6.jar b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/lib/JSErrorCollector-0.6.jar new file mode 100755 index 0000000000000000000000000000000000000000..a3b159bd0efc17a268cf2eff81282e02b38708a6 GIT binary patch literal 9828 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 literal 0 HcmV?d00001 diff --git a/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/org/junit/runner/annotations.xml b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/org/junit/runner/annotations.xml new file mode 100755 index 000000000..aa891a031 --- /dev/null +++ b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/org/junit/runner/annotations.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/pom.xml b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/pom.xml new file mode 100755 index 000000000..5fd13964d --- /dev/null +++ b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/pom.xml @@ -0,0 +1,277 @@ + + + 4.0.0 + + com.rl.qa + catalyst-Test + 1.0-SNAPSHOT + + catalystTest + + + test + + + REMOTE_CHROME + + https://gmail.com/ + + + + + + + + Admin2 + pass@123 + http://127.0.0.1:7777/wd/hub + Selenium-T.262 + + + + + + package + + + ${project.basedir}/src/main/resources + true + + chromedriver + + + + + + + org.apache.maven.plugins + maven-resources-plugin + 2.6 + + + UTF-8 + + + + + + maven-compiler-plugin + 2.3.2 + + 1.7 + 1.7 + + + + org.apache.maven.plugins + maven-surefire-plugin + 2.5 + + + true + + + + + net.masterthought + maven-cucumber-reporting + 0.0.7 + + + execution + verify + + generate + + + cucumber-jvm-example + target/cucumber-html-reports + target/cucumber.json + false + true + true + + + + + + + + + org.apache.maven.plugins + maven-site-plugin + 3.3 + + + + + + + 2.53.1 + 1.1.6 + 4.11 + + + + + org.seleniumhq.selenium + htmlunit-driver + 2.20 + + + + org.seleniumhq.selenium + selenium-java + ${selenium.version} + + + xerces + xercesImpl + + + xml-apis + xml-apis + + + + + org.seleniumhq.selenium + selenium-firefox-driver + ${selenium.version} + + + commons-io + commons-io + + + + + org.seleniumhq.selenium + selenium-ie-driver + ${selenium.version} + + + org.seleniumhq.selenium + selenium-chrome-driver + ${selenium.version} + + + + xml-apis + xml-apis + 1.4.01 + + + org.bluestemsoftware.open.maven.tparty + xerces-impl + 2.9.0 + + + + + info.cukes + cucumber-core + ${cucumber.version} + + + info.cukes + cucumber-java + ${cucumber.version} + + + info.cukes + cucumber-junit + ${cucumber.version} + + + + + net.masterthought + maven-cucumber-reporting + 0.0.7 + + + net.masterthought + cucumber-reporting + 0.0.23 + + + commons-io + commons-io + + + + + + org.glassfish + javax.json + 1.0.4 + + + + com.google.guava + guava + 17.0 + + + + junit + junit + ${junit.version} + + + net.sf.jtidy + jtidy + r938 + + + + com.pojosontheweb + monte-repack + 1.0 + + + + org.slf4j + slf4j-api + 1.6.1 + + + org.slf4j + slf4j-log4j12 + 1.6.1 + + + org.apache.poi + poi-scratchpad + 3.12 + + + org.apache.poi + poi-ooxml-schemas + 3.12 + + + org.apache.poi + poi-ooxml + 3.12 + + + + + diff --git a/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/FileUtilities.java b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/FileUtilities.java new file mode 100755 index 000000000..289a78e6d --- /dev/null +++ b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/FileUtilities.java @@ -0,0 +1,155 @@ +package com.rl.qa; + +////////////////////////////////////////////////////////////////////////////// +//(c)2014 Lucernex, Inc. +//Author: Toan Dang +//$Revision: $ +////////////////////////////////////////////////////////////////////////////// + +import org.apache.commons.io.comparator.LastModifiedFileComparator; +import org.apache.commons.io.filefilter.WildcardFileFilter; +import org.junit.rules.ErrorCollector; + +import java.io.*; +import java.util.Arrays; + +public class FileUtilities { + public ErrorCollector collector = new ErrorCollector(); + + public FileUtilities() { + } + + /** + * Returns the current working directory which is generally the root of the + * LxSelenium project when executing a JUnit testcase via maven or IntelliJ. + */ + public static File getCWD() { + return new File(System.getProperty("user.dir")); + } + + /** + * Returns the specified file as expected to be in the LxSelenium/Data folder. + * + * @param filename - filename (no directory just the filename) + */ + public static String getDataFile(String filename) throws IOException { + File dataDir = new File(getCWD(), "Data"); + + if (!dataDir.exists()) { + String msg = String.format("Required directory '%s' not found!", dataDir.getAbsolutePath()); + + throw new IllegalStateException(msg); + } + + return (new File(dataDir, filename)).getCanonicalPath(); + } + + /** + * Returns LxSelenium/Data/ImportDataFiles folder. + */ + public static String getImportDataFilesDir() throws IOException { + File dataDir = new File(getCWD(), "Data"); + + if (!dataDir.exists()) { + String msg = String.format("Required directory '%s' not found!", dataDir.getAbsolutePath()); + + throw new IllegalStateException(msg); + } + + return (new File(dataDir, "ImportDataFiles")).getCanonicalPath(); + } + + public void createDirectory(String createDirectoryName) { + + File dir = new File(createDirectoryName); + if (!dir.exists()) + dir.mkdir(); + } + + public void deleteDirectory(String deleteDirectoryName) throws FileNotFoundException, IOException { + File deleteDirectory = new File(deleteDirectoryName); + deleteDirectory.delete(); + + } + + /* + * Copy to new file to different location and delete the original file + * + */ + public static void copyFile(File fromFileInfo,File toFileInfo) throws FileNotFoundException, IOException + { + FileInputStream input = null; + FileOutputStream output = null; + try { + output = new FileOutputStream( toFileInfo ); // open this first, in case we don't have write permissions + input = new FileInputStream( fromFileInfo ); + + final int NO_OFFSET = 0; + int length; + byte[] buffer = new byte[10240]; + while ((length = input.read(buffer)) != -1) { + output.write(buffer, NO_OFFSET, length); + } + + } finally { + if (input != null) { + input.close(); + } + if (output != null) { + output.flush(); + output.getFD().sync(); + output.close(); + + } + + } + + } + + + public String getFileNamebysubString(String curDirectoryName, String containString) throws FileNotFoundException, IOException { + String retString = ""; + + for (File file : listFiles(curDirectoryName)) { + + if (file.isFile()) { + // System.out.println(file.getAbsolutePath()+"---> Seaching"); + if (file.getName().contains(containString)) { + retString = file.getName(); + break; + } + } + + } + + return retString; + + } + + + public File[] listFiles(String directoryName) { + + File directory = new File(directoryName); + + File[] fList = directory.listFiles(); + + return fList; + + } + + public static File getTheNewestFile(File dir, String ext) { + File theNewestFile = null; +// File dir = new File(filePath); + FileFilter fileFilter = new WildcardFileFilter("*." + ext); + File[] files = dir.listFiles(fileFilter); + + if (files.length > 0) { + /** The newest file comes first **/ + Arrays.sort(files, LastModifiedFileComparator.LASTMODIFIED_REVERSE); + theNewestFile = files[0]; + } + + return theNewestFile; + } + +}//end of class diff --git a/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/browsers/BrowserDriver.java b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/browsers/BrowserDriver.java new file mode 100755 index 000000000..d63eeb686 --- /dev/null +++ b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/browsers/BrowserDriver.java @@ -0,0 +1,275 @@ +package com.rl.qa.browsers; + +import com.google.common.io.Files; +import com.rl.qa.utils.CucumberContext; +import com.rl.qa.utils.BaseView; +import org.openqa.selenium.*; +import org.openqa.selenium.support.ui.*; + +import java.io.File; +import java.io.IOException; +import java.net.URI; +import java.net.URISyntaxException; +import java.net.URL; +import java.util.List; +import java.util.concurrent.TimeUnit; +import java.util.logging.Logger; + +import static org.junit.Assert.assertNotNull; + +public class BrowserDriver { + private static final Logger LOGGER = Logger.getLogger(BrowserDriver.class.getName()); + + private static final ThreadLocal driverThreadLocal = new ThreadLocal() { + protected WebDriver initialValue() { + WebDriver driver = BrowserFactory.createBrowser(); + + Runtime.getRuntime().addShutdownHook(new Thread(new BrowserCleanup(driver))); + + return driver; + } + }; + + private static int defaultWaitTime = 30; + + private static class BrowserCleanup implements Runnable { + private WebDriver driver; + + public void run() { + try { + driver.quit(); + CucumberContext.getCucumberContext().put("loggedIn", false); + } catch (Exception e) { + LOGGER.warning(e.getMessage()); + BaseView.takeScreenshot("BrowserNotFound.png"); + } + } + + public BrowserCleanup(WebDriver driver) { + this.driver = driver; + } + } + + public static WebDriver getCurrentDriver() { + return driverThreadLocal.get(); + } + + /** + * Captures a screen shot of the browser's current page writing the .png image + * to the specified file. + * + * @param imageFile - file to receive the .png image output + */ + public static void takeScreenshot(File imageFile) throws IOException { + TakesScreenshot ts = (TakesScreenshot) getCurrentDriver(); + File src = ts.getScreenshotAs(OutputType.FILE); + Files.copy(src, imageFile); + // extractJSErrors(); + } + + /*public static void extractJSErrors() { + JavaScriptError.readErrors(BrowserDriver.getCurrentDriver()); + final List jsErrors = JavaScriptError.readErrors(BrowserDriver.getCurrentDriver()); + if (!jsErrors.isEmpty()) { + LOGGER.info("JS Script Error: " + jsErrors.toString()); + } + }*/ + + public static void loadPage(URL url) throws Throwable{ + assertNotNull("Required field 'url' is null!", url); + loadPage(url.toString()); + } + + public static void logoutIfModalWindowAppears(String url) throws Throwable{ + try{ + BrowserDriver.getCurrentDriver().switchTo().defaultContent(); + WebDriverWait wait = new WebDriverWait(BrowserDriver.getCurrentDriver(),8); + wait.until(ExpectedConditions + .textToBePresentInElement(BrowserDriver.getCurrentDriver() + .findElement(By.cssSelector("div.x-css-shadow+div.x-window div.x-title-text")), "Confirm logout")); + CucumberContext.getCucumberContext().put("loggedIn", false); + loadPage(url); + }catch(Exception e){ + System.out.println(e.getMessage()); + } + } + public static void loadPage(String url) throws Throwable{ + assertNotNull("Required field 'url' is null!", url); + + LOGGER.info("Directing browser to: " + url); + + WebDriver wd = getCurrentDriver(); + + //needed when scripts fails in child window + if (BaseView.mainWindowHandle != null) { + BrowserDriver.getCurrentDriver().switchTo().window(BaseView.mainWindowHandle); + } + wd.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS); + + try { + wd.get(url); + logoutIfModalWindowAppears(url); + } catch (WebDriverException e) { + BaseView.takeScreenshot("redirect-to-url-fails.png"); + + LOGGER.info(String.format("Attempting to recover from this WebDriver exception: %s", e.getMessage())); + +// // Let start with a fresh browser as the current one is mis-behaving. +// try { +// getCurrentDriver().close(); +// driverThreadLocal.remove(); +// LOGGER.info("Closed the browser on browser error."); +// }catch(Exception ex){ +// } +//// getCurrentDriver().quit(); +// wd = getCurrentDriver(); +// CucumberContext.getCucumberContext().put("loggedIn", false); +// +// LOGGER.info("Created new WebDriver instance as old one was failing to respond."); +// +// wd.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS); + wd.get(url); + + LOGGER.info("Browser at URL: " + url); + } + } + + /** + * Returns the domain name of the current page. Necessary to navigate to pages that can only be accessed through + * their address directly (e.g. Lx Administrator Page), since the environment URL varies between developers and + * testing environment. + * + * @return The domain name of the current environment + * @throws URISyntaxException + */ + public static String getDomainName() throws URISyntaxException { + URI uri = new URI(BrowserDriver.getCurrentDriver().getCurrentUrl()); + return uri.getHost(); + } + + public static WebElement waitForElement(WebElement elementToWaitFor) { + return waitForElement(elementToWaitFor, null); + } + + public static WebElement waitForElement(WebElement elementToWaitFor, Integer waitTimeInSeconds) { + return waitForElement(getCurrentDriver(), elementToWaitFor, waitTimeInSeconds); + } + + public static WebElement waitForElement(WebDriver driver, WebElement elementToWaitFor, Integer waitTimeInSeconds) { + if (waitTimeInSeconds == null) { + waitTimeInSeconds = defaultWaitTime; + } + + WebDriverWait wait = new WebDriverWait(driver, waitTimeInSeconds); + //return wait.until(ExpectedConditions.visibilityOf(elementToWaitFor)); + return wait.until(ExpectedConditions.elementToBeClickable(elementToWaitFor)); + } + + public static WebElement findElementWithTimeout(final By by, final long timeOut) throws InterruptedException { + Wait wait = new FluentWait(BrowserDriver.getCurrentDriver()) + .withTimeout(timeOut, TimeUnit.SECONDS) + .pollingEvery(500l, TimeUnit.MILLISECONDS) + .ignoring(NoSuchElementException.class) + .ignoring(StaleElementReferenceException.class); + + try { + return wait.until(ExpectedConditions.presenceOfElementLocated(by)); + } catch (TimeoutException te) { + throw new InterruptedException(te.getMessage()); + } + } + + public static List waitForAllElements(List elementsToWaitFor) { + return BrowserDriver.waitForAllElements(elementsToWaitFor, null); + } + + public static List waitForAllElements(List elementsToWaitFor, Integer waitTimeInSeconds) { + return BrowserDriver.waitForAllElements(BrowserDriver.getCurrentDriver(), elementsToWaitFor, waitTimeInSeconds); + } + + public static List waitForAllElements(WebDriver driver, List elementsToWaitFor, Integer waitTimeInSeconds) { + if (waitTimeInSeconds == null) { + waitTimeInSeconds = defaultWaitTime; + } + + WebDriverWait wait = new WebDriverWait(driver, waitTimeInSeconds); + return wait.until(ExpectedConditions.visibilityOfAllElements(elementsToWaitFor)); + } + + public static WebElement getParent(WebElement element) { + return element.findElement(By.xpath("..")); + } + + /** + * Copied from Selenium JavascriptExecutor.executeScript() javadoc. + *

+ * Executes JavaScript in the context of the currently selected frame or + * window. The script fragment provided will be executed as the body of + * an anonymous function. Within the script, use document to refer to the + * current document. Note that local variables will not be available once + * the script has finished executing, though global variables will persist. + *

+ * If the script has a return value (i.e. if the script contains a return + * statement), then the following steps will be taken: + *

+ * For an HTML element, this method returns a WebElement + * For a decimal, a Double is returned + * For a non-decimal number, a Long is returned + * For a boolean, a Boolean is returned + * For all other cases, a String is returned. + * For an array, return a List with each object following the + * rules above. We support nested lists. + *

+ * Unless the value is null or there is no return value, in which null + * is returned Arguments must be a number, a boolean, a String, WebElement, + * or a List of any combination of the above. An exception will be thrown + * if the arguments do not meet these criteria. The arguments will be made + * available to the JavaScript via the "arguments" magic variable, as if + * the function were called via "Function.apply" + */ + public static Object executeScript(String script) { + JavascriptExecutor je = (JavascriptExecutor) BrowserDriver.getCurrentDriver(); + + return je.executeScript(script); + } + + public static List getDropDownOptions(WebElement webElement) { + Select select = new Select(webElement); + return select.getOptions(); + } + + public static WebElement getDropDownOption(WebElement webElement, String value) { + WebElement option = null; + List options = getDropDownOptions(webElement); + for (WebElement element : options) { + if (element.getAttribute("value").equalsIgnoreCase(value)) { + option = element; + break; + } + } + return option; + } + + /** + * Waits for the element to be displayed, then clicks that element. + * + * @param webElement + */ + public static void clickElement(WebElement webElement) { + webElement = BrowserDriver.waitForElement(webElement); + webElement.isDisplayed(); + webElement.click(); + } + + /** + * Gets the visible text in the specified WebElement, with the white space before and after trimmed off. + * + * @param webElement - the WebElement to grab its visible text from. + * @return A String representation of the trimmed text that is visible in this WebElement. + */ + public static String getTextFromElement(WebElement webElement) { + webElement = BrowserDriver.waitForElement(webElement); + webElement.isDisplayed(); + return webElement.getText().trim(); + } +} diff --git a/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/browsers/BrowserFactory.java b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/browsers/BrowserFactory.java new file mode 100755 index 000000000..e21c1a45a --- /dev/null +++ b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/browsers/BrowserFactory.java @@ -0,0 +1,324 @@ +package com.rl.qa.browsers; +import com.gargoylesoftware.htmlunit.BrowserVersion; +import com.rl.qa.FileUtilities; +import com.rl.qa.utils.CucumberContext; +import org.openqa.selenium.Dimension; +import org.openqa.selenium.Point; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.chrome.ChromeDriver; +import org.openqa.selenium.chrome.ChromeOptions; +import org.openqa.selenium.firefox.FirefoxBinary; +import org.openqa.selenium.firefox.FirefoxDriver; +import org.openqa.selenium.firefox.FirefoxProfile; +import org.openqa.selenium.htmlunit.HtmlUnitDriver; +import org.openqa.selenium.ie.InternetExplorerDriver; +import org.openqa.selenium.remote.Augmenter; +import org.openqa.selenium.remote.DesiredCapabilities; +import org.openqa.selenium.remote.RemoteWebDriver; + +import java.io.File; +import java.io.IOException; +import java.net.URL; +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.TimeUnit; + +import static junit.framework.Assert.assertNotNull; + +//import static com.rl.qa.utils.FileUtils.createDirectory; + +public class BrowserFactory { + //WebDriver driver; + //public static Scenario scenario; + + private static WebDriver createHtmlUnitDriver() { + // Create a pure Java based browser with a Javascript that emulates + // FIREFOX's Javascript engine. +// return new HtmlUnitDriver(BrowserVersion.FIREFOX_17); + return new HtmlUnitDriver(BrowserVersion.FIREFOX_38); + } + + private static WebDriver createInternetExplorerDriver() { + return new InternetExplorerDriver(); + } + + private static WebDriver createChromeDriver() { + File dataDir = new File(FileUtilities.getCWD(), "\\target"); + String path = dataDir.getPath(); + + FileUtilities dir = new FileUtilities(); +// createDirectory(path); + + Map prefs = new HashMap(); + prefs.put("download.default_directory", path); + + DesiredCapabilities caps = DesiredCapabilities.chrome(); + + ChromeOptions options = new ChromeOptions(); + options.setExperimentalOption("prefs", prefs); + caps.setCapability(ChromeOptions.CAPABILITY, options); + + System.setProperty("webdriver.chrome.driver", "src/main/resources/chromedriver.exe"); + return new Augmenter().augment(new ChromeDriver(caps)); + } + + private static WebDriver createFirefoxDriver(FirefoxProfile profile) { + return new Augmenter().augment(new FirefoxDriver(profile)); + } + + private static WebDriver createXvfbFirefoxDriver() { + FirefoxBinary firefoxBinary = new FirefoxBinary(new File("/usr/bin/firefox")); + + firefoxBinary.setEnvironmentProperty("DISPLAY", ":1"); + + return new Augmenter().augment(new FirefoxDriver(firefoxBinary, null)); + } + + /** + * Returns the user's download directory creating it if it was not found. + */ + public static String getBrowserDownloadsDir() throws IOException { + File downloads = new File(System.getProperty("user.home"), "Downloads"); + + if (!downloads.exists()) { + if (!downloads.mkdirs()) { + String msg = String.format("Unable to create directory '%s'", downloads.getCanonicalPath()); + + throw new IOException(msg); + } + } + + return downloads.getCanonicalPath(); + } + + private static void addAllBrowserSetup(WebDriver driver) { + driver.manage().deleteAllCookies(); + driver.manage().timeouts().implicitlyWait(40, TimeUnit.SECONDS); + driver.manage().window().maximize(); +// driver.manage().window().setPosition(new Point(0, 0)); +// driver.manage().window().setSize(new Dimension(1500, 800)); +// driver.manage().window().setPosition(new Point(0, 0)); +// java.awt.Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); +// Dimension dim = new Dimension((int) screenSize.getWidth(), (int) screenSize.getHeight()); +// driver.manage().window().setSize(dim); +// Toolkit toolkit = Toolkit.getDefaultToolkit(); +// int Width = (int) toolkit.getScreenSize().getWidth(); +// int Height = (int)toolkit.getScreenSize().getHeight(); +// Dimension screenResolution = new Dimension(Width,Height); +// driver.manage().window().setSize(screenResolution); +// driver.manage().window().setSize(new Dimension(1500, 800)); + + } + + /** + * Create a selenium WebDriver that is appropriate for use with the specified + * type of browser. + * + * @param browserType - type of browser to create + * @return WebDriver + */ + public static WebDriver createBrowser(BrowserType browserType) { + WebDriver driver; + URL seleniumHub; + DesiredCapabilities capabilities; + + //original + File dataDir = new File(FileUtilities.getCWD(), "//target"); + String path = dataDir.getPath(); + + +// createDirectory(path); + + switch (browserType) { + case XVFB_FIREFOX: + driver = createXvfbFirefoxDriver(); + System.out.println("Created XVFB_FIREFOX browser driver."); + break; + case REMOTE_FIREFOX: + seleniumHub = CucumberContext.getSeleniumHub(); + + assertNotNull(String.format("Property [%s] is not defined!", CucumberContext.SELENIUM_HUB), seleniumHub); + + File profileDirectory = new File(path); + FirefoxProfile profile = new FirefoxProfile(profileDirectory); + + capabilities = DesiredCapabilities.firefox(); + + capabilities.setCapability("platform", "Windows 8"); + capabilities.setCapability("version", "35.0"); + + + capabilities.setCapability(FirefoxDriver.PROFILE, profile); + + driver = new RemoteWebDriver( + seleniumHub, capabilities + ); + + driver.manage().window().setPosition(new Point(0, 0)); + driver.manage().window().setSize(new Dimension(1500, 800)); + driver.manage().window().maximize(); + + System.out.format("Created REMOTE_FIREFOX browser, windows size: %s\n", driver.manage().window().getSize()); + //return driver; + break; + case REMOTE_CHROME: + seleniumHub = CucumberContext.getSeleniumHub(); + + assertNotNull(String.format("Property [%s] is not defined!", CucumberContext.SELENIUM_HUB), seleniumHub); + + //capabilities = DesiredCapabilities.chrome(); + //capabilities.setCapability("chrome.switches", "['--start-maximized']"); + //capabilities.setCapability("chrome.switches", Arrays.asList("--start-maximized")); + + //ChromeOptions options = new ChromeOptions(); + + //options.addArguments("start-maximized"); + //capabilities.setCapability(ChromeOptions.CAPABILITY, options); + + Map prefs = new HashMap(); + prefs.put("download.default_directory", path); + + capabilities = DesiredCapabilities.chrome(); + + capabilities.setCapability("platform", "Windows 7"); + capabilities.setCapability("version", "45.0"); + + ChromeOptions options = new ChromeOptions(); + options.setExperimentalOption("prefs", prefs); + capabilities.setCapability(ChromeOptions.CAPABILITY, options); + driver = new RemoteWebDriver( + seleniumHub, + capabilities + ); + + //JavascriptExecutor je = (JavascriptExecutor)driver; + + //je.executeScript("window.resizeTo(1024, 1024)"); + +// driver.manage().window().setPosition(new Point(0, 0)); +//// driver.manage().window().setSize(new Dimension(1024, 768)); +// driver.manage().window().setSize(new Dimension(1024, 1024)); +//// driver.manage().window().setSize(new Dimension(1500, 800)); +// Dimension d = new Dimension(1500, 800); +// driver.manage().window().setSize(d); + driver.manage().window().setPosition(new Point(0, 0)); + driver.manage().window().setSize(new Dimension(1500, 800)); +// driver.manage().window().maximize(); + + /* + try { + driver = new RemoteWebDriver( + new URL("http://127.0.0.1:9515"), // use of chromedriver without Selenium GRID + capabilities + ); + } catch (MalformedURLException e) { + return null; // not going to happen + } + */ + + System.out.format("Created REMOTE_CHROME browser, windows size: %s\n", driver.manage().window().getSize()); + break; + //return driver; + case REMOTE_IE: + seleniumHub = CucumberContext.getSeleniumHub(); + + assertNotNull(String.format("Property [%s] is not defined!", CucumberContext.SELENIUM_HUB), seleniumHub); + + capabilities = DesiredCapabilities.internetExplorer(); + + // The following is using the chromedriver directly without the selenium server. + driver = new RemoteWebDriver( + seleniumHub, + capabilities + ); + + System.out.format("Created REMOTE_CHROME browser, windows size: %s\n", driver.manage().window().getSize()); + //return driver; + case CHROME: + driver = createChromeDriver(); + System.out.println("Created CHROME browser driver."); + break; + case IE: + driver = createInternetExplorerDriver(); + System.out.println("Created IE browser driver."); + break; + case HTML_UNIT: + driver = createHtmlUnitDriver(); + System.out.println("Created HTML_UNIT browser driver."); + break; + case FIREFOX: + default: + profile = new FirefoxProfile(); + profile.setPreference("browser.download.folderList", 2); + profile.setPreference("browser.download.dir", path); + + profile.setPreference("browser.download.alertOnEXEOpen", false); + profile.setPreference("browser.helperApps.neverAsk.saveToDisk", "text/html;" + + "text/xml; application/xml; " + + "application/excel; application/vnd.ms-excel; application/x-excel; application/x-msexcel;" + + "application/pdf;" + + "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); + profile.setPreference("browser.download.manager.showWhenStarting", false); + profile.setPreference("browser.download.manager.focusWhenStarting", false); + profile.setPreference("browser.helperApps.alwaysAsk.force", false); + profile.setPreference("browser.download.manager.alertOnEXEOpen", false); + profile.setPreference("browser.download.manager.closeWhenDone", false); + profile.setPreference("browser.download.manager.showAlertOnComplete", false); + profile.setPreference("browser.download.manager.useWindow", false); + profile.setPreference("browser.download.manager.showWhenStarting", false); + profile.setPreference("services.sync.prefs.sync.browser.download.manager.showWhenStarting", false); + + driver = createFirefoxDriver(profile); + System.out.println("Created FIREFOX browser driver."); + driver.manage().window().setPosition(new Point(0, 0)); + driver.manage().window().setSize(new Dimension(1500, 800)); + driver.manage().window().maximize(); + break; + } + + addAllBrowserSetup(driver); + + return driver; + } + + /** + * Create a selenium WebDriver that is appropriate for use with the specified + * type of browser. The JVM property 'browser' may be used to specify the + * desired browser type with a default of 'firefox'. Supported browser types + * include: [firefox,chrome,ie]. + *

+ * Example of specifying browser type 'ie': + *

+ * -Dbrowser=ie + * + * @return WebDriver + */ + public static WebDriver createBrowser() { + + BrowserType bt = CucumberContext.getBrowserType(); + +// assertNotNull("Required property 'iwms.browser' not defined!", bt); + + return createBrowser(bt); + } +} + /* + @Before + public static void setUp(Scenario scenario) { + //this.Scenario = scenario; + } + + @After("@browser") + public void after(Scenario scenario) { + if (scenario.isFailed()) { + final byte[] screenshot = ((TakesScreenshot) driver) + .getScreenshotAs(OutputType.BYTES); + scenario.embed(screenshot, "//target//image/png"); //stick it in the report + + + } + driver.close(); + } + + } */ + diff --git a/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/browsers/BrowserType.java b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/browsers/BrowserType.java new file mode 100755 index 000000000..9dae68e80 --- /dev/null +++ b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/browsers/BrowserType.java @@ -0,0 +1,31 @@ +package com.rl.qa.browsers; + +import static com.google.common.base.Strings.isNullOrEmpty; + +/** + * Types of support web browsers. + */ +public enum BrowserType { + XVFB_FIREFOX, + REMOTE_FIREFOX, + REMOTE_CHROME, + REMOTE_IE, + FIREFOX, + CHROME, + IE, + HTML_UNIT; + + public static BrowserType fromString(String name) { + if (isNullOrEmpty(name)) { + throw new IllegalArgumentException("Required argument 'name' is null/empty!"); + } + + for (BrowserType bt : BrowserType.values()) { + if (name.equalsIgnoreCase(bt.name())) { + return bt; + } + } + + throw new IllegalArgumentException(String.format("Specified name [%s] is unknown!", name)); + } +} diff --git a/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/steps/CFTSteps.java b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/steps/CFTSteps.java new file mode 100755 index 000000000..da1f36f07 --- /dev/null +++ b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/steps/CFTSteps.java @@ -0,0 +1,265 @@ +package com.rl.qa.steps; + +import com.rl.qa.browsers.BrowserDriver; +import com.rl.qa.utils.BaseView; +import com.rl.qa.utils.SeleniumUtilities; +import com.rl.qa.views.CFTViews; +import cucumber.api.PendingException; +import cucumber.api.java.en.And; +import org.openqa.selenium.By; +import org.openqa.selenium.support.PageFactory; +import org.openqa.selenium.support.ui.ExpectedConditions; +import org.openqa.selenium.support.ui.WebDriverWait; + +import java.util.logging.Logger; + +import static junit.framework.Assert.assertTrue; +import static junit.framework.TestCase.fail; + +/** + * Created by RLE0097 on 21-06-2016. + */ +public class CFTSteps { + private static final Logger logger = Logger.getLogger(LoginSteps.class.getName()); + private static final com.rl.qa.utils.SeleniumUtilities SeleniumUtil = PageFactory.initElements(BrowserDriver.getCurrentDriver(), SeleniumUtilities.class); + + @And("^I navigate to the \"([^\"]*)\"$") + public void I_navigate_to_the(String strLink) throws Throwable { + CFTViews.clickOnWorkZoneLink(); + } + + @And("^I click on the \"([^\"]*)\" link$") + public void I_click_on_the_link(String strLink) throws Throwable { + CFTViews.clickOntheLink(strLink); + } + + @And("^I select the \"([^\"]*)\" blueprint$") + public void I_select_the_blueprint(String strBlueprint) throws Throwable { + CFTViews.clickOntheCssselectorField("li[title='"+strBlueprint+"']"); + } + + @And("^I select the \"([^\"]*)\" blueprint and click on the Launch button$") + public void I_select_the_blueprint_and_click_on_the_Launch_button(String strBlueprint) throws Throwable { + CFTViews.selectBlueprintAndClickOnLaunchButton(strBlueprint); + } + + @And("^I click on the \"([^\"]*)\" button on confirmation popup window$") + public void I_click_on_the_button_on_confirmation_popup_window(String strButton) throws Throwable { + CFTViews.clickOnOKButton(strButton); + } + + @And("^I enter \"([^\"]*)\" unique stack name$") + public void I_enter_unique_stack_name(String strStackName) throws Throwable { + CFTViews.enterStackName(strStackName); + } + + @And("^I click on the submit button$") + public void I_click_on_the_submit_button() throws Throwable { + CFTViews.clickOnButtonButton(); + } + + @And("^I verify the following message \"([^\"]*)\"$") + public void I_verify_the_following_message(String strSearchText) { + try { + Thread.sleep(130000); + SeleniumUtil.waitUntilElementContainsText("id","instanceLogModalContainer",strSearchText,8,SeleniumUtilities.OBJWAITTIMEOUT); +// WebDriverWait wait = new WebDriverWait(BrowserDriver.getCurrentDriver(), 560); +// assertTrue(wait.until(ExpectedConditions.textToBePresentInElement(By.tagName("*"), strSearchText))); + logger.info("Verified : " + strSearchText); + } catch (Exception e) { + try { + SeleniumUtil.getWebElementObject("xpath", "//*[contains(text(),\"" + strSearchText + "\")]"); + } catch (Exception ex) { + BaseView.takeScreenshot(strSearchText + ".png"); + logger.info("Error :" + e.getMessage()); + fail(e.getMessage()); + } + } + } + + @And("^I verify the \"([^\"]*)\" stack name and status \"([^\"]*)\" in cloudformation$") + public void I_verify_the_stack_name_and_status_in_cloudformation(String strStackName, String strStatus) throws Throwable { + CFTViews.verifyStackName(strStackName,strStatus); + } + + @And("^I click on more Info icon of \"([^\"]*)\" instance card$") + public void I_click_on_more_Info_icon_of_instance_card(String strCardName) throws Throwable { + CFTViews.clickOnMoreInfoofInstanceCard(strCardName); + } + + @And("^I extract IP address of \"([^\"]*)\" instance card$") + public void I_extract_IP_address_of_instance_card(String strCardName) throws Throwable { + CFTViews.getIPAddress(strCardName); + } + + @And("^I click on the \"([^\"]*)\" button on confirmation popup$") + public void I_click_on_the_button_on_confirmation_popup(String arg1) throws Throwable { + CFTViews.clickOnConfirmatinButton(); + } + + @And("^I collapse the first section \"([^\"]*)\"$") + public void I_collapse_the_first_section(String strSoftwareStack) throws Throwable { + CFTViews.clickOntheLink(strSoftwareStack); + } + + @And("^I expand the \"([^\"]*)\" section$") + public void I_expand_the_section(String Cloudformation) throws Throwable { + CFTViews.clickOntheLink(Cloudformation); + } + + @And("^I see the catalyst dashboard$") + public void I_see_the_catalyst_dashboard() throws Throwable { + CFTViews.seeDashboard(); + } + + @And("^I click on the \"([^\"]*)\" link to expend the tree$") + public void I_click_on_the_link_to_expend_the_tree(String strTreeHead) throws Throwable { + CFTViews.expendTheTree(strTreeHead); + } + + @And("^I verify the following message \"([^\"]*)\" on \"([^\"]*)\" popup window$") + public void I_verify_the_following_message_on_popup_window(String strPopWindowText,String strSearchText) { + try { + Thread.sleep(10000); + SeleniumUtil.waitUntilElementContainsText("xpath",".//*[contains(./text(),'"+strPopWindowText+"')]",strPopWindowText,SeleniumUtilities.OBJWAITTIMEOUT); + WebDriverWait wait = new WebDriverWait(BrowserDriver.getCurrentDriver(), 160); + assertTrue(wait.until(ExpectedConditions.textToBePresentInElement(By.tagName("*"), strSearchText))); + logger.info("Verified : " + strSearchText); + } catch (Exception e) { + try { + SeleniumUtil.getWebElementObject("xpath", "//*[contains(text(),\"" + strSearchText + "\")]"); + } catch (Exception ex) { + BaseView.takeScreenshot(strSearchText + ".png"); + logger.info("Error :" + e.getMessage()); + fail(e.getMessage()); + } + } + } + + @And("^I navigate to the trackNew$") + public void I_navigate_to_the_trackNew() throws Throwable { + CFTViews.clickOnTrack(); + } + + @And("^I click on the line chart \"([^\"]*)\"$") + public void I_click_on_the_line_chart(String strLabel) throws Throwable { + CFTViews.clickOnLineChartNotifications(strLabel); + } + + @And("^I click on the file \"([^\"]*)\"$") + public void I_click_on_the_file(String strLabel) throws Throwable { + CFTViews.clickOnFileNotifications(strLabel); + } + + @And("^I click on the desktop \"([^\"]*)\"$") + public void I_click_on_the_desktop(String strLabel) throws Throwable { + CFTViews.clickOnDesktopNotifications(strLabel); + } + + @And("^I click on the \"([^\"]*)\" tab$") + public void I_click_on_the_tab(String strLink) throws Throwable { + CFTViews.clickOnLink(strLink); + } + + @And("^I verify the Public IP address exist in \"([^\"]*)\" instance$") + public void I_verify_the_Public_IP_address_exist_in_instance(String strCardName) throws Throwable { +// span[class='ip-cell-public'] +// span[class='ip-cell-private'] + CFTViews.verifyPublicIPAddress(strCardName); + } + + @And("^I extract Private IP address of \"([^\"]*)\" instance card$") + public void I_extract_Private_IP_address_of_instance_card(String strCardName) throws Throwable { + CFTViews.getPrivateIPAddress(strCardName); + } + + @And("^I switch to visible frame$") + public void I_switch_to_visible_frame() throws Throwable { + CFTViews.switchToFrame(); + } + + @And("^I switch to default frame$") + public void I_switch_to_default_frame() throws Throwable { + SeleniumUtil.switchTodefaultContent(); + } + + + @And("^I select the \"([^\"]*)\" from drop down$") + public void iSelectTheFromDropDown(String orgName) throws Throwable { + CFTViews.selectOrg(orgName); + } + + @And("^I click on \"([^\"]*)\" to expand it$") + public void iClickOnToExpandIt(String configStackPara) throws Throwable { + CFTViews.clickOnConfigStackParaLink(configStackPara); + } + + @And("^I enter \"([^\"]*)\" in the \"([^\"]*)\" edit box$") + public void iEnterInTheEditBox(String stackPara, String webEleAttribute) throws Throwable { + CFTViews.enterStackPara(stackPara,webEleAttribute); + + } + + @And("^I enter \"([^\"]*)\" in Username Input edit box$") + public void iEnterInUsernameInputEditBox(String instanceUserName) throws Throwable { + CFTViews.enterInstanceUserName(instanceUserName); + } + + @And("^I expand \"([^\"]*)\"$") + public void iExpand(String blueprintType) throws Throwable { + CFTViews.clickOnBlueprintType(blueprintType); + } + + @And("^I enter \"([^\"]*)\" on popup window$") + public void iEnterOnPopupWindow(String uniqueStackName) throws Throwable { + CFTViews.enterUniqueStackName(uniqueStackName); + } + + @And("^I click on Refresh button$") + public void iClickOnRefreshButton() throws Throwable { + CFTViews.refreshCFTStackPage(); + } + @And("^I verify the \"([^\"]*)\" stack name and status CREATE_IN_PROGRESS in CFT Stacks$") + public void iVerifyTheStackNameAndStatusCREATE_IN_PROGRESSInCFTStacks(String cftName) throws Throwable { + CFTViews.verifyStatusCreateInProgress(cftName); + } + + @And("^I verify the \"([^\"]*)\" stack name and status CREATE_COMPLETE in CFT Stacks$") + public void iVerifyTheStackNameAndStatusCREATE_COMPLETEInCFTStacks(String cftName) throws Throwable { + CFTViews.verifyStatusCreateComplete(); + + } + + @And("^I Click on \"([^\"]*)\" link$") + public void iClickOnLink(String strLinkSaid) throws Throwable { + CFTViews.clickonTheLinkSaid(strLinkSaid); + + } + + @And("^I Click on \"([^\"]*)\" Tab provided$") + public void iClickOnTabProvided(String strCloudFormationTab) throws Throwable { + CFTViews.clickonCloudformationTab(strCloudFormationTab); + } + + + @And("^I Verify the Cloudformation Blueprint is created \"([^\"]*)\"$") + public void iVerifyTheCloudformationBlueprintIsCreated(String strVerifyBlueprint) throws Throwable { + CFTViews.VerifyCloudFormationBlueprint(strVerifyBlueprint); + } + + @And("^I click on the link workzone$") + public void iClickOnTheLinkWorkzone() throws Throwable { + CFTViews.clickOnWorkZoneLink(); + } + + @And("^I Click on \"([^\"]*)\" link provided$") + public void iClickOnLinkProvided(String arg0) throws Throwable { + CFTViews.clickOnBlueprints(); + + } + + @And("^I Verify the SoftwareStack Blueprint is created \"([^\"]*)\"$") + public void iVerifyTheSoftwareStackBlueprintIsCreated(String strSoftwareStack) throws Throwable { + CFTViews.VerifySoftwareStackBlueprint(strSoftwareStack); + } +} diff --git a/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/steps/ChefServerSetupSteps.java b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/steps/ChefServerSetupSteps.java new file mode 100755 index 000000000..12507df3f --- /dev/null +++ b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/steps/ChefServerSetupSteps.java @@ -0,0 +1,156 @@ +package com.rl.qa.steps; + +import com.rl.qa.browsers.BrowserDriver; +import com.rl.qa.utils.BaseView; +import com.rl.qa.utils.SeleniumUtilities; +import com.rl.qa.views.ChefServerSetupViews; +import cucumber.api.PendingException; +import cucumber.api.java.en.And; +import cucumber.api.java.en.Then; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.support.PageFactory; + +import java.util.Iterator; +import java.util.logging.Logger; + +import static junit.framework.Assert.assertTrue; +import static junit.framework.TestCase.fail; + +/** + * Created by RLE0372 on 20-07-2016. + */ +public class ChefServerSetupSteps { + private static final Logger logger = Logger.getLogger(LoginSteps.class.getName()); + private static final com.rl.qa.utils.SeleniumUtilities SeleniumUtil = PageFactory.initElements(BrowserDriver.getCurrentDriver(), SeleniumUtilities.class); + + @And("^I Enter the \"([^\"]*)\" in name edit box$") + public void iEnterTheInNameEditBox(String chefServerName) throws Throwable { + ChefServerSetupViews.enterServerName(chefServerName); + } + + @And("^I Enter \"([^\"]*)\" in User Name edit box$") + public void iEnterInUserNameEditBox(String userName) throws Throwable { + ChefServerSetupViews.enterUserName(userName); + } + + @And("^I Enter \"([^\"]*)\" in URL edit box$") + public void iEnterInURLEditBox(String url) throws Throwable { + ChefServerSetupViews.enterURL(url); + } + + @And("^I browse pem file for chef server$") + public void iBrowsePemFileForChefServer() throws Throwable { + ChefServerSetupViews.BrowsePemFileForChefServer(); + } + + @And("^I browse knife file for chef server$") + public void iBrowseKnifeFileForChefServer() throws Throwable { + ChefServerSetupViews.BrowseKnifeFileForChefServer(); + } + + @And("^I select the \"([^\"]*)\" and click on corresponding \"([^\"]*)\" Button$") + public void iSelectTheAndClickOnCorrespondingButton(String cherServerName ,String Import_Node) throws Throwable { + ChefServerSetupViews.chefServerEditButton(cherServerName,Import_Node); + } + + @And("^I clear the \"([^\"]*)\" already present in name edit box$") + public void iClearTheAlreadyPresentInNameEditBox(String arg0) throws Throwable { + ChefServerSetupViews.clearNameField(); + } + + + @Then("^I verify \"([^\"]*)\" Link is displayed or not$") + public void iVerifyLinkIsDisplayedOrNot(String Nodes) throws Throwable { + try { + SeleniumUtil.waitForElementIsClickable("xpath","//a[text()='Nodes']",8,SeleniumUtilities.OBJWAITTIMEOUT); + assertTrue(SeleniumUtil.waitUntilElementContainsText("xpath","//a[text()='Nodes']",Nodes,8,SeleniumUtilities.OBJWAITTIMEOUT));{ + logger.info("Verified : " +Nodes); +// }else{ +// logger.info("Verified : " +Nodes); + } + } catch (Exception e) { + try { + SeleniumUtil.getWebElementObject("xpath", "//a[text()='Nodes']"); + } catch (Exception ex) { + BaseView.takeScreenshot(Nodes + ".png"); + logger.info("Error :" + e.getMessage()); + fail(e.getMessage()); + } + } + + } + + @Then("^I verify that message \"([^\"]*)\" is displayed$") + public void iVerifyThatMessageIsDisplayed(String expectedMsg) throws Throwable { + try { + WebDriver driver=SeleniumUtil.getWebDriver(); + Iterator i = driver.getWindowHandles().iterator(); + while (i.hasNext()) { + String parentBrowser=i.next(); + String childBrowser =i.next(); + driver.switchTo().window(childBrowser); + assertTrue(SeleniumUtil.isElementExist("id","chefAccountMsg")); + logger.info("Verified : Chef Account is Displayed"); + driver.close(); + driver.switchTo().window(parentBrowser); + } + } catch (Exception e) { + BaseView.takeScreenshot(expectedMsg + ".png"); + logger.info("Error :" + e.getMessage()); + fail(e.getMessage()); + } + } + @Then("^I verify that message \"([^\"]*)\" on data bag page is displayed$") + public void iVerifyThatMessageOnDataBagPageIsDisplayed(String expectedMsg) throws Throwable { + try { + SeleniumUtil.waitForElementIsClickable("xpath","//h4[contains(text(),'Data Bags & Items')]",8,SeleniumUtilities.OBJWAITTIMEOUT); + assertTrue(SeleniumUtil.verifyTextValue("xpath","//h4[contains(text(),'Data Bags & Items')]",expectedMsg,SeleniumUtilities.OBJWAITTIMEOUT)); { + logger.info("Verified : " + expectedMsg); + } + } catch (Exception e) { + BaseView.takeScreenshot(expectedMsg + ".png"); + logger.info("Error :" + e.getMessage()); + fail(e.getMessage()); + } + } + + @Then("^I verify created \"([^\"]*)\" in chef server table$") + public void iVerifyCreatedInChefServerTable(String chefServerName) throws Throwable { + ChefServerSetupViews.verifyChefServerName(chefServerName); + + } + + + @And("^I verify select organization is disabled$") + public void iVerifySelectOrganizationIsDisabled() throws Throwable { + ChefServerSetupViews.verifySelectOrgISDisabled(); + } + + @Then("^I verify created \"([^\"]*)\" is deleted$") + public void iVerifyCreatedChefServerIsDeleted(String chefServerName) throws Throwable { + ChefServerSetupViews.verifyChefServerIsDeleted(chefServerName); + } + + + @Then("^I verify \"([^\"]*)\" with \"([^\"]*)\" in the Chef Server table$") + public void iVerifyWithInTheChefServerTable(String chefServerName, String chefUserName) throws Throwable { + ChefServerSetupViews.verifyServerDetails(chefServerName,chefUserName); + } + + @And("^I upload pem file \"([^\"]*)\"$") + public void iUploadPemFile(String fileName) throws Throwable { + ChefServerSetupViews.uploadPemFile(fileName); + } + + @And("^I upload knife file \"([^\"]*)\"$") + public void iUploadKnifeFile(String fileName) throws Throwable { + ChefServerSetupViews.uploadKnifeFile(fileName); + } + + @And("^I select \"([^\"]*)\" from the Drop Down available$") + public void iSelectFromTheDropDownAvailable(String strOrgname) throws Throwable { + ChefServerSetupViews.selectTheOrg(strOrgname); + + } +} + diff --git a/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/steps/ConfigBlueprintForOSImageUsingProAWSSteps.java b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/steps/ConfigBlueprintForOSImageUsingProAWSSteps.java new file mode 100755 index 000000000..adc866fb5 --- /dev/null +++ b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/steps/ConfigBlueprintForOSImageUsingProAWSSteps.java @@ -0,0 +1,43 @@ +package com.rl.qa.steps; + +import com.rl.qa.browsers.BrowserDriver; +import com.rl.qa.utils.SeleniumUtilities; +import com.rl.qa.views.ConfigBlueprintForOSImageUsingProAWSViews; +import cucumber.api.java.en.And; +import cucumber.api.java.en.Then; +import org.openqa.selenium.support.PageFactory; + +import java.util.logging.Logger; + +/** + * Created by RLE0372 on 23-09-2016. + */ +public class ConfigBlueprintForOSImageUsingProAWSSteps { + private static final Logger logger = Logger.getLogger(LoginSteps.class.getName()); + private static final com.rl.qa.utils.SeleniumUtilities SeleniumUtil = PageFactory.initElements(BrowserDriver.getCurrentDriver(), SeleniumUtilities.class); + + @And("^I see Choose Operating System is disabled$") + public void iSeeChooseOperatingSystemIsDisabled() throws Throwable { + ConfigBlueprintForOSImageUsingProAWSViews.verifyChooseOSIsDisabled(); + } + + @And("^I see Choose Provider is disabled$") + public void iSeeChooseProviderIsDisabled() throws Throwable { + ConfigBlueprintForOSImageUsingProAWSViews.verifyChooseProviderIsDisabled(); + } + + @And("^I see Choose Available Images is disabled$") + public void iSeeChooseAvailableImagesIsDisabled() throws Throwable { + ConfigBlueprintForOSImageUsingProAWSViews.verifyChooseAvailableImages(); + } + + @And("^I see Choose Organization is disabled$") + public void iSeeChooseOrganizationIsDisabled() throws Throwable { + ConfigBlueprintForOSImageUsingProAWSViews.verifyChooseOrgIsDisabled(); + } + + @Then("^I verify launch blueprint button is dispalyed$") + public void iVerifyLaunchBlueprintButtonIsDispalyed() throws Throwable { + ConfigBlueprintForOSImageUsingProAWSViews.verifyLaunchButtonISDisplayed(); + } +} diff --git a/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/steps/ConfigBlueprintForSSTempUsingProAWSSteps.java b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/steps/ConfigBlueprintForSSTempUsingProAWSSteps.java new file mode 100755 index 000000000..2e0f65707 --- /dev/null +++ b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/steps/ConfigBlueprintForSSTempUsingProAWSSteps.java @@ -0,0 +1,89 @@ +package com.rl.qa.steps; + +import com.rl.qa.browsers.BrowserDriver; +import com.rl.qa.utils.SeleniumUtilities; +import com.rl.qa.views.ConfigBlueprintForSSTempUsingProAWSViews; +import cucumber.api.java.en.And; +import cucumber.api.java.en.Then; +import org.openqa.selenium.support.PageFactory; + +import java.util.logging.Logger; + +/** + * Created by RLE0372 on 10-09-2016. + */ +public class ConfigBlueprintForSSTempUsingProAWSSteps { + private static final Logger logger = Logger.getLogger(LoginSteps.class.getName()); + private static final com.rl.qa.utils.SeleniumUtilities SeleniumUtil = PageFactory.initElements(BrowserDriver.getCurrentDriver(), SeleniumUtilities.class); + + @Then("^I verify \"([^\"]*)\" present in \"([^\"]*)\" page$") + public void iVerifyPresentInPage(String blueprintName, String pageName) throws Throwable { + ConfigBlueprintForSSTempUsingProAWSViews.verifyBlueprintInWorkZone(blueprintName,pageName); + } + + @And("^I click on \"([^\"]*)\" of the \"([^\"]*)\"$") + public void iClickOnOfThe(String moreInfo, String blueprintName) throws Throwable { + ConfigBlueprintForSSTempUsingProAWSViews.clickOnMoreInfo(moreInfo,blueprintName); + } + + @And("^I click on the \"([^\"]*)\" button on instance log popup$") + public void iClickOnTheButtonOnInstanceLogPopup(String arg0) throws Throwable { + ConfigBlueprintForSSTempUsingProAWSViews.clickOnClose(); + } + + @And("^I select the desired \"([^\"]*)\"$") + public void iSelectTheDesired(String blueprintName) throws Throwable { + ConfigBlueprintForSSTempUsingProAWSViews.selectBlueprint(blueprintName); + } + + @And("^I click on copy Blueprint$") + public void iClickOnCopyBlueprint() throws Throwable { + ConfigBlueprintForSSTempUsingProAWSViews.clickOnCopyBlueprint(); + } + + @And("^I select \"([^\"]*)\" from \"([^\"]*)\" drop down on select target popup$") + public void iSelectFromDropDownOnSelectTargetPopup(String name, String idOfElement) throws Throwable { + ConfigBlueprintForSSTempUsingProAWSViews.selectParametersOnPopupWindow(name,idOfElement); + } + + @And("^I click on \"([^\"]*)\" button on the select target popup$") + public void iClickOnButtonOnTheSelectTargetPopup(String buttonText) throws Throwable { + ConfigBlueprintForSSTempUsingProAWSViews.clickOnSave(buttonText); + } + + @And("^I select the \"([^\"]*)\" and click on assigned \"([^\"]*)\"$") + public void iSelectTheAndClickOnAssigned(String proName, String envName) throws Throwable { + ConfigBlueprintForSSTempUsingProAWSViews.clickOnEnv(proName,envName); + } + + @And("^I click on \"([^\"]*)\" button to delete the blueprint$") + public void iClickOnButtonToDeleteTheBlueprint(String buttonTitle) throws Throwable { + ConfigBlueprintForSSTempUsingProAWSViews.clickOnDeleteBlueprint(buttonTitle); + } + + @Then("^I verify \"([^\"]*)\" is deleted$") + public void iVerifyIsDeleted(String blueprintName) throws Throwable { + ConfigBlueprintForSSTempUsingProAWSViews.verifyBlueprintDeleted(blueprintName); + } + + @And("^I click on \"([^\"]*)\" button of \"([^\"]*)\"$") + public void iClickOnButtonOf(String buttonTitle, String blueprintName) throws Throwable { + ConfigBlueprintForSSTempUsingProAWSViews.clickOnEditBlueprintButton(buttonTitle,blueprintName); + } + + @And("^I click on the Settings$") + public void iClickOnTheSettings() throws Throwable { + ConfigBlueprintForSSTempUsingProAWSViews.clickOnSettings(); + } + + @And("^I click on \"([^\"]*)\" on blueprint page$") + public void iClickOnOnBlueprintPage(String title) throws Throwable { + ConfigBlueprintForSSTempUsingProAWSViews.deleteBlueprint(title); + } + + @And("^I click on the \"([^\"]*)\" button on \"([^\"]*)\" popup window$") + public void iClickOnTheButtonOnPopupWindow(String arg0, String arg1) throws Throwable { + ConfigBlueprintForSSTempUsingProAWSViews.clickOnDeleteOnConfirmationPopup(); + } + +} diff --git a/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/steps/ConfigureNexusServerSteps.java b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/steps/ConfigureNexusServerSteps.java new file mode 100755 index 000000000..3430a4b91 --- /dev/null +++ b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/steps/ConfigureNexusServerSteps.java @@ -0,0 +1,33 @@ +package com.rl.qa.steps; + +import com.rl.qa.browsers.BrowserDriver; +import com.rl.qa.utils.SeleniumUtilities; +import com.rl.qa.views.ConfigureNexusServerViews; +import cucumber.api.java.en.And; +import cucumber.api.java.en.Then; +import org.openqa.selenium.support.PageFactory; + +import java.util.logging.Logger; + +/** + * Created by RLE0372 on 09-08-2016. + */ +public class ConfigureNexusServerSteps { + private static final Logger logger = Logger.getLogger(LoginSteps.class.getName()); + private static final com.rl.qa.utils.SeleniumUtilities SeleniumUtil = PageFactory.initElements(BrowserDriver.getCurrentDriver(), SeleniumUtilities.class); + + @Then("^I verify \"([^\"]*)\" in the nexus server management table$") + public void iVerifyInTheNexusServerManagementTable(String nexusServerName) throws Throwable { + ConfigureNexusServerViews.verifyNexusServerName(nexusServerName); + } + + @Then("^I verify \"([^\"]*)\" with \"([^\"]*)\" in the nexus server management table$") + public void iVerifyWithInTheNexusServerManagementTable(String nexusServerName, String nexusServerDetails) throws Throwable { + ConfigureNexusServerViews.verifyNexusServerInfo(nexusServerName,nexusServerDetails); + } + + @And("^I select \"([^\"]*)\" from the select box Nexus Configuration Management page$") + public void iSelectFromTheSelectBoxNexusConfigurationManagementPage(String orgName) throws Throwable { + ConfigureNexusServerViews.selectOrgInNexusConfigPage(orgName); + } +} diff --git a/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/steps/ConfigureProviderSteps.java b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/steps/ConfigureProviderSteps.java new file mode 100755 index 000000000..8b5f99b08 --- /dev/null +++ b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/steps/ConfigureProviderSteps.java @@ -0,0 +1,123 @@ +package com.rl.qa.steps; + +import com.rl.qa.browsers.BrowserDriver; +import com.rl.qa.utils.SeleniumUtilities; +import com.rl.qa.views.ConfigureProviderViews; +import cucumber.api.java.en.And; +import cucumber.api.java.en.Then; +import org.openqa.selenium.support.PageFactory; + +import java.util.logging.Logger; + +/** + * Created by RLE0372 on 02-08-2016. + */ +public class ConfigureProviderSteps { + + private static final Logger logger = Logger.getLogger(LoginSteps.class.getName()); + private static final com.rl.qa.utils.SeleniumUtilities SeleniumUtil = PageFactory.initElements(BrowserDriver.getCurrentDriver(), SeleniumUtilities.class); + + @And("^I select provider type \"([^\"]*)\"$") + public void iSelectProviderType(String providerType) throws Throwable { + ConfigureProviderViews.selectProviderType(providerType); + + } + + @And("^I click on \"([^\"]*)\" User Access Key$") + public void iClickOnUserAccessKey(String buttonID) throws Throwable { + ConfigureProviderViews.clickCredentialSelButton(buttonID); + } + + @And("^I select \"([^\"]*)\" from the drop down$") + public void iSelectFromTheDropDown(String orgName) throws Throwable { + ConfigureProviderViews.selectOrg(orgName); + } + + @And("^I select \"([^\"]*)\" from the region select box$") + public void iSelectFromTheRegionSelectBox(String region) throws Throwable { + ConfigureProviderViews.selectRegion(region); + } + + @And("^I select \"([^\"]*)\" from the key pair select box$") + public void iSelectFromTheKeyPairSelectBox(String keyPair) throws Throwable { + ConfigureProviderViews.selectKeyPair(keyPair); + } + + @And("^I browse pem file for provider$") + public void iBrowsePemFileForProvider() throws Throwable { + ConfigureProviderViews.browsePemFileForProvider(); + } + + @And("^I verify the created provider \"([^\"]*)\" in Providers list$") + public void iVerifyTheCreatedProviderInProvidersList(String providerName) throws Throwable { + ConfigureProviderViews.verifyProvidersName(providerName); + } + + @Then("^I verify the following message \"([^\"]*)\" on popup window$") + public void iVerifyTheFollowingMessageOnPopupWindow(String actMsg) throws Throwable { + ConfigureProviderViews.verifyMessage(actMsg); + } + + @And("^I browse \"([^\"]*)\" file for open stack provider$") + public void iBrowseFileForOpenStackProvider(String openStackpemFile) throws Throwable { + ConfigureProviderViews.browseOpenStackPemFile(openStackpemFile); + } + + @Then("^I verify \"([^\"]*)\" in the provider table$") + public void iVerifyInTheProviderTable(String providerName) throws Throwable { + ConfigureProviderViews.verifyProviderName(providerName); + } + + @And("^I verify select provider type is disabled$") + public void iVerifySelectProviderTypeIsDisabled() throws Throwable { + ConfigureProviderViews.verifySelProviderTypeisDisabled(); + } + + @And("^I verify \"([^\"]*)\" is disabled$") + public void iVerifyIsDisabled(String credentialsAccessKeys) throws Throwable { + ConfigureProviderViews.verifyCredentialsAccessKeyIsDisabled(credentialsAccessKeys); + } + + @And("^I verify select organization is disabled in edit provider page$") + public void iVerifySelectOrganizationIsDisabledInEditProviderPage() throws Throwable { + ConfigureProviderViews.verifySelectOrgIsDisabled(); + } + + @And("^I verify select region is disabled in edit provider page$") + public void iVerifySelectRegionIsDisabledInEditProviderPage() throws Throwable { + ConfigureProviderViews.verifySelectRegionIsDisabled(); + } + + @And("^I verify select key pair is disabled in edit provider page$") + public void iVerifySelectKeyPairIsDisabledInEditProviderPage() throws Throwable { + ConfigureProviderViews.verifySelKeyPairIsDisabled(); + } + + + @Then("^I verify \"([^\"]*)\" with \"([^\"]*)\" in the provider table$") + public void iVerifyWithInTheProviderTable(String providerName, String providerInfo) throws Throwable { + ConfigureProviderViews.verifyProviderInfo(providerName,providerInfo); + } + + + @And("^I select \"([^\"]*)\" from the dropdown$") + public void iSelectFromTheDropdown(String orgName) throws Throwable { + ConfigureProviderViews.OrgSelct(orgName); + } + + @And("^I select \"([^\"]*)\" from the select box in new provider page$") + public void iSelectFromTheSelectBoxInNewProviderPage(String orgName) throws Throwable { + ConfigureProviderViews.selectOrgInNewAWSPage(orgName); + } + + @And("^I browse pem file for azure provider$") + public void iBrowsePemFileForAzureProvider() throws Throwable { + ConfigureProviderViews.browseAzurePemFile(); + + } + + @And("^I browse private key file for azure provider$") + public void iBrowsePrivateKeyFileForAzureProvider() throws Throwable { + ConfigureProviderViews.browseAzurePrivateKeyFile(); + } +} diff --git a/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/steps/ConfigurePuppetServerSteps.java b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/steps/ConfigurePuppetServerSteps.java new file mode 100755 index 000000000..a333b97fd --- /dev/null +++ b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/steps/ConfigurePuppetServerSteps.java @@ -0,0 +1,44 @@ +package com.rl.qa.steps; + +import com.rl.qa.browsers.BrowserDriver; +import com.rl.qa.utils.SeleniumUtilities; +import com.rl.qa.views.ConfigurePuppetServerViews; +import cucumber.api.java.en.And; +import org.openqa.selenium.support.PageFactory; + +import java.util.logging.Logger; +/** + * Created by RLE0372 on 01-08-2016. + */ +public class ConfigurePuppetServerSteps { + private static final Logger logger = Logger.getLogger(LoginSteps.class.getName()); + private static final com.rl.qa.utils.SeleniumUtilities SeleniumUtil = PageFactory.initElements(BrowserDriver.getCurrentDriver(), SeleniumUtilities.class); + + + @And("^I click on puppet server link$") + public void iClickOnPuppetServerLink() throws Throwable { + ConfigurePuppetServerViews.clickOnPuppetServerLink(); + } + + + @And("^I enter the \"([^\"]*)\" in edit box$") + public void iEnterTheInEditBox(String puppetServerName) throws Throwable { + ConfigurePuppetServerViews.enterPuppetServerName(puppetServerName); + } + + + @And("^I Enter puppet server \"([^\"]*)\" in User Name edit box$") + public void iEnterPuppetServerInUserNameEditBox(String userName) throws Throwable { + ConfigurePuppetServerViews.enterUserName(userName); + } + + @And("^I enter \"([^\"]*)\" in edit box$") + public void iEnterInEditBox(String hostName) throws Throwable { + ConfigurePuppetServerViews.enterHostName(hostName); + } + + @And("^I enter \"([^\"]*)\" in password edit box$") + public void iEnterInPasswordEditBox(String password) throws Throwable { + ConfigurePuppetServerViews.enterPuppetPassword(password); + } +} diff --git a/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/steps/CreateEditDelBGroupSteps.java b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/steps/CreateEditDelBGroupSteps.java new file mode 100755 index 000000000..5dffc18c0 --- /dev/null +++ b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/steps/CreateEditDelBGroupSteps.java @@ -0,0 +1,95 @@ +package com.rl.qa.steps; + +import com.rl.qa.browsers.BrowserDriver; +import com.rl.qa.utils.SeleniumUtilities; +import com.rl.qa.views.CreateEditDelBGroupViews; +import cucumber.api.java.en.And; +import cucumber.api.java.en.Then; +import org.openqa.selenium.support.PageFactory; + +import java.util.logging.Logger; + +/** + * Created by RLE0372 on 20-07-2016. + */ +public class CreateEditDelBGroupSteps { + private static final Logger logger = Logger.getLogger(LoginSteps.class.getName()); + private static final com.rl.qa.utils.SeleniumUtilities SeleniumUtil = PageFactory.initElements(BrowserDriver.getCurrentDriver(), SeleniumUtilities.class); + @And("^I click on Business Groups Link$") + public void iClickOnBusinessGroupsLink() throws Throwable { + CreateEditDelBGroupViews.clickBGroupLink(); + } + + @And("^I click on New BGroup button$") + public void iClickOnNewBGroupButton() throws Throwable { + CreateEditDelBGroupViews.clickOnNewBGroup(); + + } + @And("^I enter the \"([^\"]*)\" name in Business Group name$") + public void iEnterTheNameInBusinessGroupName(String bGroupName) throws Throwable { + CreateEditDelBGroupViews.enterBGroupName(bGroupName); + } + +// @And("^I click on Organization select button$") +// public void iClickOnOrganizationSelectButton() throws Throwable { +// CreateEditDelBGroupViews.clickOnOrgSelectButton(); +// } + + @And("^I enter \"([^\"]*)\" in the search box$") + public void iEnterInTheSearchBox(String org_Name) throws Throwable { + CreateEditDelBGroupViews.enterOrgName(org_Name); + } + + + @And("^I click on \"([^\"]*)\" Edit button$") + public void iClickOnEditButton(String bGroup) throws Throwable { + CreateEditDelBGroupViews.clickOnEditBGroup(bGroup); + } + + @And("^I clear the product group name field$") + public void iClearTheProductGroupNameField() throws Throwable { + CreateEditDelBGroupViews.clearField(); + } + + @And("^I enter another \"([^\"]*)\" in edit box$") + public void iEnterAnotherBGrpInEditBox(String newBGrpName) throws Throwable { + CreateEditDelBGroupViews.enterNewBGrpName(newBGrpName); + } + + @And("^I click on \"([^\"]*)\" delete bGroup button$") + public void iClickOnDeleteBGroupButton(String editedBGrp) throws Throwable { + CreateEditDelBGroupViews.delEditedBGroup(editedBGrp); + } + + @And("^I click on Organizations link in the settings tree$") + public void iClickOnOrganizationsLinkInTheSettingsTree() throws Throwable { + CreateEditDelBGroupViews.clickOnOrgLinkInSettTree(); + } + + + @Then("^I verify the created \"([^\"]*)\" in Business group table$") + public void iVerifyTheCreatedInBusinessGroupTable(String businessGroup) throws Throwable { + CreateEditDelBGroupViews.verifyCreatedBGroup(businessGroup); + + } + + @Then("^I verify the edited \"([^\"]*)\" in Business group table$") + public void iVerifyTheEditedInBusinessGroupTable(String editedBGroup) throws Throwable { + CreateEditDelBGroupViews.verifyEditedBGroup(editedBGroup); + } + + @Then("^I verify the \"([^\"]*)\" is deleted from the Business Group table$") + public void iVerifyTheIsDeletedFromTheBusinessGroupTable(String bGroup) throws Throwable { + CreateEditDelBGroupViews.verifyDeletedBGroup(bGroup); + } + + @Then("^I verify \"([^\"]*)\" with assigned \"([^\"]*)\" in the Business group table$") + public void iVerifyWithAssignedInTheBusinessGroupTable(String bGroup, String org) throws Throwable { + CreateEditDelBGroupViews.verifyAssignedOrg(bGroup,org); + } + + @And("^I select \"([^\"]*)\" from the Drop Down$") + public void iSelectFromTheDropDown(String orgName) throws Throwable { + CreateEditDelBGroupViews.selectBusinessGroup(orgName); + } +} diff --git a/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/steps/CreateEditDelDesignerSteps.java b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/steps/CreateEditDelDesignerSteps.java new file mode 100755 index 000000000..fe103ab3a --- /dev/null +++ b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/steps/CreateEditDelDesignerSteps.java @@ -0,0 +1,156 @@ +package com.rl.qa.steps; + +import com.rl.qa.browsers.BrowserDriver; +import com.rl.qa.utils.SeleniumUtilities; +import com.rl.qa.views.CreateEditDelDesignerViews; +import cucumber.api.java.en.And; +import cucumber.api.java.en.Then; +import org.openqa.selenium.support.PageFactory; + +import java.util.logging.Logger; + +/** + * Created by rle0346 on 3/8/16. + */ +public class CreateEditDelDesignerSteps { + private static final Logger logger = Logger.getLogger(LoginSteps.class.getName()); + private static final com.rl.qa.utils.SeleniumUtilities SeleniumUtil = PageFactory.initElements(BrowserDriver.getCurrentDriver(), SeleniumUtilities.class); + + @And("^I Click on \"([^\"]*)\" Link$") + public void iClickOnLink(String StrDesignerlink) throws Throwable { + CreateEditDelDesignerViews.clickOnUsersSetupLink(StrDesignerlink); + } + + @And("^I Click on \"([^\"]*)\" Link in the link$") + public void iClickOnLinkInTheLink(String strUserLink) throws Throwable { + CreateEditDelDesignerViews.clickOnUsersLink(strUserLink); + + } + + @And("^I Click on New Button of Users page$") + public void iClickOnNewButtonOfUsersPage() throws Throwable { + CreateEditDelDesignerViews.clickOnNewButton(); + } + + @And("^I Enter the \"([^\"]*)\" User Login Name$") + public void iEnterTheUserLoginName(String strDesignerName) throws Throwable { + CreateEditDelDesignerViews.enterLoginName(strDesignerName); + } + + @And("^I Enter the \"([^\"]*)\" of the User$") + public void iEnterTheOfTheUser(String strEmailAddress) throws Throwable { + CreateEditDelDesignerViews.enterEmailAddress(strEmailAddress); + + } + + + @And("^I Enter the \"([^\"]*)\" of the User field$") + public void iEnterTheOfTheUserField(String strPassword) throws Throwable { + CreateEditDelDesignerViews.enterPassword(strPassword); + } + + + @And("^I Enter the \"([^\"]*)\" of User field$") + public void iEnterTheOfUserField(String strConfPassword) throws Throwable { + CreateEditDelDesignerViews.enterConfirmPassword(strConfPassword); + } + + @And("^I Click on Org Dropdown and select \"([^\"]*)\"$") + public void iClickOnOrgDropdownAndSelect(String strOrganization) throws Throwable { + CreateEditDelDesignerViews.selectOrganization(strOrganization); + + } + + @And("^I Select the Role as \"([^\"]*)\"$") + public void iSelectTheRoleAs(String strRole) throws Throwable { + CreateEditDelDesignerViews.selectRole(strRole); + + } + + @And("^I Assign the Teams for the User with respect to \"([^\"]*)\"$") + public void iAssignTheTeamsForTheUserWithRespectTo(String strOrganization) throws Throwable { + CreateEditDelDesignerViews.selectTeam(strOrganization); + + } + + + @And("^I Click on Save Button of User creation page$") + public void iClickOnSaveButtonOfUserCreationPage() throws Throwable { + CreateEditDelDesignerViews.clickSaveButton(); + } + + + @And("^I Click on Edit Button the \"([^\"]*)\" user created$") + public void iClickOnEditButtonTheUserCreated(String strDesigner) throws Throwable { + CreateEditDelDesignerViews.clickEditDesignerButton(strDesigner); + + } + + + @Then("^I Verify the \"([^\"]*)\" User is created$") + public void iVerifyTheUserIsCreated(String strDesigner) throws Throwable { + CreateEditDelDesignerViews.verifyDesignerUserCreation(strDesigner); + + } + + @And("^I Verify the Login name is disabled$") + public void iVerifyTheLoginNameIsDisabled() throws Throwable { + CreateEditDelDesignerViews.VerifyLoginNameDisabled(); + + } + + @And("^I Click on Update Password tick$") + public void iClickOnUpdatePasswordTick() throws Throwable { + CreateEditDelDesignerViews.clickOnUpdatePasswordCheckbox(); + } + + + @And("^I Click on Delete button of the \"([^\"]*)\" user created$") + public void iClickOnDeleteButtonOfTheUserCreated(String strDesigner) throws Throwable { + CreateEditDelDesignerViews.clickOnDeleteButton(strDesigner); + + } + + @And("^I Click on \"([^\"]*)\" Button to remove the Designer user$") + public void iClickOnButtonToRemoveTheDesignerUser(String strOK) throws Throwable { + CreateEditDelDesignerViews.clickOnOkButton(strOK); + } + + @And("^I Verify the \"([^\"]*)\" is updated$") + public void iVerifyTheIsUpdated(String strEmailAddress) throws Throwable { + CreateEditDelDesignerViews.verfiyEmailAddressUpdated(strEmailAddress); + } + + @And("^I Assign the Teams for the SuperAdmin User with respect to \"([^\"]*)\"$") + public void iAssignTheTeamsForTheSuperAdminUserWithRespectTo(String strDefaultTeam) throws Throwable { + CreateEditDelDesignerViews.selectDefaultTeam(strDefaultTeam); + + } + + @Then("^I Verify the \"([^\"]*)\" User with this \"([^\"]*)\" is created$") + public void iVerifyTheUserWithThisIsCreated(String strDesigner, String strEmailAddress) throws Throwable { + CreateEditDelDesignerViews.VerifyEmailAddress(strDesigner, strEmailAddress); + + } + + @Then("^I Verify the \"([^\"]*)\" User with this \"([^\"]*)\" created$") + public void iVerifyTheUserWithThisCreated(String strDesigner, String strDesignerRole) throws Throwable { + CreateEditDelDesignerViews.VerifyDesignerRoleInTable(strDesigner, strDesignerRole); + } + + + @Then("^I Verify the \"([^\"]*)\" User with this \"([^\"]*)\" is available$") + public void iVerifyTheUserWithThisIsAvailable(String strDesigner, String strOrganization) throws Throwable { + CreateEditDelDesignerViews.VerifyOrganizationInTable(strDesigner, strOrganization); + } + + @Then("^I select the \"([^\"]*)\" and verify \"([^\"]*)\" Button is enabled$") + public void iSelectTheAndVerifyButtonIsEnabled(String strOrganization, String strEdit) throws Throwable { + CreateEditDelDesignerViews.verifyButtonIsEnabled(strOrganization, strEdit); + } + + @Then("^I Verify the \"([^\"]*)\" user is deleted$") + public void iVerifyTheUserIsDeleted(String strDesigner) throws Throwable { + CreateEditDelDesignerViews.verifyDeletedUser(strDesigner); + } +} diff --git a/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/steps/CreateEditDelDockerSteps.java b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/steps/CreateEditDelDockerSteps.java new file mode 100755 index 000000000..38f59c3c8 --- /dev/null +++ b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/steps/CreateEditDelDockerSteps.java @@ -0,0 +1,104 @@ +package com.rl.qa.steps; + +import com.rl.qa.browsers.BrowserDriver; +import com.rl.qa.utils.BaseView; +import com.rl.qa.utils.SeleniumUtilities; +import com.rl.qa.views.CreateEditDelDockerViews; +import cucumber.api.PendingException; +import cucumber.api.java.en.And; +import cucumber.api.java.en.Then; +import org.openqa.selenium.support.PageFactory; + +import java.util.logging.Logger; + +import static junit.framework.TestCase.assertTrue; +import static junit.framework.TestCase.fail; + +/** + * Created by RLE0372 on 01-08-2016. + */ +public class CreateEditDelDockerSteps { + private static final Logger logger = Logger.getLogger(LoginSteps.class.getName()); + private static final com.rl.qa.utils.SeleniumUtilities SeleniumUtil = PageFactory.initElements(BrowserDriver.getCurrentDriver(), SeleniumUtilities.class); + + + @And("^^I click on \"([^\"]*)\" link$") + public void iClickOnLink(String linkText) throws Throwable { + CreateEditDelDockerViews.clickOnDevopsSetup(linkText); + } + + @And("^I enter \"([^\"]*)\" in user id edit box$") + public void iEnterInUserIdEditBox(String userId) throws Throwable { + CreateEditDelDockerViews.enterUserID(userId); + } + + @And("^I Enter \"([^\"]*)\" in docker \"([^\"]*)\"$") + public void iEnterInDocker(String dockerName, String dockerreponame) throws Throwable { + CreateEditDelDockerViews.enterDockerHubRegistry(dockerName,dockerreponame); + } + + @And("^I enter \"([^\"]*)\" in docker hub registry edit box$") + public void iEnterInDockerHubRegistryEditBox(String DocerHubRegName) throws Throwable { + CreateEditDelDockerViews.enterDockerHubRegistryName(DocerHubRegName); + } + + @And("^I verify \"([^\"]*)\" page is displayed$") + public void iVerifyPageIsDisplayed(String editDocker) throws Throwable { + try { +// SeleniumUtil.waitForElementIsClickable("xpath","",8,SeleniumUtilities.OBJWAITTIMEOUT); + assertTrue(SeleniumUtil.waitUntilElementContainsText("xpath","//*[contains(text(),'Edit Docker')]","Edit Docker",8,SeleniumUtilities.OBJWAITTIMEOUT)); { + logger.info("Verified : " + editDocker); + } + } catch (Exception e) { + try { + SeleniumUtil.getWebElementObject("xpath", "//a[text()='Nodes']"); + } catch (Exception ex) { + BaseView.takeScreenshot(editDocker + ".png"); + logger.info("Error :" + e.getMessage()); + fail(e.getMessage()); + } + } + + } + + @Then("^I verify \"([^\"]*)\" in the docker table$") + public void iVerifyInTheDockerTable(String dockerName) throws Throwable { + CreateEditDelDockerViews.verifyDocker(dockerName); + } + + @And("^I verify select organization is disabled in edit docker page$") + public void iVerifySelectOrganizationIsDisabledInEditDockerPage() throws Throwable { + CreateEditDelDockerViews.verifySelOrgIsDisabled(); + } + + @Then("^I verify \"([^\"]*)\" with \"([^\"]*)\" in the docker table$") + public void iVerifyWithInTheDockerTable(String dockerName, String dockerDetails) throws Throwable { + CreateEditDelDockerViews.verifyDockerInfo(dockerName,dockerDetails); + } + + @And("^I click on \"([^\"]*)\" link available$") + public void iClickOnLinkAvailable(String strChefServer) throws Throwable { + CreateEditDelDockerViews.clickonChefServer(strChefServer); + + } + + @And("^I click on \"([^\"]*)\" linktext$") + public void iClickOnLinktext(String strLinkName) throws Throwable { + CreateEditDelDockerViews.clickGallerySetuplink(strLinkName); + + + } + + @And("^I click on \"([^\"]*)\" linked$") + public void iClickOnLinked(String strTemplateLink) throws Throwable { + CreateEditDelDockerViews.clickTemplateLink(strTemplateLink); + + } + + + @And("^I add the cookbooks to runlist with \"([^\"]*)\"$") + public void iAddTheCookbooksToRunlistWith(String strCookbookValue) throws Throwable { + CreateEditDelDockerViews.addCookbooksRunlist(strCookbookValue); + + } +} diff --git a/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/steps/CreateEditDelEnvSteps.java b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/steps/CreateEditDelEnvSteps.java new file mode 100755 index 000000000..54fcd68d6 --- /dev/null +++ b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/steps/CreateEditDelEnvSteps.java @@ -0,0 +1,136 @@ +package com.rl.qa.steps; + +import com.rl.qa.browsers.BrowserDriver; +import com.rl.qa.utils.SeleniumUtilities; +import com.rl.qa.views.CreateEditDelEnvViews; +import cucumber.api.java.en.And; +import cucumber.api.java.en.Then; +import org.openqa.selenium.support.PageFactory; + +import java.util.logging.Logger; + +/** + * Created by RLE0372 on 26-07-2016. + */ +public class CreateEditDelEnvSteps { + + private static final Logger logger = Logger.getLogger(com.rl.qa.steps.LoginSteps.class.getName()); + private static final com.rl.qa.utils.SeleniumUtilities SeleniumUtil = PageFactory.initElements(BrowserDriver.getCurrentDriver(), SeleniumUtilities.class); + + @And("^I click on Environments link$") + public void iClickOnEnvironmentsLink() throws Throwable { + CreateEditDelEnvViews.clickOnEnvironmentsLink(); + } + + @And("^I click on \"([^\"]*)\" select Button and select one existing environment$") + public void iClickOnSelectButtonAndSelectOneExistingEnvironment(String serverName) throws Throwable { + CreateEditDelEnvViews.clickOnChefServerSelButton(serverName); + } + + @And("^I enter the \"([^\"]*)\" name in edit box$") + public void iEnterTheNameInEditBox(String chefEnvName) throws Throwable { + CreateEditDelEnvViews.enterChefEnvName(chefEnvName); + } + + @And("^I click on add chef environment button on create environment page$") + public void iClickOnAddChefEnvironmentButtonOnCreateEnvironmentPage() throws Throwable { + CreateEditDelEnvViews.clickOnAddChefEnvButtonOnEnvPage(); + + } + + @And("^I check \"([^\"]*)\" is disabled$") + public void iCheckIsDisabled(String idOfElement) throws Throwable { + CreateEditDelEnvViews.checkElementIsDisabled(idOfElement); + + } + + @And("^I enter chef environment in \"([^\"]*)\" Edit box$") + public void iEnterChefEnvironmentInEditBox(String idOfEditBox) throws Throwable { + CreateEditDelEnvViews.enterRandomEnvName(idOfEditBox); + } + + + @Then("^I verify created \"([^\"]*)\" in environments table$") + public void iVerifyCreatedEnvInEnvironmentsTable(String environmentName) throws Throwable { + CreateEditDelEnvViews.verifySelectedEnvNameFromChef(environmentName); + } + + + @Then("^I select the \"([^\"]*)\" and verify \"([^\"]*)\" Button is enabled in environments table$") + public void iSelectTheEnvAndVerifyButtonIsEnabledInEnvironmentsTable(String arg0, String Edit) throws Throwable { + CreateEditDelEnvViews.verifyEditIsEnabled(" ",Edit); + } + + @And("^I verify select chef server is disabled$") + public void iVerifySelectChefServerIsDisabled() throws Throwable { + CreateEditDelEnvViews.verifySelectChefServerisDisabled(); + } + + @Then("^I verify the created environment is deleted$") + public void iVerifyTheCreatedEnvironmentIsDeleted() throws Throwable { + CreateEditDelEnvViews.verifyEnvIsDeleted(); + } + + + @And("^I select existing chef \"([^\"]*)\" from chef server$") + public void iSelectExistingChefFromChefServer(String envName) throws Throwable { + CreateEditDelEnvViews.selectExistingEnv(envName); + + } + + @Then("^I verify \"([^\"]*)\" with assigned \"([^\"]*)\" in the environments table$") + public void iVerifyEnvWithAssignedOrgInTheEnvironmentsTable(String arg0, String org) throws Throwable { + CreateEditDelEnvViews.verifyAssignedOrgName(arg0,org); + } + + @And("^I verify created \"([^\"]*)\" in workzone$") + public void iVerifyCreatedInWorkzone(String arg0) throws Throwable { + CreateEditDelEnvViews.verifyEnvInWorkZone(); + } + + @And("^I click on the environment$") + public void iClickOnTheEnvironment() throws Throwable { + CreateEditDelEnvViews.clickOnEnv(); + } + + @And("^I select the \"([^\"]*)\" to be assigned with Env$") + public void iSelectTheToBeAssignedWithEnv(String projectname) throws Throwable { + CreateEditDelEnvViews.assigntheProject(projectname); + } + + @And("^I verify created \"([^\"]*)\" in workzone and click on it$") + public void iVerifyCreatedInWorkzoneAndClickOnIt(String arg0) throws Throwable { + CreateEditDelEnvViews.verifyAndSelectCreatedEnv(); + } + + @Then("^I verify \"([^\"]*)\" with \"([^\"]*)\" in the environments table$") + public void iVerifyWithInTheEnvironmentsTable(String environmentName, String org) throws Throwable { + CreateEditDelEnvViews.verifyAssignedDetailsOfEnv(environmentName,org); + } + + @Then("^I verify newly created \"([^\"]*)\" in environments table$") + public void iVerifyNewlyCreatedInEnvironmentsTable(String arg0) throws Throwable { + CreateEditDelEnvViews.verifyEnvName(); + } + + @Then("^I Verify \"([^\"]*)\" page is displayed$") + public void iVerifyPageIsDisplayed(String pageName) throws Throwable { + CreateEditDelEnvViews.verifyEditPageIsDisplayed(pageName); + } + + @And("^I click on \"([^\"]*)\" button on the \"([^\"]*)\" popup$") + public void iClickOnButtonOnThePopup(String arg0, String arg1) throws Throwable { + CreateEditDelEnvViews.clickOnAddButton(); + } + + @And("^I select environment from drop down$") + public void iSelectEnvironmentFromDropDown() throws Throwable { + CreateEditDelEnvViews.selectNewlyAddedEnv(); + } + + @Then("^I verify the created \"([^\"]*)\" is deleted$") + public void iVerifyTheCreatedIsDeleted(String envName) throws Throwable { + CreateEditDelEnvViews.verifyEnvironmentIsDeleted(envName); + + } +} diff --git a/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/steps/CreateEditDelJenkinsSteps.java b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/steps/CreateEditDelJenkinsSteps.java new file mode 100755 index 000000000..c83b986b5 --- /dev/null +++ b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/steps/CreateEditDelJenkinsSteps.java @@ -0,0 +1,36 @@ +package com.rl.qa.steps; + +import com.rl.qa.browsers.BrowserDriver; +import com.rl.qa.utils.SeleniumUtilities; +import com.rl.qa.views.CreateEditDelJenkinsViews; +import cucumber.api.java.en.And; +import cucumber.api.java.en.Then; +import org.openqa.selenium.support.PageFactory; + +import java.util.logging.Logger; + +/** + * Created by RLE0372 on 01-08-2016. + */ +public class CreateEditDelJenkinsSteps { + private static final Logger logger = Logger.getLogger(LoginSteps.class.getName()); + private static final com.rl.qa.utils.SeleniumUtilities SeleniumUtil = PageFactory.initElements(BrowserDriver.getCurrentDriver(), SeleniumUtilities.class); + + + @And("^I enter \"([^\"]*)\" in \"([^\"]*)\" Edit box$") + public void iEnterOrganizationNameInEditBox(String nameOfJenkins, String idOfEditBox) throws Throwable { + CreateEditDelJenkinsViews.enterJenkinsName(nameOfJenkins,idOfEditBox); + + } + + @Then("^I verify \"([^\"]*)\" in the jenkins table$") + public void iVerifyInTheJenkinsTable(String jenkinsPara) throws Throwable { + CreateEditDelJenkinsViews.verifyJenkins(jenkinsPara); + } + + + @Then("^I verify \"([^\"]*)\" with \"([^\"]*)\" in the jenkins table$") + public void iVerifyWithInTheJenkinsTable(String jenkinsRefName, String jenkinsPara) throws Throwable { + CreateEditDelJenkinsViews.verifyJenkinsDetails(jenkinsRefName,jenkinsPara); + } +} diff --git a/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/steps/CreateEditDelOrgSteps.java b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/steps/CreateEditDelOrgSteps.java new file mode 100755 index 000000000..e06f8ec04 --- /dev/null +++ b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/steps/CreateEditDelOrgSteps.java @@ -0,0 +1,137 @@ +package com.rl.qa.steps; + +import com.rl.qa.browsers.BrowserDriver; +import com.rl.qa.utils.SeleniumUtilities; +import com.rl.qa.views.CreateEditDelJenkinsViews; +import com.rl.qa.views.CreateEditDelOrgViews; +import cucumber.api.java.en.And; +import cucumber.api.java.en.Then; +import org.openqa.selenium.support.PageFactory; + +import java.util.logging.Logger; + +/** + * Created by RLE0372 on 18-07-2016. + */ +public class CreateEditDelOrgSteps { + private static final Logger logger = Logger.getLogger(LoginSteps.class.getName()); + private static final com.rl.qa.utils.SeleniumUtilities SeleniumUtil = PageFactory.initElements(BrowserDriver.getCurrentDriver(), SeleniumUtilities.class); + + @And("^I click on the Settings Link$") + public void iClickOnTheSettingsLink() throws Throwable { + CreateEditDelOrgViews.clickOnSettings(); + } + @And("^I click on Organizations link in main page$") + public void iClickOnOrganizationsLinkInMainPage() throws Throwable { + CreateEditDelOrgViews.clickOnOrganizations(); + } + + @And("^I click on \"([^\"]*)\" button$") + public void iClickOnButton(String newButtonId) throws Throwable { + CreateEditDelOrgViews.clickOnNewButton(newButtonId); + } + + @And("^I click on save button$") + public void iClickOnSaveButton() throws Throwable { + CreateEditDelOrgViews.saveOrg(); + } + + @And("^I clear the existing \"([^\"]*)\" in the edit box$") + public void iClearTheExistingInTheEditBox(String idOfEditbox) throws Throwable { + CreateEditDelOrgViews.clearTheField(idOfEditbox); + } + + @And("^I click on \"([^\"]*)\" delete button$") + public void iClickOnDeleteButton(String New_Organization) throws Throwable { + + CreateEditDelOrgViews.delOrg(New_Organization); + } + + @And("^I click on OK button$") + public void iClickOnOKButton() throws Throwable { + CreateEditDelOrgViews.clickOnOK(); + } + + + @And("^I click on the Settings Link when control is on organization page$") + public void iClickOnTheSettingsLinkWhenControlIsOnOrganizationPage() throws Throwable { + CreateEditDelOrgViews.clickOnSettingsFromOrgPage(); + } + + @Then("^I verify the created \"([^\"]*)\" in organization table$") + public void iVerifyTheCreatedOrgInOrganizationTable(String organizationName) throws Throwable { + CreateEditDelOrgViews.verifyCreatedOrg(organizationName); + } + + @And("^I see the catalyst \"([^\"]*)\"$") + public void iSeeTheCatalyst(String idOfElement) throws Throwable { + CreateEditDelOrgViews.seeWorkzone(idOfElement); + } + + @And("^I verify the edited \"([^\"]*)\" in list$") + public void iVerifyTheEditedInList(String editedOrg) throws Throwable { + CreateEditDelOrgViews.verifyEditedOrg(editedOrg); + } + + @Then("^I verify login page is displayed$") + public void iVerifyLoginPageIsDisplayed() throws Throwable { + CreateEditDelOrgViews.verifyLoginPage(); + } + + @Then("^I verify the \"([^\"]*)\" is deleted$") + public void iVerifyTheOrgIsDeleted(String orgName) throws Throwable { + CreateEditDelOrgViews.verifyDeletedOrg(orgName); + } + + @Then("^I verify \"([^\"]*)\" with \"([^\"]*)\" in the organization table$") + public void iVerifyWithInTheOrganizationTable(String domainName, String orgName) throws Throwable { + CreateEditDelOrgViews.verifyDomainName(domainName,orgName); + } + + @Then("^I verify \"([^\"]*)\" status with \"([^\"]*)\" in the organization table$") + public void iVerifyStatusWithInTheOrganizationTable(String status, String orgName) throws Throwable { + CreateEditDelOrgViews.verifyStatusOfOrg(status,orgName); + } + + @And("^I click on Current Status Button$") + public void iClickOnCurrentStatusButton() throws Throwable { + CreateEditDelOrgViews.clickOnStatusButton(); + } + + @And("^I select \"([^\"]*)\" in the show drop down$") + public void iSelectInTheShowDropDown(String expectedValFromDropdown) throws Throwable { + CreateEditDelOrgViews.selectAllInShowDropDown(expectedValFromDropdown); + } + + @And("^I click on OK button on Alert popup$") + public void iClickOnOKButtonOnAlertPopup() throws Throwable { + CreateEditDelOrgViews.clickOnOkOnAlertPopUp(); + } + + @And("^I enter the another \"([^\"]*)\" name$") + public void iEnterTheAnotherName(String New_Organization) throws Throwable { + CreateEditDelOrgViews.enterNewOrgName(New_Organization); + } + + @And("^I enter another \"([^\"]*)\" in \"([^\"]*)\" Edit box$") + public void iEnterAnotherInEditBox(String name, String idOfEditBox) throws Throwable { + CreateEditDelJenkinsViews.enterJenkinsName(name,idOfEditBox); + + } + + @And("^I close the toast popup$") + public void iCloseTheToastPopup() throws Throwable { + CreateEditDelOrgViews.clickOnCloseToast(); + } + + @And("^I move the cursor on \"([^\"]*)\"$") + public void iMoveTheCursorOn(String arg0) throws Throwable { + CreateEditDelOrgViews.moveCursorOnMenu(); + } + + @And("^I Check where application is landing and take the step$") + public void iCheckWhereApplicationIsLandingAndTakeTheStep() throws Throwable { + CreateEditDelOrgViews.checkAndDecide(); + + } +} diff --git a/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/steps/CreateEditDelProjectSteps.java b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/steps/CreateEditDelProjectSteps.java new file mode 100755 index 000000000..ded434bb6 --- /dev/null +++ b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/steps/CreateEditDelProjectSteps.java @@ -0,0 +1,70 @@ +package com.rl.qa.steps; + +import com.rl.qa.browsers.BrowserDriver; +import com.rl.qa.utils.SeleniumUtilities; +import com.rl.qa.views.CreateEditDelProjectViews; +import cucumber.api.java.en.And; +import cucumber.api.java.en.Then; +import org.openqa.selenium.support.PageFactory; + +import java.util.logging.Logger; + +/** + * Created by RLE0372 on 20-07-2016. + */ +public class CreateEditDelProjectSteps { + private static final Logger logger = Logger.getLogger(LoginSteps.class.getName()); + private static final com.rl.qa.utils.SeleniumUtilities SeleniumUtil = PageFactory.initElements(BrowserDriver.getCurrentDriver(), SeleniumUtilities.class); + + @And("^I click on Projects link$") + public void iClickOnProjectsLink() throws Throwable { + CreateEditDelProjectViews.clickOnProLink(); + } + + @And("^I click on new Projects button$") + public void iClickOnNewProjectsButton() throws Throwable { + CreateEditDelProjectViews.clickOnNewProButton(); + } + + + @And("^I click on \"([^\"]*)\"$") + public void iClickOn(String proOrg) throws Throwable { + CreateEditDelProjectViews.clickOnOrg(proOrg); + } + + @And("^I clear the project name field$") + public void iClearTheProjectNameField() throws Throwable { + CreateEditDelProjectViews.clearProNameField(); + } + + + @And("^I enter \"([^\"]*)\" name$") + public void iEnterName(String newProName) throws Throwable { + CreateEditDelProjectViews.typeNewProj(newProName); + } + + @And("^I click on \"([^\"]*)\" delete project button$") + public void iClickOnDeleteProjectButton(String proName) throws Throwable { + CreateEditDelProjectViews.delProject(proName); + } + + @Then("^I verify the created \"([^\"]*)\" in project table$") + public void iVerifyTheCreatedProInProjectTable(String proName) throws Throwable { + CreateEditDelProjectViews.verifyCreatedProject(proName); + } + + @Then("^I verify the \"([^\"]*)\" is deleted from project table$") + public void iVerifyTheIsDeletedFromProjectTable(String proName) throws Throwable { + CreateEditDelProjectViews.verifyDeletedPro(proName); + } + + @And("^I check the environment$") + public void iCheckTheEnvironment() throws Throwable { + CreateEditDelProjectViews.clickOnEnv(); + } + + @Then("^I verify the \"([^\"]*)\" with assigned \"([^\"]*)\" in project table$") + public void iVerifyTheWithAssignedInProjectTable(String projectName, String projectDetails) throws Throwable { + CreateEditDelProjectViews.verifyProjectInfo(projectName,projectDetails); + } +} diff --git a/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/steps/CreateEditDeleteTeamSteps.java b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/steps/CreateEditDeleteTeamSteps.java new file mode 100755 index 000000000..64ec9d535 --- /dev/null +++ b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/steps/CreateEditDeleteTeamSteps.java @@ -0,0 +1,43 @@ +package com.rl.qa.steps; + +import com.rl.qa.browsers.BrowserDriver; +import com.rl.qa.utils.SeleniumUtilities; +import com.rl.qa.views.CreateEditDeleteTeamViews; +import cucumber.api.java.en.And; +import cucumber.api.java.en.Then; +import org.openqa.selenium.support.PageFactory; + +import java.util.logging.Logger; + +/** + * Created by RLE0372 on 16-08-2016. + */ +public class CreateEditDeleteTeamSteps { + private static final Logger logger = Logger.getLogger(com.rl.qa.steps.LoginSteps.class.getName()); + private static final com.rl.qa.utils.SeleniumUtilities SeleniumUtil = PageFactory.initElements(BrowserDriver.getCurrentDriver(), SeleniumUtilities.class); + + @Then("^I verify created \"([^\"]*)\" in the teams table$") + public void iVerifyCreatedInTheTeamsTable(String teamName) throws Throwable { + CreateEditDeleteTeamViews.verifyTeamName(teamName); + } + + @Then("^I verify created \"([^\"]*)\" with \"([^\"]*)\" in the teams table$") + public void iVerifyCreatedWithInTheTeamsTable(String teamName, String TeamDetails)throws Throwable { + CreateEditDeleteTeamViews.verifyTeamDetails(teamName,TeamDetails); + } + + @And("^I check the \"([^\"]*)\" check box$") + public void iCheckTheCheckBox(String value) throws Throwable { + CreateEditDeleteTeamViews.checkTheCheckBox(value); + } + + @And("^I find the \"([^\"]*)\" by navigating to different page in and click on corresponding \"([^\"]*)\" Button$") + public void iFindTheByNavigatingToDifferentPageInAndClickOnCorrespondingButton(String teamName, String edit) throws Throwable { + CreateEditDeleteTeamViews.searchAndEditTheTeam(teamName,edit); + } + + @Then("^I verify the \"([^\"]*)\" is deleted by navigating to different pages$") + public void iVerifyTheIsDeletedByNavigatingToDifferentPages(String teamName) throws Throwable { + CreateEditDeleteTeamViews.verifyTeamIsDeleted(teamName); + } +} diff --git a/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/steps/ImportNodeFromChefSteps.java b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/steps/ImportNodeFromChefSteps.java new file mode 100755 index 000000000..c62c63e10 --- /dev/null +++ b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/steps/ImportNodeFromChefSteps.java @@ -0,0 +1,154 @@ +package com.rl.qa.steps; + +import com.rl.qa.browsers.BrowserDriver; +import com.rl.qa.utils.SeleniumUtilities; +import com.rl.qa.views.ImportNodesFromChefViews; +import cucumber.api.java.en.And; +import cucumber.api.java.en.Then; +import org.openqa.selenium.support.PageFactory; + +import java.util.logging.Logger; + +/** + * Created by RLE0372 on 10-08-2016. + */ +public class ImportNodeFromChefSteps { + private static final Logger logger = Logger.getLogger(LoginSteps.class.getName()); + private static final com.rl.qa.utils.SeleniumUtilities SeleniumUtil = PageFactory.initElements(BrowserDriver.getCurrentDriver(), SeleniumUtilities.class); + + + @And("^I click on AWS provider$") + public void iClickOnAWSProvider() throws Throwable { + ImportNodesFromChefViews.clickOnAWSProvider(); + } + + @And("^I select type of blueprint \"([^\"]*)\"$") + public void iSelectTypeOfBlueprint(String blueprintType) throws Throwable { + ImportNodesFromChefViews.selectBlueprintType(blueprintType); + } + + @And("^I click on next button$") + public void iClickOnNextButton() throws Throwable { + ImportNodesFromChefViews.clickOnNext(); + } + + @And("^I select \"([^\"]*)\" in \"([^\"]*)\" select box$") + public void iSelectInSelectBox(String valueToSelect, String idOfSelectBox) throws Throwable { + ImportNodesFromChefViews.selectValues(valueToSelect,idOfSelectBox); + } + + @And("^I select \"([^\"]*)\" in select box$") + public void iSelectInSelectBox(String region) throws Throwable { + ImportNodesFromChefViews.selectRegion(region); + } + + @And("^I select security group$") + public void iSelectSecurityGroup() throws Throwable { + ImportNodesFromChefViews.selectSecurityGrp(); + } + + @And("^I click on the \"([^\"]*)\"$") + public void iClickOnThe(String tempName) throws Throwable { + ImportNodesFromChefViews.selectTemplate(tempName); + } + + @And("^I verify the \"([^\"]*)\" in the workzone$") + public void iVerifyTheInTheWorkzone(String envDetails) throws Throwable { + ImportNodesFromChefViews.verifyEnvDetails(envDetails); + } + + @And("^I click on launch blueprint$") + public void iClickOnLaunchBlueprint() throws Throwable { + ImportNodesFromChefViews.clickOnLaunchBlueprint(); + } + + @And("^I click on Workzone$") + public void iClickOnWorkzone() throws Throwable { + ImportNodesFromChefViews.clickOnWorkzone(); + } + + @And("^I click on launch blueprint on the pop-up menu$") + public void iClickOnLaunchBlueprintOnThePopUpMenu() throws Throwable { + ImportNodesFromChefViews.clickOnLaunchBlueprintPopUp(); + } + + @And("^I click on launch on select blueprint parameter pop-up menu$") + public void iClickOnLaunhOnSelectBlueprintParameterPopUpMenu() throws Throwable { + ImportNodesFromChefViews.clickOnLaunchOnSelBlueprintPopUp(); + } + + @And("^I capture the AWS ID of \"([^\"]*)\"$") + public void iCaptureTheAWSIDOf(String bluePrintName) throws Throwable { + ImportNodesFromChefViews.captureAwsId(bluePrintName); + } + + @And("^I capture the IP Address of \"([^\"]*)\"$") + public void iCaptureTheIPAddressOf(String bluePrintName) throws Throwable { + ImportNodesFromChefViews.captureIpAddress(bluePrintName); + } + + @And("^I click on Import Nodes button$") + public void iClickOnImportNodesButton() throws Throwable { + ImportNodesFromChefViews.clickOnImportNodesButton(); + } + + @And("^I enter \"([^\"]*)\" in \"([^\"]*)\" Edit box in Import Nodes popup window$") + public void iEnterInEditBoxInImportNodesPopupWindow(String userName, String idOfEditBox) throws Throwable { + ImportNodesFromChefViews.enterUserNameInPopup(userName,idOfEditBox); + } + @And("^I enter \"([^\"]*)\" in the search box and check the corresponding AWS ID checkbox$") + public void iEnterInTheSearchBoxAndCheckTheCorrespondingAWSIDCheckbox(String arg0) throws Throwable { + ImportNodesFromChefViews.checkTheCheckBoxOfCorrespondingAWSID(); + } + + @And("^I select \"([^\"]*)\" in \"([^\"]*)\" drop down in Import Nodes popup window$") + public void iSelectInDropDownInImportNodesPopupWindow(String BusinessGroup, String idOfDropDown) throws Throwable { + ImportNodesFromChefViews.selectBGroupInImportPopUp(BusinessGroup,idOfDropDown); + } + + @And("^I browse pem file in Import Nodes popup window$") + public void iBrowsePemFileInImportNodesPopupWindow() throws Throwable { + ImportNodesFromChefViews.importPemFileInPopupWindow(); + } + + @And("^I click on Import button on the popup window$") + public void iClickOnImportButtonOnThePopupWindow() throws Throwable { + ImportNodesFromChefViews.clickOnImportButton(); + } + + @And("^i verify Importing Nodes popup window is displayed$") + public void iVerifyImportingNodesPopupWindowIsDisplayed() throws Throwable { + ImportNodesFromChefViews.verifyImportingNodesPopUp(); + } + + @And("^I click on close button on popup window$") + public void iClickOnCloseButtonOnPopupWindow() throws Throwable { + ImportNodesFromChefViews.clickOnCloseButtonOnPopup(); + } + + @And("^I verify Node Imported with AWS ID$") + public void iVerifyNodeImportedWithAWSID() throws Throwable { + ImportNodesFromChefViews.verifyNodeImportedMessage(); + } + + @And("^I select the \"([^\"]*)\" from the drop down$") + public void iSelectTheFromTheDropDown(String envName) throws Throwable { + ImportNodesFromChefViews.selectEnv(envName); + + } + + @And("^I delete the launched instance from Instances$") + public void iDeleteTheLaunchedInstanceFromInstances() throws Throwable { + ImportNodesFromChefViews.deleteInstance(); + } + + @Then("^I verify \"([^\"]*)\" message on popup$") + public void iVerifyMessageOnPopup(String confirmationMsg) throws Throwable { + ImportNodesFromChefViews.verifyConfirmationMsg(confirmationMsg); + } + +// @And("^I browse pem file in Import Nodes popup window$") +// public void iBrowsePemFileInImportNodesPopupWindow() throws Throwable { +// ImportNodesFromChefViews.browsePemFile(); +// } +} \ No newline at end of file diff --git a/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/steps/LoginSteps.java b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/steps/LoginSteps.java new file mode 100755 index 000000000..56f571753 --- /dev/null +++ b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/steps/LoginSteps.java @@ -0,0 +1,317 @@ +package com.rl.qa.steps; + + +import com.rl.qa.browsers.BrowserDriver; +import com.rl.qa.utils.BaseView; +import com.rl.qa.utils.CucumberContext; +import com.rl.qa.utils.SeleniumUtilities; +import com.rl.qa.views.LoginViews; +import cucumber.api.Scenario; +import cucumber.api.java.After; +import cucumber.api.java.Before; +import cucumber.api.java.en.And; +import cucumber.api.java.en.Given; +import cucumber.api.java.en.Then; +import org.openqa.selenium.OutputType; +import org.openqa.selenium.TakesScreenshot; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.support.PageFactory; + +import java.net.URL; +import java.util.logging.Level; +import java.util.logging.Logger; + +import static com.rl.qa.utils.CucumberContext.getCucumberContext; +import static junit.framework.Assert.assertNotNull; + +/** + * Created by RLE0097 on 21-06-2016. + */ +public class LoginSteps { + private static WebDriver driver; + private static Scenario scenario; + + + + private static final Logger logger = Logger.getLogger(LoginSteps.class.getName()); + private static final com.rl.qa.utils.SeleniumUtilities SeleniumUtil = PageFactory.initElements(BrowserDriver.getCurrentDriver(), SeleniumUtilities.class); + + @Then("^I Login to IWMS using \"([^\"]*)\" access credentials$") + public void I_Login_to_IWMS_using_access_credentials(String loginName) throws Throwable { + try { + boolean flag = false; + String strUserName, strPassword; + + strUserName = CucumberContext.getUserName(); + strPassword = CucumberContext.getPassword(); + + URL url = CucumberContext.getURL(); + + assertNotNull(url); + + String appURL = url.toString(); + + assertNotNull(appURL); + + // Load browser and point it at configured IWMS web-ui. + BrowserDriver.loadPage(appURL); + + Boolean loggedIn = (Boolean) getCucumberContext().get("loggedIn"); + if (loggedIn != null && loggedIn) { + logger.info("Already logged in, reusing authenticated session(1)."); + return; + } + + + logger.info("Logged in successfully."); +// } else +// logger.info("Login to IWMS using " + loginName + " access credentials does not exist in excel spreadsheet"); + } catch (Exception e) { + BaseView.takeScreenshot("I_Login_to_IWMS_using_access_credentials"); + String msg = String.format("Unable to login and see expected dashboard: %s", e.getMessage()); + logger.log(Level.SEVERE, msg, e); + logger.info("Created new WebDriver instance as old one was failing to respond."); +// fail(msg); + } + } + + @Given("^I Login to catalyst using \"([^\"]*)\" access credentials$") + public void I_Login_to_catalyst_using_access_credentials(String loginName,String password) throws Throwable { + try { + boolean flag = false; + String strUserName, strPassword; + + + strUserName = loginName;//CucumberContext.getUserName(); + strPassword = password;//CucumberContext.getPassword(); + + + URL url = CucumberContext.getURL(); + + assertNotNull(url); + + String appURL = url.toString(); + + assertNotNull(appURL); + + // Load browser and point it at configured IWMS web-ui. + BrowserDriver.loadPage(appURL); + + LoginViews.enterUsername(strUserName); + LoginViews.enterPassword(strPassword); + LoginViews.clickLoginButton(); + + /*Boolean loggedIn = (Boolean) getCucumberContext().get("loggedIn"); + if (loggedIn != null && loggedIn) { + logger.info("Already logged in, reusing authenticated session(1)."); + return; + }*/ + + + logger.info("Logged in successfully."); + } catch (Exception e) { + BaseView.takeScreenshot("I_Login" + loginName + "_using_access_credentials"); + String msg = String.format("Unable to login and see expected dashboard: %s", e.getMessage()); + logger.log(Level.SEVERE, msg, e); + logger.info("Created new WebDriver instance as old one was failing to respond."); + } + } + + @Given("^I Login to created new stack using \"([^\"]*)\" access credentials$") + public void I_Login_to_created_new_stack_using_access_credentials(String loginName) throws Throwable { + try { + boolean flag = false; + String strUserName, strPassword; + + strUserName = "superadmin";//CucumberContext.getUserName(); + strPassword = "superadmin@123";//CucumberContext.getPassword(); + + URL url = CucumberContext.getURL(); + + assertNotNull(url); + + String appURL = url.toString(); + + assertNotNull(appURL); + + // Load browser and point it at configured IWMS web-ui. + BrowserDriver.loadPage(appURL); + + LoginViews.enterUsername(strUserName); + LoginViews.enterPassword(strPassword); + LoginViews.clickLoginButton(); + + Boolean loggedIn = (Boolean) getCucumberContext().get("loggedIn"); + if (loggedIn != null && loggedIn) { + logger.info("Already logged in, reusing authenticated session(1)."); + return; + } + + + logger.info("Logged in successfully."); + } catch (Exception e) { + BaseView.takeScreenshot("I_Login" + loginName + "_using_access_credentials"); + String msg = String.format("Unable to login and see expected dashboard: %s", e.getMessage()); + logger.log(Level.SEVERE, msg, e); + logger.info("Created new WebDriver instance as old one was failing to respond."); + } + } + + @Given("^I Login to created new stack \"([^\"]*)\" using \"([^\"]*)\" access credentials$") + public void I_Login_to_created_new_stack_using_access_credentials(String strStackName, String strLoginName) throws Throwable { + try { + Thread.sleep(200000); + boolean flag = false; + String strUserName, strPassword; + + strUserName = strLoginName;//CucumberContext.getUserName(); + strPassword = "superadmin@123";//CucumberContext.getPassword(); + +// URL url = strStackName+"."+"rlcatalyst.com"; CucumberContext.getURL(); + String url = "http://" + strStackName + ".rlcatalyst.com"; + assertNotNull(url); + + String appURL = url.toString(); + + assertNotNull(appURL); + + // Load browser and point it at configured IWMS web-ui. + BrowserDriver.loadPage(appURL); + + LoginViews.enterUsername(strUserName); + LoginViews.enterPassword(strPassword); + LoginViews.clickLoginButton(); + + Boolean loggedIn = (Boolean) getCucumberContext().get("loggedIn"); + if (loggedIn != null && loggedIn) { + logger.info("Already logged in, reusing authenticated session(1)."); + return; + } + + + logger.info("Logged in successfully."); + } catch (Exception e) { + BaseView.takeScreenshot("I_Login" + strLoginName + "_using_access_credentials"); + String msg = String.format("Unable to login and see expected dashboard: %s", e.getMessage()); + logger.log(Level.SEVERE, msg, e); + logger.info("Created new WebDriver instance as old one was failing to respond."); + } + } + + @And("^I Sign Out$") + public void I_Sign_Out() throws Throwable { + LoginViews.signOut(); + } + + + @Before + public static void setUp(Scenario scenario) { + scenario = scenario; + System.out.println("I am at before"); + + } + + @After + public static void embedscreenshot(Scenario scenario) { + + if (scenario.isFailed()) { + try { + //encoded_img = @browser.driver.screenshot_as(:base64) + byte[] screenshot = ((TakesScreenshot) driver).getScreenshotAs(OutputType.BYTES); + scenario.embed(screenshot, "image/png"); //stick it in the report + System.out.println("I am at after"); + + } catch (Exception e) { + e.printStackTrace(); + } + } + + } + + + + @Given("^I need to check for which mail\"([^\"]*)\" application to login with valid credentials$") + public void iNeedToCheckForWhichMailApplicationToLoginWithValidCredentials(String strEmailAppName) throws Throwable { + LoginViews.whichApplicationToLaunch(strEmailAppName); + + } + + @Given("^I Login to catalyst using \"([^\"]*)\" and \"([^\"]*)\" and \"([^\"]*)\"access credentials$") + public void iLoginToCatalystUsingAndAndAccessCredentials(String strAppUrl, String loginName, String password) throws Throwable { + try { + boolean flag = false; + String strUserName, strPassword; + + + strUserName = loginName;//CucumberContext.getUserName(); + strPassword = password;//CucumberContext.getPassword(); + + + //URL url = CucumberContext.getURL(); + + //assertNotNull(url); + + //String appURL = url.toString(); + + //assertNotNull(appURL); + + // Load browser and point it at configured IWMS web-ui. + + if(strAppUrl.contains("gmail")) { + BrowserDriver.loadPage(strAppUrl); + LoginViews.enterUsername(strUserName); + LoginViews.enterPassword(strPassword); + LoginViews.clickLoginButton(); + LoginViews.signOutGmail(); + } + else if (strAppUrl.contains("yahoo")){ + BrowserDriver.loadPage(strAppUrl); + LoginViews.enterYahooUsername(strUserName); + LoginViews.enterYahooPassword(strPassword); + LoginViews.clickYahooLoginButton(); + LoginViews.signOutYahoo(); + + } + else + { + System.out.println("Your option is not Gmail or Yahoo"); + + //if (strAppUrl.contains("rediff")){ + // BrowserDriver.loadPage(strAppUrl); + //LoginViews.enterUsername(strUserName); + //LoginViews.enterPassword(strPassword); + //LoginViews.clickLoginButton(); + } + + + /*Boolean loggedIn = (Boolean) getCucumberContext().get("loggedIn"); + if (loggedIn != null && loggedIn) { + logger.info("Already logged in, reusing authenticated session(1)."); + return; + }*/ + + + logger.info("Logged in successfully."); + } catch (Exception e) { + BaseView.takeScreenshot("I_Login" + loginName + "_using_access_credentials"); + String msg = String.format("Unable to login and see expected dashboard: %s", e.getMessage()); + logger.log(Level.SEVERE, msg, e); + logger.info("Created new WebDriver instance as old one was failing to respond."); + } + } + + + @Then("^I logout of the Application$") + public void iLogoutOfTheApplication() throws Throwable { + + } + + @Then("^I logged out of application successfully$") + public void iLoggedOutOfApplicationSuccessfully() throws Throwable { + LoginViews.loggedout(); + } +} + + + + diff --git a/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/steps/ProivderSyncSteps.java b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/steps/ProivderSyncSteps.java new file mode 100755 index 000000000..c217a8ac0 --- /dev/null +++ b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/steps/ProivderSyncSteps.java @@ -0,0 +1,39 @@ +package com.rl.qa.steps; + +import com.rl.qa.browsers.BrowserDriver; +import com.rl.qa.utils.SeleniumUtilities; +import cucumber.api.PendingException; +import cucumber.api.java.en.And; +import org.openqa.selenium.support.PageFactory; + +import java.util.logging.Logger; + +/** + * Created by rle0346 on 11/8/16. + */ +public class ProivderSyncSteps { + private static final Logger logger = Logger.getLogger(LoginSteps.class.getName()); + private static final com.rl.qa.utils.SeleniumUtilities SeleniumUtil = PageFactory.initElements(BrowserDriver.getCurrentDriver(), SeleniumUtilities.class); + + @And("^I Click on Teams Link$") + public void iClickOnTeamsLink() throws Throwable { + + } + + + @And("^Clicks on New Team Button$") + public void clicksOnNewTeamButton() throws Throwable { + + } + + + @And("^Enters the Team Name$") + public void entersTheTeamName() throws Throwable { + + } + + @And("^Enters the Team Description$") + public void entersTheTeamDescription() throws Throwable { + + } +} diff --git a/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/steps/TemplateSteps.java b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/steps/TemplateSteps.java new file mode 100755 index 000000000..ed31f0915 --- /dev/null +++ b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/steps/TemplateSteps.java @@ -0,0 +1,59 @@ +package com.rl.qa.steps; + +import com.rl.qa.browsers.BrowserDriver; +import com.rl.qa.utils.SeleniumUtilities; +import com.rl.qa.views.TemplateViews; +import cucumber.api.java.en.And; +import cucumber.api.java.en.Then; +import org.openqa.selenium.support.PageFactory; + +import java.util.logging.Logger; + +/** + * Created by RLE0372 on 11-08-2016. + */ +public class TemplateSteps { + private static final Logger logger = Logger.getLogger(LoginSteps.class.getName()); + private static final com.rl.qa.utils.SeleniumUtilities SeleniumUtil = PageFactory.initElements(BrowserDriver.getCurrentDriver(), SeleniumUtilities.class); + + @And("^I click On \"([^\"]*)\" link$") + public void iClickOnLink(String linkText) throws Throwable { + TemplateViews.clickOnLink(linkText); + + } + + @And("^I select \"([^\"]*)\" from select box$") + public void iSelectFromSelectBox(String tempType) throws Throwable { + TemplateViews.selectTempType(tempType); + } + + @Then("^I verify the \"([^\"]*)\" is deleted from the Templates table$") + public void iVerifyTheIsDeletedFromTheTemplatesTable(String tempName) throws Throwable { + TemplateViews.verifyDeletedTemp(tempName); + } + + @And("^I verify \"([^\"]*)\" is displayed$") + public void iVerifyIsDisplayed(String idOfChkBox) throws Throwable { + TemplateViews.verifyChefFactory(idOfChkBox); + } + + @Then("^I select \"([^\"]*)\" and verify corresponding \"([^\"]*)\" in Templates table$") + public void iSelectAndVerifycorrespondingCreatedInTemplatesTable(String templateName, String tempDetails) throws Throwable { + TemplateViews.verifyTempDetails(templateName,tempDetails); + } + + @Then("^I verify \"([^\"]*)\" is available in templates table$") + public void iVerifyIsAvailableInTemplatesTable(String tempName) throws Throwable { + TemplateViews.verifyTempName(tempName); + } + + @And("^I browse \"([^\"]*)\" Template file$") + public void iBrowseTemplateFile(String fileName) throws Throwable { + TemplateViews.browseAndUploadTemplateFile(fileName); + } + + @And("^I select \"([^\"]*)\" from the drop down in create template page$") + public void iSelectFromTheDropDownInCreateTemplatePage(String orgName) throws Throwable { + TemplateViews.selectOrgInTemplatePage(orgName); + } +} diff --git a/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/steps/VMImageSteps.java b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/steps/VMImageSteps.java new file mode 100755 index 000000000..96867a374 --- /dev/null +++ b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/steps/VMImageSteps.java @@ -0,0 +1,43 @@ +package com.rl.qa.steps; + +import com.rl.qa.browsers.BrowserDriver; +import com.rl.qa.utils.SeleniumUtilities; +import com.rl.qa.views.VMImageViews; +import cucumber.api.java.en.And; +import cucumber.api.java.en.Then; +import org.openqa.selenium.support.PageFactory; + +import java.util.logging.Logger; + +/** + * Created by RLE0372 on 11-08-2016. + */ +public class VMImageSteps { + private static final Logger logger = Logger.getLogger(LoginSteps.class.getName()); + private static final com.rl.qa.utils.SeleniumUtilities SeleniumUtil = PageFactory.initElements(BrowserDriver.getCurrentDriver(), SeleniumUtilities.class); + + @And("^I select \"([^\"]*)\" type$") + public void iSelectOSType(String osType) throws Throwable { + VMImageViews.selectOS(osType); + } + + @Then("^I verify created \"([^\"]*)\" in the Images table$") + public void iVerifyCreatedInTheImagesTable(String imageName) throws Throwable { + VMImageViews.verifyCreatedImage(imageName); + } + + @Then("^I select \"([^\"]*)\" and verify assigned \"([^\"]*)\" in Images table$") + public void iSelectAndVerifyAssignedInImagesTable(String imageName, String imageDetail ) throws Throwable { + VMImageViews.verifyVMImageDetails(imageName,imageDetail); + } + + @Then("^I select \"([^\"]*)\" and verify given \"([^\"]*)\" in Images table$") + public void iSelectAndVerifyGivenInImagesTable(String imageName, String imageDetail) throws Throwable { + VMImageViews.verifyImageId(imageName,imageDetail); + } + + @And("^I select \"([^\"]*)\" from the select box in VMImage page$") + public void iSelectFromTheSelectBoxInVMImagePage(String orgName) throws Throwable { + VMImageViews.selectOrgInVMImagePage(orgName); + } +} diff --git a/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/utils/AjaxEnabledPageFactory.java b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/utils/AjaxEnabledPageFactory.java new file mode 100755 index 000000000..c1515cbe7 --- /dev/null +++ b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/utils/AjaxEnabledPageFactory.java @@ -0,0 +1,54 @@ +package com.rl.qa.utils; + +import org.apache.commons.lang3.StringUtils; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.support.PageFactory; +import org.openqa.selenium.support.pagefactory.AjaxElementLocatorFactory; +import org.openqa.selenium.support.pagefactory.ElementLocatorFactory; + +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; + +public class AjaxEnabledPageFactory extends PageFactory { + static Method instantiatePageMethod = null; + + static { + Method[] methods = PageFactory.class.getDeclaredMethods(); + for (Method method : methods) { + if (StringUtils.equals(method.getName(), "instantiatePage")) { + instantiatePageMethod = method; + instantiatePageMethod.setAccessible(true); + } + } + } + + public static T ajaxInitElements(WebDriver driver, Class pageClassToProxy) { + T page = instantiatePage(driver, pageClassToProxy); + initElements(driver, page); + return page; + } + + public static void initElements(WebDriver driver, Object page) { + final WebDriver driverRef = driver; + initElements(new AjaxElementLocatorFactory(driverRef, 10), page); + } + public static void initElements(ElementLocatorFactory factory, Object page) { + final ElementLocatorFactory factoryRef = factory; + initElements(new StaleReferenceAwareFieldDecorator(factoryRef, 3), page); + } + + protected static T instantiatePage(WebDriver driver, + Class pageClassToProxy) { + try { + return (T) instantiatePageMethod.invoke( + AjaxEnabledPageFactory.class, driver, pageClassToProxy); + } catch (IllegalArgumentException e) { + e.printStackTrace(); + } catch (IllegalAccessException e) { + e.printStackTrace(); + } catch (InvocationTargetException e) { + e.printStackTrace(); + } + return null; + } +} diff --git a/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/utils/BaseView.java b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/utils/BaseView.java new file mode 100755 index 000000000..a16d303b8 --- /dev/null +++ b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/utils/BaseView.java @@ -0,0 +1,339 @@ +package com.rl.qa.utils; + +import com.google.common.collect.Iterables; +import com.rl.qa.FileUtilities; +import com.rl.qa.browsers.BrowserDriver; +import cucumber.api.java.After; +import cucumber.api.java.Before; +import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.openqa.selenium.*; +import org.openqa.selenium.support.ui.Select; + +import java.io.File; +import java.io.IOException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Set; +import java.util.concurrent.TimeUnit; +import java.util.logging.Logger; + +import static junit.framework.Assert.fail; + +public class BaseView { + + private static final Logger logger = Logger.getLogger(BaseView.class.getName()); + private final static int DEFAULT_TIMEOUT = 40; + public static String mainWindowHandle; + public static String genericSecondWindowHandle; + + + public static void pushShortTimeout() { + BrowserDriver.getCurrentDriver().manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS); + } + + public static void pushShortTimeout(int intSeconds) { + BrowserDriver.getCurrentDriver().manage().timeouts().implicitlyWait(intSeconds, TimeUnit.SECONDS); + } + + public static void pushMillSecTimeout(int millSec) { + BrowserDriver.getCurrentDriver().manage().timeouts().implicitlyWait(millSec, TimeUnit.MILLISECONDS); + } + + public static void pushVeryShortTimeout() { + BrowserDriver.getCurrentDriver().manage().timeouts().implicitlyWait(2, TimeUnit.SECONDS); + } + + public static void popDefaultTimeout() { + BrowserDriver.getCurrentDriver().manage().timeouts().implicitlyWait(DEFAULT_TIMEOUT, TimeUnit.SECONDS); + } + + /** + * Returns true if the specified WebElement is visible, does not wait for + * the element. + */ + public static boolean isElementPresentNoWait(WebElement we) { + try { + pushShortTimeout(); + + return we.isDisplayed(); + } catch (NoSuchElementException e) { + return false; + } catch (NullPointerException e) { + return false; + } finally { + popDefaultTimeout(); + } + } + +// Waits for the max time mentioned or till the element is visible and then moves to the next step - rupi + public static WebElement waitForElement(By by) throws InterruptedException { + WebElement visible = null; + long maxTime = 15 * 100; // time in milliseconds + long waitTime = 350; + long elapsedTime = 0; + do { + try { + Thread.sleep(waitTime); + elapsedTime += waitTime; + visible = BrowserDriver.getCurrentDriver().findElement(by); + if (!visible.isDisplayed()) { + visible = null; + } else { + System.out.println("element visible" + by); + } + } catch (NoSuchElementException e) { + System.out.println("waiting for element to be visible"+ by); + } + } while (visible == null && elapsedTime < maxTime); + return visible; + } + +// Selects the dropdown by the label text + public static void selectFromList(By by, String visibleText) { + Select selectNew = new Select(BrowserDriver.getCurrentDriver().findElement(by)); + selectNew.selectByVisibleText(visibleText); + } + + // returns the selected value in the drop down + protected String getSelectedTextInDropDown(By by) { + Select sel = new Select(BrowserDriver.getCurrentDriver().findElement(by)); + return sel.getFirstSelectedOption().getText(); + } + + public static void clickLink(String linkText) { + try { + waitForElement(By.linkText(linkText)); + } catch (InterruptedException e) { + System.out.println("Could not find link text"); + } + BrowserDriver.getCurrentDriver().findElement(By.linkText(linkText)).click(); + } + + public static void switchToFrame()throws InterruptedException{ + waitForElement(By.tagName("iframe")); + String iframeID = BrowserDriver.getCurrentDriver().findElement(By.tagName("iframe")).getAttribute("id"); + BrowserDriver.getCurrentDriver().switchTo().frame(iframeID); + } + + //this method will find the right iframe containing specific CSS element and switch to it + public static void switchToFrameWithField(String cssSelector)throws InterruptedException{ + waitForElement(By.tagName("iframe")); + List iframeList = BrowserDriver.getCurrentDriver().findElements(By.tagName("iframe")); + List idList = new ArrayList(); + //just record the iframes IDs here + for (WebElement we : iframeList) { + String iframeID = we.getAttribute("id"); + idList.add(iframeID); + } + //have to do it in separate loop as selenium is real funny about object access + for (String id : idList) { + BrowserDriver.getCurrentDriver().switchTo().frame(id); + List itemList = BrowserDriver.getCurrentDriver().findElements(By.cssSelector(cssSelector)); + if (itemList.size() > 0) { + break; + } + //have to go back to default frame to find next child iframe + BrowserDriver.getCurrentDriver().switchTo().defaultContent(); + } + } + + public static void takeScreenshot(String filename) { + File dir = new File(FileUtilities.getCWD(), "//target//screenshots"); + dir.mkdirs(); + + SimpleDateFormat sdf = new SimpleDateFormat("ddMMyyyy_hhmmss"); + Date curDate = new Date(); + String strDate = sdf.format(curDate); + filename = filename.replace(".png",""); + filename = filename + strDate+".png"; + + File file = new File(dir, filename); + + try { + BrowserDriver.takeScreenshot(file); + System.out.format("Wrote screen shot to '%s'", file.getAbsolutePath()); + } catch (IOException e) { + System.out.format("Unable to write screen shot to '%s': %s", file.getAbsolutePath(), e.getMessage()); + } + } + + public static void switchToFrameByTitle(String title)throws InterruptedException { + WebElement iframe = BrowserDriver.getCurrentDriver().findElement(By.cssSelector("iframe[title=\""+title+"\"]")); + BrowserDriver.getCurrentDriver().switchTo().frame( iframe ); + } + + public static void switchToSecondFrame() { + + WebElement secondIframe = null; + List iframes = BrowserDriver.getCurrentDriver() + .findElements(By.cssSelector("iframe")); + if(CollectionUtils.isNotEmpty(iframes)) { + + int i = 0; + for(WebElement iFrame : iframes) { + if(iFrame.getAttribute("title") != null && i++ == 1) { + secondIframe = iFrame; + break; + } + } + + if(secondIframe == null) { + fail("Couldn't find second iFrame"); + } + + BrowserDriver.getCurrentDriver().switchTo().frame( secondIframe ); + + } else { + fail("There are no iFrames found"); + } + + } + + /** + * Get's second window handle. + * Helpful when dealing with multiple windows + * + * @return + * @see BaseView#getCurrentWindowHandle() + */ + public static void switchToSecondWindow() { + /* try { + Thread.sleep(4000); + } catch (InterruptedException e) { + e.printStackTrace(); + }*/ +// Set windowHandles = BrowserDriver.getCurrentDriver().getWindowHandles(); +// if(CollectionUtils.isNotEmpty(windowHandles)) { +// mainWindowHandle = Iterables.get(windowHandles, 0, null); +// String secondWindowHandle = Iterables.get(windowHandles, 1, null); +// +// if(StringUtils.isNotEmpty(secondWindowHandle)) { +// BrowserDriver.getCurrentDriver().switchTo().window(secondWindowHandle); +// BrowserDriver.getCurrentDriver().switchTo().window(secondWindowHandle).manage().window().setPosition(new Point(0, 0)); +// BrowserDriver.getCurrentDriver().switchTo().window(secondWindowHandle).manage().window().setSize(new Dimension(1500, 800)); +// } else { +// logger.warning("There is no second browser window found"); +// } +// } + for(int i=0;i<20;i++) { + Set windowHandles = BrowserDriver.getCurrentDriver().getWindowHandles(); + if (CollectionUtils.isNotEmpty(windowHandles)) { + mainWindowHandle = Iterables.get(windowHandles, 0, null); + String secondWindowHandle = Iterables.get(windowHandles, 1, null); + genericSecondWindowHandle = secondWindowHandle; + + if (StringUtils.isNotEmpty(secondWindowHandle)) { + BrowserDriver.getCurrentDriver().switchTo().window(secondWindowHandle); + BrowserDriver.getCurrentDriver().switchTo().window(secondWindowHandle).manage().window().setPosition(new Point(0, 0)); + BrowserDriver.getCurrentDriver().switchTo().window(secondWindowHandle).manage().window().setSize(new Dimension(1500, 800)); + return; + } else { + /* try { + Thread.sleep(100); + } catch (InterruptedException e) { + e.printStackTrace(); + }*/ + logger.warning(i + " : There is no second browser window found"); + } + } + } + } + + + public boolean switchToSecondWindow(int counter) { + boolean flag = false; + for(int i=0;i windowHandles = BrowserDriver.getCurrentDriver().getWindowHandles(); + if (CollectionUtils.isNotEmpty(windowHandles)) { + mainWindowHandle = Iterables.get(windowHandles, 0, null); + String secondWindowHandle = Iterables.get(windowHandles, 1, null); + + if (StringUtils.isNotEmpty(secondWindowHandle)) { + BrowserDriver.getCurrentDriver().switchTo().window(secondWindowHandle); + BrowserDriver.getCurrentDriver().switchTo().window(secondWindowHandle).manage().window().setPosition(new Point(0, 0)); + BrowserDriver.getCurrentDriver().switchTo().window(secondWindowHandle).manage().window().setSize(new Dimension(1500, 800)); + flag = true; + } else { + logger.warning("There is no second browser window found"); + } + } + } + return flag; + } + + public static void switchToSecondWindowToClose() { + /* try { + Thread.sleep(4000); + } catch (InterruptedException e) { + e.printStackTrace(); + }*/ + Set windowHandles = BrowserDriver.getCurrentDriver().getWindowHandles(); + if(CollectionUtils.isNotEmpty(windowHandles)) { + mainWindowHandle = Iterables.get(windowHandles, 0, null); + String secondWindowHandle = Iterables.get(windowHandles, 1, null); + + if(StringUtils.isNotEmpty(secondWindowHandle)) { + BrowserDriver.getCurrentDriver().switchTo().window(secondWindowHandle).close(); + } else { + logger.warning("There is no second browser window found"); + } + } + } + + public static void switchToThirdWindowToClose() { + /* try { + Thread.sleep(4000); + } catch (InterruptedException e) { + e.printStackTrace(); + }*/ + Set windowHandles = BrowserDriver.getCurrentDriver().getWindowHandles(); + if(CollectionUtils.isNotEmpty(windowHandles)) { + mainWindowHandle = Iterables.get(windowHandles, 0, null); + String thirdWindowHandle = Iterables.get(windowHandles, 2, null); + + if(StringUtils.isNotEmpty(thirdWindowHandle)) { + BrowserDriver.getCurrentDriver().switchTo().window(thirdWindowHandle).close(); + } else { + logger.warning("There is no second browser window found"); + } + } + } + + /** + * Get's current window handle. + * Helpful when dealing with multiple windows + * + * @return + * @see BaseView#switchToSecondWindow() + */ + public static String getCurrentWindowHandle() { + + return BrowserDriver.getCurrentDriver().getWindowHandle(); + } + + + public static void switchToThirdWindow() { + BrowserDriver.getCurrentDriver().switchTo().window(BaseView.mainWindowHandle); + for(int i=0;i<20;i++) { + Set windowHandles = BrowserDriver.getCurrentDriver().getWindowHandles(); + if (CollectionUtils.isNotEmpty(windowHandles)) { + mainWindowHandle = Iterables.get(windowHandles, 0, null); + String thirdWindowHandle = Iterables.get(windowHandles, 2, null); + + if (StringUtils.isNotEmpty(thirdWindowHandle)) { + BrowserDriver.getCurrentDriver().switchTo().window(thirdWindowHandle); + BrowserDriver.getCurrentDriver().switchTo().window(thirdWindowHandle).manage().window().setPosition(new Point(0, 0)); + BrowserDriver.getCurrentDriver().switchTo().window(thirdWindowHandle).manage().window().setSize(new Dimension(1500, 800)); + return; + } else { + logger.warning(i + " : There is no third browser window found"); + } + } + } + } + + +} diff --git a/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/utils/CucumberContext.java b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/utils/CucumberContext.java new file mode 100755 index 000000000..ffdbb6fb5 --- /dev/null +++ b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/utils/CucumberContext.java @@ -0,0 +1,434 @@ +package com.rl.qa.utils; + +import com.google.common.collect.ImmutableMap; +import com.rl.qa.browsers.BrowserType; +import org.apache.commons.lang.NotImplementedException; +import org.apache.http.auth.Credentials; +import org.junit.Assert; + +import java.io.IOException; +import java.io.InputStream; +import java.net.MalformedURLException; +import java.net.URL; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.HashMap; +import java.util.Properties; +import java.util.logging.Logger; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import static com.google.common.base.Strings.isNullOrEmpty; +import static junit.framework.Assert.assertNotNull; +import static org.junit.Assert.fail; + +//import sun.reflect.generics.reflectiveObjects.NotImplementedException; + +/** + * Manages test execution context by providing properties that define: + * 1) IWMS url + * 2) IWMS authentication credentials + * 3) WEB Browser (e.g. Firefox) + * 4) Selenium HUB url if remote browser specified + * 5) Anything else a test case wants to share + * + * The property values originate from one of three sources: + * 1) Environment variables + * 2) JVM properties + * 3) Currently active maven profile + * + * The 1st place a given property is defined takes precedence over the other + * sources. + * + * The following is the set of properties that can be defined via the above + * mentioned three sources: + * + * Property Purpose Example + * ------------- ---------------- ---------------------------- + * browser Browser to use REMOTE_FIREFOX + * selenium.hub Selenium HUB url http://127.0.0.1:4444/wd/hub + * iwms.url IWMS web-ui url http://test.lucernex.com + * iwms.username IWMS username rootDev + * iwms.password IWMS password not-going-to-say + * iwms.firm IWMS firm name QA + * + * So for example if you wanted to override the firm name that is specified + * by the maven profile you could use this JVM execution argument: + * + * -Diwms.firm=whatever + * + * Note: if you specify one of the remote browsers (e.g. REMOTE_FIREFOX), then you + * must also provide a value for the selenium.hub property as that is where + * the remote browser is expected to be. + */ +public class CucumberContext extends HashMap { + private static final Logger logger = Logger.getLogger(CucumberContext.class.getName()); + + // The properties file that defines the IWMS url and credentials. + private static final String LX_SELENIUM_RESOURCE = "lx-selenium.properties"; + + // Map key for Credentials object. + public static final String CREDENTIALS = "credentials"; + + // Property name (JVM and environment variable) for Selenium HUB URL to use. + public static final String SELENIUM_HUB = "selenium.hub"; + + // Property name (JVM, environment variable, and lx-selenium.properties) for name of web-browser to use. + public static final String BROWSER = "browser"; + + // Property name (JVM, environment variable, and lx-selenium.properties) for URL of IWMS web-ui. + public static final String IWMS_URL = "iwms.url"; + + // Property name (JVM, environment variable, and lx-selenium.properties) for IWMS username. + public static final String IWMS_USERNAME = "iwms.username"; + + // Property name (JVM, environment variable, and lx-selenium.properties) for IWMS password. + public static final String IWMS_PASSWORD = "iwms.password"; + + // Property name (JVM, environment variable, and lx-selenium.properties) for IWMS firm. + public static final String IWMS_FIRM = "iwms.firm"; + + // Property name of member's DateFormat (cache of getSessionDateFormat() call). + public static String SESSION_DATE_FORMAT = "DateFormat"; + + // Property name of member's NumberFormat (cache of getSessionNumberFormat() call). + public static String SESSION_NUMBER_FORMAT = "NumberFormat"; + + // Property name of member's Locale (cache of getSessionNumberFormat() call). + public static String SESSION_LOCALE = "Locale"; + + private static final ThreadLocal cucumberThreadLocal = new ThreadLocal() { + protected CucumberContext initialValue() { + return new CucumberContext(); + } + }; + + public static URL getURL() { + return (URL)getCucumberContext().get(IWMS_URL); + } + + public static String getUserName() { + return (String)getCucumberContext().get(IWMS_USERNAME); + } + + public static String getPassword() { + return (String)getCucumberContext().get(IWMS_PASSWORD); + } + + private static URL handleURLProperty(String name, String value) { + // Assert.assertNotNull(String.format("Required property '%s' not specified", name), value); + + try { + URL url = new URL(value); + + getCucumberContext().put(name, url); + + return url; + } catch (MalformedURLException e) { + String msg2 = String.format( + "Property '%s' specifies an invalid URL '%s': %s", + name, + value, + e.getMessage() + ); + + fail(msg2); + + return null; // will never happen due to fail() call above. + } + } + + private static void handleBrowserProperty(String value) { + Assert.assertNotNull("Required property 'browser' not specified", value); + + BrowserType browserType; + + try { + browserType = BrowserType.fromString(value); + } catch (IllegalArgumentException e) { + browserType = BrowserType.FIREFOX; + } + + getCucumberContext().put(BROWSER, browserType); + } + + /** + * Returns the value of the specified property by consulting three sources: + * Environment, JVM Property, and maven props in that order (1st one wins). + * + * @param props - properties as supplied by current maven profile (can be null) + * @param name - name of desired property + */ + private static String getPropertyValue(Properties props, String name) { + String value = System.getenv(name); + + if (!isNullOrEmpty(value)) { + logger.info(String.format("Property [%s] value [%s] set by environment variable", name, value)); + return value; + } + + value = System.getProperty(name); + + if (!isNullOrEmpty(value)) { + logger.info(String.format("Property [%s] value [%s] set by system property", name, value)); + return value; + } + + if (props != null) { + value = props.getProperty(name); + if (!name.equals("iwms.password") || value.startsWith("DES:")) { + logger.info(String.format("Property [%s] value [%s] set by maven profile", name, value)); + } + } + + return value; + } + + /** + * Returns the value of the specified property by consulting two sources: + * Environment and JVM Property in that order (1st one wins). + * + * @param name - name of desired property + */ + private static String getPropertyValue(String name) { + return getPropertyValue(null, name); + } + + /** + * Lazy load the properties as defined by the 'lx-selenium.properties' file + * with optional JVM overrides. + */ +// private static void loadIWMSProperties() { +// if (getCucumberContext().get(IWMS_URL) == null) { +// InputStream in = "";//Credentials.class.getClassLoader().getResourceAsStream(LX_SELENIUM_RESOURCE); +// +// assertNotNull("Resource '" + LX_SELENIUM_RESOURCE + "' not found in classpath!", in); +// +// try { +// Properties props = new Properties(); +// String username = null; +// String password = null; +// String firmname = null; +// +// props.load(in); +// +// for (Object key : props.keySet()) { +// String name = (String)key; +// +// if (IWMS_URL.equals(name)) { +// handleURLProperty(name, getPropertyValue(props, IWMS_URL)); +// } else if (BROWSER.equals(name)) { +// handleBrowserProperty(getPropertyValue(props, BROWSER)); +// } else if (IWMS_USERNAME.equals(name)) { +// username = getPropertyValue(props, IWMS_USERNAME); +// } else if (IWMS_PASSWORD.equals(name)) { +// password = getPropertyValue(props, IWMS_PASSWORD); +// } else if (IWMS_FIRM.equals(name)) { +// firmname = getPropertyValue(props, IWMS_FIRM); +// } else { +// logger.warning(String.format("Ignoring unexpected property '%s'", name)); +// } +// } +// +// Assert.assertNotNull( +// String.format("Required property '%s' not defined!", IWMS_USERNAME), +// username +// ); +// Assert.assertNotNull( +// String.format("Required property '%s' not defined!", IWMS_PASSWORD), +// password +// ); +// Assert.assertNotNull( +// String.format("Required property '%s' not defined!", IWMS_FIRM), +// firmname +// ); +// +// handleCredentials(username, password, firmname); +// try { +// SESSION_LOCALE=getLocaleByUserName(username, "Language"); +// SESSION_NUMBER_FORMAT=getLocaleByUserName(username, "NumberPattern"); +// SESSION_DATE_FORMAT=getLocaleByUserName(username, "DatePattern"); +// } catch (Exception e) { +// e.printStackTrace(); +// } +// } catch (IOException e) { +// String msg = String.format( +// "Unable to load '%s' from classpath: %s", +// LX_SELENIUM_RESOURCE, +// e.getMessage() +// ); +// +// fail(msg); +// } finally { +// try { +// in.close(); +// } catch (IOException e) { +// // ignore +// } +// } +// } +// } + + /** + * Returns the thread local that represents the current state of the executing + * BDD Scenario. + */ + public static CucumberContext getCucumberContext() { + return cucumberThreadLocal.get(); + } + + /** + * Returns the desired Selenium HUB URL if defined otherwise null. + */ + public static URL getSeleniumHub() { + URL url = (URL)getCucumberContext().get(SELENIUM_HUB); + + if (url != null) { + return url; + } + + String seleniumHub = getPropertyValue(SELENIUM_HUB); + + if (isNullOrEmpty(seleniumHub)) { + return null; + } + + return handleURLProperty(SELENIUM_HUB, seleniumHub); + } + + /** + * Returns the desired type of web browser. + */ + public static BrowserType getBrowserType() { + loadIWMSProperties(); + return (BrowserType)getCucumberContext().get(BROWSER); + } + + private static void loadIWMSProperties() { + if (getCucumberContext().get(IWMS_URL) == null) { + InputStream in = Credentials.class.getClassLoader().getResourceAsStream(LX_SELENIUM_RESOURCE); + + assertNotNull("Resource '" + LX_SELENIUM_RESOURCE + "' not found in classpath!", in); + + try { + Properties props = new Properties(); + String username = null; + String password = null; + String firmname = null; + + props.load(in); + + for (Object key : props.keySet()) { + String name = (String)key; + + if (IWMS_URL.equals(name)) { + handleURLProperty(name, getPropertyValue(props, IWMS_URL)); + } else if (BROWSER.equals(name)) { + handleBrowserProperty(getPropertyValue(props, BROWSER)); + } else if (IWMS_USERNAME.equals(name)) { + username = getPropertyValue(props, IWMS_USERNAME); + } else if (IWMS_PASSWORD.equals(name)) { + password = getPropertyValue(props, IWMS_PASSWORD); + } else { + logger.warning(String.format("Ignoring unexpected property '%s'", name)); + } + } + + Assert.assertNotNull( + String.format("Required property '%s' not defined!", IWMS_USERNAME), + username + ); + Assert.assertNotNull( + String.format("Required property '%s' not defined!", IWMS_PASSWORD), + password + ); + + } catch (IOException e) { + String msg = String.format( + "Unable to load '%s' from classpath: %s", + LX_SELENIUM_RESOURCE, + e.getMessage() + ); + + fail(msg); + } finally { + try { + in.close(); + } catch (IOException e) { + // ignore + } + } + } + } + + /** + * Returns the IWMS base URL. + */ +// public static URL getURL() { +// loadIWMSProperties(); +// +// return (URL)getCucumberContext().get(IWMS_URL); +// } + + /** + * Returns the IWMS authentication credentials. + */ +// public static Credentials getCredentials() { +// loadIWMSProperties(); +// +// return (Credentials)getCucumberContext().get(CREDENTIALS); +// } + + private static Pattern isoREGEX; + + /** + * Returns true if the specified string matches the XML ISO date-time pattern. + * + * @param ts - sample timestamp string to classify + */ + public static boolean isISOFormatted(String ts) { + if (ts == null) { + return false; + } + + /* Lucernex ISO format: + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T05:00:00.000Z'"); + + try { + sdf.parse(ts); + return true; + } catch (ParseException e) { + return false; + } + */ + + if (isoREGEX == null) { + isoREGEX = Pattern.compile( + "^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-2])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-3])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$" + ); + } + + synchronized (isoREGEX) { + Matcher m = isoREGEX.matcher(ts); + + if (m.find()) { + return true; + } + } + + return false; + } + + // Map of Member's LANG vs DateFormat + private static final ImmutableMap LANG_TO_DATEFORMAT = + new ImmutableMap.Builder() + .put("en", new SimpleDateFormat("MM/dd/yyyy")) + .build(); + + /** + * Revert authentication to initial user. + */ + public static void revertUser() { + throw new NotImplementedException(); + } +} diff --git a/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/utils/ForceWaitForItem.java b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/utils/ForceWaitForItem.java new file mode 100755 index 000000000..be8577d30 --- /dev/null +++ b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/utils/ForceWaitForItem.java @@ -0,0 +1,16 @@ +package com.rl.qa.utils; + +/** + * Created by RLE0097 on 4/20/2015. + */ +public class ForceWaitForItem { + public static void delay(int intMilliSeconds){ + try { + int waitTime=intMilliSeconds; + Thread.sleep(waitTime); + //SeleniumUtilities.Log.info("Wait :" + waitTime + " Milli Seconds\n"); + } catch (Exception e) { + SeleniumUtilities.Log.error("Error :"+e.getMessage()); + } + } +} diff --git a/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/utils/SeleniumUtilities.java b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/utils/SeleniumUtilities.java new file mode 100755 index 000000000..afc7e0c66 --- /dev/null +++ b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/utils/SeleniumUtilities.java @@ -0,0 +1,2730 @@ +package com.rl.qa.utils; + +import com.rl.qa.browsers.BrowserDriver; +import junit.framework.Assert; +import junit.framework.TestCase; +import org.apache.log4j.Logger; +import org.openqa.selenium.*; +import org.openqa.selenium.interactions.Actions; +import org.openqa.selenium.support.ui.*; + +import java.text.DateFormat; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.*; +import java.util.NoSuchElementException; +import java.util.concurrent.TimeUnit; + +import static com.rl.qa.utils.CucumberContext.getCucumberContext; +import static junit.framework.Assert.fail; +import static org.openqa.selenium.support.ui.ExpectedConditions.*; + +/** + * Commonly used Framework Function libraries + * + */ +public class SeleniumUtilities { + public static int OBJWAITTIMEOUT = 10; + public static int WEBDRIVER_WAIT = 60; + public static int WEBDRIVER_WAIT_SMALL = 30; + public static int DEFAULT_TIMEOUT_IN_SECONDS = 50, DEFAULT_SLEEP_TIME_IN_SECONDS = 50, WAIT_TIME = 50; + public static Logger Log = Logger.getLogger(Logger.class.getName()); + public static Properties objProp; + + String parentBrowser = null; + private static final String DATE_FORMAT = "MM/dd/yyyy"; + private static DateFormat formatter = new SimpleDateFormat(DATE_FORMAT); + Map map = new HashMap(); + Integer count; + public static Properties GTKey = new Properties(); + + private int waitTime = 4; + private WebDriver driver; + + + public enum Locators { + xpath, id, name, classname, paritallinktext, linktext, tagname, cssselector + } + + //WebElement el = seleniumUtil.getWebElementObject("div[id^=Covenant_CodeCovenantGroupID]", "cssSelector"); + + + public void editableField(String locator, String element, String value, int timeout) throws Exception { + //WebElement el = seleniumUtil.getWebElementObject("div[id^=Covenant_CodeCovenantGroupID]", "cssSelector"); + BaseView.pushShortTimeout(); + WebElement ele = getWebElementObject(locator, element); + waitForObjectToLoad(ele); + Wait(timeout); + if (ele.isDisplayed()) { + Actions action = new Actions(driver); + action.click(ele).sendKeys(value).perform(); + Log.info("Typing text '" + value + "' into text field ''" + locator + "=" + element + "'"); + } else { + Exception error = new Exception(element); + Log.error("Current page does not contain element ''" + locator + "=" + element + "'"); + String Str = new String(error.getMessage()); + Log.error("Error Message :" + Str.substring(1, 240)); + throw error; + } + } + + + public void editableClick(String locator, String element, int timeout) throws Exception { + //WebElement el = seleniumUtil.getWebElementObject("div[id^=Covenant_CodeCovenantGroupID]", "cssSelector"); + WebElement ele = getWebElementObject(locator, element); + waitForObjectToLoad(ele); + Wait(timeout); + if (ele.isDisplayed()) { +// Actions action = new Actions(driver); +// action.click(ele).perform(); + + Actions builder = new Actions(driver); + + builder.moveToElement(ele); + builder.click(); + builder.build().perform(); + + Log.info("Clicking on field ''" + locator + "=" + element + "'"); + } else { + Exception error = new Exception(element); + Log.error("Current page does not contain element ''" + locator + "=" + element + "'"); + String Str = new String(error.getMessage()); + Log.error("Error Message :" + Str.substring(1, 240)); + throw error; + } + } + + + public static WebElement findElementWithTimeout(final By by, final long timeOut) throws InterruptedException { + Wait wait = new FluentWait(BrowserDriver.getCurrentDriver()) + .withTimeout(timeOut, TimeUnit.SECONDS) + .pollingEvery(500l, TimeUnit.MILLISECONDS) + .ignoring(NoSuchElementException.class) + .ignoring(StaleElementReferenceException.class); + + try { + return wait.until(presenceOfElementLocated(by)); + } catch (TimeoutException te) { + throw new InterruptedException(te.getMessage()); + } + } + + public void dragAndDropElement(String fromElementLocator, String fromElement, String targetElementLocator, String targetElement) throws Exception { + try { + WebElement fromEle = getWebElementObject(fromElementLocator, fromElement); + WebElement targetEle = getWebElementObject(targetElementLocator, targetElement); + Actions builder = new Actions(driver); + builder.moveToElement(fromEle).build().perform(); + builder.dragAndDrop(fromEle, targetEle).build().perform(); + /* Action dragAndDrop = builder.clickAndHold(fromEle) + .moveToElement(targetEle) + .release(targetEle) + .build(); + dragAndDrop.perform();*/ + + Log.info("Drag and drop of " + fromElement + " field is successful"); + } catch (Exception ex) { + Log.error("Error Message :" + ex.getMessage()); + } + } + + + public void dragAndDropElementXYOffSet(String fromElementLocator, String fromElement, int xOffset, int yOffset) throws Exception { + try { + WebElement fromEle = getWebElementObject(fromElementLocator, fromElement); + Actions builder = new Actions(driver); + builder.moveToElement(fromEle).perform(); + builder.dragAndDropBy(fromEle, xOffset, yOffset).build().perform(); + + Log.info("Drag and drop of " + fromElement + " field is successful"); + } catch (Exception ex) { + Log.error("Error Message :" + ex.getMessage()); + } + } + + public void rightClickSelectMenuOption(String locator, String element, String menuOptionLink) throws Exception { + try { + WebElement ele = getWebElementObject(locator, element); + Actions oAction = new Actions(driver); + oAction.moveToElement(ele); + for (int i = 0; i < 10; i++) { + /* this will perform right click */ + oAction.contextClick(ele).build().perform(); + try { + WebDriverWait wait = new WebDriverWait(BrowserDriver.getCurrentDriver(), 5); + wait.until(visibilityOfElementLocated(By.cssSelector("div#folderMenu-body"))); + + break; + } catch (Exception e) { + } + } + driver.findElement(By.linkText(menuOptionLink)).click(); + /*WebElement elementOpen = driver.findElement(By.linkText(menuOptionLink)); *//*This will select menu after right click *//* + elementOpen.click();*/ + Log.info("Performed right click on menu option to select : " + menuOptionLink + " '" + locator + "=" + element + "'"); + } catch (Exception ex) { + Exception error = new Exception(element); + Log.error("Does not performed right click on menu option to select : " + menuOptionLink + " '" + locator + "=" + element + "'"); + String Str = new String(error.getMessage()); + Log.error("Error Message :" + Str.substring(1, 240)); + throw error; + } + } + + public void rightClickSelectMenuOption(String locator, String element, String menuLocator, String menuElement) throws Exception { + try { + WebElement ele = getWebElementObject(locator, element); + Actions oAction = new Actions(driver); + oAction.moveToElement(ele); + for (int i = 0; i < 10; i++) { + /* this will perform right click */ + oAction.contextClick(ele).build().perform(); + try { + WebDriverWait wait = new WebDriverWait(BrowserDriver.getCurrentDriver(), 5); + wait.until(visibilityOfElementLocated(By.id("mainMenu-innerCt"))); + + break; + } catch (Exception e) { + } + } + click(menuLocator, menuElement, SeleniumUtilities.OBJWAITTIMEOUT); + + Log.info("Performed right click on menu option to select : " + locator + "=" + element + "'"); + } catch (Exception ex) { + Exception error = new Exception(element); + Log.error("Does not performed right click on menu option to select : " + locator + "=" + element + "'"); + String Str = new String(error.getMessage()); + Log.error("Error Message :" + Str.substring(1, 240)); + throw error; + } + } + + public void rightClickSelectMenuOption(WebElement ele, String menuOptionLink) throws Exception { + try { + Actions oAction = new Actions(driver); + oAction.moveToElement(ele); + oAction.contextClick(ele).build().perform(); + driver.findElement(By.linkText(menuOptionLink)).click(); + Log.info("Performed right click on menu option to select : " + menuOptionLink + " '" + ele.getText()); + } catch (Exception ex) { + Exception error = new Exception(ele.getText()); + Log.error("Does not performed right click on menu option to select : " + menuOptionLink + " '" + ele.getText()); + String Str = new String(error.getMessage()); + Log.error("Error Message :" + Str.substring(1, 240)); + throw error; + } + } + + public void rightClickSelectMenuOption(WebElement ele, String strMovemenuOptionLink, String menuOptionLink) throws Exception { + int count = 0; + do { + count++; + try { + Actions oAction = new Actions(driver); + oAction.moveToElement(ele); + oAction.contextClick(ele).build().perform(); + + WebElement mvEle = driver.findElement(By.linkText(strMovemenuOptionLink)); + Actions mvAction = new Actions(driver); + mvAction.moveToElement(mvEle); + mvAction.click(mvEle).build().perform(); + + WebElement menuOpEle = driver.findElement(By.linkText(menuOptionLink)); + Actions menuOpAction = new Actions(driver); + menuOpAction.moveToElement(menuOpEle).build().perform(); + + WebDriverWait wait = new WebDriverWait(BrowserDriver.getCurrentDriver(), 5); + wait.until(presenceOfElementLocated(By.xpath("//span[text()='" + menuOptionLink + "'][contains(@class,'x-menu-item-text')]"))); + driver.findElement(By.xpath("//span[text()='" + menuOptionLink + "'][contains(@class,'x-menu-item-text')]")).click(); + mvAction.doubleClick(driver.findElement(By.xpath("//span[text()='" + menuOptionLink + "'][contains(@class,'x-menu-item-text')]"))); + BaseView.pushShortTimeout(); + if (!(BrowserDriver.getCurrentDriver().findElements(By.xpath("//span[text()='" + menuOptionLink + "'][contains(@class,'x-menu-item-text')]")).size() > 0)) { + break; + } + Log.info("Performed right click on menu option to select : " + menuOptionLink + " '" + ele.getText()); + } catch (Exception ex) { + + if (count == 9) { + Exception error = new Exception(ele.getText()); + Log.error("Does not performed right click on menu option to select : " + menuOptionLink + " '" + ele.getText()); + String Str = new String(error.getMessage()); + Log.error("Error Message :" + Str.substring(1, 240)); + BaseView.popDefaultTimeout(); + throw error; + } + } finally { + BaseView.popDefaultTimeout(); + } + } while (count < 10); + + } + + public Boolean rightClickVerifyMenuOption(WebElement ele, String strMovemenuOptionLink, String menuOptionLink) throws Exception { + Boolean flag = false; + try { + Actions oAction = new Actions(driver); + oAction.moveToElement(ele); + oAction.contextClick(ele).build().perform(); + + WebElement mvEle = driver.findElement(By.linkText(strMovemenuOptionLink)); + Actions mvAction = new Actions(driver); + mvAction.moveToElement(mvEle); + mvAction.click(mvEle).build().perform(); + + try { + WebDriverWait wait = new WebDriverWait(BrowserDriver.getCurrentDriver(), 5); + //wait.until(ExpectedConditions.presenceOfElementLocated(By.linkText(menuOptionLink))); + wait.until(presenceOfElementLocated(By.xpath("//span[text()='" + menuOptionLink + "'][contains(@class,'x-menu-item-text')]"))); + flag = true; + } catch (Exception ex) { + flag = false; + } + + try { + WebElement escpmvEle = driver.findElement(By.linkText(strMovemenuOptionLink)); + Actions escpmvAction = new Actions(driver); + escpmvAction.moveToElement(escpmvEle); + escpmvAction.sendKeys(Keys.ESCAPE).build().perform(); + } catch (Exception ex) { + } + Log.info("Performed right click on menu option to verify : " + menuOptionLink + " '" + ele.getText()); + return flag; + } catch (Exception ex) { + Exception error = new Exception(ele.getText()); + Log.error("Does not performed right click on menu option to verify : " + menuOptionLink + " '" + ele.getText()); + String Str = new String(error.getMessage()); + Log.error("Error Message :" + Str.substring(1, 240)); + throw error; + } + } + + public void dblClick(String locator, String element, int OBJWAITTIMEOUT) throws Exception { + try { + WebElement ele = getWebElementObject(locator, element); + Actions oAction = new Actions(driver); + oAction.moveToElement(ele); + oAction.doubleClick(ele).build().perform(); /* this will perform dbl click */ + Log.info("Performed double click on element : " + "'" + locator + "=" + element + "'"); + } catch (Exception ex) { + Exception error = new Exception(element); + Log.error("Does not performed double click on element : " + " '" + locator + "=" + element + "'"); + String Str = new String(error.getMessage()); + Log.error("Error Message :" + Str.substring(1, 240)); + throw error; + } + } + + public void doubleClickElement(WebElement element) throws Exception { + try { + BrowserDriver.waitForElement(element); + Actions oAction = new Actions(driver); + oAction.moveToElement(element); + oAction.doubleClick(element).build().perform(); /* this will perform dbl click */ + Log.info("Performed double click on element : " + "'" + "=" + element + "'"); + } catch (Exception ex) { + Log.error("Does not performed double click on element : " + "='" + element + "'"); + //fail("Does not performed double click on element : "+"='"+element+"'"+"\n"+ex.getMessage()); + } + } + + public void sendEnterKeyToElement(WebElement element) throws Exception { + try { + BrowserDriver.waitForElement(element); + Actions oAction = new Actions(driver); + oAction.moveToElement(element); + oAction.sendKeys(element, Keys.ENTER).build().perform(); /* this will perform dbl click */ + Log.info("Performed enter on element : " + "'" + "=" + element + "'"); + } catch (Exception ex) { + Log.error("Does not performed double click on element : " + "='" + element + "'"); + //fail("Does not performed double click on element : "+"='"+element+"'"+"\n"+ex.getMessage()); + } + } + + + public void dblClickSendKey(String locator, String element, String txtBoxLocator, String txtBoxElement, String strValue, int OBJWAITTIMEOUT) throws Exception { + try { + WebElement ele = getWebElementObject(locator, element); + Actions oAction = new Actions(driver); + oAction.moveToElement(ele); + oAction.doubleClick(ele).build().perform(); /* this will perform dbl click */ + + WebElement txtBoxele = getWebElementObject(txtBoxLocator, txtBoxElement); + txtBoxele.clear(); + Actions txtBoxAction = new Actions(driver); + txtBoxAction.moveToElement(txtBoxele); + txtBoxAction.sendKeys("").sendKeys(strValue).sendKeys(Keys.ENTER).build().perform(); + + Log.info("Performed double click on element and entered the value in text box: " + "'" + locator + "=" + element + "'" + "'" + strValue + "'"); + } catch (Exception ex) { + Exception error = new Exception(element); + Log.error("Does not performed double click on element : " + " '" + locator + "=" + element + "'"); + String Str = new String(error.getMessage()); + Log.error("Error Message :" + Str.substring(1, 240)); + throw error; + } + } + + public boolean verifyDataInTableColumns(WebElement ele, String strLabelName, String strValue) throws Exception { + int col_num = 0, matchIndex = 0; + boolean flag = false; + List tableRows = ele.findElements(By.xpath("./tbody/tr")); + + for (WebElement trElement : tableRows) { + List Cols = trElement.findElements(By.tagName("td")); + for (WebElement tdElement : Cols) { + col_num++; + if (tdElement.getText().trim().contains(strLabelName)) { + matchIndex = col_num + 1; + } else if (matchIndex == col_num) { +// String colValue = tdElement.getText().trim(); +// if (colValue.contains(",")) { +// colValue = colValue.replace(",", ""); +// } +// if (colValue.contains("$")) { +// colValue = colValue.replace("$", ""); +// } +// if (colValue.contains(".")) { +// colValue = colValue.replace(".", ""); +// } +// if (colValue.contains("%")) { +// colValue = colValue.replace("%", ""); +// } +// +// if (strValue.contains(",")) { +// strValue = strValue.replace(",", ""); +// } +// if (strValue.contains("$")) { +// strValue = strValue.replace("$", ""); +// } +// if (strValue.contains(".")) { +// strValue = strValue.replace(".", ""); +// } +// if (strValue.contains("%")) { +// strValue = strValue.replace("%", ""); +// } + String colValue = replaceSpecialChar(tdElement.getText().trim()); + strValue = replaceSpecialChar(strValue.trim()); + + if (colValue.contains(strValue) || strValue.contains(colValue) || colValue.equalsIgnoreCase(strValue)) { + matchIndex = 0; + Log.info(" Expected value :" + strLabelName + " - " + strValue + "- value exist :" + tdElement.getText().trim()); + flag = true; + return flag; + } else { + Log.error(" Expected value :" + strLabelName + " - " + strValue + "- value exist :" + tdElement.getText().trim()); + flag = false; + return flag; + } + } + } + } + if (flag == false) + Log.error("Value does not exist: " + strLabelName + " : " + strValue); + return flag; + } + +// public boolean verifyRowPairValueData(WebElement ele, String strLabelName, String strValue) throws Exception { +// int col_num = 0, matchIndex = 0; +// boolean flag = false; +// List tableRows = ele.findElements(By.xpath("./tbody/tr")); +// +// for (WebElement trElement : tableRows) { +// List Cols = trElement.findElements(By.tagName("td")); +// for (WebElement tdElement : Cols) { +// col_num++; +// if (tdElement.getText().trim().contains(strLabelName)) { +// matchIndex = col_num + 1; +// } else if (matchIndex == col_num) { +// String colValue = replaceSpecial(tdElement.getText().trim()); +// strValue = replaceSpecial(strValue.trim()); +// +// if (colValue.contains(strValue) || strValue.contains(colValue) || colValue.equalsIgnoreCase(strValue)) { +// matchIndex = 0; +// Log.info(" Expected value :" + strLabelName + " - " + strValue + "- value exist :" + tdElement.getText().trim()); +// flag = true; +// return flag; +// } else { +// Log.error(" Expected value :" + strLabelName + " - " + strValue + "- value exist :" + tdElement.getText().trim()); +// flag = false; +// return flag; +// } +// } +// } +// } +// if (flag == false) +// Log.error("Value does not exist: " + strLabelName + " : " + strValue); +// return flag; +// } + + public String replaceSpecialChar(String strData) { + if (strData.contains(",")) { + strData = strData.replace(",", ""); + } + if (strData.contains("'")) { + strData = strData.replace("'", ""); + } + if (strData.contains("$")) { + strData = strData.replace("$", ""); + } + if (strData.contains(".")) { + strData = strData.replace(".", ""); + } + if (strData.contains("%")) { + strData = strData.replace("%", ""); + } + if (strData.equalsIgnoreCase("false")) { + strData = "No/off/false"; + } + if (strData.equalsIgnoreCase("true")) { + strData = "Yes/on/true"; + } + + if (strData.equals("Yes")) { + strData = "true"; + } + if (strData.equals("No")) { + strData = "false"; + } + return strData; + } + + public boolean verifyDataInTableColumn(WebElement ele, String strLabelName, String strValue) throws Exception { + boolean flag = false; + List tableRows = ele.findElements(By.xpath("./tbody/tr")); + for (WebElement trElement : tableRows) { + List Cols = trElement.findElements(By.tagName("td")); + for (WebElement tdElement : Cols) { + if (tdElement.getText().trim().contains((strLabelName + " " + strValue))) { + Log.info(" Expected value " + strLabelName + " : " + strValue + "- Value exist " + tdElement.getText().trim()); + flag = true; + return flag; + } + } + } + if (flag == false) + Log.error("Value does not exist: " + strLabelName + " : " + strValue); + return flag; + } + + + public boolean verifySplitDataInTableColumns(WebElement ele, String strLabelName, String strValue) throws Exception { + int col_num = 0, matchIndex = 0; + boolean flag = false; + List tableRows = ele.findElements(By.xpath("./tbody/tr")); + + for (WebElement trElement : tableRows) { + List Cols = trElement.findElements(By.tagName("td")); + for (WebElement tdElement : Cols) { + col_num++; + if (tdElement.getText().trim().contains(strLabelName)) { + matchIndex = col_num + 1; + } else if (matchIndex == col_num) { + if (tdElement.getText().trim().contains(strValue)) { + matchIndex = 0; + Log.info(" Expected value :" + strLabelName + " - " + strValue + "- value exist :" + tdElement.getText().trim()); + flag = true; + return flag; + } else { + Log.error(" Expected value :" + strLabelName + " - " + strValue + "- value exist :" + tdElement.getText().trim()); + flag = false; + return flag; + } + } + } + } + if (flag == false) + Log.error("Value does not exist: " + strLabelName + " : " + strValue); + return flag; + } + + public boolean verifyDataInTableRow(WebElement ele, String strLabelName, String strValue) throws Exception { + int col_num = 0, matchIndex = 0; + boolean flag = false; + + //Fetching web elemnts using the below xpath hanging inconsistently + //List tableRows = ele.findElements(By.xpath("./tbody/tr")); + List tableRows = ele.findElements(By.cssSelector("tbody>tr")); + + for (WebElement trElement : tableRows) { + /* if((replaceSpecialChar(trElement.getText()).trim().contains(strLabelName)) && replaceSpecialChar(trElement.getText()).trim().contains(strValue)){ + Log.info(" Value exist: " + strLabelName + " : " + strValue); + flag=true; + return flag; + }*/ + } + if (flag == false) + Log.error("Value does not exist: " + strLabelName + " : " + strValue); + return flag; + } + + public boolean verifyDataInNestedTables(WebElement ele, String strNestedLocator, String strNestedElement, String strTableHeaderLocator, String strTableHeaderElement, String strTableHeadertxt, String strLabelName, String strValue) throws Exception { + int col_num = 0, matchIndex = 0; + boolean flag = false; + List tables = ele.findElements(By.cssSelector(strNestedElement)); + + for (WebElement trElement1 : tables) { + WebElement tableHeaderElement = trElement1.findElement(By.cssSelector(strTableHeaderElement)); + if (strTableHeadertxt.contentEquals(tableHeaderElement.getText())) { + List tableRows = trElement1.findElements(By.xpath("./tbody/tr")); + for (WebElement trElement : tableRows) { + List Cols = trElement.findElements(By.tagName("td")); + for (WebElement tdElement : Cols) { + col_num++; + if (tdElement.getText().trim().contains(strLabelName)) + matchIndex = col_num + 1; + else if (matchIndex == col_num) { + if (tdElement.getText().contains(strValue)) { + matchIndex = 0; + Log.info("Expected value :" + strLabelName + " - " + strValue + "- Value exist " + tdElement.getText().trim()); + flag = true; + return flag; + } else { + Log.error("Expected value :" + strLabelName + " - " + strValue + "- Value exist " + tdElement.getText().trim()); + flag = false; + return flag; + } + } + } + } + } + } + if (flag == false) + Log.error("Value does not exist: " + strLabelName + " : " + strValue); + return flag; + } + + public boolean verifyDataInNestedTablesEquals(WebElement ele, String strNestedLocator, String strNestedElement, String strTableHeaderLocator, String strTableHeaderElement, String strTableHeadertxt, String strLabelName, String strValue) throws Exception { + int col_num = 0, matchIndex = 0; + boolean flag = false; + List tables = ele.findElements(By.cssSelector(strNestedElement)); + + for (WebElement trElement1 : tables) { + WebElement tableHeaderElement = trElement1.findElement(By.cssSelector(strTableHeaderElement)); + if (strTableHeadertxt.contentEquals(tableHeaderElement.getText())) { + List tableRows = trElement1.findElements(By.xpath("./tbody/tr")); + for (WebElement trElement : tableRows) { + List Cols = trElement.findElements(By.tagName("td")); + for (WebElement tdElement : Cols) { + col_num++; + if (tdElement.getText().trim().contentEquals(strLabelName)) + matchIndex = col_num + 1; + else if (matchIndex == col_num) { + if (tdElement.getText().contains(strValue)) { + matchIndex = 0; + Log.info("Expected value :" + strLabelName + " - " + strValue + "- Value exist " + tdElement.getText().trim()); + flag = true; + return flag; + } else { + Log.error("Expected value :" + strLabelName + " - " + strValue + "- Value exist " + tdElement.getText().trim()); + flag = false; + return flag; + } + } + } + } + } + } + if (flag == false) + Log.error("Value does not exist: " + strLabelName + " : " + strValue); + return flag; + } + + public WebElement waitForElement(WebElement elementToWaitFor, Integer waitTimeInSeconds) { + WebElement ele; + if (waitTimeInSeconds == null) { + waitTimeInSeconds = OBJWAITTIMEOUT; + } + + Wait wait = new FluentWait(this.driver) + .withTimeout(waitTimeInSeconds, TimeUnit.SECONDS) + .pollingEvery(500l, TimeUnit.MILLISECONDS) + .ignoring(NoSuchElementException.class) + .ignoring(StaleElementReferenceException.class); + + ele = wait.until(elementToBeClickable((By) elementToWaitFor)); + + if (ele.isDisplayed()) { + ele.getAttribute("value"); + Log.info("Element exist '" + ele.getText()); + } else { + Log.error("Element does not exist '" + ele.getText()); + } + return ele; + } + + public SeleniumUtilities(WebDriver driver) { + this(driver, SeleniumUtilities.DEFAULT_TIMEOUT_IN_SECONDS); + } + + public SeleniumUtilities(WebDriver driver, int elementWaitTime) { + this.driver = driver; + this.waitTime = elementWaitTime; + } + + /** + * Use when element is on the page or will be on the page. Can be used element is not on the page before the ajax call and will be on the page after the ajax call + * + * @param elementId + * @param value + */ + protected void waitUntilElementGetsValue(final String elementId, final String value) { + new FluentWait(driver).withTimeout(DEFAULT_TIMEOUT_IN_SECONDS, TimeUnit.SECONDS).pollingEvery(DEFAULT_SLEEP_TIME_IN_SECONDS, TimeUnit.SECONDS).ignoring(NoSuchElementException.class).until(new ExpectedCondition() { + public Boolean apply(WebDriver wd) { + WebElement element = wd.findElement(By.id(elementId)); + return element.getText().equals(value); + } + } + ); + } + + public void waitUntilElementExists(final By by) { + new FluentWait(driver).withTimeout(DEFAULT_TIMEOUT_IN_SECONDS, TimeUnit.SECONDS).pollingEvery(DEFAULT_SLEEP_TIME_IN_SECONDS, TimeUnit.SECONDS).ignoring(NoSuchElementException.class).until(new ExpectedCondition() { + public Boolean apply(WebDriver wd) { + wd.findElement(by); + return true; + } + } + ); + } + + + public String buildTextXML(String strValue) { + return "//div[./text()='" + strValue + "'];xpath"; + } + + public void elementShouldVisible(String locator, String element, int maxTry, int timeout) throws Exception { + WebElement ele = getWebElementObject(locator, element); + waitForObjectToLoad(ele); + Wait(timeout); + if (ele.isEnabled()) { + Log.info("Element visible '" + locator + "=" + element + "'"); + } else { + for (int i = 0; i < maxTry; i++) { + WebElement tryAgainele = getWebElementObject(locator, element); + if (tryAgainele.isEnabled()) { + Log.info("Element visible '" + locator + "=" + element + "'"); + break; + } else if (maxTry > i) { + Exception error = new Exception(element); + Log.error("Current page does not contain element '" + locator + "=" + element + "'"); + String Str = new String(error.getMessage()); + Log.error("Error Message :" + Str.substring(1, 240)); + throw error; + } + } + Exception error = new Exception(); + Log.error("Current page does not contain element '" + locator + "=" + element + "'"); + String Str = new String(error.getMessage()); + Log.error("Error Message :" + Str.substring(1, 240)); + throw error; + } + + + } + + public boolean elementShouldContain(String locator, String element, String strIntputData) throws Exception { + String strExtractedElementData = getElementText(locator, element, 1); + if (strExtractedElementData.contains(strIntputData)) { + Log.info("Verifying element'" + locator + "=" + element + "' contains text '" + strIntputData + "'"); + return true; + } else { + Log.error("Verifying element'" + locator + "=" + element + "' does not contains text '" + strIntputData + "'"); + return false; + } + } + + public boolean elementShouldNotContain(String locator, String element, String strIntputData) throws Exception { + String strExtractedElementData = getElementText(locator, element, 1); + if (!strExtractedElementData.contains(strIntputData)) { + Log.info("Verifying element'" + locator + "=" + element + "' contains text '" + strIntputData + "'"); + return true; + } else { + Log.error("Verifying element'" + locator + "=" + element + "' does not contains text '" + strIntputData + "'"); + return false; + } + } + + public void verifyText(String strExtractedData, String strIntputData) throws Exception { + if (strExtractedData.contains(strIntputData)) + Log.info("Verified data '" + strIntputData + "'"); + else + Log.error("Verified data does not exist :" + strIntputData); + } + + /** + * Adds specified number of days to the today's date + * + * @param Days Number of days to be added to the current date + * @return newdate New date returned after adding specified number of days to current date + */ + public String addDaystoCurrentDate(int Days) { + SimpleDateFormat dateformat = new SimpleDateFormat("MM/dd/yyyy"); + Calendar cal = Calendar.getInstance(); + cal.add(Calendar.DATE, Days); //Adding 1 day to current date + String newdate = dateformat.format(cal.getTime()); + Log.info("New date '" + newdate + "'"); + System.out.println(newdate); + return (newdate); + } + + + /** + * Adds specified duration to the start date and skip week ends + * + * @param Days Number of days to be added to the current date + * @return newdate New date returned after adding specified number of days to current date + */ + public String addDaystoCurrentDateSkipWeekEndsCount(int Days) { + SimpleDateFormat dateformat = new SimpleDateFormat("MM/dd/yyyy"); + Calendar cal = Calendar.getInstance(); + int daysCount = 1; + do { + cal.add(Calendar.DATE, 1); + if (cal.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY + || cal.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY) { + } else { + daysCount++; + } + if (daysCount == 30 && cal.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) { + cal.add(Calendar.DATE, 2); + } + + if (daysCount == 30 && cal.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY) { + cal.add(Calendar.DATE, 1); + } + + } while (daysCount < Days); + + String newdate = dateformat.format(cal.getTime()); + Log.info("New date '" + newdate + "'"); + System.out.println(newdate); + return (newdate); + } + + public String dateFormat(String strDateFormat, String strDate) throws ParseException { + SimpleDateFormat DEFAULTDATE_FORMAT = new SimpleDateFormat("MM/dd/yyyy"); + Date mDefaultDate = DEFAULTDATE_FORMAT.parse(strDate); + SimpleDateFormat DATE_FORMAT = new SimpleDateFormat(strDateFormat); + String newDate = DATE_FORMAT.format(mDefaultDate); + System.out.println("Today in dd-MM-yyyy format : " + strDateFormat); + return newDate; + } + + public String getDateFormat(String strDate) throws ParseException { + String newdate, strDateFormat = getCucumberContext().SESSION_DATE_FORMAT; + ; + switch (strDateFormat) { + case "dd/MM/yyyy": + newdate = dateFormat(strDateFormat, strDate); + break; + case "dd-MM-yyyy": + newdate = dateFormat(strDateFormat, strDate); + break; + case "dd.MM.yyyy": + newdate = dateFormat(strDateFormat, strDate); + break; + case "dd.MM.yyyy.": + newdate = dateFormat(strDateFormat, strDate); + break; + case "MM/dd/yyyy": + newdate = dateFormat(strDateFormat, strDate); + break; + case "MM-dd-yyyy": + newdate = dateFormat(strDateFormat, strDate); + break; + case "MM.dd.yyyy": + newdate = dateFormat(strDateFormat, strDate); + break; + case "MM.dd.yyyy.": + newdate = dateFormat(strDateFormat, strDate); + break; + case "yyyy-MM-dd": + newdate = dateFormat(strDateFormat, strDate); + break; + case "yyyy.MM.dd": + newdate = dateFormat(strDateFormat, strDate); + break; + case "yyyy.MM.dd.": + newdate = dateFormat(strDateFormat, strDate); + break; + + case "yyyy/MM/dd": + newdate = dateFormat(strDateFormat, strDate); + break; + case "yyyy.dd.MM": + newdate = dateFormat(strDateFormat, strDate); + break; + case "yyyy. MM. dd": + newdate = dateFormat(strDateFormat, strDate); + break; + case "MMMM d, yyyy": + newdate = dateFormat(strDateFormat, strDate); + break; + case "MMMM, yyyy": + newdate = dateFormat(strDateFormat, strDate); + break; + default: + newdate = dateFormat("MM/dd/yyyy", strDate); + break; + } + return (newdate); + } + + /** + * Clear the editable UI element + * + * @param propertyNameAndValue UI Property name and value delimited by ";" + * @param timeout customizable wait time for object to load + * @throws Exception + */ + public String getElementText(String locator, String element, int timeout) throws Exception { + WebElement ele = getWebElementObject(locator, element); + waitForObjectToLoad(ele); + Wait(timeout); + + if (ele.isDisplayed()) { + Log.info("Element text '" + ele.getText() + "' ''" + locator + "=" + element + "'"); + return ele.getText(); + } else { + Log.error("Element text does not exist '" + ele.getText() + "' ''" + locator + "=" + element + "'"); + return ""; + } + } + + /** + * Clear the editable UI element + * + * @param propertyNameAndValue UI Property name and value delimited by ";" + * @param timeout customizable wait time for object to load + * @throws Exception + */ + public void clear(String locator, String element, int timeout) throws Exception { + WebElement ele = getWebElementObject(locator, element); + waitForObjectToLoad(ele); + Wait(timeout); + if (ele.isDisplayed()) { + ele.clear(); + Log.info("Cleared text ''" + locator + "=" + element + "'"); + } else { + Exception error = new Exception(element); + Log.error("Current page does not contain element ''" + locator + "=" + element + "'"); + String Str = new String(error.getMessage()); + Log.error("Error Message :" + Str.substring(1, 240)); + throw error; + } + } + + public void clear(WebElement ele, int timeout) throws Exception { + waitForObjectToLoad(ele); + Wait(timeout); + if (ele.isDisplayed()) { + ele.clear(); + Log.info("Cleared text ''" + ele); + } else { + Exception error = new Exception(); + Log.error("Current page does not contain element ''" + ele); + String Str = new String(error.getMessage()); + Log.error("Error Message :" + Str.substring(1, 240)); + throw error; + } + } + + public void Enter(String locator, String element, int timeout) throws Exception { + WebElement ele = getWebElementObject(locator, element); + waitForObjectToLoad(ele); + Wait(timeout); + if (ele.isDisplayed()) { + ele = getClickableWebElementObject(locator, element); + ele.sendKeys(Keys.RETURN); + Log.info("Clicking element ''" + locator + "=" + element + "'"); + } else { + Exception error = new Exception(element); + Log.error("Current page does not contain element '" + locator + "=" + element + "'"); + String Str = new String(error.getMessage()); + Log.error("Error Message :" + Str.substring(1, 240)); + throw error; + } + + } + + + public void checkbox(String locator, String element, int timeout) throws Exception { + WebElement ele = getWebElementObject(locator, element); + waitForObjectToLoad(ele); + Wait(timeout); + if (ele.isDisplayed()) { + if (!ele.isSelected()) + ele.click(); + Log.info("Selected checkbox ''" + locator + "=" + element + "'"); + } else { + Exception error = new Exception(element); + Log.error("Current page does not contain element '" + locator + "=" + element + "'"); + String Str = new String(error.getMessage()); + Log.error("Error Message :" + Str.substring(1, 240)); + throw error; + } + + } + + /** + * Clicks the UI element + * + * @param propertyNameAndValue UI Property name and value delimited by ";" + * @param timeout customizable wait time for object to load + * @return none + */ + public void click(String locator, String element, int timeout) throws Exception { +// WebElement ele = getWebElementObject(locator, element); + WebElement ele = getClickableWebElementObject(locator, element); + waitForObjectToLoad(ele); + //Wait(timeout); + if (ele.isDisplayed()) { +// ele = getClickableWebElementObject(locator, element); +// ele.click(); + Actions builder = new Actions(driver); +// builder.moveToElement(ele).build().perform(); +// getClickableWebElementObject(locator, element).click(); + builder.moveToElement(ele); + builder.click(getClickableWebElementObject(locator, element)); + builder.build().perform(); + + Log.info("Clicking element ''" + locator + "=" + element + "'"); + } else { + Exception error = new Exception(element); + Log.error("Current page does not contain element '" + locator + "=" + element + "'"); + String Str = new String(error.getMessage()); + Log.error("Error Message :" + Str.substring(1, 240)); + throw error; + } + + } + + public void click(WebElement ele, int timeout) throws Exception { + waitForObjectToLoad(ele); + if (ele.isDisplayed()) { + Log.info("Clicking element ''" + ele.getText()); + Actions builder = new Actions(driver); + builder.moveToElement(ele); + builder.click(); + builder.build().perform(); + } else { + Exception error = new Exception(ele.getText()); + Log.error("Current page does not contain element '" + ele.getText()); + String Str = new String(error.getMessage()); + Log.error("Error Message :" + Str.substring(1, 240)); + throw error; + } + + } + + public void mouseOver(String locator, String element, int timeout) throws Exception { + WebElement ele = getWebElementObject(locator, element); + waitForObjectToLoad(ele); + if (ele.isDisplayed()) { + Actions builder = new Actions(driver); + builder.moveToElement(ele); + builder.build().perform(); + Log.info("mouse over to element ''" + locator + "=" + element + "'"); + } else { + Exception error = new Exception(element); + Log.error("Current page does not contain element '" + locator + "=" + element + "'"); + String Str = new String(error.getMessage()); + Log.error("Error Message :" + Str.substring(1, 240)); + throw error; + } + } + + public static void waitForTextToAppear(WebDriver newDriver, String textToAppear, WebElement element) { + WebDriverWait wait = new WebDriverWait(newDriver, 30); + wait.until(textToBePresentInElement(element, textToAppear)); + } + + public void moveToElement(WebElement ele, int timeout) throws Exception { + Actions builder = new Actions(driver); + builder.moveToElement(ele); + builder.build().perform(); + Log.info("move to element ''" + ele.getText()); + } + + public void selectHitEnterKey(String locator, String element, int timeout) throws Exception { + WebElement ele = getWebElementObject(locator, element); + waitForObjectToLoad(ele); + Wait(timeout); + if (ele.isDisplayed()) { + ele = getClickableWebElementObject(locator, element); + Actions action = new Actions(driver); + try { + action.moveToElement(ele).click().sendKeys(Keys.ENTER).build().perform(); + } catch (Exception e) { +// AllContractPagesView.focusWebElement(ele); + try { + ele.click(); + Log.info("Clicking element after last try of finding element"); + } catch (Exception last) { + Log.info("Unable to click element after last try of finding element " + last.getMessage()); + } + } + Log.info("Double clicking element ''" + locator + "=" + element + "'"); + } else { + Exception error = new Exception(element); + Log.error("Current page does not contain element '" + locator + "=" + element + "'"); + String Str = new String(error.getMessage()); + Log.error("Error Message :" + Str.substring(1, 240)); + throw error; + } + + } + + public void hitEnterKey(String locator, String element, int timeout) throws Exception { + WebElement ele = getWebElementObject(locator, element); + waitForObjectToLoad(ele); + Wait(timeout); + if (ele.isDisplayed()) { + ele = getClickableWebElementObject(locator, element); + Actions action = new Actions(driver); + action.moveToElement(ele).sendKeys(Keys.ENTER).build().perform(); + Log.info("Hit enter key on element''" + locator + "=" + element + "'"); + } else { + Exception error = new Exception(element); + Log.error("Current page does not contain element '" + locator + "=" + element + "'"); + String Str = new String(error.getMessage()); + Log.error("Error Message :" + Str.substring(1, 240)); + throw error; + } + + } + + public void escape(String locator, String element, int timeout) throws Exception { + WebElement ele = getWebElementObject(locator, element); + waitForObjectToLoad(ele); + Wait(timeout); + if (ele.isDisplayed()) { + ele = getClickableWebElementObject(locator, element); + Actions action = new Actions(driver); + action.moveToElement(ele).sendKeys(Keys.ESCAPE).build().perform(); + Log.info("escape element ''" + locator + "=" + element + "'"); + } else { + Exception error = new Exception(element); + Log.error("Current page does not contain element '" + locator + "=" + element + "'"); + String Str = new String(error.getMessage()); + Log.error("Error Message :" + Str.substring(1, 240)); + throw error; + } + + } + + public void tab(String locator, String element, int timeout) throws Exception { + WebElement ele = getWebElementObject(locator, element); + waitForObjectToLoad(ele); + Wait(timeout); + if (ele.isDisplayed()) { + ele = getClickableWebElementObject(locator, element); + Actions action = new Actions(driver); + action.moveToElement(ele).sendKeys(Keys.TAB).build().perform(); + Log.info("tab element ''" + locator + "=" + element + "'"); + } else { + Exception error = new Exception(element); + Log.error("Current page does not contain element '" + locator + "=" + element + "'"); + String Str = new String(error.getMessage()); + Log.error("Error Message :" + Str.substring(1, 240)); + throw error; + } + + } + + /** + * Clicks the UI element + * + * @param propertyNameAndValue UI Property name and value delimited by ";" + * @param timeout customizable wait time for object to load + * @return none + */ + public void enter(String locator, String element, int timeout) throws Exception { + WebElement ele = getWebElementObject(locator, element); + waitForObjectToLoad(ele); + Wait(timeout); + if (ele.isDisplayed()) { + ele = getClickableWebElementObject(locator, element); + ele.sendKeys(Keys.ENTER); + Log.info("Clicking element ''" + locator + "=" + element + "'"); + } else { + Exception error = new Exception(element); + Log.error("Current page does not contain element '" + locator + "=" + element + "'"); + String Str = new String(error.getMessage()); + Log.error("Error Message :" + Str.substring(1, 240)); + throw error; + } + + } + + /** + * types data into the editable UI element + * + * @param propertyNameAndValue UI Property name and value delimited by ";" + * @param value test data to be populated + * @param timeout customizable wait time for object to load + */ + public void type(String locator, String element, String value, int timeout) throws Exception { + WebElement ele = getWebElementObject(locator, element); + waitForObjectToLoad(ele); + Wait(timeout); + if (ele.isDisplayed()) { + ele.sendKeys(value); + Log.info("Typing text '" + value + "' into text field ''" + locator + "=" + element + "'"); + } else { + Exception error = new Exception(element); + Log.error("Current page does not contain element ''" + locator + "=" + element + "'"); + String Str = new String(error.getMessage()); + Log.error("Error Message :" + Str.substring(1, 240)); + throw error; + } + + } + + public void type(WebElement ele, String value, int timeout) throws Exception { + waitForObjectToLoad(ele); + Wait(timeout); + if (ele.isDisplayed()) { + ele.sendKeys(value); + Log.info("Typing text '" + value + "' into text field ''" + ele.getText()); + } else { + Exception error = new Exception(ele.getText()); + Log.error("Current page does not contain element ''" + ele.getText()); + String Str = new String(error.getMessage()); + Log.error("Error Message :" + Str.substring(1, 240)); + throw error; + } + + } + + public void typeHitTab(String locator, String element, String value, int timeout) throws Exception { + WebElement ele = getWebElementObject(locator, element); + waitForObjectToLoad(ele); + Wait(timeout); + if (ele.isDisplayed()) { + Actions action = new Actions(driver); + action.doubleClick(ele).sendKeys(Keys.chord(Keys.CONTROL, "a"), value).perform(); + action.moveToElement(ele).click(ele).sendKeys(Keys.TAB).build().perform(); + Log.info("Typing text '" + value + "' into text field ''" + locator + "=" + element + "'"); + } else { + Exception error = new Exception(element); + Log.error("Current page does not contain element ''" + locator + "=" + element + "'"); + String Str = new String(error.getMessage()); + Log.error("Error Message :" + Str.substring(1, 240)); + throw error; + } + + } + + public void typeHitEnter(String locator, String element, String value, int timeout) throws Exception { + WebElement ele = getWebElementObject(locator, element); + waitForObjectToLoad(ele); + Wait(timeout); + if (ele.isDisplayed()) { + Actions action = new Actions(driver); + action.moveToElement(ele).click(ele).sendKeys(value).sendKeys(Keys.ENTER).build().perform(); + Log.info("Typing text '" + value + "' into text field ''" + locator + "=" + element + "'"); + } else { + Exception error = new Exception(element); + Log.error("Current page does not contain element ''" + locator + "=" + element + "'"); + String Str = new String(error.getMessage()); + Log.error("Error Message :" + Str.substring(1, 240)); + throw error; + } + + } + + public static List getDropDownOptions(WebElement webElement) { + Select select = new Select(webElement); + return select.getOptions(); + } + + public String getFirstSelectedOption(String locator, String element, int timeout) throws Exception { + WebElement ele = getWebElementObject(locator, element); + waitForObjectToLoad(ele); + Wait(timeout); + if (ele.isDisplayed()) { + ele = getWebElementObject(locator, element); + Select list = new Select(ele); + Log.info("Selected '" + list.getFirstSelectedOption().getText() + "' from dropdown ''" + locator + "=" + element + "'"); + return list.getFirstSelectedOption().getText(); + } else { + Exception error = new Exception(element); + Log.error("Current page does not contain element ''" + locator + "=" + element + "'"); + String Str = new String(error.getMessage()); + Log.error("Error Message :" + Str.substring(1, 240)); + throw error; + } + + } + + public void getDropDownOption(WebElement ele, String value) throws Exception { + waitForObjectToLoad(ele); + if (ele.isDisplayed()) { + Select list = new Select(ele); + list.selectByVisibleText(value); + Log.info("Selected '" + value + "' from dropdown"); + } else { + Exception error = new Exception(value); + Log.error("Current page does not contain element"); + String Str = new String(error.getMessage()); + Log.error("Error Message :" + Str.substring(1, 240)); + throw error; + } + } + + public void selectRepeatedly(String locator, String element, String value) { + try { + WebElement ele = getWebElementObject(locator, element); + ele = getWebElementObject(locator, element); + Select list = new Select(ele); + int count = 0; +// AllContractPagesView.focusWebElement(ele); + while (!list.getFirstSelectedOption().getText().trim().equals(value.trim()) && count < 10) { + list.selectByVisibleText(value); +// AllContractPagesView.focusWebElement(ele); + count++; + if (count == 10) { + break; + } + } + } catch (Exception e) { + } + } + + /** + * Selects the specified Web Radio button + * + * @param propertyNameAndValue UI Property name and value delimited by ";" + * @param value test data to be populated + * @timeout customizable wait time for object to load + */ + public void select(String locator, String element, String value, int timeout) throws Exception { + WebElement ele = getWebElementObject(locator, element); + waitForObjectToLoad(ele); + Wait(timeout); + if (ele.isDisplayed()) { + ele = getWebElementObject(locator, element); + Select list = new Select(ele); + list.selectByVisibleText(value); + selectRepeatedly(locator, element, value); + Log.info("Selected '" + value + "' from dropdown ''" + locator + "=" + element + "'"); + } else { + Exception error = new Exception(element); + Log.error("Current page does not contain element ''" + locator + "=" + element + "'"); + String Str = new String(error.getMessage()); + Log.error("Error Message :" + Str.substring(1, 240)); + throw error; + } + + } + + public void select(WebElement ele, String value, int timeout) throws Exception { + waitForObjectToLoad(ele); + Wait(timeout); + if (ele.isDisplayed()) { + Select list = new Select(ele); + list.selectByVisibleText(value); + Log.info("Selected '" + value + "' from dropdown ''" + ele.getText()); + } else { + Exception error = new Exception(ele.getText()); + Log.error("Current page does not contain element ''" + ele.getText()); + String Str = new String(error.getMessage()); + Log.error("Error Message :" + Str.substring(1, 240)); + throw error; + } + + } + + /** + * Selects the drop down box by value + * + * @param propertyNameAndValue UI Property name and value delimited by ";" + * @param value test data to be populated + * @timeout customizable wait time for object to load + */ + public void selectByValue(String locator, String element, String value, int timeout) throws Exception { + WebElement ele = getWebElementObject(locator, element); + waitForObjectToLoad(ele); + Wait(timeout); + if (ele.isDisplayed()) { + Select list = new Select(ele); + list.selectByValue(value); + Log.info("Selected '" + value + "' from dropdown ''" + locator + "=" + element + "'"); + } else { + Exception error = new Exception(element); + Log.error("Current page does not contain element ''" + locator + "=" + element + "'"); + String Str = new String(error.getMessage()); + Log.error("Error Message :" + Str.substring(1, 240)); + throw error; + } + + } + + /** + * Types the date in date web control + * + * @param propertyNameAndValue UI Property name and value delimited by ";" + * @param value date value to be populated + * @param timeout customizable wait time for object to load + */ + public void dateType(String locator, String element, String value, int timeout) throws Exception { + WebElement ele = getWebElementObject(locator, element); + waitForObjectToLoad(ele); + Wait(timeout); + if (ele.isDisplayed()) { + ele.clear(); + if (value.contains("/")) { + ele.sendKeys(value); + } else { + String curDate = currentDate(Integer.parseInt(value)); + ele.sendKeys(curDate); + } + driver.findElement(By.className("ui-datepicker-close")).click(); // Click on the Close line in datepicker window. + Wait(1); + Log.info("Clicking element ''" + locator + "=" + element + "'"); + } else { + Exception error = new Exception(element); + Log.error("Current page does not contain element ''" + locator + "=" + element + "'"); + String Str = new String(error.getMessage()); + Log.error("Error Message :" + Str.substring(1, 240)); + throw error; + } + + } + + public void clickOnCellValue(String locator, String element, String cellValue) throws Exception { + WebElement ele = getWebElementObject(locator, element); + waitForObjectToLoad(ele); + if (ele.isDisplayed()) { + List tblRow = ele.findElements(By.tagName("tr")); + for (int i = 0; i <= tblRow.size(); i++) { + System.out.println(tblRow.get(i).toString()); + Log.info("Clicking element ''" + locator + "=" + element + "'"); + } + + } else { + Exception error = new Exception(element); + Log.error("Current page does not contain element ''" + locator + "=" + element + "'"); + String Str = new String(error.getMessage()); + Log.error("Error Message :" + Str.substring(1, 240)); + throw error; + } + } + + /** + * Determines the type of the UI web element based on the UI obeject description + * + * @param propValue UI object name description + * @param propName type of the property descrtiption like "id","name", "xpath", tagname" etc + * @return the identified web element + * @throws Exception + */ + public WebElement getWebElementObject(String locator, String element) throws Exception { + By byElement; + try { + byElement = getElementBy(locator, element); + Wait wait = new FluentWait(this.driver) + .withTimeout(this.waitTime, TimeUnit.SECONDS) + .pollingEvery(500l, TimeUnit.MILLISECONDS) + .ignoring(NoSuchElementException.class) + .ignoring(StaleElementReferenceException.class); + + WebElement webelement = wait.until(presenceOfElementLocated(byElement)); + waitForObjectToLoad(webelement); + return webelement; // return webelement object + } catch (Exception ex) { + String Str = new String(ex.getMessage()); + Log.error("Error Message :" + Str.substring(1, 240)); + throw ex; + } + } + + public List getWebElementObjects(String locatorType, String locator, int counter, int timeOut) throws Exception { + List eles = null; + for (int i = 0; i < counter; i++) { + try { + BaseView.pushShortTimeout(1); + eles = BrowserDriver.getCurrentDriver().findElements(getElementBy(locatorType, locator)); + for (WebElement ele : eles) { + WebDriverWait wait = new WebDriverWait(BrowserDriver.getCurrentDriver(), timeOut); + ele = wait.until(visibilityOf(ele)); + if (ele.isDisplayed()) return eles; + } + } catch (StaleElementReferenceException se) { + + } catch (Exception ne) { + Log.error("Webelements does not exist : " + locatorType + " : " + locator + "counter :" + counter); + } finally { + BaseView.popDefaultTimeout(); + } + } + return eles; + } + + public WebElement getClickableWebElementObject(String locator, String element) throws Exception { + By byElement; + try { + byElement = getElementBy(locator, element); + Wait wait = new FluentWait(this.driver) + .withTimeout(this.waitTime, TimeUnit.SECONDS) + .pollingEvery(500l, TimeUnit.MILLISECONDS) + .ignoring(NoSuchElementException.class) + .ignoring(StaleElementReferenceException.class); + + WebElement webelement = wait.until(elementToBeClickable(byElement)); + wait.until(visibilityOf(webelement)); + waitForObjectToLoad(webelement); + return webelement; // return webelement object + } catch (Exception ex) { + String Str = new String(ex.getMessage()); + Log.error("Error Message :" + Str.substring(1, 240)); + throw ex; + } + } + + public WebElement getClickableWebElementObject(WebElement byElement) throws Exception { + try { + Wait wait = new FluentWait(this.driver) + .withTimeout(this.waitTime, TimeUnit.SECONDS) + .pollingEvery(500l, TimeUnit.MILLISECONDS) + .ignoring(NoSuchElementException.class) + .ignoring(StaleElementReferenceException.class); + + WebElement webelement = wait.until(elementToBeClickable(byElement)); + wait.until(visibilityOf(webelement)); + waitForObjectToLoad(webelement); + return webelement; // return webelement object + } catch (Exception ex) { + String Str = new String(ex.getMessage()); + Log.error("Error Message :" + Str.substring(1, 240)); + throw ex; + } + } + + public void Wait(int timeout) { + long t1, t2; + t1 = System.currentTimeMillis(); + + do { + t2 = System.currentTimeMillis(); + } + while ((t2 - t1) < (timeout * 1000)); + + } + + /** + * Waits for the UI object to completed load on webpage + * + * @param ele UI element for which wait time is required to load + */ + public void waitForObjectToLoad(WebElement ele) { + boolean isExist = false; + int cntr = 0; + while (!isExist) { + if (ele.isDisplayed()) { + isExist = true; + } else { + Wait(1); + cntr++; + if (cntr >= 240) { // Maximum wait time is for 120 seconds i.e. 2 minutes + //fail + isExist = true; + } + } + } + } + + public static String currentDate(int num) { + Calendar c1 = Calendar.getInstance(); + c1.add(Calendar.DATE, num); + return formatter.format(c1.getTime()); + } + + /** + * checks whether the element is present on webpage + * + * @param by String UI object reference + * @return returns true or false based on whether UI object present on the webpage + */ + public boolean isElementPresent(String by) { + try { + driver.findElement(By.xpath(by)); + Log.info("Element " + by + " exist."); + return true; + } catch (NoSuchElementException e) { + Log.info("Element does not " + by + " exist."); + return false; + } + } + + /** + * checks whether the element is present on webpage + * + * @param by UI object reference + * @return returns true or false based on whether UI object present on the webpage + */ + public boolean isElementPresent(By by) { + try { + driver.findElement(by); + return true; + } catch (NoSuchElementException e) { + return false; + } + } + + + /** + * Handles intestistial page + */ + public void handle() { + try { + + String windowHandle = driver.getWindowHandle(); + driver.switchTo().window(windowHandle); + + } catch (Exception e) { + System.out.println(e); + } + + } + + public void switchToFrame(int index) { + try { + driver.switchTo().frame(index); + } catch (Exception e) { + Log.error("Error :" + e.getMessage()); + } + } + + public void switchTodefaultContent() { + try { + driver.switchTo().defaultContent(); + } catch (Exception e) { + Log.error("Error :" + e.getMessage()); + } + } + + /** + * Clicks on the link present on a webtable for a specifed row and column + * + * @param ele UI element for which wait time is required to load + * @throws Exception + */ + public void randomClick(String locator, String element, int ClickRow, int ClickCol) throws Exception { + int row_num = 1, col_num, ClickedFlag = 0; + WebElement TableElement = getWebElementObject(locator, element); + List Rows = TableElement.findElements(By.xpath("id('" + element + "')/tbody/tr")); + for (WebElement trElement : Rows) { + if (row_num > ClickRow) { + List Cols = trElement.findElements(By.xpath("td")); + col_num = 1; + for (WebElement tdElement : Cols) { + if (col_num > ClickCol) { + if (tdElement.getText() != "") + if (tdElement.getText() != "N/A") + if (tdElement.getText().length() < 12) { + driver.findElement(By.linkText(tdElement.getText())).click(); + ClickedFlag = 1; + break; + } + System.out.println("row # " + row_num + ", col # " + col_num + "text=" + tdElement.getText()); + } + col_num++; + } + if (ClickedFlag == 1) + break; + } + row_num++; + } + } + + public int getTableRowCount(String locator, String element) throws Exception { + WebElement TableElement = getWebElementObject(locator, element); + List Rows = TableElement.findElements(By.xpath(element)); + Log.info("Total Rows '" + Rows.size() + "' ''" + locator + "=" + element + "'"); + return Rows.size(); + } + + public String getTableColumnValue(String locator, String element, int intRow, int intCol) throws Exception { + int row_num = 1, col_num, boolExitFlag = 0; + String strColText = ""; + WebElement TableElement = getWebElementObject(locator, element); + List Rows = TableElement.findElements(By.xpath("" + element + "/tbody/tr")); + for (WebElement trElement : Rows) { + if (row_num == intRow) { + List Cols = trElement.findElements(By.xpath("td")); + col_num = 1; + for (WebElement tdElement : Cols) { + if (col_num == intCol) { + strColText = tdElement.getText(); + Log.info("Extracted element value '" + tdElement.getText() + "' ''" + locator + "=" + element + "'"); + boolExitFlag = 1; + break; + } + } + if (boolExitFlag == 1) + break; + } + } + row_num++; + return strColText; + } + + public String getLastIndexTextValue(String locator, String element, int timeout) throws Exception { + //String[] propertyNameValue= propertyNameAndValue.split(";"); + List eles = driver.findElements(getElementBy(locator, element)); + if (eles.get(eles.size() - 1).isDisplayed()) { + Log.info("Extracted element value '" + eles.get(eles.size() - 1).getText() + "' ''" + locator + "=" + element + "'"); + return eles.get(eles.size() - 1).getText().trim(); + } else { + Exception error = new Exception(element); + Log.error("Current page does not contain element ''" + locator + "=" + element + "'"); + String Str = new String(error.getMessage()); + Log.error("Error Message :" + Str.substring(1, 240)); + throw error; + } + } + + public boolean verifyTextValue(String locator, String element, String strMsg, int timeout) { + boolean flag = false; + try { + List eles = driver.findElements(getElementBy(locator, element)); + + for (int i = 0; i < eles.size(); i++) { +// AllContractPagesView.focusWebElement(eles.get(i)); + if (eles.get(i).getText().trim().contains(strMsg.trim())) { + flag = true; + Log.info("Extracted element value '" + eles.get(i).getText() + "' ''" + locator + "=" + element + "'"); + return flag; + } + } + if (flag == false) { + Log.error("Current page does not contain element ''" + locator + "=" + element + "'"); + } + } catch (Exception ex) { + return false; + } + return flag; + } + + public Boolean isElementExist(String locator, String element) { + Boolean flag = false; + try { + if (getWebElementObject(locator, element).isDisplayed()) + flag = true; + } catch (Exception ex) { + flag = false; + } + return flag; + } + + /** + * Captures the text value of the web element + * + * @param propertyNameAndValue UI Property name and value delimited by ";" + * @param timeout customizable wait time for object to load + * @return ele returns the captured text + */ + public String getTextValue(String locator, String element, int timeout) throws Exception { + //String[] propertyNameValue= propertyNameAndValue.split(";"); + WebElement ele = getWebElementObject(locator, element); + waitForObjectToLoad(ele); + Wait(timeout); + if (ele.isDisplayed()) { + ele = getWebElementObject(locator, element); + Log.info("Extracted element value '" + ele.getText() + "' ''" + locator + "=" + element + "'"); + return ele.getText().trim(); + } else { + Exception error = new Exception(element); + Log.error("Current page does not contain element ''" + locator + "=" + element + "'"); + String Str = new String(error.getMessage()); + Log.error("Error Message :" + Str.substring(1, 240)); + throw error; + } + + } + + public String getTextValue(WebElement ele, int timeout) throws Exception { + waitForObjectToLoad(ele); + Wait(timeout); + if (ele.isDisplayed()) { + Log.info("Extracted element value '" + ele.getText() + "' ''" + ele); + return ele.getText().trim(); + } else { + Exception error = new Exception(); + Log.error("Current page does not contain element ''" + ele); + String Str = new String(error.getMessage()); + Log.error("Error Message :" + Str.substring(1, 240)); + throw error; + } + + } + + /** + * Checks whether element is enabled in UI. + * + * @param element The UI element to be validated + * @return true or false depending on whether UI element is enabled. + */ + + public static boolean assertNull(WebElement element) { + try { + // call any method on the element + element.isEnabled(); + Log.info("Element enabled"); + } catch (Exception ex) { + Log.error("Current page does not contain element"); + String Str = new String(ex.getMessage()); + Log.error("Error Message :" + Str.substring(1, 240)); + return true; + } + return false; + } + + /** + * Checks whether element is not enabled in UI. + * + * @param element The UI element to be validated + * @return true or false depending on whether UI element is enabled. + */ + public static boolean assertNotNull(WebElement element) { + try { + // call any method on the element + if (element.isEnabled()) + Log.info("Element enabled"); + } catch (Exception ex) { + Log.error("Current page does not contain element"); + String Str = new String(ex.getMessage()); + Log.error("Error Message :" + Str.substring(1, 240)); + return false; + } + return true; + } + + /* + * findWebelement method looks for the presence of the element and clicks on the same. + * + * @param xpath String: xpath is the element + */ + public void findWebElement(String xpath) { + WebElement Elements = null; + + try { + By ElementLocator = By.xpath(xpath); + Elements = driver.findElement(ElementLocator); + Elements.click(); + Log.info("Clicking element"); + } catch (Exception Ex) { + Log.error("Current page does not contain element"); + String Str = new String(Ex.getMessage()); + Log.error("Error Message :" + Str.substring(1, 240)); + System.out.println("FindWebElement Functiion : " + Ex.getMessage()); + } + } + + /** + * Returns the Attribute value for a given Webelement object + * + * @param propertyNameAndValue: Webelement object + * @param attribute: Attribute name for which the value to be returned + * *@param timeout: default timeout + * @return Attribute value + */ + public String getAttributeValue(String locator, String element, String attribute, int timeout) throws Exception { + //String[] propertyNameValue= propertyNameAndValue.split(";"); + WebElement ele = getWebElementObject(locator, element); + waitForObjectToLoad(ele); + Wait(timeout); + if (ele.isDisplayed()) { + Log.info("Attribute of the element '" + ele.getAttribute(attribute) + "' ''" + locator + "=" + element + "'"); + return ele.getAttribute(attribute); + } else { + Exception error = new Exception(element); + Log.error("Current page does not contain element ''" + locator + "=" + element + "'"); + String Str = new String(error.getMessage()); + Log.error("Error Message :" + Str.substring(1, 240)); + throw error; + } + } + + + /** + * This method returns the Selected item value from the dropdown. + * + * @param propertyNameAndValue: Listbox Object + * @param timeout: default timeout + * @return String : Item value selected in the dropdown + */ + public String getSelectedValue(String locator, String element, int timeout) throws Exception { + //String[] propertyNameValue= propertyNameAndValue.split(";"); + WebElement ele = getWebElementObject(locator, element); + Wait(timeout); + if (ele.isDisplayed()) { + Select list = new Select(ele); + WebElement val = list.getFirstSelectedOption(); + Log.info("Selected '" + val.getText() + "' ''" + locator + "=" + element + "'"); + return val.getText(); + } else { + Exception error = new Exception(element); + Log.error("Current page does not contain element ''" + locator + "=" + element + "'"); + String Str = new String(error.getMessage()); + Log.error("Error Message :" + Str.substring(1, 240)); + throw error; + } + + } + + public String getTableText(String locator, String element) throws Exception { + WebElement TableElement = getWebElementObject(locator, element); + Log.info("Table Value '" + TableElement.getText() + "' ''" + locator + "=" + element + "'"); + return TableElement.getText(); + } + + public List getTableValues(String locator, String element, int ClickRow, int ClickCol) throws Exception { + WebElement TableElement = getWebElementObject(locator, element); + List Rows = TableElement.findElements(By.xpath(element + "/tbody/tr")); + Log.info("Selected '" + TableElement.getText() + "' ''" + locator + "=" + element + "'"); + return Rows; + } + + public int getXpathCount(String xpathValue) throws Exception { + return driver.findElements(By.xpath(xpathValue)).size(); + } + + public WebDriver getWebDriver() { + return driver; + } + +// public void getChildWindow(boolean flag) throws Throwable{ +// try{ +// if(flag){ +// parentBrowser = driver.getWindowHandle(); +// Iterator i = driver.getWindowHandles().iterator(); +// while(i.hasNext()) { +// String childBrowser = i.next(); +// driver.switchTo().window(childBrowser); +// } +// }else{ +// driver.close(); +// driver.switchTo().window(parentBrowser); +// } +// } catch (Exception e) { +// } +// } + + public void getChildWindow(boolean flag) throws Throwable { + try { + parentBrowser = driver.getWindowHandle(); + if (flag) { + Iterator i = driver.getWindowHandles().iterator(); + while (i.hasNext()) { + String childBrowser = i.next(); + driver.switchTo().window(childBrowser); + } + } + driver.close(); + driver.switchTo().window(parentBrowser); + } catch (Exception e) { + } + } + + public void waitForPopUp(long count) throws Throwable { + int time = 0; + boolean flag = false; + try { + while (time < count) { + time++; + Thread.sleep(1000); + Set i = driver.getWindowHandles(); + if (i.toArray().length > 1) { + flag = true; + break; + } + } + if (time == count) { + throw new Exception("Pop up not found"); + } + } catch (Exception e) { + } + } + + public boolean handelPopWindow(long count) { + int time = 0; + boolean flag = false; + try { + while (time < count) { + time++; + Thread.sleep(1000); + Set i = driver.getWindowHandles(); + if (i.toArray().length > 1) { + flag = true; + return flag; + //break; + } + } + if (time == count) { + throw new Exception("Pop up not found"); + } + } catch (Exception e) { + } + return flag; + } + + public void verifyLabelAndValuePair(String strType, String strValue) throws Exception { + Assert.assertTrue("Expected type " + strType + " and pair " + strValue + " NOT found", getWebElementObject("xpath", "//td[contains(text(),'" + strType + "')]//following-sibling::td").getText().trim().replace(",", "").replace(".", "").contains(strValue.replace(",", "").replace(".", ""))); + Log.info("Expected type " + strType + " and pair " + strValue + " exist"); + } + + + public void focusAndClick(String locator, String element, int timeout) throws Exception { + WebElement ele = getWebElementObject(locator, element); + waitForObjectToLoad(ele); + Wait(timeout); + if (ele.isDisplayed()) { + ele = getClickableWebElementObject(locator, element); +// ele.sendKeys(""); +// ele.click(); + Actions builder = new Actions(driver); + builder.moveToElement(ele); + builder.sendKeys(""); + builder.click(); + builder.build().perform(); + + Log.info("Clicking element ''" + locator + "=" + element + "'"); + } else { + Exception error = new Exception(element); + Log.error("Current page does not contain element '" + locator + "=" + element + "'"); + String Str = new String(error.getMessage()); + Log.error("Error Message :" + Str.substring(1, 240)); + throw error; + } + + } + + public void moveToElement(String locator, String element, int timeout) throws Exception { + WebElement ele = getWebElementObject(locator, element); + waitForObjectToLoad(ele); + Wait(timeout); + if (ele.isDisplayed()) { + ele = getClickableWebElementObject(locator, element); + Actions builder = new Actions(driver); + builder.moveToElement(ele); +// builder.sendKeys(""); + builder.build().perform(); + ele.sendKeys(""); + Log.info("Clicking element ''" + locator + "=" + element + "'"); + } else { + Exception error = new Exception(element); + Log.error("Current page does not contain element '" + locator + "=" + element + "'"); + String Str = new String(error.getMessage()); + Log.error("Error Message :" + Str.substring(1, 240)); + throw error; + } + + } + + public By getElementBy(String locator, String element) throws Exception { + By byElement; + try { + switch (Locators.valueOf(locator.toLowerCase())) { // determine which locator item we are interested in + case xpath: { + byElement = By.xpath(element); + break; + } + case id: { + byElement = By.id(element); + break; + } + case name: { + byElement = By.name(element); + break; + } + case classname: { + byElement = By.className(element); + break; + } + case linktext: { + byElement = By.linkText(element); + break; + } + case paritallinktext: { + byElement = By.partialLinkText(element); + break; + } + case tagname: { + byElement = By.tagName(element); + break; + } + case cssselector: { + byElement = By.cssSelector(element); + break; + } + default: { + throw new InvalidSelectorException(locator + + " is not a valid Selector."); + } + } + return byElement; + } catch (Exception ex) { + String Str = new String(ex.getMessage()); + Log.error("Error Message :" + Str.substring(1, 240)); + throw ex; + } + } + + public void clickElement(String locator, String element, int count) throws Exception { + int localCount = 0; + while (!(localCount == count)) { + + try { + //This element focus will work only for link, input etc. Therefore surrounded with try catch + try { + getWebElementObject(locator, element).sendKeys(""); + getClickableWebElementObject(locator, element).sendKeys(""); + + } catch (Exception e) { + } +// getWebElementObject(locator, element).click(); + click(locator, element, waitTime); + break; + } catch (StaleElementReferenceException e) { + localCount++; + } + } + } + + public void handleUnexpectedAlerts() throws Exception { + try { +// ForceWaitForItem.delay(10000); + WebDriverWait wait = new WebDriverWait(driver, 4); + wait.ignoring(NoAlertPresentException.class) + .until(alertIsPresent()); + Alert alert = BrowserDriver.getCurrentDriver().switchTo().alert(); + alert.accept(); + } catch (Exception e) { + } + } + + public void handleParticularAlert(String alertMessage) throws Exception { + try { + WebDriverWait wait = new WebDriverWait(BrowserDriver.getCurrentDriver(), 5); + wait.until(alertIsPresent()); + Alert alert = BrowserDriver.getCurrentDriver().switchTo().alert(); + if (alertMessage.trim().contains(alert.getText().trim())) { + alert.accept(); + } else { + System.out.println("Alert not found"); + } + } catch (Exception e) { + } + } + + public void dismissUnexpectedAlerts() throws Exception { + try { +// ForceWaitForItem.delay(5000); + WebDriverWait wait = new WebDriverWait(driver, 10); + wait.ignoring(NoAlertPresentException.class) + .until(alertIsPresent()); + + Alert alert = BrowserDriver.getCurrentDriver().switchTo().alert(); + alert.dismiss(); + } catch (Exception e) { + } + } + + public void switchToFrameHavingElement(String locatorType, String locator) { + int count = 0; + driver.switchTo().defaultContent(); + + //Wait for frame to load + WebDriverWait wait = new WebDriverWait(driver, OBJWAITTIMEOUT); + wait.until(frameToBeAvailableAndSwitchToIt(By.cssSelector("iframe"))); + + driver.switchTo().defaultContent(); + List elements = this.getWebDriver().findElements(By.cssSelector("iframe")); + Log.info("Number of frames in this page : " + elements.size()); + + for (WebElement e : elements) { + driver.switchTo().defaultContent(); + System.out.println(e.getAttribute("src")); + driver.switchTo().frame(e); + try { + this.getWebElementObject(locatorType, locator); + Log.info("Element is found in frame " + (count + 1)); + break; + } catch (Exception ec) { + count++; + } + } + if (count == elements.size()) { + Log.info("Element is not found in any of the frames"); + driver.switchTo().defaultContent(); + //throw new NoSuchElementException("Element is not found in any of the frames"); + } + } + + public boolean getFrameIndex(String locatorType, String locator) { + int count = 0; + boolean flag = false; + driver.switchTo().defaultContent(); + + //Wait for frame to load + WebDriverWait wait = new WebDriverWait(driver, OBJWAITTIMEOUT); + wait.until(frameToBeAvailableAndSwitchToIt(By.cssSelector("iframe"))); + + driver.switchTo().defaultContent(); + List elements = this.getWebDriver().findElements(By.cssSelector("iframe")); + Log.info("Number of frames in this page : " + elements.size()); + + for (WebElement e : elements) { + driver.switchTo().defaultContent(); + System.out.println(e.getAttribute("src")); + driver.switchTo().frame(e); + try { +// if(count!=0) { + BaseView.pushShortTimeout(1); + this.getWebElementObject(locatorType, locator); + Log.info("Element is found in frame " + (count + 1)); + flag = true; + break; +// } +// count++; + } catch (Exception ec) { + count++; + } finally { + BaseView.popDefaultTimeout(); + } + } +// if (count == elements.size()) { +// Log.info("Element is not found in any of the frames"); +// driver.switchTo().defaultContent(); +// //throw new NoSuchElementException("Element is not found in any of the frames"); +// } + return true; + } + + public static void selectDropdownOption(By by, String optionName) { + + WebElement optionNames = BrowserDriver.getCurrentDriver().findElement(by); + Select select = new Select(optionNames); + select.selectByVisibleText(optionName); + + } + /*public void waitForPageLoad() { + + try{ + JavascriptExecutor js = (JavascriptExecutor)driver; + final boolean response = js.executeScript("return document.readyState").equals("complete"); + WebDriverWait wait = new WebDriverWait(driver,30000,5000); + wait.until(new Predicate() { + public boolean apply(WebDriver arg0) { + return response; + } + }); + Log.info("Page is loaded completely...."); + }catch(Exception e){ + //Ignore + } + }*/ + +// private void readExcelSheet(String destFile){ +// File excelSheet = null; +// Workbook workbook = null; +// +// try { +// Workbook wb = Workbook.getWorkbook(new File(destFile)); +// System.out.println(wb.getNumberOfSheets()); +// for(int sheetNo=0; sheetNo tableRows = ele.findElements(By.xpath("./tbody/tr")); + for (WebElement trElement : tableRows) { + List Cols = trElement.findElements(By.tagName("td")); + for (WebElement tdElement : Cols) { + // System.out.println(tdElement.getText().trim()+"===="+strLabelName+":"+strValue); + if (tdElement.getText().trim().contains((strLabelName + "\n" + strValue))) { + Log.info(" Expected value " + strLabelName + " : " + strValue + "- Value exist " + tdElement.getText().trim()); + flag = true; + return flag; + } + } + } + if (flag == false) + Log.error("Value does not exist: " + strLabelName + " : " + strValue); + return flag; + } + + public WebElement getWebElementWithoutStaleness(String locator, String element) throws Exception { + By byElement; + WebElement webelement = null; + int staleElementCount = 0; + do { + try { + byElement = getElementBy(locator, element); + WebDriverWait wait = new WebDriverWait(BrowserDriver.getCurrentDriver(), WEBDRIVER_WAIT_SMALL); + wait.until(not(stalenessOf(BrowserDriver.getCurrentDriver().findElement(byElement)))); + webelement = BrowserDriver.getCurrentDriver().findElement(byElement); + break; + } catch (StaleElementReferenceException se) { + staleElementCount++; + } catch (NoSuchElementException ne) { + BaseView.takeScreenshot("ElementNotFound.png"); + fail("Element not found in the DOM " + ne.getMessage()); + } + } while (!(staleElementCount > 15)); + return webelement; + } + + public static boolean waitForNonStaleWebElement(WebElement element, int timeOut) { + boolean flag = false; + try { + WebDriverWait wait = new WebDriverWait(BrowserDriver.getCurrentDriver(), timeOut); + return wait.until(not(stalenessOf(element))); + } catch (Exception e) { + Log.info("Error: Waited for non stale element for " + timeOut + " seconds but no use..."); + return flag; + } finally { + BaseView.popDefaultTimeout(); + } + } + + public static boolean waitForNonStaleWebElement(WebElement element, int counter, int timeOut) { + boolean flag = false; + for (int i = 0; i < counter; i++) { + try { + WebDriverWait wait = new WebDriverWait(BrowserDriver.getCurrentDriver(), timeOut); + boolean ele = wait.until(not(stalenessOf(element))); + if (ele) return ele; + } catch (Exception e) { + Log.info("Error: Waited for non stale element for " + timeOut + " seconds but no use..."); + } finally { + BaseView.popDefaultTimeout(); + } + } + return flag; + } + + public boolean waitForNonStaleWebElement(String locatorType, String locator, int timeOut) { + boolean flag = false; + try { + BaseView.pushShortTimeout(2); + WebElement element = getWebElementObject(locatorType, locator); + WebDriverWait wait = new WebDriverWait(BrowserDriver.getCurrentDriver(), timeOut); + return wait.until(not(stalenessOf(element))); +// flag = wait.until(ExpectedConditions.not(ExpectedConditions.stalenessOf(element))); +// flag = true; + } catch (Exception e) { + Log.info("Error: Waited for non stale element for \"+timeOut+\" seconds but no use..." + e.getMessage()); + } finally { + BaseView.popDefaultTimeout(); + } + return flag; + } + + public boolean waitForNonStaleWebElement(String locatorType, String locator, int counter, int timeOut) { + boolean flag = false; + for (int i = 0; i < counter; i++) { + try { + BaseView.pushShortTimeout(2); + WebElement element = getWebElementObject(locatorType, locator); + + WebDriverWait wait = new WebDriverWait(BrowserDriver.getCurrentDriver(), timeOut); + flag = wait.until(not(stalenessOf(element))); + if (flag) return flag; + } catch (Exception e) { + Log.info("Error: Waited for non stale element for " + timeOut + " seconds but no use..."); + } finally { + BaseView.popDefaultTimeout(); + } + } + return flag; + } + + public boolean waitForElementContainText(WebElement element, String text) throws Exception { + boolean textPresent = false; + try { + WebDriverWait wait = new WebDriverWait(BrowserDriver.getCurrentDriver(), WEBDRIVER_WAIT); + textPresent = wait.until(textToBePresentInElement(element, text)); + } catch (Exception ne) { + BaseView.takeScreenshot("TextNotFoundInElement.png"); + fail("Element not found in the DOM " + ne.getMessage()); + } + return textPresent; + } + + public boolean waitForElementContainText(String locatorType, String locator, String text) throws Exception { + boolean textPresent = false; + try { + BaseView.pushShortTimeout(1); + WebElement element = getWebElementObject(locatorType, locator); + WebDriverWait wait = new WebDriverWait(BrowserDriver.getCurrentDriver(), WEBDRIVER_WAIT); + textPresent = wait.until(textToBePresentInElement(element, text)); + } catch (Exception ne) { + Log.error("Webelement does not exist : " + locatorType + " : " + locator); + } finally { + BaseView.popDefaultTimeout(); + } + return textPresent; + } + + public boolean waitForElementVisibilityOf(String locatorType, String locator, int timeOut) { + try { + BaseView.pushShortTimeout(1); + WebElement element = getWebElementObject(locatorType, locator); + WebDriverWait wait = new WebDriverWait(BrowserDriver.getCurrentDriver(), timeOut); + return wait.until(visibilityOf(element)).isDisplayed(); + } catch (Exception ne) { + Log.error("Webelement does not exist : " + locatorType + " : " + locator); + return false; + } finally { + BaseView.popDefaultTimeout(); + } + } + + /*public boolean waitForElementVisibilityOf(String element, int timeOut){ + try { + BaseView.pushShortTimeout(1); + WebDriverWait wait = new WebDriverWait(BrowserDriver.getCurrentDriver(), timeOut); + return wait.until(visibilityOf(element)).isDisplayed(); + } catch (Exception ne) { + Log.error("Webelement does not exist : " + element.getText()); + return false; + }finally{ + BaseView.popDefaultTimeout(); + } + }*/ + + public boolean waitForElementVisibilityOf(WebElement element, int counter, int timeOut) { + boolean eleVisibile = false; + for (int i = 0; i < counter; i++) { + try { + BaseView.pushShortTimeout(1); + WebDriverWait wait = new WebDriverWait(BrowserDriver.getCurrentDriver(), timeOut); + eleVisibile = wait.until(visibilityOf(element)).isDisplayed(); + if (eleVisibile) return eleVisibile; + } catch (Exception ne) { + Log.error("Webelement does not exist : " + element.getText()); + } finally { + BaseView.popDefaultTimeout(); + } + } + return eleVisibile; + } + + public boolean waitForElementVisibilityOf(String locatorType, String locator, int counter, int timeOut) { + boolean eleVisibile = false; + for (int i = 0; i < counter; i++) { + try { + BaseView.pushShortTimeout(1); + WebElement element = getWebElementObject(locatorType, locator); + WebDriverWait wait = new WebDriverWait(BrowserDriver.getCurrentDriver(), timeOut); + eleVisibile = wait.until(visibilityOf(element)).isDisplayed(); + if (eleVisibile) return eleVisibile; + } catch (Exception ne) { + Log.error("Webelement does not exist : " + locatorType + " : " + locator + "counter :" + counter); + } finally { + BaseView.popDefaultTimeout(); + } + } + return eleVisibile; + } + + public boolean waitForElementIsClickable(String locatorType, String locator, int counter, int timeOut) { + boolean eleVisibile = false; + for (int i = 0; i < counter; i++) { + try { + BaseView.pushShortTimeout(1); + WebElement element = getWebElementObject(locatorType, locator); + WebDriverWait wait = new WebDriverWait(BrowserDriver.getCurrentDriver(), timeOut); + eleVisibile = wait.until(elementToBeClickable(element)).isDisplayed(); + if (eleVisibile) return eleVisibile; + } catch (Exception ne) { + Log.error("Webelement does not exist : " + locatorType + " : " + locator + "counter :" + counter); + } finally { + BaseView.popDefaultTimeout(); + } + } + return eleVisibile; + } + + public boolean waitForElementIsClickable(WebElement element, int counter, int timeOut) { + boolean eleVisibile = false; + for (int i = 0; i < counter; i++) { + try { + BaseView.pushShortTimeout(1); + WebDriverWait wait = new WebDriverWait(BrowserDriver.getCurrentDriver(), timeOut); + eleVisibile = wait.until(elementToBeClickable(element)).isDisplayed(); + if (eleVisibile) return eleVisibile; + } catch (Exception ne) { + Log.error("Webelement does not exist : " + element.getText() + "counter :" + counter); + } finally { + BaseView.popDefaultTimeout(); + } + } + return eleVisibile; + } + + public WebElement getElement(String locatorType, String locator, int timeOut) { + WebElement element = null; + try { + BaseView.pushShortTimeout(1); + element = getWebElementObject(locatorType, locator); + WebDriverWait wait = new WebDriverWait(BrowserDriver.getCurrentDriver(), timeOut); + element = wait.until(visibilityOf(element)); + } catch (Exception ne) { + Log.error("Webelement does not exist : " + locatorType + " : " + locator); + } finally { + BaseView.popDefaultTimeout(); + } + return element; + } + + public WebElement getElement(String locatorType, String locator, int counter, int timeOut) { + WebElement element = null; + for (int i = 0; i < counter; i++) { + try { + BaseView.pushShortTimeout(1); + element = getClickableWebElementObject(locatorType, locator);//BrowserDriver.getCurrentDriver().findElement(getElementBy(locatorType, locator)); + WebDriverWait wait = new WebDriverWait(BrowserDriver.getCurrentDriver(), timeOut); + element = wait.until(visibilityOf(element)); + if (element.isDisplayed()) return element; +// wait.until(ExpectedConditions.not(ExpectedConditions.stalenessOf(element))); + } catch (StaleElementReferenceException se) { + + } catch (Exception ne) { + Log.error("Webelement does not exist : " + locatorType + " : " + locator + "counter :" + counter); + } finally { + BaseView.popDefaultTimeout(); + } + } + return element; + } + + public boolean waitForElementNotPresent(String locatorType, String locator) throws Throwable { + try { + WebDriverWait wait = new WebDriverWait(BrowserDriver.getCurrentDriver(), WEBDRIVER_WAIT); + wait.until(invisibilityOfElementLocated(getElementBy(locatorType, locator))); + return true; + } catch (Exception e) { + return false; + } + } + + public boolean waitForElementNotPresent(String locatorType, String locator, int timeOut) throws Throwable { + try { + WebDriverWait wait = new WebDriverWait(BrowserDriver.getCurrentDriver(), timeOut); + wait.until(invisibilityOfElementLocated(getElementBy(locatorType, locator))); + return true; + } catch (Exception e) { + return false; + } + } + + public boolean waitForElementPresent(String locatorType, String locator) throws Throwable { + try { + WebDriverWait wait = new WebDriverWait(BrowserDriver.getCurrentDriver(), WEBDRIVER_WAIT); + wait.until(visibilityOfElementLocated(getElementBy(locatorType, locator))); + return true; + } catch (Exception e) { + return false; + } + } + + public boolean waitUntilElementContainsText(String locatorType, String locator, String text, int timeOut) throws Exception { + boolean textPresent = false; + try { + WebDriverWait wait = new WebDriverWait(driver, timeOut); + textPresent = wait.until(textToBePresentInElement(getElement(locatorType, locator, timeOut), text)); + if (textPresent) return textPresent; + } catch (Exception ne) { + BaseView.takeScreenshot("TextNotFoundInElement.png"); + Log.info("Error :" + ne.getMessage()); + return textPresent; + } finally { + BaseView.popDefaultTimeout(); + } + return textPresent; + } + + public boolean waitUntilElementContainsText(String locatorType, String locator, String text, int counter, int timeOut) throws Exception { + boolean textPresent = false; + for (int i = 0; i < counter; i++) { + try { + WebDriverWait wait = new WebDriverWait(BrowserDriver.getCurrentDriver(), timeOut); + textPresent = wait.until(textToBePresentInElement(getElement(locatorType, locator, timeOut), text)); + if (textPresent) return textPresent; + } catch (Exception ne) { + BaseView.takeScreenshot("TextNotFoundInElement.png"); + Log.info("Error :" + ne.getMessage()); + } finally { + BaseView.popDefaultTimeout(); + } + } + return textPresent; + } + + public boolean waitUntilElementNotContainsText(String locatorType, String locator, String text, int counter, int timeOut) throws Exception { + boolean textPresent = false; + for (int i = 0; i < counter; i++) { + try { + WebDriverWait wait = new WebDriverWait(BrowserDriver.getCurrentDriver(), timeOut); + textPresent = wait.until(not(textToBePresentInElement(getElement(locatorType, locator, timeOut), text))); + if (textPresent) return textPresent; + } catch (Exception ne) { + BaseView.takeScreenshot("TextNotFoundInElement.png"); + Log.info("Error :" + ne.getMessage()); + } finally { + BaseView.popDefaultTimeout(); + } + } + return textPresent; + } + + public boolean waitUntilElementNotContainsText(WebElement ele, String text, int counter, int timeOut) throws Exception { + boolean textPresent = false; + for (int i = 0; i < counter; i++) { + try { + WebDriverWait wait = new WebDriverWait(BrowserDriver.getCurrentDriver(), timeOut); + textPresent = wait.until(not(textToBePresentInElement(ele, text))); + if (textPresent) return textPresent; + } catch (Exception ne) { + BaseView.takeScreenshot("TextNotFoundInElement.png"); + Log.info("Error :" + ne.getMessage()); + } finally { + BaseView.popDefaultTimeout(); + } + } + return textPresent; + } + + public static void failed(String errorMessage) { + org.junit.Assert.fail(errorMessage); + } + + public boolean waitUntilElementDisappers(String locatorType, String locator, int counter, int timeOut) throws Exception { + boolean boolEleExist = false; + for (int i = 0; i < counter; i++) { + try { + WebDriverWait wait = new WebDriverWait(BrowserDriver.getCurrentDriver(), timeOut); + boolEleExist = wait.until(not(visibilityOf(getElement(locatorType, locator, timeOut)))); + if (boolEleExist) return boolEleExist; + } catch (Exception ne) { + BaseView.takeScreenshot("waitUntilElementDisappers"); + Log.info("Error :" + ne.getMessage()); + } finally { + BaseView.popDefaultTimeout(); + } + } + return boolEleExist; + } + + public boolean waitUntilElementDisappers(WebElement ele, int counter, int timeOut) throws Exception { + boolean boolEleExist = false; + for (int i = 0; i < counter; i++) { + try { + WebDriverWait wait = new WebDriverWait(BrowserDriver.getCurrentDriver(), timeOut); + boolEleExist = wait.until(not(visibilityOf(ele))); + if (boolEleExist) return boolEleExist; + } catch (Exception ne) { + BaseView.takeScreenshot("waitUntilElementDisappers"); + Log.info("Error :" + ne.getMessage()); + } finally { + BaseView.popDefaultTimeout(); + } + } + return boolEleExist; + } + + public boolean textContains(String strSearchText) { + boolean flag = false; + try { + WebDriverWait wait = new WebDriverWait(BrowserDriver.getCurrentDriver(), 30); + return wait.until(textToBePresentInElement(By.tagName("*"), strSearchText)); + } catch (Exception ex) { + Log.error("Text doesnot contains :" + strSearchText + ex.getMessage()); + } + Log.info("Verified : " + strSearchText); + return flag; + } + + public static void switchToFrame(String strFrameLoctor) throws Throwable { + WebElement allPagesFrame = null; + Log.info("Switching to default frame...."); + BrowserDriver.getCurrentDriver().switchTo().defaultContent(); + boolean isFrameVisible = false; + Log.info("Started finding visible frame...."); + for (WebElement frame : BrowserDriver.getCurrentDriver().findElements(By.cssSelector(strFrameLoctor))) { + //System.out.println(frame.getAttribute("src")); + if (frame.isDisplayed()) { + allPagesFrame = frame; + isFrameVisible = true; + Log.info("Visible frame found, exiting loop"); + break; + } + } + if (!isFrameVisible) { + TestCase.fail("No frames are visible hence not switching to frame"); + } + //Waits till the "Loading.." text disappears + BrowserDriver.getCurrentDriver().switchTo().frame(allPagesFrame); + Log.info("Switched to Third level Tab continuing...."); + } + + public void selectByVisibleText(String locator, String element, String value, int timeout) throws Exception { + WebElement ele = getWebElementObject(locator, element); + waitForObjectToLoad(ele); + Wait(timeout); + if (ele.isDisplayed()) { + Select list = new Select(ele); + list.selectByVisibleText(value); + Log.info("Selected '" + value + "' from dropdown ''" + locator + "=" + element + "'"); + } else { + Exception error = new Exception(element); + Log.error("Current page does not contain element ''" + locator + "=" + element + "'"); + String Str = new String(error.getMessage()); + Log.error("Error Message :" + Str.substring(1, 240)); + throw error; + } + } +} + + + diff --git a/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/utils/SpreadsheetUtils.java b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/utils/SpreadsheetUtils.java new file mode 100755 index 000000000..69ad910f7 --- /dev/null +++ b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/utils/SpreadsheetUtils.java @@ -0,0 +1,235 @@ +package com.rl.qa.utils; + +import org.apache.poi.hssf.usermodel.HSSFSheet; +import org.apache.poi.hssf.usermodel.HSSFWorkbook; +import org.apache.poi.ss.usermodel.Cell; +import org.apache.poi.ss.usermodel.DataFormatter; +import org.apache.poi.ss.usermodel.Row; +import org.apache.poi.ss.usermodel.Sheet; +import org.apache.poi.xssf.usermodel.XSSFSheet; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; + +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +import static junit.framework.Assert.assertTrue; + +public class SpreadsheetUtils { + + + // IWMS spreadsheet file. + private File file; + + // The one and only sheet expected from the Excel workbook. + private Sheet sheet; + + + + public String getCellValue(String colHeader,int rowNum) { + int numberOfCells = 0; + int colIndex = 0; + String cellValue = ""; + Iterator rowIterator = this.sheet.rowIterator(); + while (rowIterator.hasNext()) + { + Row headerRow = (Row) rowIterator.next(); + numberOfCells = headerRow.getPhysicalNumberOfCells(); + for(int i=0;i -1); + + String suffix = file.getName().substring(dot); + + if (suffix.equalsIgnoreCase(".xls")) { + return ".xls"; + } else if (suffix.equalsIgnoreCase(suffix)) { + return ".xlsx"; + } else { + String msg = String.format( + "File '%s' is not of a support type ['xls','xlsx]!", + file.getName() + ); + + throw new IllegalStateException(msg); + } + } + + private Sheet getSheet(File spreadsheet) throws IOException { + String suffix = getFileSuffix(spreadsheet); + FileInputStream inputStream = new FileInputStream(spreadsheet); + if (suffix.equals(".xlsx")) { + XSSFWorkbook book = new XSSFWorkbook(inputStream); + XSSFSheet sheet = book.getSheetAt(0); + + return sheet; + } else { + HSSFWorkbook book = new HSSFWorkbook(inputStream); + HSSFSheet sheet = book.getSheetAt(0); + + return sheet; + } + } + + + /** + * Create instance given the spreadsheet file. + * + * @param spreadsheet - file containing an IWMS spreadsheet + */ + public SpreadsheetUtils(File spreadsheet) throws IOException { + this.file = spreadsheet; + this.sheet = this.getSheet(spreadsheet); + } + + public static void main(String args[]){ + try{ + SpreadsheetUtils obj = new SpreadsheetUtils(new File("C:/Users/RLE0239/Desktop/Sales.xls")); + System.out.println(System.getProperty("user.dir")); + System.out.println(obj.getCellValue("Sales Group", 5)); + System.out.println(obj.getCellValue("Currency Type",4)); + System.out.println(obj.getCellValue("Currency Type",6)); + }catch(Exception e){ + + } + + } + + public String getDateCellValue(String colHeader,int rowNum) { + int numberOfCells = 0; + int colIndex = 0; + String cellValue = ""; + Iterator rowIterator = this.sheet.rowIterator(); + while (rowIterator.hasNext()) + { + Row headerRow = (Row) rowIterator.next(); + numberOfCells = headerRow.getPhysicalNumberOfCells(); + for(int i=0;i colIndex = new ArrayList<>(); + String cellValue = ""; + int headerCount = 0; + Iterator rowIterator = this.sheet.rowIterator(); + while (rowIterator.hasNext()) + { + Row headerRow = (Row) rowIterator.next(); + numberOfCells = headerRow.getPhysicalNumberOfCells(); + for(int i=0;i1){ + System.out.println("Same header name is present more than one: "+headerCount); + }else if(headerCount==0){ + System.out.println("Same header name is not present "+headerCount); + } + + String value = ""; + for(int i=0;iJan Papousek + * + * @see Extending Selenium 2.0 + * WebDriver to Support AJAX + */ +public class StaleReferenceAwareFieldDecorator extends DefaultFieldDecorator { + private final int numberOfTries; + /** + * Creates a new instance of the decorator + * + * @param factory + * locator factory + * @param numberOfTries + * number of tries to locate element + */ + public StaleReferenceAwareFieldDecorator(ElementLocatorFactory factory, int numberOfTries) { + super(factory); + this.numberOfTries = numberOfTries; + } + + @Override + protected WebElement proxyForLocator(ClassLoader loader, ElementLocator locator) { + InvocationHandler handler = new StaleReferenceAwareElementLocator(locator); + WebElement proxy = (WebElement) Proxy.newProxyInstance(loader, new Class[] { WebElement.class, + WrapsElement.class }, handler); + return proxy; + } + + private class StaleReferenceAwareElementLocator extends LocatingElementHandler { + private final ElementLocator locator; + public StaleReferenceAwareElementLocator(ElementLocator locator) { + super(locator); + this.locator = locator; + } + public Object invoke(Object object, Method method, Object[] objects) throws Throwable { + WebElement element = null; + for (int i = 0; i < numberOfTries; i++) { + element = locator.findElement(); + if ("getWrappedElement".equals(method.getName())) { + return element; + } + try { + return invokeMethod(method, element, objects); + } catch (StaleElementReferenceException ignored) { + } + } + throw new RuntimeException("Cannot invoke " + method.getName() + " on element " + element + + ". Cannot find it"); + } + private Object invokeMethod(Method method, WebElement element, Object[] objects) throws Throwable { + try { + return method.invoke(element, objects); + } catch (InvocationTargetException e) { + throw e.getCause(); + } catch (IllegalArgumentException e) { + throw e.getCause(); + } catch (IllegalAccessException e) { + throw e.getCause(); + } + } + } +} \ No newline at end of file diff --git a/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/utils/ThreadPool.java b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/utils/ThreadPool.java new file mode 100755 index 000000000..0acd8296c --- /dev/null +++ b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/utils/ThreadPool.java @@ -0,0 +1,152 @@ +package com.rl.qa.utils; + +import java.util.concurrent.*; + +public class ThreadPool { + private static ExecutorService executorService = null; + + private static ExecutorService getExecutorService() { + if (executorService == null) { + executorService = Executors.newCachedThreadPool(); + } + + return executorService; + } + + /** + * Executes the specified runnable in a thread from a thread pool. + */ + public static void execute(Runnable command) { + ExecutorService es = getExecutorService(); + + es.execute(command); + } + + /** + * Executes the specified runnable in a thread from a thread pool. + * + * @returns a handle to the running task + */ + public static Future submit(Runnable command) { + ExecutorService es = getExecutorService(); + + Future f = es.submit(command); + + return f; + } + + /** + * Submits a value-returning task for execution and returns a Future + * representing the pending results of the task. + * + * If you would like to immediately block waiting for a task, you + * can use constructions of the form + * + * result = exec.submit(aCallable).get(); + * + * @param task - the task to submit + * + * @return a Future representing pending completion of the task + */ + public static Future submit(Callable task) { + ExecutorService es = getExecutorService(); + + Future f = es.submit(task); + + return f; + } + + private static ScheduledExecutorService scheduledExecutorService = null; + + private static ScheduledExecutorService createScheduledExecutorService() { + if (scheduledExecutorService == null) { + scheduledExecutorService = Executors.newScheduledThreadPool(1); + } + + return scheduledExecutorService; + } + + /** + * Creates and executes a ScheduledFuture that becomes enabled after the given delay. + * + * @param callable - the task to execute + * @param delay - the time to wait before executing the task + * @param unit - the time units of the delay argument + * + * @return a Future that can be used to extract result or cancel + */ + public static ScheduledFuture schedule( + Callable callable, + long delay, + TimeUnit unit + ) { + return createScheduledExecutorService().schedule(callable, delay, unit); + } + + /** + * Creates and executes a one-shot action after waiting for the specified delay. + * + * @param command - the task to execute + * @param delay - the time to wait before executing the task + * @param unit - the time units of the delay argument + * + * @return a Future representing pending completion of the task, and whose get() + * method will return null upon completion + */ + public static ScheduledFuture schedule(Runnable command, long delay, TimeUnit unit) { + return createScheduledExecutorService().schedule(command, delay, unit); + } + + /** + * Creates and executes a periodic action that becomes enabled first after the + * given initial delay, and subsequently with the given period; that is executions + * will commence after initialDelay then initialDelay+period, then + * initialDelay + 2 * period, and so on. If any execution of the task encounters + * an exception, subsequent executions are suppressed. Otherwise, the task will + * only terminate via cancellation or termination of the executor. + * + * @param command - the task to execute + * @param initialDelay - the time to wait before the first execution + * @param period - the time to wait before subsequent executions without + * concern with the completion of prior executions + * @param unit - the time units of the initialDelay and period arguments + * + * @return a future representing pending completion of the task, and whose get() + * method will throw an exception upon cancellation + */ + public static ScheduledFuture scheduleAtFixedRate( + Runnable command, + long initialDelay, + long period, + TimeUnit unit + ) { + return createScheduledExecutorService(). + scheduleAtFixedRate(command, initialDelay, period, unit); + } + + /** + * Creates and executes a periodic action that becomes enabled first after the + * given initial delay, and subsequently with the given delay between the termination + * of one execution and the commencement of the next. If any execution of the task + * encounters an exception, subsequent executions are suppressed. Otherwise, the + * task will only terminate via cancellation or termination of the executor. + * + * @param command - the task to execute + * @param initialDelay - the time to wait before the first execution + * @param delay - the time to wait after termination of one execution and + * start of subsequent executions + * @param unit - the time units of the initialDelay and delay arguments + * + * @return a future representing pending completion of the task, and whose get() + * method will throw an exception upon cancellation + */ + public static ScheduledFuture scheduleWithFixedDelay( + Runnable command, + long initialDelay, + long delay, + TimeUnit unit + ) { + return createScheduledExecutorService(). + scheduleWithFixedDelay(command, initialDelay, delay, unit); + } +} \ No newline at end of file diff --git a/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/views/CFTViews.java b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/views/CFTViews.java new file mode 100755 index 000000000..ee236896f --- /dev/null +++ b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/views/CFTViews.java @@ -0,0 +1,488 @@ +package com.rl.qa.views; + +import com.rl.qa.browsers.BrowserDriver; +import com.rl.qa.steps.LoginSteps; +import com.rl.qa.utils.BaseView; +import com.rl.qa.utils.SeleniumUtilities; +import org.openqa.selenium.By; +import org.openqa.selenium.WebElement; +import org.openqa.selenium.support.PageFactory; +import org.openqa.selenium.support.ui.ExpectedConditions; +import org.openqa.selenium.support.ui.WebDriverWait; + +import java.util.Random; +import java.util.logging.Logger; + +import static junit.framework.TestCase.assertTrue; +import static junit.framework.TestCase.fail; + +/** + * Created by RLE0097 on 21-06-2016. + */ +public class CFTViews { + private static final SeleniumUtilities SeleniumUtil = PageFactory.initElements(BrowserDriver.getCurrentDriver(), SeleniumUtilities.class); + public static WebElement PagesFrame; + public static String stackName=""; + private static final Logger logger = Logger.getLogger(LoginSteps.class.getName()); + public static void clickOnWorkZoneLink(){ + try { + Thread.sleep(3000); + SeleniumUtil.waitForElementIsClickable("id", "workZoneNew",8, SeleniumUtilities.OBJWAITTIMEOUT); + SeleniumUtil.click("id", "workZoneNew", SeleniumUtilities.OBJWAITTIMEOUT); + } + catch(Exception ex){ + BaseView.takeScreenshot("clickOnWorkZoneLink"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void clickOntheLink(String strLink){ + try { + Thread.sleep(2000); + SeleniumUtil.waitForElementIsClickable("paritallinktext", strLink, 10, SeleniumUtilities.OBJWAITTIMEOUT); + SeleniumUtil.click("paritallinktext", strLink, SeleniumUtilities.OBJWAITTIMEOUT); + } + catch(Exception ex){ + BaseView.takeScreenshot("clickOntheLink"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void clickOnLink(String strLink){ + try { + SeleniumUtil.getFrameIndex("linktext", strLink); + SeleniumUtil.waitForElementIsClickable("linktext", strLink, 10, SeleniumUtilities.OBJWAITTIMEOUT); + SeleniumUtil.click("linktext", strLink, SeleniumUtilities.OBJWAITTIMEOUT); + } + catch(Exception ex){ + BaseView.takeScreenshot("clickOnLink"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void clickOntheCssselectorField(String strcssselectorField){ + try { + SeleniumUtil.click("cssselector", strcssselectorField, SeleniumUtilities.OBJWAITTIMEOUT); + } + catch(Exception ex){ + BaseView.takeScreenshot("clickOntheCssselectorField"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void selectBlueprintAndClickOnLaunchButton(String strBlueprint){ + try { + SeleniumUtil.click("cssselector", "li[title='"+strBlueprint+"']", SeleniumUtilities.OBJWAITTIMEOUT); + SeleniumUtil.click("cssselector", ".btn.pull-left.btn-primary.launchBtn.launchBtnMargin", SeleniumUtilities.OBJWAITTIMEOUT); + } + catch(Exception ex){ + BaseView.takeScreenshot("selectBlueprintAndClickOnLaunchButton"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void clickOnOKButton(String strButton){ + try { + SeleniumUtil.click("xpath", ".//button[./text()='"+strButton+"']", SeleniumUtilities.OBJWAITTIMEOUT); + Thread.sleep(5000); + } + catch(Exception ex){ + BaseView.takeScreenshot("clickOnOKButton"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void enterStackName(String strStackName){ + try { + SeleniumUtil.type("id", "cftInput",strStackName, SeleniumUtilities.OBJWAITTIMEOUT); + } + catch(Exception ex){ + BaseView.takeScreenshot("enterStackName"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void clickOnButtonButton(){ + try { + SeleniumUtil.waitForElementIsClickable("cssselector", "input[value='Submit']", 8, SeleniumUtilities.OBJWAITTIMEOUT); + SeleniumUtil.click("cssselector", "input[value='Submit']", SeleniumUtilities.OBJWAITTIMEOUT); + } + catch(Exception ex){ + BaseView.takeScreenshot("clickOnButtonButton"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void verifyStackName(String strStackName,String strStatus){ + try { + Thread.sleep(5000); + SeleniumUtil.waitForElementVisibilityOf("cssselector", "div[data-stackname='" + strStackName + "']", 10, SeleniumUtilities.OBJWAITTIMEOUT); + SeleniumUtil.waitUntilElementContainsText("cssselector","div[data-stackname='"+strStackName+"'] span[class='stackStatus']",strStatus,200,SeleniumUtilities.OBJWAITTIMEOUT); + } + catch(Exception ex){ + BaseView.takeScreenshot("verifyStackName"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void clickOnMoreInfoofInstanceCard(String strCardName){ + try { + SeleniumUtil.click("xpath", ".//span[@data-original-title='"+strCardName+"']/parent::div/following-sibling::div[1]/div/span/a", SeleniumUtilities.OBJWAITTIMEOUT); + } + catch(Exception ex){ + BaseView.takeScreenshot("clickOnMoreInfoofInstanceCard"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void getIPAddress(String strCardName){ + try { + String IPAddress = SeleniumUtil.getTextValue("xpath", ".//span[@data-original-title='"+strCardName+"']/parent::div/following-sibling::div[2]/div/span[1]", SeleniumUtilities.OBJWAITTIMEOUT); + SeleniumUtil.Log.info("IP Address :"+IPAddress); + } + catch(Exception ex){ + BaseView.takeScreenshot("getIPAddress"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void clickOnConfirmatinButton(){ + try { + SeleniumUtil.click("cssselector", "#launchResultContainer > div > div > div.modal-footer > button", SeleniumUtilities.OBJWAITTIMEOUT); + Thread.sleep(2000); + } + catch(Exception ex){ + BaseView.takeScreenshot("clickOnConfirmatinButton"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void seeDashboard(){ + try { + SeleniumUtil.waitForElementIsClickable("id", "workzone", 8, SeleniumUtilities.OBJWAITTIMEOUT); + SeleniumUtil.waitUntilElementNotContainsText("id", "workzone","WORKZONE", 8,SeleniumUtilities.OBJWAITTIMEOUT); + } + catch(Exception ex){ + BaseView.takeScreenshot("seeDashboard"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void expendTheTree(String strTreeHead){ + try { + if(SeleniumUtil.waitForElementVisibilityOf("xpath", ".//a[text()='"+strTreeHead+"']/ancestor::li/span[@class='expand-collapse click-expand fa fa-angle-right']", 2, SeleniumUtilities.OBJWAITTIMEOUT)) { + SeleniumUtil.waitForElementIsClickable("paritallinktext", strTreeHead, 8, SeleniumUtilities.OBJWAITTIMEOUT); + SeleniumUtil.click("paritallinktext", strTreeHead, SeleniumUtilities.OBJWAITTIMEOUT); + } + } + catch(Exception ex){ + BaseView.takeScreenshot("expendTheTree"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void clickOnTrack(){ + try { + SeleniumUtil.click("id", "trackNew",SeleniumUtilities.OBJWAITTIMEOUT); + } + catch(Exception ex){ + BaseView.takeScreenshot("clickOnTrack"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void clickOnLineChartNotifications(String strLabel){ + try { +// SeleniumUtil.getFrameIndex("xpath", ".//a[contains(./text(),'"+strLabel+"')]/ancestor::li/span[@class='icon fa fa-line-chart']"); + SeleniumUtil.click("xpath", ".//a[contains(./text(),'"+strLabel+"')]/ancestor::li/span[@class='icon fa fa-line-chart']",SeleniumUtilities.OBJWAITTIMEOUT); +// SeleniumUtil.switchTodefaultContent(); + } + catch(Exception ex){ + BaseView.takeScreenshot("clickOnLineChartNotifications"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void clickOnFileNotifications(String strLabel){ + try { +// SeleniumUtil.getFrameIndex("xpath", ".//a[contains(./text(),'"+strLabel+"')]/ancestor::li/span[@class='icon fa fa-lg fa-fw fa-files-o']"); + SeleniumUtil.click("xpath", ".//a[contains(./text(),'"+strLabel+"')]/ancestor::li/span[@class='icon fa fa-lg fa-fw fa-files-o']",SeleniumUtilities.OBJWAITTIMEOUT); +// SeleniumUtil.switchTodefaultContent(); + } + catch(Exception ex){ + BaseView.takeScreenshot("clickOnFileNotifications"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void clickOnDesktopNotifications(String strLabel){ + try { + SeleniumUtil.click("xpath", ".//a[contains(./text(),'"+strLabel+"')]/ancestor::li/span[@class='icon fa fa-fw fa-1x fa-desktop']",SeleniumUtilities.OBJWAITTIMEOUT); + } + catch(Exception ex){ + BaseView.takeScreenshot("clickOnDesktopNotifications"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void getPrivateIPAddress(String strCardName){ + try { + String IPAddress = SeleniumUtil.getTextValue("cssselector", "span[class='ip-cell-private']", SeleniumUtilities.OBJWAITTIMEOUT); + SeleniumUtil.Log.info("IP Address :"+IPAddress); + } + catch(Exception ex){ + BaseView.takeScreenshot("getPrivateIPAddress"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void verifyPublicIPAddress(String strCardName){ + try { + String IPAddress = SeleniumUtil.getTextValue("xpath", ".//*[./text()='"+strCardName+"']/parent::div/following-sibling::div[1]/span[@class='ip-cell-public']", SeleniumUtilities.OBJWAITTIMEOUT); + SeleniumUtil.Log.info("Public IP Address :"+IPAddress); + } + catch(Exception ex){ + BaseView.takeScreenshot("verifyPublicIPAddress"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void switchToFrame() throws Throwable { + SeleniumUtil.Log.info("Switching to default frame...."); + BrowserDriver.getCurrentDriver().switchTo().defaultContent(); + boolean isFrameVisible = false; + SeleniumUtil.Log.info("Started finding visible frame...."); + for (WebElement frame : BrowserDriver.getCurrentDriver().findElements(By.tagName("iframe"))) { + //System.out.println(frame.getAttribute("src")); + if (frame.isDisplayed()) { + PagesFrame = frame; + isFrameVisible = true; + SeleniumUtil.Log.info("Visible frame found, exiting loop"); + break; + } + } + if (!isFrameVisible) { + fail("No frames are visible hence not switching to frame"); + } + //Waits till the "Loading.." text disappears + BrowserDriver.getCurrentDriver().switchTo().frame(PagesFrame); + SeleniumUtil.Log.info("Switched to Third level Tab continuing...."); + } + + public static void selectOrg(String orgName) { + try { + SeleniumUtil.selectByVisibleText("id","selectOrgName",orgName,SeleniumUtil.OBJWAITTIMEOUT); + } + catch(Exception ex){ + BaseView.takeScreenshot("selectOrg"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void clickOnConfigStackParaLink(String configStackPara) { + try { + SeleniumUtil.click("linktext",configStackPara,SeleniumUtil.OBJWAITTIMEOUT); + } + catch(Exception ex){ + BaseView.takeScreenshot("clickOnConfigStackParaLink"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void enterStackPara(String stackPara, String webEleAttribute) { + try { + SeleniumUtil.clear("xpath","//input[@data-cftparameter-name='"+webEleAttribute+"']",SeleniumUtil.OBJWAITTIMEOUT); + SeleniumUtil.type("xpath","//input[@data-cftparameter-name='"+webEleAttribute+"']",stackPara,SeleniumUtilities.OBJWAITTIMEOUT); + } + catch(Exception ex){ + BaseView.takeScreenshot("enterStackPara"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void enterInstanceUserName(String instanceUserName) { + try { + SeleniumUtil.type("cssselector",".cftResourceInput.form-control.cftResourceUsernameInput",instanceUserName,SeleniumUtilities.OBJWAITTIMEOUT); + } + catch(Exception ex){ + BaseView.takeScreenshot("enterStackUserName"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void clickOnBlueprintType(String blueprintType) { + try { + SeleniumUtil.click("cssselector",".fa.fa-fw.ng-scope.fa-plus-circle",SeleniumUtilities.OBJWAITTIMEOUT); + } + catch(Exception ex){ + BaseView.takeScreenshot("clickOnBlueprintType"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void enterUniqueStackName(String uniqueStackName) { + try { + int max = 10000; + int min = 1000; + Random r = new Random(); + int ranNumber = r.nextInt((max - min) + 1) + min; + stackName = "RL" + ranNumber; + SeleniumUtil.type("id","cftInput",uniqueStackName,SeleniumUtilities.OBJWAITTIMEOUT); + System.out.println(stackName); + } + catch(Exception ex){ + BaseView.takeScreenshot("clickOnBlueprintType"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void refreshCFTStackPage() { + try { + for (int i = 0; i < 10; i++) { + if (SeleniumUtil.verifyTextValue("cssselector", ".stackStatus.orange", "CREATE_IN_PROGRESS", SeleniumUtilities.OBJWAITTIMEOUT)) { + Thread.sleep(3000); + SeleniumUtil.click("xpath", ".//*[@id='cloudFormationPage']//button", SeleniumUtilities.OBJWAITTIMEOUT); + } + else{ + break; + } + } + } + catch(Exception ex){ + BaseView.takeScreenshot("clickOnBlueprintType"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void verifyStatusCreateInProgress(String stackName) { + try { + SeleniumUtil.waitUntilElementContainsText("cssselector",".stackStatus.orange","CREATE_IN_PROGRESS",SeleniumUtilities.OBJWAITTIMEOUT); + WebDriverWait wait = new WebDriverWait(BrowserDriver.getCurrentDriver(), 50); + wait.until(ExpectedConditions.textToBePresentInElement(By.tagName("*"),"CREATE_IN_PROGRESS")); + SeleniumUtil.waitForElementVisibilityOf("cssselector",".stackStatus.orange", 8, SeleniumUtilities.OBJWAITTIMEOUT); + assertTrue(SeleniumUtil.verifyTextValue("cssselector",".stackStatus.orange","CREATE_IN_PROGRESS",SeleniumUtilities.OBJWAITTIMEOUT));{ + logger.info("Verified status : CREATE_IN_PROGRESS"); + } + } + catch(Exception ex){ + BaseView.takeScreenshot("verifyStatusCreateInProgress"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void verifyStatusCreateComplete() { + try { + SeleniumUtil.waitUntilElementContainsText("cssselector",".stackStatus.green","CREATE_COMPLETE",SeleniumUtilities.OBJWAITTIMEOUT); + WebDriverWait wait = new WebDriverWait(BrowserDriver.getCurrentDriver(), 50); + wait.until(ExpectedConditions.textToBePresentInElement(By.tagName("*"),"CREATE_COMPLETE")); + SeleniumUtil.waitForElementVisibilityOf("cssselector",".stackStatus.green", 8, SeleniumUtilities.OBJWAITTIMEOUT); + assertTrue(SeleniumUtil.verifyTextValue("cssselector",".stackStatus.green","CREATE_COMPLETE",SeleniumUtilities.OBJWAITTIMEOUT));{ + logger.info("Verified status : CREATE_COMPLETE"); + } + } + catch(Exception ex){ + BaseView.takeScreenshot("verifyStatusCreateComplete"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void clickonTheLinkSaid(String strLinkSaid) { + try { + SeleniumUtil.click("xpath", ".//*[@id='myTab3']/li[1]/a", 15); + + } + catch(Exception ex){ + BaseView.takeScreenshot("clickLinkSaid"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void clickonCloudformationTab(String strCloudForamtion) { + try { + SeleniumUtil.click("xpath", "//*[contains(text(),'"+strCloudForamtion+"')]", 15); + + } + catch(Exception ex){ + BaseView.takeScreenshot("clickLinkSaid"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void VerifyCloudFormationBlueprint(String strCloudForamtionBP) { + try { + Thread.sleep(1000); + assertTrue(SeleniumUtil.verifyTextValue("xpath", "//li[@class='card-text-overflow'][@title='"+strCloudForamtionBP+"']", strCloudForamtionBP, SeleniumUtilities.OBJWAITTIMEOUT)); + System.out.println("CloudBlueprint is Created"); + + } + catch(Exception ex){ + BaseView.takeScreenshot("clickLinkSaid"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void clickOnBlueprints() { + try { + SeleniumUtil.click("xpath", ".//*[@id='myTab3']/li[1]/ul/li[2]/a", 15); + + } + catch(Exception ex){ + BaseView.takeScreenshot("clickOnBlueprints"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void VerifySoftwareStackBlueprint(String strSoftwareStackBP) { + try { + Thread.sleep(1000); + assertTrue(SeleniumUtil.verifyTextValue("xpath", "//li[@class='card-text-overflow'][@title='"+strSoftwareStackBP+"']", strSoftwareStackBP, SeleniumUtilities.OBJWAITTIMEOUT)); + System.out.println("SoftwareStack BP is Created"); + + } + catch(Exception ex){ + BaseView.takeScreenshot("verifySoftwarestackBP"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + + + + + + +} diff --git a/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/views/ChefServerSetupViews.java b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/views/ChefServerSetupViews.java new file mode 100755 index 000000000..71e43603b --- /dev/null +++ b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/views/ChefServerSetupViews.java @@ -0,0 +1,269 @@ +package com.rl.qa.views; + +import com.rl.qa.browsers.BrowserDriver; +import com.rl.qa.steps.LoginSteps; +import com.rl.qa.utils.BaseView; +import com.rl.qa.utils.SeleniumUtilities; +import cucumber.api.java.eo.Se; +import org.openqa.selenium.By; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; +import org.openqa.selenium.remote.LocalFileDetector; +import org.openqa.selenium.remote.RemoteWebElement; +import org.openqa.selenium.support.PageFactory; + +import java.io.File; +import java.util.logging.Logger; + +import static junit.framework.Assert.assertTrue; +import static junit.framework.TestCase.assertFalse; +import static junit.framework.TestCase.fail; + +/** + * Created by RLE0372 on 20-07-2016. + */ +public class ChefServerSetupViews { + private static final SeleniumUtilities SeleniumUtil = PageFactory.initElements(BrowserDriver.getCurrentDriver(), SeleniumUtilities.class); + private static final Logger logger = Logger.getLogger(LoginSteps.class.getName()); + + public static void enterServerName(String chefServerName) { + try{ + SeleniumUtil.waitForElementIsClickable("id","configname",8, SeleniumUtilities.OBJWAITTIMEOUT); + SeleniumUtil.type("id","configname",chefServerName,SeleniumUtilities.OBJWAITTIMEOUT); + } + catch(Exception ex){ + BaseView.takeScreenshot("typeServerName"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + + } + + public static void enterUserName(String userName) { + try{ + SeleniumUtil.waitForElementIsClickable("id","loginname",8, SeleniumUtilities.OBJWAITTIMEOUT); + SeleniumUtil.type("id","loginname",userName,SeleniumUtilities.OBJWAITTIMEOUT); + } + catch(Exception ex){ + BaseView.takeScreenshot("typeUserName"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void enterURL(String url) { + try{ + SeleniumUtil.waitForElementIsClickable("id","url",8, SeleniumUtilities.OBJWAITTIMEOUT); + SeleniumUtil.type("id","url",url,SeleniumUtilities.OBJWAITTIMEOUT); + } + catch(Exception ex){ + BaseView.takeScreenshot("typeURL"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + +// public static void clickOnPemFileBrowse() { +// try{ +// String path = new String(new File(".").getCanonicalPath() + "\\src\\test\\resources\\Upload\\mycatqa.pem"); +//// System.out.println(path); +//// logger.info(path); +// WebDriver driver=SeleniumUtil.getWebDriver(); +// driver.findElement(By.xpath("//input[@id='userpemfile']")).sendKeys(path); +// } +// catch(Exception ex){ +// BaseView.takeScreenshot("clickOnPemFileBrowse"); +// SeleniumUtil.Log.info("Error :" + ex.getMessage()); +// fail(ex.getMessage()); +// } +// } +// +// public static void clickOnKnifeBrowse() { +// try{ +// Thread.sleep(5000); +// String path = new String(new File(".").getCanonicalPath() + "\\src\\test\\resources\\Upload\\knife.rb"); +//// System.out.println(path); +//// logger.info(path); +// WebDriver driver=SeleniumUtil.getWebDriver(); +// driver.findElement(By.xpath("//input[@id='kniferbfile']")).sendKeys(path); +// } +// catch(Exception ex){ +// BaseView.takeScreenshot("clickOnPemFileBrowse"); +// SeleniumUtil.Log.info("Error :" + ex.getMessage()); +// fail(ex.getMessage()); +// } +// } + + public static void BrowsePemFileForChefServer() { + try{ + WebDriver driver=SeleniumUtil.getWebDriver(); + WebElement element = driver.findElement(By.id("userpemfile")); + LocalFileDetector detector = new LocalFileDetector(); + String path = new String(new File(".").getCanonicalPath() + "/src/test/resources/Upload/mycatqa.pem"); + File f = detector.getLocalFile(path); + ((RemoteWebElement)element).setFileDetector(detector); + element.sendKeys(f.getAbsolutePath()); +// element.sendKeys(path); + } + catch(Exception ex){ + BaseView.takeScreenshot("clickOnPemFileBrowse"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void BrowseKnifeFileForChefServer() { + try{ + WebDriver driver=SeleniumUtil.getWebDriver(); + WebElement element = driver.findElement(By.id("kniferbfile")); + LocalFileDetector detector = new LocalFileDetector(); + String path = new String(new File(".").getCanonicalPath() + "/src/test/resources/Upload/knife.rb"); + File f = detector.getLocalFile(path); + ((RemoteWebElement)element).setFileDetector(detector); + element.sendKeys(f.getAbsolutePath()); +// element.sendKeys(path); + } + catch(Exception ex){ + BaseView.takeScreenshot("clickOnPemFileBrowse"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + + public static void chefServerEditButton(String cherServerName,String Edit ) { + try{ + Thread.sleep(1000); + SeleniumUtil.waitForElementIsClickable("xpath",".//*[@id='envtable']//td[text()='"+cherServerName+"']/following-sibling::td//*[@title='"+Edit+"']",8, SeleniumUtilities.OBJWAITTIMEOUT); + SeleniumUtil.click("xpath",".//*[@id='envtable']//td[text()='"+cherServerName+"']/following-sibling::td//*[@title='"+Edit+"']",SeleniumUtilities.OBJWAITTIMEOUT); + } + catch(Exception ex){ + BaseView.takeScreenshot("chefServerEditButton"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + + } + + public static void clearNameField() { + try{ + SeleniumUtil.waitForElementIsClickable("id","configname",8, SeleniumUtilities.OBJWAITTIMEOUT); + SeleniumUtil.clear("id","configname",SeleniumUtilities.OBJWAITTIMEOUT); + } + catch(Exception ex){ + BaseView.takeScreenshot("clearNameField"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void verifyChefServerName(String chefServerName) { + try { + SeleniumUtil.waitForElementVisibilityOf("xpath", ".//*[@id='envtable']//*[text()='"+chefServerName+"']",5, SeleniumUtilities.OBJWAITTIMEOUT); + assertTrue(SeleniumUtil.verifyTextValue("xpath", ".//*[@id='envtable']//*[text()='"+chefServerName+"']",chefServerName,SeleniumUtilities.OBJWAITTIMEOUT)); { + logger.info("Verified created chef server:"+chefServerName); +// } else { +// logger.info("Chef Server not found:" +chefServerName); + } + } catch (Exception ex) { + BaseView.takeScreenshot("verifyChefServerName"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void verifySelectOrgISDisabled() { + try { + SeleniumUtil.waitForElementVisibilityOf("id","s2id_orgname",5, SeleniumUtilities.OBJWAITTIMEOUT); + WebElement wb=SeleniumUtil.getElement("id","s2id_orgname",SeleniumUtilities.OBJWAITTIMEOUT); + String actClassValOfElement=wb.getAttribute("class"); + String expClassValWhenEleIsDisabled="select2-container select2-container-disabled chooseOrganization width-100"; + assertTrue(actClassValOfElement.equals(expClassValWhenEleIsDisabled)); + logger.info("Select Organization is disbled"); +// } else { +// logger.info("Element is enabled"); + } catch (Exception ex) { + BaseView.takeScreenshot("verifySelectOrgISDisabled"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } } + + public static void verifyChefServerIsDeleted(String chefServerName) { + try { +// SeleniumUtil.waitForElementVisibilityOf("xpath", ".//*[@id='envtable']//*[text()='"+chefServerName+"']/following-sibling::td[2]", 1, SeleniumUtilities.OBJWAITTIMEOUT); + assertFalse(SeleniumUtil.isElementExist("xpath", ".//*[@id='envtable']//*[text()='"+chefServerName+"']")); { + logger.info(chefServerName+" does not exists : deleted"); +// } else { +// logger.info(chefServerName+" does not exists : deleted"); + } + } catch (Exception ex) { + BaseView.takeScreenshot("verifyChefServerIsDeleted"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void verifyServerDetails(String chefServerName, String chefUserName) { + try { + SeleniumUtil.waitForElementVisibilityOf("xpath", ".//*[@id='envtable']//*[text()='"+chefServerName+"']/../td[text()='"+chefUserName+"']",5, SeleniumUtilities.OBJWAITTIMEOUT); + assertTrue(SeleniumUtil.verifyTextValue("xpath", ".//*[@id='envtable']//*[text()='"+chefServerName+"']/../td[text()='"+chefUserName+"']",chefUserName,SeleniumUtilities.OBJWAITTIMEOUT)); { + logger.info("Chef server" +chefServerName+" exists with :"+chefUserName); +// } else { +// logger.info("Chef server" +chefServerName+" does not exists with :"+chefUserName); + } + } catch (Exception ex) { + BaseView.takeScreenshot("chefUserName"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void uploadKnifeFile(String fileName) { + try{ + WebDriver driver=SeleniumUtil.getWebDriver(); + WebElement element = driver.findElement(By.id("kniferbfile")); + LocalFileDetector detector = new LocalFileDetector(); + String path = new String(new File(".").getCanonicalPath() + "/src/test/resources/Upload/jagadeesh12_ChefServerFile"+fileName); + File f = detector.getLocalFile(path); + ((RemoteWebElement)element).setFileDetector(detector); + element.sendKeys(f.getAbsolutePath()); + } + catch(Exception ex){ + BaseView.takeScreenshot("clickOnPemFileBrowse"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void uploadPemFile(String fileName) { + try{ + WebDriver driver=SeleniumUtil.getWebDriver(); + WebElement element = driver.findElement(By.id("userpemfile")); + LocalFileDetector detector = new LocalFileDetector(); + String path = new String(new File(".").getCanonicalPath() + "/src/test/resources/Upload/jagadeesh12_ChefServerFile/"+fileName); + File f = detector.getLocalFile(path); + ((RemoteWebElement)element).setFileDetector(detector); + element.sendKeys(f.getAbsolutePath()); + } + catch(Exception ex){ + BaseView.takeScreenshot("uploadPemFile"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + + public static void selectTheOrg(String strOrgname) { + try{ + //SeleniumUtil.waitForElementIsClickable("id","loginname",8, SeleniumUtilities.OBJWAITTIMEOUT); + SeleniumUtil.click("xpath", "//span[text()='Select an Organization']",SeleniumUtilities.OBJWAITTIMEOUT); + SeleniumUtil.click("xpath","//div[text()='"+strOrgname+"']",SeleniumUtilities.OBJWAITTIMEOUT); + } + catch(Exception ex){ + BaseView.takeScreenshot("selectOrg"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } +} + diff --git a/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/views/ConfigBlueprintForOSImageUsingProAWSViews.java b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/views/ConfigBlueprintForOSImageUsingProAWSViews.java new file mode 100755 index 000000000..66ab31f2f --- /dev/null +++ b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/views/ConfigBlueprintForOSImageUsingProAWSViews.java @@ -0,0 +1,86 @@ +package com.rl.qa.views; + +import com.rl.qa.browsers.BrowserDriver; +import com.rl.qa.steps.LoginSteps; +import com.rl.qa.utils.BaseView; +import com.rl.qa.utils.SeleniumUtilities; +import org.openqa.selenium.WebElement; +import org.openqa.selenium.support.PageFactory; + +import java.util.logging.Logger; + +import static junit.framework.TestCase.assertFalse; +import static junit.framework.TestCase.assertTrue; +import static junit.framework.TestCase.fail; + +/** + * Created by RLE0372 on 23-09-2016. + */ +public class ConfigBlueprintForOSImageUsingProAWSViews { + private static final SeleniumUtilities SeleniumUtil = PageFactory.initElements(BrowserDriver.getCurrentDriver(), SeleniumUtilities.class); + private static final Logger logger = Logger.getLogger(LoginSteps.class.getName()); + + public static void verifyChooseOSIsDisabled() { + try { + WebElement wb=SeleniumUtil.getElement("id","instanceOS",SeleniumUtilities.OBJWAITTIMEOUT); + assertFalse(wb.isEnabled()); + logger.info("Choose Operating System is disabled"); + } + catch(Exception ex){ + BaseView.takeScreenshot("verifyElementIsDisabled"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void verifyChooseProviderIsDisabled() { + try { + WebElement wb=SeleniumUtil.getElement("id","providerId",SeleniumUtilities.OBJWAITTIMEOUT); + assertFalse(wb.isEnabled()); + logger.info("Choose Choose Provider is disabled"); + } + catch(Exception ex){ + BaseView.takeScreenshot("verifyChooseProviderIsDisabled"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void verifyChooseAvailableImages() { + try { + WebElement wb=SeleniumUtil.getElement("id","imageId",SeleniumUtilities.OBJWAITTIMEOUT); + assertFalse(wb.isEnabled()); + logger.info("Choose Available Images is disabled"); + } + catch(Exception ex){ + BaseView.takeScreenshot("verifyChooseAvailableImages"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void verifyChooseOrgIsDisabled() { + try { + WebElement wb=SeleniumUtil.getElement("id","",SeleniumUtilities.OBJWAITTIMEOUT); + assertFalse(wb.isEnabled()); + logger.info("Choose Organization is disabled"); + } + catch(Exception ex){ + BaseView.takeScreenshot("verifyChooseOrgIsDisabled"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void verifyLaunchButtonISDisplayed() { + try { + assertTrue(SeleniumUtil.verifyTextValue("id","blueprintLaunch","Launch Blueprint",SeleniumUtilities.OBJWAITTIMEOUT)); + } + catch(Exception ex){ + BaseView.takeScreenshot("verifyChooseOrgIsDisabled"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + +} diff --git a/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/views/ConfigBlueprintForSSTempUsingProAWSViews.java b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/views/ConfigBlueprintForSSTempUsingProAWSViews.java new file mode 100755 index 000000000..e71005cf4 --- /dev/null +++ b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/views/ConfigBlueprintForSSTempUsingProAWSViews.java @@ -0,0 +1,170 @@ +package com.rl.qa.views; + +import com.rl.qa.browsers.BrowserDriver; +import com.rl.qa.steps.LoginSteps; +import com.rl.qa.utils.BaseView; +import com.rl.qa.utils.SeleniumUtilities; +import org.openqa.selenium.support.PageFactory; + +import java.util.logging.Logger; + +import static junit.framework.Assert.assertTrue; +import static junit.framework.TestCase.assertFalse; +import static junit.framework.TestCase.fail; + +/** + * Created by RLE0372 on 10-09-2016. + */ +public class ConfigBlueprintForSSTempUsingProAWSViews { + private static final SeleniumUtilities SeleniumUtil = PageFactory.initElements(BrowserDriver.getCurrentDriver(), SeleniumUtilities.class); + private static final Logger logger = Logger.getLogger(LoginSteps.class.getName()); + + public static void verifyBlueprintInWorkZone(String blueprintName, String pageName) { + try { + assertTrue(SeleniumUtil.verifyTextValue("xpath", "//*[text()='"+blueprintName+"']",blueprintName,SeleniumUtilities.OBJWAITTIMEOUT)); + logger.info("Verified Blueprint in "+pageName+" "+blueprintName); + } catch (Exception ex) { + BaseView.takeScreenshot("verifyBlueprintInWorkZone"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + + } + + public static void clickOnMoreInfo(String moreInfo, String blueprintName) { + try { + SeleniumUtil.click("cssselector","i[title='More Info']",SeleniumUtilities.OBJWAITTIMEOUT); + } catch (Exception ex) { + BaseView.takeScreenshot("clickOnMoreInfo"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + + } + + public static void clickOnClose() { + try { + SeleniumUtil.click("xpath",".//*[@id='instanceLogsPage']//button",SeleniumUtilities.OBJWAITTIMEOUT); + } catch (Exception ex) { + BaseView.takeScreenshot("clickOnCloseInstanceLogPopup"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + + } + + public static void selectBlueprint(String blueprintName) { + try { + SeleniumUtil.click("xpath","//*[text()='"+blueprintName+"']",SeleniumUtilities.OBJWAITTIMEOUT); + } catch (Exception ex) { + BaseView.takeScreenshot("selectBlueprint"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void clickOnCopyBlueprint() { + try { + SeleniumUtil.click("cssselector","button[title='Copy Blueprint']",SeleniumUtilities.OBJWAITTIMEOUT); + } catch (Exception ex) { + BaseView.takeScreenshot("clickOnCopyBlueprint"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + + } + + public static void selectParametersOnPopupWindow(String name, String idOfElement) { + try { + SeleniumUtil.selectByVisibleText("id",idOfElement,name,SeleniumUtilities.OBJWAITTIMEOUT); + } catch (Exception ex) { + BaseView.takeScreenshot("selectParametersOnPopupWindow"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + + } + + public static void clickOnSave(String buttonText) { + try { + SeleniumUtil.click("xpath","//*[text()='"+buttonText+"']",SeleniumUtilities.OBJWAITTIMEOUT); + } catch (Exception ex) { + BaseView.takeScreenshot("clickOnSaveOnPopup"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void clickOnEnv(String proName, String envName) { + try { + SeleniumUtil.click("xpath","//div[span[text()='"+proName+"']]//*[text()='"+envName+"']",SeleniumUtilities.OBJWAITTIMEOUT); + } catch (Exception ex) { + BaseView.takeScreenshot("clickOnSaveOnPopup"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void clickOnDeleteBlueprint(String buttonTitle) { + try { + SeleniumUtil.click("cssselector","button[title='Remove Blueprint']",SeleniumUtilities.OBJWAITTIMEOUT); + } catch (Exception ex) { + BaseView.takeScreenshot("clickOnDelete"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void verifyBlueprintDeleted(String blueprintName) { + try { + assertFalse(SeleniumUtil.isElementExist("xpath", "//*[text()='"+blueprintName+"']")); + logger.info(blueprintName+" does not exists : deleted"); + + } catch (Exception ex) { + BaseView.takeScreenshot("verifyBlueprintDeleted"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void clickOnEditBlueprintButton(String buttonTitle, String blueprintName) { + try { + SeleniumUtil.click("xpath","//li[@title='"+blueprintName+"']/following-sibling::button[@title='"+buttonTitle+"']",SeleniumUtilities.OBJWAITTIMEOUT); + } catch (Exception ex) { + BaseView.takeScreenshot("verifyBlueprintDeleted"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void clickOnSettings() { + try { + SeleniumUtil.waitForElementIsClickable("id","settingsNew",8,SeleniumUtilities.OBJWAITTIMEOUT); + SeleniumUtil.click("id","settingsNew",SeleniumUtilities.OBJWAITTIMEOUT); + } catch (Exception ex) { + BaseView.takeScreenshot("clickOnSettings"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void deleteBlueprint(String title) { + try { + SeleniumUtil.click("cssselector","span[title='"+title+"']",SeleniumUtilities.OBJWAITTIMEOUT); + } catch (Exception ex) { + BaseView.takeScreenshot("deleteBlueprint"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void clickOnDeleteOnConfirmationPopup() { + try { + SeleniumUtil.click("cssselector",".btn.cat-btn-delete",SeleniumUtilities.OBJWAITTIMEOUT); + } catch (Exception ex) { + BaseView.takeScreenshot("clickOnDeleteOnConfirmationPopup"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } +} diff --git a/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/views/ConfigureNexusServerViews.java b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/views/ConfigureNexusServerViews.java new file mode 100755 index 000000000..d75af7c08 --- /dev/null +++ b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/views/ConfigureNexusServerViews.java @@ -0,0 +1,62 @@ +package com.rl.qa.views; + +import com.rl.qa.browsers.BrowserDriver; +import com.rl.qa.steps.LoginSteps; +import com.rl.qa.utils.BaseView; +import com.rl.qa.utils.SeleniumUtilities; +import org.openqa.selenium.support.PageFactory; + +import java.util.logging.Logger; + +import static junit.framework.TestCase.assertTrue; +import static junit.framework.TestCase.fail; + +/** + * Created by RLE0372 on 09-08-2016. + */ +public class ConfigureNexusServerViews { + private static final SeleniumUtilities SeleniumUtil = PageFactory.initElements(BrowserDriver.getCurrentDriver(), SeleniumUtilities.class); + private static final Logger logger = Logger.getLogger(LoginSteps.class.getName()); + + public static void verifyNexusServerName(String nexusServerName) { + try { + SeleniumUtil.waitForElementVisibilityOf("xpath", ".//*[@id='envtable']//*[text()='"+nexusServerName+"']",5, SeleniumUtilities.OBJWAITTIMEOUT); + assertTrue (SeleniumUtil.verifyTextValue("xpath",".//*[@id='envtable']//*[text()='"+nexusServerName+"']",nexusServerName,SeleniumUtilities.OBJWAITTIMEOUT)); { + logger.info(nexusServerName+" is available"); +// } else { +// logger.info(nexusServerName+" is not available"); + } + } catch (Exception ex) { + BaseView.takeScreenshot("verifyNexusServerName"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void verifyNexusServerInfo(String nexusServerName, String nexusServerDetails) { + try { +// SeleniumUtil.waitForElementVisibilityOf("xpath", ".//*[@id='envtable']//*[text()='"+nexusServerName+"']/../*[text()='"+nexusServerDetails+"']",5, SeleniumUtilities.OBJWAITTIMEOUT); + assertTrue (SeleniumUtil.verifyTextValue("xpath",".//*[@id='envtable']//*[text()='"+nexusServerName+"']/../*[text()='"+nexusServerDetails+"']",nexusServerDetails,SeleniumUtilities.OBJWAITTIMEOUT)); { + logger.info(nexusServerName+" is available with "+nexusServerDetails); +// } else { +// logger.info(nexusServerName+" is not available with "+nexusServerDetails); + } + } catch (Exception ex) { + BaseView.takeScreenshot("verifyNexusServerName"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void selectOrgInNexusConfigPage(String orgName) { + try { + SeleniumUtil.selectByVisibleText("id","orgname",orgName,SeleniumUtilities.OBJWAITTIMEOUT); + } catch (Exception ex) { + BaseView.takeScreenshot("selectOrgInNexusConfigPage"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + + } +} + diff --git a/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/views/ConfigureProviderViews.java b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/views/ConfigureProviderViews.java new file mode 100755 index 000000000..1eec9fbdf --- /dev/null +++ b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/views/ConfigureProviderViews.java @@ -0,0 +1,353 @@ +package com.rl.qa.views; + +import com.rl.qa.browsers.BrowserDriver; +import com.rl.qa.steps.LoginSteps; +import com.rl.qa.utils.BaseView; +import com.rl.qa.utils.SeleniumUtilities; +import org.openqa.selenium.By; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; +import org.openqa.selenium.remote.LocalFileDetector; +import org.openqa.selenium.remote.RemoteWebElement; +import org.openqa.selenium.support.PageFactory; +import org.openqa.selenium.support.ui.ExpectedConditions; +import org.openqa.selenium.support.ui.WebDriverWait; + +import java.io.File; +import java.util.logging.Logger; + +import static junit.framework.TestCase.*; + +/** + * Created by RLE0372 on 02-08-2016. + */ +public class ConfigureProviderViews { + + private static final SeleniumUtilities SeleniumUtil = PageFactory.initElements(BrowserDriver.getCurrentDriver(), SeleniumUtilities.class); + private static final Logger logger = Logger.getLogger(LoginSteps.class.getName()); + + public static void selectProviderType(String providerType) { + + try { + SeleniumUtil.selectByVisibleText("id","providertype",providerType,SeleniumUtilities.OBJWAITTIMEOUT); +// SeleniumUtil.waitForElementIsClickable("id","s2id_providertype",8, SeleniumUtilities.OBJWAITTIMEOUT); +// SeleniumUtil.click("id","s2id_providertype",SeleniumUtilities.OBJWAITTIMEOUT); +// SeleniumUtil.click("xpath",".//*[@id='select2-drop']//*[text()='"+providerType+"']",SeleniumUtilities.OBJWAITTIMEOUT); + } + catch(Exception ex){ + BaseView.takeScreenshot("selectProviderType"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + + } + + public static void clickCredentialSelButton(String buttonID) { + try { + SeleniumUtil.waitForElementIsClickable("id",buttonID,8, SeleniumUtilities.OBJWAITTIMEOUT); + SeleniumUtil.checkbox("id",buttonID,SeleniumUtilities.OBJWAITTIMEOUT); + } + catch(Exception ex){ + BaseView.takeScreenshot("clickCredentialSelButton"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void selectOrg(String orgName) { + try { + //SeleniumUtil.waitForElementIsClickable("xpath","//label[contains(text(),'Organization')]/following-sibling::div",8, SeleniumUtilities.OBJWAITTIMEOUT); + //Thread.sleep(1000); +// SeleniumUtil.click("xpath","//span[text()='Select an Organization']",SeleniumUtilities.OBJWAITTIMEOUT); +// Thread.sleep(1000); + //SeleniumUtil.waitForElementIsClickable("xpath","//*[text()='"+orgName+"']",8, SeleniumUtilities.OBJWAITTIMEOUT); + //Thread.sleep(1000); +// SeleniumUtil.click("xpath","//div[text()='"+orgName+"']", SeleniumUtilities.OBJWAITTIMEOUT); + //select/option[@value='"+orgName+"']" +// Thread.sleep(2000); + SeleniumUtil.selectByVisibleText("id","orgname",orgName,SeleniumUtilities.OBJWAITTIMEOUT); + + } + catch(Exception ex){ + BaseView.takeScreenshot("selectOrg"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void OrgSelct(String orgName) { + try { + SeleniumUtil.waitForElementIsClickable("xpath","//label[contains(text(),'Organization')]/following-sibling::div",8, SeleniumUtilities.OBJWAITTIMEOUT); + Thread.sleep(1000); + SeleniumUtil.click("xpath","//label[contains(text(),'Organization')]/following-sibling::div",SeleniumUtilities.OBJWAITTIMEOUT); + Thread.sleep(1000); + //SeleniumUtil.waitForElementIsClickable("xpath","//*[text()='"+orgName+"']",8, SeleniumUtilities.OBJWAITTIMEOUT); + //Thread.sleep(1000); + SeleniumUtil.click("xpath","//select[@id='orgId']/option[text()='"+orgName+"']", SeleniumUtilities.OBJWAITTIMEOUT); + } + catch(Exception ex){ + BaseView.takeScreenshot("selectOrg"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void selectRegion(String region) { + try { + SeleniumUtil.selectByVisibleText("name","region","US West (N. California) | us-west-1",SeleniumUtilities.OBJWAITTIMEOUT); +// Thread.sleep(5000); +// SeleniumUtil.waitForElementIsClickable("xpath","(//span[text()='Select Region'])[2]",8, SeleniumUtilities.OBJWAITTIMEOUT); +// SeleniumUtil.click("xpath","(//span[text()='Select Region'])[2]",SeleniumUtilities.OBJWAITTIMEOUT); +// SeleniumUtil.waitForElementIsClickable("xpath","//option[contains(text(),'"+region+"')]",8, SeleniumUtilities.OBJWAITTIMEOUT); +// SeleniumUtil.click("xpath","//option[contains(text(),'"+region+"')]",SeleniumUtilities.OBJWAITTIMEOUT); + } + catch(Exception ex){ + BaseView.takeScreenshot("selectRegion"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void selectKeyPair(String keyPair) { + try { + SeleniumUtil.selectByVisibleText("name","keyPairName",keyPair, SeleniumUtilities.OBJWAITTIMEOUT); +// SeleniumUtil.waitForElementIsClickable("xpath","//*[text()='Select Key Pair:']/following-sibling::div",8, SeleniumUtilities.OBJWAITTIMEOUT); +// SeleniumUtil.click("xpath","//*[text()='Select Key Pair:']/following-sibling::div",SeleniumUtilities.OBJWAITTIMEOUT); +// SeleniumUtil.waitForElementIsClickable("xpath","//*[text()='"+keyPair+"']",8, SeleniumUtilities.OBJWAITTIMEOUT); +// SeleniumUtil.click("xpath","//*[text()='"+keyPair+"']",SeleniumUtilities.OBJWAITTIMEOUT); + } + catch(Exception ex){ + BaseView.takeScreenshot("selectKeyPair"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void browsePemFileForProvider() { + try { + WebDriver driver=SeleniumUtil.getWebDriver(); + WebElement element = driver.findElement(By.name("fileObject")); + LocalFileDetector detector = new LocalFileDetector(); + String path = new String(new File(".").getCanonicalPath() + "/src/test/resources/Upload/bootstrapncal.pem"); + File f = detector.getLocalFile(path); + ((RemoteWebElement)element).setFileDetector(detector); + element.sendKeys(f.getAbsolutePath()); +// element.sendKeys(path); + } + catch(Exception ex){ + BaseView.takeScreenshot("selectKeyPair"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void verifyProvidersName(String providerName) { + try { + SeleniumUtil.waitForElementVisibilityOf("xpath", "//*[contains(text(),'Azure')]", 8, SeleniumUtilities.OBJWAITTIMEOUT); + SeleniumUtil.waitUntilElementContainsText("xpath","//*[contains(text(),'Azure')]",providerName,8,SeleniumUtilities.OBJWAITTIMEOUT); + } + catch(Exception ex){ + BaseView.takeScreenshot("verifyProvidersName"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void verifyMessage(String actMsg) { + try { + SeleniumUtil.waitUntilElementContainsText("xpath",".//*[contains(./text(),'"+actMsg+"')]",actMsg,SeleniumUtilities.OBJWAITTIMEOUT); + WebDriverWait wait = new WebDriverWait(BrowserDriver.getCurrentDriver(), 500); + wait.until(ExpectedConditions.textToBePresentInElement(By.tagName("*"), actMsg)); + SeleniumUtil.waitForElementVisibilityOf("xpath", "//*[contains(text(),'"+actMsg+"')]", 8, SeleniumUtilities.OBJWAITTIMEOUT); + assertTrue(SeleniumUtil.verifyTextValue("xpath",".//*[contains(./text(),'"+actMsg+"')]",actMsg,SeleniumUtilities.OBJWAITTIMEOUT));{ + logger.info("Verified : " +actMsg); + } +// else{ +// logger.info("Not Verified"+actMsg); +// } + } + catch(Exception ex){ + BaseView.takeScreenshot("verifyProvidersName"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + public static void browseAzurePemFile() { + try { + WebDriver driver=SeleniumUtil.getWebDriver(); + WebElement element = driver.findElement(By.id("azurepem")); + LocalFileDetector detector = new LocalFileDetector(); + String path = new String(new File(".").getCanonicalPath() + "/src/test/resources/Upload/rlcatalyst.pem"); + File f = detector.getLocalFile(path); + ((RemoteWebElement)element).setFileDetector(detector); + element.sendKeys(f.getAbsolutePath()); +// element.sendKeys(path); + } + catch(Exception ex){ + BaseView.takeScreenshot("selectKeyPair"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void browseAzurePrivateKeyFile() { + try { + WebDriver driver=SeleniumUtil.getWebDriver(); + WebElement element = driver.findElement(By.id("azurekey")); + LocalFileDetector detector = new LocalFileDetector(); + String path = new String(new File(".").getCanonicalPath() + "/src/test/resources/Upload/rlcatalyst.key"); + File f = detector.getLocalFile(path); + ((RemoteWebElement)element).setFileDetector(detector); + element.sendKeys(f.getAbsolutePath()); +// element.sendKeys(path); + } + catch(Exception ex){ + BaseView.takeScreenshot("selectKeyPair"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void browseOpenStackPemFile(String openStackpemFile) { + try { + WebDriver driver=SeleniumUtil.getWebDriver(); + WebElement element = driver.findElement(By.id("openstackinstancepem")); + LocalFileDetector detector = new LocalFileDetector(); + String path = new String(new File(".").getCanonicalPath() + "/src/test/resources/Upload/"+ openStackpemFile); + File f = detector.getLocalFile(path); + ((RemoteWebElement)element).setFileDetector(detector); + element.sendKeys(f.getAbsolutePath()); +// element.sendKeys(path); + } + catch(Exception ex){ + BaseView.takeScreenshot("browseOpenStackPemFile"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void verifyProviderName(String providerName) { + try { + SeleniumUtil.waitForElementVisibilityOf("xpath", ".//*[@id='envtable']//*[text()='"+providerName+"']",5, SeleniumUtilities.OBJWAITTIMEOUT); + assertTrue (SeleniumUtil.verifyTextValue("xpath",".//*[@id='envtable']//*[text()='"+providerName+"']",providerName,SeleniumUtilities.OBJWAITTIMEOUT)); { + logger.info("Verified : "+providerName); +// } else { +// logger.info("Not verified:" +providerName); + } + } catch (Exception ex) { + BaseView.takeScreenshot("verifyProvideDetails"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void verifySelProviderTypeisDisabled() { + try { + SeleniumUtil.waitForElementVisibilityOf("id","s2id_providertype",5, SeleniumUtilities.OBJWAITTIMEOUT); + WebElement wb=SeleniumUtil.getElement("id","s2id_providertype",SeleniumUtilities.OBJWAITTIMEOUT); + String actClassValOfElement=wb.getAttribute("class"); + String expClassValWhenEleIsDisabled="select2-container select2-container-disabled chooseOrganization width-100"; + assertTrue(actClassValOfElement.equals(expClassValWhenEleIsDisabled));{ + logger.info("Select provider type is disbled"); +// } else { +// logger.info("Select provider type is enabled"); + } + } catch (Exception ex) { + BaseView.takeScreenshot("verifySelProviderTypeIsDisabled"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } } + + public static void verifyCredentialsAccessKeyIsDisabled(String credentialsAccessKeys) { + try { + SeleniumUtil.waitForElementVisibilityOf("id",credentialsAccessKeys,5, SeleniumUtilities.OBJWAITTIMEOUT); + WebElement wb=SeleniumUtil.getElement("id",credentialsAccessKeys,SeleniumUtilities.OBJWAITTIMEOUT); + assertFalse(wb.isEnabled());{ + logger.info("Credentials Access Keys is enabled"); +// } else { +// logger.info("Credentials Access Keys is disabled"); + } + } catch (Exception ex) { + BaseView.takeScreenshot("verifyCredentialsAccessKeyisDisabled"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } } + + + public static void verifySelectOrgIsDisabled() { + try { + SeleniumUtil.waitForElementVisibilityOf("id","s2id_orgId",5, SeleniumUtilities.OBJWAITTIMEOUT); + WebElement wb=SeleniumUtil.getElement("id","s2id_orgId",SeleniumUtilities.OBJWAITTIMEOUT); + String actClassValOfElement=wb.getAttribute("class"); + String expClassValWhenEleIsDisabled="select2-container select2-container-disabled chooseOrganization width-100"; + assertTrue(actClassValOfElement.equals(expClassValWhenEleIsDisabled));{ + logger.info("Select organization type is disabled"); +// } else { +// logger.info("Select organization type is enabled"); + } + } catch (Exception ex) { + BaseView.takeScreenshot("verifySelectOrgIsDisabled"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } } + + public static void verifySelectRegionIsDisabled() { + try { + SeleniumUtil.waitForElementVisibilityOf("xpath",".//*[@class='select2-container select2-container-disabled region chooseOrganization width-100 secretInfo']",5, SeleniumUtilities.OBJWAITTIMEOUT); + WebElement wb=SeleniumUtil.getElement("xpath",".//*[@class='select2-container select2-container-disabled region chooseOrganization width-100 secretInfo']",SeleniumUtilities.OBJWAITTIMEOUT); + String actClassValOfElement=wb.getAttribute("class"); + String expClassValWhenEleIsDisabled="select2-container select2-container-disabled region chooseOrganization width-100 secretInfo"; + assertTrue(actClassValOfElement.equals(expClassValWhenEleIsDisabled));{ + logger.info("Select region is disabled"); +// } else { +// logger.info("Select region is enabled"); + } + } catch (Exception ex) { + BaseView.takeScreenshot("verifySelectRegionIsDisabled"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } } + + public static void verifySelKeyPairIsDisabled() { + try { + SeleniumUtil.waitForElementVisibilityOf("xpath","//*[@class='select2-container select2-container-disabled chooseOrganization width-100 keyvalue secretInfo']",5, SeleniumUtilities.OBJWAITTIMEOUT); + WebElement wb=SeleniumUtil.getElement("xpath","//*[@class='select2-container select2-container-disabled chooseOrganization width-100 keyvalue secretInfo']",SeleniumUtilities.OBJWAITTIMEOUT); + String actClassValOfElement=wb.getAttribute("class"); + String expClassValWhenEleIsDisabled="select2-container select2-container-disabled chooseOrganization width-100 keyvalue secretInfo"; + assertTrue(actClassValOfElement.equals(expClassValWhenEleIsDisabled));{ + logger.info("Select key pair is disabled"); +// } else { +// logger.info("Select key pair is enabled"); + } + } catch (Exception ex) { + BaseView.takeScreenshot("verifySelKeyPairIsDisabled"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } } + + public static void verifyProviderInfo(String providerName, String providerInfo) { + try { + SeleniumUtil.waitForElementVisibilityOf("xpath", ".//*[@id='envtable']//*[text()='"+providerName+"']/../*[text()='"+providerInfo+"']",5, SeleniumUtilities.OBJWAITTIMEOUT); + assertTrue (SeleniumUtil.verifyTextValue("xpath",".//*[@id='envtable']//*[text()='"+providerName+"']/../*[text()='"+providerInfo+"']",providerInfo,SeleniumUtilities.OBJWAITTIMEOUT)); { + logger.info(providerName+" is available with : "+providerInfo); +// } else { +// logger.info(providerName+" is not available with : "+providerInfo); + } + } catch (Exception ex) { + BaseView.takeScreenshot("verifyProviderInfo"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void selectOrgInNewAWSPage(String orgName) { + try { + SeleniumUtil.selectByVisibleText("id","orgId",orgName,SeleniumUtilities.OBJWAITTIMEOUT); + } catch (Exception ex) { + BaseView.takeScreenshot("selectOrgInNewAWSPage"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + +} diff --git a/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/views/ConfigurePuppetServerViews.java b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/views/ConfigurePuppetServerViews.java new file mode 100755 index 000000000..8885df3dd --- /dev/null +++ b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/views/ConfigurePuppetServerViews.java @@ -0,0 +1,82 @@ +package com.rl.qa.views; + +import com.rl.qa.browsers.BrowserDriver; +import com.rl.qa.utils.BaseView; +import com.rl.qa.utils.SeleniumUtilities; +import org.openqa.selenium.support.PageFactory; + +import static junit.framework.TestCase.fail; + +/** + * Created by RLE0372 on 01-08-2016. + */ +public class ConfigurePuppetServerViews { + private static final SeleniumUtilities SeleniumUtil = PageFactory.initElements(BrowserDriver.getCurrentDriver(), SeleniumUtilities.class); + + public static void clickOnPuppetServerLink() { + try{ + SeleniumUtil.waitForElementIsClickable("linktext","Puppet Server",8, SeleniumUtilities.OBJWAITTIMEOUT); + SeleniumUtil.click("linktext","Puppet Server",SeleniumUtilities.OBJWAITTIMEOUT); + } + catch (Exception ex) + { + BaseView.takeScreenshot("clickOnPuppetServerLink"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void enterPuppetServerName(String puppetServerName) { + try{ + SeleniumUtil.waitForElementIsClickable("id","puppetservername",8,SeleniumUtil.OBJWAITTIMEOUT); + SeleniumUtil.type("id","puppetservername","",SeleniumUtilities.OBJWAITTIMEOUT); + } + catch (Exception ex) + { + BaseView.takeScreenshot("enterPuppetServerName"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void enterUserName(String userName) { + try{ + SeleniumUtil.waitForElementIsClickable("id","username",8,SeleniumUtil.OBJWAITTIMEOUT); + SeleniumUtil.type("id","username",userName,SeleniumUtilities.OBJWAITTIMEOUT); + } + catch (Exception ex) + { + BaseView.takeScreenshot("enterUserName"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void enterHostName(String hostName) { + try{ + SeleniumUtil.waitForElementIsClickable("id","hostname",8,SeleniumUtil.OBJWAITTIMEOUT); + SeleniumUtil.type("id","hostname",hostName,SeleniumUtilities.OBJWAITTIMEOUT); + } + catch (Exception ex) + { + BaseView.takeScreenshot("enterHostName"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void enterPuppetPassword(String password) { + try{ + SeleniumUtil.waitForElementIsClickable("id","puppetpassword",8,SeleniumUtil.OBJWAITTIMEOUT); + SeleniumUtil.type("id","puppetpassword",password,SeleniumUtilities.OBJWAITTIMEOUT); + } + catch (Exception ex) + { + BaseView.takeScreenshot("enterPuppetPassword"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } +} + + diff --git a/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/views/CreateEditDelBGroupViews.java b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/views/CreateEditDelBGroupViews.java new file mode 100755 index 000000000..13131cd64 --- /dev/null +++ b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/views/CreateEditDelBGroupViews.java @@ -0,0 +1,204 @@ +package com.rl.qa.views; + +import com.rl.qa.browsers.BrowserDriver; +import com.rl.qa.steps.LoginSteps; +import com.rl.qa.utils.BaseView; +import com.rl.qa.utils.SeleniumUtilities; +import org.openqa.selenium.support.PageFactory; + +import java.util.logging.Logger; + +import static junit.framework.Assert.assertTrue; +import static junit.framework.TestCase.assertFalse; +import static junit.framework.TestCase.fail; + +/** + * Created by RLE0372 on 20-07-2016. + */ +public class CreateEditDelBGroupViews { + private static final SeleniumUtilities SeleniumUtil = PageFactory.initElements(BrowserDriver.getCurrentDriver(), SeleniumUtilities.class); + private static final Logger logger = Logger.getLogger(LoginSteps.class.getName()); + public static void clickBGroupLink()throws InterruptedException { + try { + SeleniumUtil.waitForElementIsClickable("linktext", "Business Groups", 8, SeleniumUtilities.OBJWAITTIMEOUT); + SeleniumUtil.click("linktext","Business Groups",SeleniumUtilities.OBJWAITTIMEOUT); + } + catch(Exception ex){ + BaseView.takeScreenshot("clickBGroupLink"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + public static void clickOnNewBGroup() { + try { + SeleniumUtil.waitForElementIsClickable("id","newProd", 8, SeleniumUtilities.OBJWAITTIMEOUT); + SeleniumUtil.click("id","newProd",SeleniumUtilities.OBJWAITTIMEOUT); + } + catch(Exception ex){ + BaseView.takeScreenshot("clickOnNewBGroup"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void enterBGroupName(String bGroupName) { + try { + SeleniumUtil.waitForElementIsClickable("id","productgroupname", 8, SeleniumUtilities.OBJWAITTIMEOUT); + SeleniumUtil.type("id","productgroupname",bGroupName,SeleniumUtilities.OBJWAITTIMEOUT); + } + catch(Exception ex){ + BaseView.takeScreenshot("enterBGroupName"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + + } + + public static void enterOrgName(String org_Name) { + try { + SeleniumUtil.waitForElementIsClickable("xpath",".//*[@id='select2-drop']/div/input", 8, SeleniumUtilities.OBJWAITTIMEOUT); + SeleniumUtil.click("xpath",".//*[@id='select2-drop']/div/input",SeleniumUtilities.OBJWAITTIMEOUT); + } + catch(Exception ex){ + BaseView.takeScreenshot("enterOrgName"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + + public static void clickOnEditBGroup(String bGroup) { + try { + SeleniumUtil.waitForElementIsClickable("xpath",".//*[@id='envtable']/tbody/tr/td[text()='"+bGroup+"']/../td/div/a",8,SeleniumUtilities.OBJWAITTIMEOUT); + SeleniumUtil.click("xpath",".//*[@id='envtable']/tbody/tr/td[text()='"+bGroup+"']/../td/div/a",SeleniumUtilities.OBJWAITTIMEOUT); + } + catch(Exception ex){ + BaseView.takeScreenshot("clickOnEditBGroup"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void clearField() { + try { + SeleniumUtil.waitForElementIsClickable("id","productgroupname",8,SeleniumUtilities.OBJWAITTIMEOUT); + SeleniumUtil.clear("id","productgroupname",SeleniumUtilities.OBJWAITTIMEOUT); + } + catch(Exception ex){ + BaseView.takeScreenshot("clearField"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void enterNewBGrpName(String newBGrpName) { + try { + SeleniumUtil.waitForElementIsClickable("id","productgroupname",8,SeleniumUtilities.OBJWAITTIMEOUT); + SeleniumUtil.type("id","productgroupname",newBGrpName,SeleniumUtilities.OBJWAITTIMEOUT); + } + catch(Exception ex){ + BaseView.takeScreenshot("enterNewBGrpName"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + + } + + public static void delEditedBGroup(String editedBGrp) { + try { + SeleniumUtil.waitForElementIsClickable("xpath",".//*[@id='envtable']/tbody/tr/td[text()='"+editedBGrp+"']/../td/div/button",8,SeleniumUtilities.OBJWAITTIMEOUT); + SeleniumUtil.click("xpath",".//*[@id='envtable']/tbody/tr/td[text()='"+editedBGrp+"']/../td/div/button",SeleniumUtilities.OBJWAITTIMEOUT); + } + catch(Exception ex){ + BaseView.takeScreenshot("delEditedBGroup"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + + } + + public static void clickOnOrgLinkInSettTree() { + try { + SeleniumUtil.waitForElementIsClickable("linktext","Organizations",8,SeleniumUtilities.OBJWAITTIMEOUT); + SeleniumUtil.click("linktext","Organizations",SeleniumUtilities.OBJWAITTIMEOUT); + + } + catch(Exception ex){ + BaseView.takeScreenshot("clickOnOrgLinkInSettTree"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void verifyAssignedOrg(String bGroup,String org) { + try { + SeleniumUtil.waitForElementVisibilityOf("xpath", ".//*[@id='envtable']//td[text()='"+bGroup+"']/../td[text()='"+org+"']",5, SeleniumUtilities.OBJWAITTIMEOUT); + assertTrue (SeleniumUtil.verifyTextValue("xpath", ".//*[@id='envtable']//td[text()='"+bGroup+"']/../td[text()='"+org+"']",org,SeleniumUtilities.OBJWAITTIMEOUT)); { + logger.info("Verified assigned organization:"+org); +// } else { +// logger.info("Assigned Organization not found:" +org); + } + } catch (Exception ex) { + BaseView.takeScreenshot("verifyAssignedOrg"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + + } + + public static void verifyCreatedBGroup(String businessGroup) { + try { + SeleniumUtil.waitForElementVisibilityOf("xpath", ".//*[@id='envtable']//*[text()='"+businessGroup+"']",5, SeleniumUtilities.OBJWAITTIMEOUT); + assertTrue(SeleniumUtil.verifyTextValue("xpath", ".//*[@id='envtable']//*[text()='"+businessGroup+"']",businessGroup,SeleniumUtilities.OBJWAITTIMEOUT)); + logger.info("Verified created Business Group :"+businessGroup); + } catch (Exception ex) { + BaseView.takeScreenshot("verifyCreatedOrg"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void verifyEditedBGroup(String editedBGroup) { + try { + SeleniumUtil.waitForElementVisibilityOf("xpath",".//*[@id='envtable']//*[text()='"+editedBGroup+"']",8, SeleniumUtilities.OBJWAITTIMEOUT); + assertTrue(SeleniumUtil.waitUntilElementContainsText("xpath",".//*[@id='envtable']//*[text()='"+editedBGroup+"']",editedBGroup,5,SeleniumUtilities.OBJWAITTIMEOUT)); { + logger.info("Verified edited Business Group :" +editedBGroup); +// } else { +// logger.info("Edited Business Group : "+ editedBGroup+ " does not exist"); + } + } catch (Exception ex) { + BaseView.takeScreenshot("verifyEditedBGroup"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void verifyDeletedBGroup(String bGroup) { + try { +// SeleniumUtil.waitForElementVisibilityOf("xpath", ".//*[@id='envtable']//*[text()='"+bGroup+"']", 1, SeleniumUtilities.OBJWAITTIMEOUT); + assertFalse(SeleniumUtil.isElementExist("xpath", ".//*[@id='envtable']//*[text()='"+bGroup+"']")); { + logger.info("Business Group does not exists : Deleted"); +// } else { +// logger.info("Business Group does not exists : Business Group deleted"); + } + } catch (Exception ex) { + BaseView.takeScreenshot("verifyDeletedBGroup"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void selectBusinessGroup(String orgName) { + try { + SeleniumUtil.click("xpath","//span[text()='Select an Organization']",SeleniumUtilities.OBJWAITTIMEOUT); + SeleniumUtil.click("xpath","//div[text()='"+orgName+"']",SeleniumUtilities.OBJWAITTIMEOUT); + //SeleniumUtil.selectByVisibleText("id","orgname",orgName,SeleniumUtilities.OBJWAITTIMEOUT); + } catch (Exception ex) { + BaseView.takeScreenshot("selectBusinessGroup"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } +} + + diff --git a/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/views/CreateEditDelDesignerViews.java b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/views/CreateEditDelDesignerViews.java new file mode 100755 index 000000000..16b2566a5 --- /dev/null +++ b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/views/CreateEditDelDesignerViews.java @@ -0,0 +1,383 @@ +package com.rl.qa.views; + +import com.rl.qa.browsers.BrowserDriver; +import com.rl.qa.steps.CreateEditDelDesignerSteps; +import com.rl.qa.utils.BaseView; +import com.rl.qa.utils.SeleniumUtilities; +import org.apache.log4j.Logger; +import org.openqa.selenium.WebElement; +import org.openqa.selenium.support.PageFactory; + +import static junit.framework.Assert.assertTrue; +import static junit.framework.TestCase.fail; + +/** + * Created by rle0346 on 3/8/16. + */ +public class CreateEditDelDesignerViews { + private static final Logger logger = Logger.getLogger(CreateEditDelDesignerSteps.class.getName()); + private static final SeleniumUtilities SeleniumUtil = PageFactory.initElements(BrowserDriver.getCurrentDriver(), SeleniumUtilities.class); + + public static void clickOnUsersSetupLink(String strUserSetupLink) { + try { + SeleniumUtil.waitForElementIsClickable("xpath", "//a[text()='" + strUserSetupLink + "']", 8, SeleniumUtilities.OBJWAITTIMEOUT); + SeleniumUtil.click("xpath", "//a[text()='" + strUserSetupLink + "']", SeleniumUtilities.OBJWAITTIMEOUT); + } catch (Exception ex) { + BaseView.takeScreenshot("clickOnUsersSetupLink"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + + public static void clickOnUsersLink(String strUserLink) { + try { + SeleniumUtil.waitForElementIsClickable("xpath", "//a[text()='" + strUserLink + "']", 8, SeleniumUtilities.OBJWAITTIMEOUT); + SeleniumUtil.click("xpath", "//a[text()='" + strUserLink + "']", SeleniumUtilities.OBJWAITTIMEOUT); + } catch (Exception ex) { + BaseView.takeScreenshot("clickOnUsersLink"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + + + } + + + public static void clickOnNewButton() { + try { + SeleniumUtil.waitForElementIsClickable("id", "newUser", 8, SeleniumUtilities.OBJWAITTIMEOUT); + SeleniumUtil.click("id", "newUser", SeleniumUtilities.OBJWAITTIMEOUT); + } catch (Exception ex) { + BaseView.takeScreenshot("clickOnNewButton"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + + } + + public static void enterLoginName(String strDesignerName) { + try { + //SeleniumUtil.waitForElementVisibilityOf("loginname", SeleniumUtilities.OBJWAITTIMEOUT); + SeleniumUtil.type("id", "loginname", strDesignerName, SeleniumUtilities.OBJWAITTIMEOUT); + } catch (Exception ex) { + BaseView.takeScreenshot("enterLoginName"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + + } + + public static void enterEmailAddress(String strEmailAddress) { + try { + //SeleniumUtil.waitForElementVisibilityOf("loginname", SeleniumUtilities.OBJWAITTIMEOUT); + SeleniumUtil.clear("id" ,"email", 8); + SeleniumUtil.type("id", "email", strEmailAddress, SeleniumUtilities.OBJWAITTIMEOUT); + } catch (Exception ex) { + BaseView.takeScreenshot("enterEmailAddress"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + + } + + public static void enterPassword(String strPassword) { + try { + //SeleniumUtil.waitForElementVisibilityOf("loginname", SeleniumUtilities.OBJWAITTIMEOUT); + SeleniumUtil.type("id", "password", strPassword, SeleniumUtilities.OBJWAITTIMEOUT); + } catch (Exception ex) { + BaseView.takeScreenshot("enterPassword"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + + } + + public static void enterConfirmPassword(String strconfPassword) { + try { + //SeleniumUtil.waitForElementVisibilityOf("loginname", SeleniumUtilities.OBJWAITTIMEOUT); + SeleniumUtil.type("id", "cnfPassword", strconfPassword, SeleniumUtilities.OBJWAITTIMEOUT); + } catch (Exception ex) { + BaseView.takeScreenshot("enterConfirmPassword"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + + + } + + + public static void selectOrganization(String strOrganization) { + try { + SeleniumUtil.waitForElementVisibilityOf("xpath", "//span[text()='All']", 8); + SeleniumUtil.click("xpath", "//span[text()='All']", 8); + SeleniumUtil.waitForElementVisibilityOf("xpath", "//div[text()='"+strOrganization+"']", 8); + SeleniumUtil.click("xpath", "//div[text()='"+strOrganization+"']", 8); + + } catch (Exception ex) { + BaseView.takeScreenshot("selectOrganization"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + + + } + + public static void selectRole(String strRole) { + try { + SeleniumUtil.waitForElementVisibilityOf("xpath", "//label[text()='" + strRole + "']/input/../i", 8); + SeleniumUtil.click("xpath", "//label[text()='" + strRole + "']/input/../i", 8); + + } catch (Exception ex) { + BaseView.takeScreenshot("selectRole"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + + + } + + public static void selectTeam(String strOrganization) { + try { + SeleniumUtil.waitForElementVisibilityOf("xpath", "//label[text()='" + strOrganization + "_Admins']/input/../i", 8); + SeleniumUtil.click("xpath", "//label[text()='" + strOrganization + "_Admins']/input/../i", 8); + + SeleniumUtil.waitForElementVisibilityOf("xpath", "//label[text()='" + strOrganization + "_Admins']/input/../i", 8); + SeleniumUtil.click("xpath", "//label[text()='" + strOrganization + "_DEV']/input/../i", 8); + + SeleniumUtil.waitForElementVisibilityOf("xpath", "//label[text()='" + strOrganization + "_Admins']/input/../i", 8); + SeleniumUtil.click("xpath", "//label[text()='" + strOrganization + "_QA']/input/../i", 8); + + SeleniumUtil.waitForElementVisibilityOf("xpath", "//label[text()='" + strOrganization + "_Admins']/input/../i", 8); + SeleniumUtil.click("xpath", "//label[text()='" + strOrganization + "_DevOps']/input/../i", 8); + + + } catch (Exception ex) { + BaseView.takeScreenshot("selectTeam"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + + + } + + public static void clickSaveButton() { + try { + SeleniumUtil.waitForElementVisibilityOf("xpath", "//button[@class='btn btn-primary btn-mini']", 8); + SeleniumUtil.click("xpath", "//button[@class='btn btn-primary btn-mini']", 8); + } catch (Exception ex) { + BaseView.takeScreenshot("clickSaveButton"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void clickEditDesignerButton(String strDesigner) { + try { + SeleniumUtil.waitForElementVisibilityOf("xpath", ".//*[@id='envtable']/tbody/tr/td[text()='"+strDesigner+"']/../td[5]/div/a[@title='Edit']", 8); + SeleniumUtil.click("xpath", ".//*[@id='envtable']/tbody/tr/td[text()='"+strDesigner+"']/../td[5]/div/a[@title='Edit']", 8); + + } catch (Exception ex) { + BaseView.takeScreenshot("clickEditDesignerButton"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + + } + + + public static void verifyDesignerUserCreation(String strDesignerUser) { + try { + //WebElement wb= SeleniumUtil.getElement("xpath", "//td[text()='" +strDesignerUser+"'][1]", 8, 8); + //logger.info(wb); + //SeleniumUtil.waitForElementVisibilityOf(wb, 8, 8); + SeleniumUtil.waitUntilElementContainsText("xpath", "//td[text()='"+strDesignerUser+"'][1]", strDesignerUser, 0, 10); + logger.info("User is verfified"); + assertTrue (SeleniumUtil.verifyTextValue("xpath", ".//*[@id='envtable']/tbody/tr//td[4][text()='"+strDesignerUser+"']/../td[1][text()='Admin']",strDesignerUser,SeleniumUtilities.OBJWAITTIMEOUT)); + + } catch (Exception ex) { + BaseView.takeScreenshot("verifyDesignerUserCreation"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + + } + + + + public static void VerifyEmailAddress(String strDesigner, String strEmailAddress) { + try { + //WebElement wb= SeleniumUtil.getElement("xpath", "//td[text()='" +strDesignerUser+"'][1]", 8, 8); + //logger.info(wb); + //SeleniumUtil.waitForElementVisibilityOf(wb, 8, 8); + SeleniumUtil.waitUntilElementContainsText("xpath", "//td[text()='"+strDesigner+"']/../td[text()='"+strEmailAddress+"']", strEmailAddress , 0, 10); + logger.info("Designer user Email Address is verfified"); + + } catch (Exception ex) { + BaseView.takeScreenshot("VerifyEmailAddress"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + + } + + + public static void VerifyDesignerRoleInTable(String strDesigner, String strRole) { + try { + //WebElement wb= SeleniumUtil.getElement("xpath", "//td[text()='" +strDesignerUser+"'][1]", 8, 8); + //logger.info(wb); + //SeleniumUtil.waitForElementVisibilityOf(wb, 8, 8); + SeleniumUtil.waitUntilElementContainsText("xpath", "//td[text()='"+strDesigner+"']/../td[text()='"+strRole+"']", strRole , 0, 10); + logger.info("Designer user Email Address is verfified"); + + } catch (Exception ex) { + BaseView.takeScreenshot("VerifyDesignerRoleInTable"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + + } + + + public static void VerifyOrganizationInTable(String strDesigner, String strOrganization) { + try { + //WebElement wb= SeleniumUtil.getElement("xpath", "//td[text()='" +strDesignerUser+"'][1]", 8, 8); + //logger.info(wb); + //SeleniumUtil.waitForElementVisibilityOf(wb, 8, 8); + SeleniumUtil.waitUntilElementContainsText("xpath", "//td[text()='"+strDesigner+"']/../td[text()='"+strOrganization+"']", strOrganization , 0, 10); + logger.info("Designer user Email Address is verfified"); + + } catch (Exception ex) { + BaseView.takeScreenshot("VerifyOrganizationInTable"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + + } + + + + public static void VerifyLoginNameDisabled() { + try { + SeleniumUtil.waitForElementVisibilityOf("xpath", "//input[@disabled]", 8, SeleniumUtilities.OBJWAITTIMEOUT); + SeleniumUtil.getAttributeValue("xpath", "//input[@disabled]", "disabled", 8); + } catch (Exception ex) { + BaseView.takeScreenshot("VerifyLoginNameDisabled"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + + + } + } + + + + public static void clickOnUpdatePasswordCheckbox() + { + try + { + SeleniumUtil.click("id", "chkadduserldap", 8); + + } + catch (Exception ex) { + BaseView.takeScreenshot("clickOnUpdatePasswordCheckbox"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + + + } + } + + + public static void clickOnDeleteButton(String strDesigner) + { + try + { + SeleniumUtil.waitForElementVisibilityOf("xpath", ".//*[@id='envtable']/tbody/tr/td[text()='"+strDesigner+"']/../td[5]/div/a[@title='Delete']/i", 8); + SeleniumUtil.click("xpath", ".//*[@id='envtable']/tbody/tr/td[text()='"+strDesigner+"']/../td[5]/div/a[@title='Delete']/i", 8); + + } catch (Exception ex) { + BaseView.takeScreenshot("clickOnDeleteButton"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + + + } + } + + public static void clickOnOkButton(String strOk) + { + try + { + SeleniumUtil.waitForElementVisibilityOf("xpath", "//button[text()='"+strOk+"']", 8); + SeleniumUtil.click("xpath", "//button[text()='"+strOk+"']", 8); + + } + catch (Exception ex) { + BaseView.takeScreenshot("clickOnOkButton"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + + + } + } + + + public static void verfiyEmailAddressUpdated(String strEmailAddress) { + try { + SeleniumUtil.waitForElementVisibilityOf("xpath", "//td[text()='"+strEmailAddress+"']", 8); + SeleniumUtil.waitUntilElementContainsText("xpath", "//td[text()='"+strEmailAddress+"']", strEmailAddress , 0, 10); + + } catch (Exception ex) { + BaseView.takeScreenshot("verifyDesignerUserCreation"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + + } + + + + public static void selectDefaultTeam(String strDefaultTeam) { + try { + SeleniumUtil.waitForElementVisibilityOf("xpath", "//label[text()='"+strDefaultTeam+"']/input/../i", 8); + SeleniumUtil.click("xpath", "//label[text()='"+strDefaultTeam+"']/input/../i", 8); + + } catch (Exception ex) { + BaseView.takeScreenshot("selectTeam"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + + } + + + public static void verifyButtonIsEnabled(String org, String edit) { + try { + SeleniumUtil.waitForElementVisibilityOf("xpath", ".//*[@id='envtable']//td[text()='"+org+"']/following-sibling::td//*[@title='"+edit+"']",5, SeleniumUtilities.OBJWAITTIMEOUT); + WebElement wb=SeleniumUtil.getElement("xpath",".//*[@id='envtable']//td[text()='"+org+"']/following-sibling::td//*[@title='"+edit+"']",SeleniumUtilities.OBJWAITTIMEOUT); + assertTrue(SeleniumUtil.assertNotNull(wb));{ + logger.info(edit +" is Enabled"); +// } else { +// logger.info(edit +" is disbled"); + } + } catch (Exception ex) { + BaseView.takeScreenshot("verifyButtonIsEnabled"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } } + + public static void verifyDeletedUser(String strDesigner) { + try { + SeleniumUtil.waitForElementVisibilityOf("xpath", ".//*[@id='envtable']//*[text()='"+strDesigner+"']/following-sibling::td[2]",1, SeleniumUtilities.OBJWAITTIMEOUT); + if (SeleniumUtil.isElementExist("xpath", ".//*[@id='envtable']//*[text()='"+strDesigner+"']")) { + logger.info("This User exists : Not deleted"); + } else { + logger.info("This User does not exists : Org deleted"); + } + } catch (Exception ex) { + BaseView.takeScreenshot("verifyDeletedUser"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + +} + + diff --git a/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/views/CreateEditDelDockerViews.java b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/views/CreateEditDelDockerViews.java new file mode 100755 index 000000000..ac8cb3013 --- /dev/null +++ b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/views/CreateEditDelDockerViews.java @@ -0,0 +1,206 @@ +package com.rl.qa.views; + +import com.rl.qa.browsers.BrowserDriver; +import com.rl.qa.steps.LoginSteps; +import com.rl.qa.utils.BaseView; +import com.rl.qa.utils.SeleniumUtilities; +import org.openqa.selenium.support.PageFactory; + +import java.util.logging.Logger; + +import static junit.framework.TestCase.assertTrue; +import static junit.framework.TestCase.fail; + +/** + * Created by RLE0372 on 01-08-2016. + */ +public class CreateEditDelDockerViews { + private static final SeleniumUtilities SeleniumUtil = PageFactory.initElements(BrowserDriver.getCurrentDriver(), SeleniumUtilities.class); + private static final Logger logger = Logger.getLogger(LoginSteps.class.getName()); + + public static void clickOnDevopsSetup(String linkText) { + try { + //SeleniumUtil.waitForElementIsClickable("linktext",,8, SeleniumUtilities.OBJWAITTIMEOUT); + Thread.sleep(2000); + SeleniumUtil.click("xpath","//a[text()='"+linkText+"']",SeleniumUtilities.OBJWAITTIMEOUT); + Thread.sleep(2000); + } + catch(Exception ex){ + BaseView.takeScreenshot("clickOnDevopsSetup"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + + + public static void clickonChefServer(String linkText) { + try { + //SeleniumUtil.waitForElementIsClickable("linktext",,8, SeleniumUtilities.OBJWAITTIMEOUT); + Thread.sleep(2000); + SeleniumUtil.click("xpath","//a[text()='"+linkText+"']",SeleniumUtilities.OBJWAITTIMEOUT); + Thread.sleep(2000); + } + catch(Exception ex){ + BaseView.takeScreenshot("clickonChefServer"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + +// public static void clickOnDockerLink(String linktext) { +// try { +// SeleniumUtil.waitForElementIsClickable("linktext",linktext,8, SeleniumUtilities.OBJWAITTIMEOUT); +// SeleniumUtil.click("linktext",linktext,SeleniumUtilities.OBJWAITTIMEOUT); +// } +// catch(Exception ex){ +// BaseView.takeScreenshot("clickOnDockerLink"); +// SeleniumUtil.Log.info("Error :" + ex.getMessage()); +// fail(ex.getMessage()); +// } +// } + + public static void enterDockerName(String dockerName) { + try { + SeleniumUtil.waitForElementIsClickable("id","dockerreponame",8, SeleniumUtilities.OBJWAITTIMEOUT); + SeleniumUtil.type("id","dockerreponame",dockerName,SeleniumUtilities.OBJWAITTIMEOUT); + } + catch(Exception ex){ + BaseView.takeScreenshot("enterDockeName"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + + } + + public static void enterDockerHubRegistry(String dockerName, String dockerreponame) { + try { + SeleniumUtil.waitForElementIsClickable("id",dockerreponame,8, SeleniumUtilities.OBJWAITTIMEOUT); + SeleniumUtil.type("id",dockerreponame,dockerName,SeleniumUtilities.OBJWAITTIMEOUT); + } + catch(Exception ex){ + BaseView.takeScreenshot("enterDockerHubRegistry"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + + } + + public static void enterUserID(String userId) { + try { + SeleniumUtil.waitForElementIsClickable("id","dockerreponame",8, SeleniumUtilities.OBJWAITTIMEOUT); + SeleniumUtil.type("id","dockerreponame",userId,SeleniumUtilities.OBJWAITTIMEOUT); + } + catch(Exception ex){ + BaseView.takeScreenshot("enterDockerHubRegistry"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void enterDockerHubRegistryName(String docerHubRegName) { + try { + SeleniumUtil.waitForElementIsClickable("id","dockerrepopath",8, SeleniumUtilities.OBJWAITTIMEOUT); + SeleniumUtil.type("id","dockerrepopath",docerHubRegName,SeleniumUtilities.OBJWAITTIMEOUT); + } + catch(Exception ex){ + BaseView.takeScreenshot("enterDockerHubRegistryName"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void verifyDocker(String dockerName) { + try { + SeleniumUtil.waitForElementVisibilityOf("xpath", ".//*[@id='envtable']//*[text()='"+dockerName+"']",5, SeleniumUtilities.OBJWAITTIMEOUT); + assertTrue (SeleniumUtil.verifyTextValue("xpath",".//*[@id='envtable']//*[text()='"+dockerName+"']",dockerName,SeleniumUtilities.OBJWAITTIMEOUT)); { + logger.info(dockerName+"is available"); +// } else { +// logger.info(dockerName+"is not available"); + } + } catch (Exception ex) { + BaseView.takeScreenshot("verifyDockerDetails"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void verifySelOrgIsDisabled() { + + try { + SeleniumUtil.waitForElementVisibilityOf("id","s2id_orgname",5, SeleniumUtilities.OBJWAITTIMEOUT); +// WebElement wb=SeleniumUtil.getElement("id","s2id_orgname",SeleniumUtilities.OBJWAITTIMEOUT); + String actClassValOfElement=SeleniumUtil.getAttributeValue("id","s2id_orgname","class",SeleniumUtilities.OBJWAITTIMEOUT); + String expClassValWhenEleIsDisabled="select2-container select2-container-disabled chooseOrganization width-100"; + assertTrue(actClassValOfElement.equals(expClassValWhenEleIsDisabled));{ + System.out.print(actClassValOfElement); + logger.info("Select organization type is disabled"); +// } else { +// logger.info("Select organization type is enabled"); + } + } catch (Exception ex) { + BaseView.takeScreenshot("verifySelectOrgIsDisabled"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } } + + public static void verifyDockerInfo(String dockerName, String dockerDetails) { + try { + SeleniumUtil.waitForElementVisibilityOf("xpath", ".//*[@id='envtable']//*[text()='"+dockerName+"']/../*[text()='"+dockerDetails+"']",5, SeleniumUtilities.OBJWAITTIMEOUT); + assertTrue (SeleniumUtil.verifyTextValue("xpath",".//*[@id='envtable']//*[text()='"+dockerName+"']/../*[text()='"+dockerDetails+"']",dockerDetails,SeleniumUtilities.OBJWAITTIMEOUT)); { + logger.info(dockerName+" with "+dockerDetails+" is available"); +// } else { +// logger.info(dockerName+" with "+dockerDetails+" is available"); + } + } catch (Exception ex) { + BaseView.takeScreenshot("verifyDockerDetails"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void clickTemplateLink(String linkText) { + try { + //SeleniumUtil.waitForElementIsClickable("linktext",,8, SeleniumUtilities.OBJWAITTIMEOUT); + SeleniumUtil.click("xpath","//a[text()='"+linkText+"']",SeleniumUtilities.OBJWAITTIMEOUT); + Thread.sleep(2000); + } + catch(Exception ex){ + BaseView.takeScreenshot("clickonGallerySetup"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void clickGallerySetuplink(String linkText) { + try { + //SeleniumUtil.waitForElementIsClickable("linktext",,8, SeleniumUtilities.OBJWAITTIMEOUT); + SeleniumUtil.click("xpath","//a[text()='"+linkText+"']",SeleniumUtilities.OBJWAITTIMEOUT); + Thread.sleep(2000); + } + catch(Exception ex){ + BaseView.takeScreenshot("clickonGallerySetup"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void addCookbooksRunlist(String strCookbooks) { + try { + //SeleniumUtil.waitForElementIsClickable("linktext",,8, SeleniumUtilities.OBJWAITTIMEOUT); + SeleniumUtil.type("id", "textbox","apache2", 10); + SeleniumUtil.click("xpath",".//*[@id='cookbooksrecipesList']/option[text()='"+strCookbooks+"']",10); + SeleniumUtil.click("id","btnaddToRunlist",10); + + Thread.sleep(2000); + } + catch(Exception ex){ + BaseView.takeScreenshot("AddCookbooks"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + +} diff --git a/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/views/CreateEditDelEnvViews.java b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/views/CreateEditDelEnvViews.java new file mode 100755 index 000000000..970c683d6 --- /dev/null +++ b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/views/CreateEditDelEnvViews.java @@ -0,0 +1,330 @@ +package com.rl.qa.views; + +import com.rl.qa.browsers.BrowserDriver; +import com.rl.qa.steps.LoginSteps; +import com.rl.qa.utils.BaseView; +import com.rl.qa.utils.SeleniumUtilities; +import org.openqa.selenium.WebElement; +import org.openqa.selenium.support.PageFactory; + +import java.util.Random; +import java.util.logging.Logger; + +import static junit.framework.Assert.assertFalse; +import static junit.framework.TestCase.assertTrue; +import static junit.framework.TestCase.fail; + +/** + * Created by RLE0372 on 26-07-2016. + */ +public class CreateEditDelEnvViews { + private static final SeleniumUtilities SeleniumUtil = PageFactory.initElements(BrowserDriver.getCurrentDriver(), SeleniumUtilities.class); + public static WebElement PagesFrame; + private static final Logger logger = Logger.getLogger(LoginSteps.class.getName()); + public static String envName = ""; + + public static void clickOnEnvironmentsLink() { + try { + SeleniumUtil.waitForElementIsClickable("linktext", "Environments", 8, SeleniumUtilities.OBJWAITTIMEOUT); + SeleniumUtil.click("linktext", "Environments", SeleniumUtilities.OBJWAITTIMEOUT); + } catch (Exception ex) { + BaseView.takeScreenshot("clickOnEnvironmentsLink"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + + } + + public static void clickOnChefServerSelButton(String serverName) { + try { + SeleniumUtil.waitForElementIsClickable("xpath", ".//*[@id='s2id_environmentname']/a//b", 8, SeleniumUtilities.OBJWAITTIMEOUT); + SeleniumUtil.click("xpath", ".//*[@id='s2id_environmentname']/a//b", SeleniumUtilities.OBJWAITTIMEOUT); + SeleniumUtil.type("xpath", ".//*[@id='select2-drop']//input", serverName, SeleniumUtilities.OBJWAITTIMEOUT); + SeleniumUtil.hitEnterKey("xpath", "//span[text()='" + serverName + "']", SeleniumUtilities.OBJWAITTIMEOUT); + } catch (Exception ex) { + BaseView.takeScreenshot("clickOnChefServerSelButton"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + + } + + public static void enterChefEnvName(String chefEnvName) { + try { + SeleniumUtil.waitForElementIsClickable("id", "chefenvname", 8, SeleniumUtilities.OBJWAITTIMEOUT); + SeleniumUtil.type("id", "chefenvname", chefEnvName, SeleniumUtil.OBJWAITTIMEOUT); + + } catch (Exception ex) { + BaseView.takeScreenshot("clickOnAddChefEnvButton"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void clickOnAddChefEnvButtonOnEnvPage() { + try { + SeleniumUtil.waitForElementVisibilityOf("xpath","(//a[text()='Add'])[1]",5, SeleniumUtilities.OBJWAITTIMEOUT); + SeleniumUtil.click("xpath", "(//a[text()='Add'])[1]", SeleniumUtil.OBJWAITTIMEOUT); + + } catch (Exception ex) { + BaseView.takeScreenshot("clickOnAddChefEnvButton"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void checkElementIsDisabled(String idOfElement) { + try { + SeleniumUtil.waitForElementIsClickable("id", idOfElement, 8, SeleniumUtilities.OBJWAITTIMEOUT); + SeleniumUtilities.assertNull(SeleniumUtil.getElement("id", idOfElement, 5, SeleniumUtilities.OBJWAITTIMEOUT)); + } catch (Exception ex) { + BaseView.takeScreenshot("clickOnAddChefEnvButton"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static String enterRandomEnvName(String idOfEditBox) { + try { + int max = 100000; + int min = 10000; + Random r = new Random(); + int ranNumber = r.nextInt((max - min) + 1) + min; + envName = "QA" + ranNumber; + SeleniumUtil.type("id", idOfEditBox,envName, SeleniumUtil.OBJWAITTIMEOUT); + } catch (Exception ex) { + BaseView.takeScreenshot("clickOnAddChefEnvButton"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + return envName; + } + + public static void verifyEnvName() { + try { + SeleniumUtil.waitForElementVisibilityOf("xpath", ".//*[@id='envtable']//*[text()='"+envName+"']", 5, SeleniumUtilities.OBJWAITTIMEOUT); + assertTrue (SeleniumUtil.verifyTextValue("xpath", ".//*[@id='envtable']//*[text()='"+envName+"']",envName, SeleniumUtilities.OBJWAITTIMEOUT)); { + logger.info("Verified created environment:" + envName); +// } else { +// logger.info("environment not found:" + envName); + } + } catch (Exception ex) { + BaseView.takeScreenshot("verifyEnvName"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + + } + + public static void verifyAssignedOrgName(String arg0, String org) { + try { + SeleniumUtil.waitForElementVisibilityOf("xpath", ".//*[@id='envtable']//td[text()='" + envName + "']/../td[text()='" + org + "']", 5, SeleniumUtilities.OBJWAITTIMEOUT); + assertTrue (SeleniumUtil.verifyTextValue("xpath", ".//*[@id='envtable']//td[text()='" + envName + "']/../td[text()='" + org + "']", org, SeleniumUtilities.OBJWAITTIMEOUT)); { + logger.info("Verified " + org + " assigned to " + envName); +// } else { +// logger.info("assigned org to environment not found:" + org); + } + } catch (Exception ex) { + BaseView.takeScreenshot("verifyAssignedOrgNametoEnv"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void verifyEditIsEnabled(String s, String edit) { + try { + SeleniumUtil.waitForElementVisibilityOf("xpath", ".//*[@id='envtable']//td[text()='" + envName + "']/following-sibling::td//*[@title='" + edit + "']", 5, SeleniumUtilities.OBJWAITTIMEOUT); + WebElement wb = SeleniumUtil.getElement("xpath", ".//*[@id='envtable']//td[text()='" + envName + "']/following-sibling::td//*[@title='" + edit + "']", SeleniumUtilities.OBJWAITTIMEOUT); + if (wb.isEnabled()) { + logger.info(edit + " is Enabled"); + } else { + logger.info(edit + " is disbled"); + } + } catch (Exception ex) { + BaseView.takeScreenshot("verifyEditIsEnabled"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void verifySelectChefServerisDisabled() { + try { +// SeleniumUtil.waitForElementVisibilityOf("id", "s2id_configname", 5, SeleniumUtilities.OBJWAITTIMEOUT); + WebElement wb = SeleniumUtil.getElement("id", "s2id_configname", SeleniumUtilities.OBJWAITTIMEOUT); + String actClassValOfElement = wb.getAttribute("class"); + String expClassValWhenEleIsDisabled = "select2-container select2-container-disabled chooseOrganization width-100"; + assertTrue (actClassValOfElement.equals(expClassValWhenEleIsDisabled)); + logger.info("Select chef server is disbled"); +// } else { +// logger.info("Select chef server is enabled"); + } catch (Exception ex) { + BaseView.takeScreenshot("verifySelectChefServerisDisabled"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void verifyEnvIsDeleted() { + try { +// SeleniumUtil.waitForElementVisibilityOf("xpath", ".//*[@id='envtable']//*[text()='" + envName + "']/following-sibling::td[2]", 1, SeleniumUtilities.OBJWAITTIMEOUT); + assertFalse(SeleniumUtil.isElementExist("xpath", ".//*[@id='envtable']//*[text()='" + envName + "']")); { + logger.info(envName + "Environment does not exists : Deleted"); +// } else { +// logger.info(envName + "Chef server does not exists : deleted"); + } + } catch (Exception ex) { + BaseView.takeScreenshot("verifyEnvIsDeleted"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void selectExistingEnv(String cheEnvName) { + try { +// SeleniumUtil.waitForElementIsClickable("xpath", "//*[@id='s2id_environmentname']/a", 8, SeleniumUtilities.OBJWAITTIMEOUT); +// Thread.sleep(2000); +// SeleniumUtil.click("xpath", "//*[@id='s2id_environmentname']/a", SeleniumUtil.OBJWAITTIMEOUT); +// Thread.sleep(2000); +// SeleniumUtil.waitForElementIsClickable("xpath", "//*[text()='" + cheEnvName + "']", 8, SeleniumUtilities.OBJWAITTIMEOUT); +// SeleniumUtil.click("xpath", "//*[text()='" + cheEnvName + "']", SeleniumUtilities.OBJWAITTIMEOUT); + SeleniumUtil.selectByVisibleText("id","environmentname",cheEnvName,SeleniumUtilities.OBJWAITTIMEOUT); + } catch (Exception ex) { + BaseView.takeScreenshot("selectExistingEnv"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + + } + + public static void verifyEnvInWorkZone() { + try { + SeleniumUtil.waitForElementVisibilityOf("xpath", "//span[text()='" + envName + "']", 5, SeleniumUtilities.OBJWAITTIMEOUT); + if (SeleniumUtil.verifyTextValue("xpath", ".//*[@id='envtable']//*[text()='" + envName + "']", envName, SeleniumUtilities.OBJWAITTIMEOUT)) { + logger.info("Verified created environment:" + envName); + } else { + logger.info("environment not found:" + envName); + } + } catch (Exception ex) { + BaseView.takeScreenshot("verifyEnvName"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + + } + + public static void clickOnEnv() { + try { + SeleniumUtil.waitForElementVisibilityOf("xpath", "//span[text()='" + envName + "']", 5, SeleniumUtilities.OBJWAITTIMEOUT); + SeleniumUtil.click("xpath", "//span[contains(text(),'QA')]", SeleniumUtilities.OBJWAITTIMEOUT); + } catch (Exception ex) { + BaseView.takeScreenshot("clickOnEnv"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void verifyAndSelectCreatedEnv() { + try { + SeleniumUtil.waitForElementVisibilityOf("xpath", "//span[text()='"+envName+"']",5, SeleniumUtilities.OBJWAITTIMEOUT); +// assertTrue(SeleniumUtil.verifyTextValue("xpath", "//span[text()='"+envName+"']",envName,SeleniumUtilities.OBJWAITTIMEOUT)); { + SeleniumUtil.click("xpath", "//span[text()='"+envName+"']",SeleniumUtilities.OBJWAITTIMEOUT); + logger.info("Verified created environment:" + envName); +// } else { +// logger.info("environment not found:" + envName); + + } catch (Exception ex) { + BaseView.takeScreenshot("verifyAndSelectCreatedEnv"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void assigntheProject(String projectName) + { + try { + SeleniumUtil.waitForElementVisibilityOf("xpath", ".//*[@id='projectname']/label/input[@value='"+projectName+"']/../i",5, SeleniumUtilities.OBJWAITTIMEOUT); + SeleniumUtil.click("xpath",".//*[@id='projectname']/label/input[@value='"+projectName+"']/../i",SeleniumUtilities.OBJWAITTIMEOUT); + } catch (Exception ex) { + BaseView.takeScreenshot("assignporject"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + + } + + public static void verifySelectedEnvNameFromChef(String environmentName) { + try { + SeleniumUtil.waitForElementVisibilityOf("xpath", ".//*[@id='envtable']//*[text()='"+environmentName+"']", 5, SeleniumUtilities.OBJWAITTIMEOUT); + assertTrue (SeleniumUtil.verifyTextValue("xpath", ".//*[@id='envtable']//*[text()='"+environmentName+"']",environmentName, SeleniumUtilities.OBJWAITTIMEOUT)); { + logger.info("Verified created environment:" + envName); +// } else { +// logger.info("environment not found:" + envName); + } + } catch (Exception ex) { + BaseView.takeScreenshot("verifyEnvName"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void verifyAssignedDetailsOfEnv(String environmentName, String org) { + try { + SeleniumUtil.waitForElementVisibilityOf("xpath",".//*[@id='envtable']//td[text()='"+environmentName +"']/../td[text()='"+org+"']", 5, SeleniumUtilities.OBJWAITTIMEOUT); + assertTrue (SeleniumUtil.verifyTextValue("xpath",".//*[@id='envtable']//td[text()='"+environmentName+"']/../td[text()='"+org+"']",org,SeleniumUtilities.OBJWAITTIMEOUT)); + logger.info("Verified " +org+ "with" +environmentName); +// } else { +// logger.info("environment not found:" + envName); + } catch (Exception ex) { + BaseView.takeScreenshot("verifyEnvName"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void verifyEditPageIsDisplayed(String pageName) { + try { + assertTrue (SeleniumUtil.verifyTextValue("xpath","//*[text()='"+pageName+"']",pageName,SeleniumUtilities.OBJWAITTIMEOUT)); + logger.info("Verified "+pageName); + } catch (Exception ex) { + BaseView.takeScreenshot("verifyEnvName"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void clickOnAddButton() { + try { + SeleniumUtil.click("cssselector",".btn.btn-default.btn-primary.createchefenvbtn",SeleniumUtilities.OBJWAITTIMEOUT); + } catch (Exception ex) { + BaseView.takeScreenshot("clickOnAddButton"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void selectNewlyAddedEnv() { + try { + SeleniumUtil.selectByVisibleText("id","environmentname",envName,SeleniumUtil.OBJWAITTIMEOUT); + } catch (Exception ex) { + BaseView.takeScreenshot("selectNewlyAddedEnv"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + + + } + + public static void verifyEnvironmentIsDeleted(String environmentName) { + try { + assertFalse(SeleniumUtil.isElementExist("xpath", ".//*[@id='envtable']//*[text()='" + environmentName + "']")); + logger.info(envName + "Environment does not exists : Deleted"); + } catch (Exception ex) { + BaseView.takeScreenshot("verifyEnvIsDeleted"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + + } +} + + diff --git a/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/views/CreateEditDelJenkinsViews.java b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/views/CreateEditDelJenkinsViews.java new file mode 100755 index 000000000..56e8cfec5 --- /dev/null +++ b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/views/CreateEditDelJenkinsViews.java @@ -0,0 +1,66 @@ +package com.rl.qa.views; + +import com.rl.qa.browsers.BrowserDriver; +import com.rl.qa.steps.LoginSteps; +import com.rl.qa.utils.BaseView; +import com.rl.qa.utils.SeleniumUtilities; +import org.openqa.selenium.WebElement; +import org.openqa.selenium.support.PageFactory; + +import java.util.logging.Logger; + +import static junit.framework.TestCase.assertTrue; +import static junit.framework.TestCase.fail; + +/** + * Created by RLE0372 on 01-08-2016. + */ +public class CreateEditDelJenkinsViews { + + private static final SeleniumUtilities SeleniumUtil = PageFactory.initElements(BrowserDriver.getCurrentDriver(), SeleniumUtilities.class); + public static WebElement PagesFrame; + private static final Logger logger = Logger.getLogger(LoginSteps.class.getName()); + public static void enterJenkinsName(String name,String idOfEditBox){ + try { + SeleniumUtil.waitForElementVisibilityOf("id",idOfEditBox,8,SeleniumUtilities.OBJWAITTIMEOUT); + SeleniumUtil.type("id",idOfEditBox,name,SeleniumUtilities.OBJWAITTIMEOUT); + logger.info("Value entered "+name); + } + catch(Exception ex){ + BaseView.takeScreenshot("enterJenkinsName"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void verifyJenkins(String jenkinsPara) { + try { + SeleniumUtil.waitForElementVisibilityOf("xpath", ".//*[@id='envtable']//*[text()='"+jenkinsPara+"']",5, SeleniumUtilities.OBJWAITTIMEOUT); + assertTrue (SeleniumUtil.verifyTextValue("xpath",".//*[@id='envtable']//*[text()='"+jenkinsPara+"']",jenkinsPara,SeleniumUtilities.OBJWAITTIMEOUT)); { + logger.info("Verified : "+jenkinsPara); +// } else { +// logger.info("Not verified:" +jenkinsPara); + } + } catch (Exception ex) { + BaseView.takeScreenshot("verifyJenkinsDetails"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + public static void verifyJenkinsDetails(String jenkinsRefName,String jenkinsPara) { + try { + SeleniumUtil.waitForElementVisibilityOf("xpath", ".//*[@id='envtable']//td[text()='"+jenkinsRefName+"']/../*[text()='"+jenkinsPara+"']",5, SeleniumUtilities.OBJWAITTIMEOUT); + assertTrue (SeleniumUtil.verifyTextValue("xpath",".//*[@id='envtable']//td[text()='"+jenkinsRefName+"']/../*[text()='"+jenkinsPara+"']",jenkinsPara,SeleniumUtilities.OBJWAITTIMEOUT)); { + logger.info(jenkinsRefName+" with "+jenkinsPara+" is available"); +// } else { +// logger.info(jenkinsRefName+" with "+jenkinsPara+" is not available"); + } + } catch (Exception ex) { + BaseView.takeScreenshot("verifyJenkinsDetails"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + +} + diff --git a/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/views/CreateEditDelOrgViews.java b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/views/CreateEditDelOrgViews.java new file mode 100755 index 000000000..a953742f8 --- /dev/null +++ b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/views/CreateEditDelOrgViews.java @@ -0,0 +1,309 @@ +package com.rl.qa.views; + +import com.rl.qa.browsers.BrowserDriver; +import com.rl.qa.steps.LoginSteps; +import com.rl.qa.utils.BaseView; +import com.rl.qa.utils.SeleniumUtilities; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.support.PageFactory; + +import java.util.logging.Logger; + +import static junit.framework.Assert.assertTrue; +import static junit.framework.TestCase.assertFalse; +import static junit.framework.TestCase.fail; + +/** + * Created by RLE0372 on 18-07-2016. + */ +public class CreateEditDelOrgViews { + private static final SeleniumUtilities SeleniumUtil = PageFactory.initElements(BrowserDriver.getCurrentDriver(), SeleniumUtilities.class); + private static final Logger logger = Logger.getLogger(LoginSteps.class.getName()); + + + public static void clickOnSettings() throws InterruptedException { + try { + SeleniumUtil.waitForElementIsClickable("linktext", "SETTINGS", 8, SeleniumUtilities.OBJWAITTIMEOUT); + SeleniumUtil.click("linktext", "SETTINGS", SeleniumUtilities.OBJWAITTIMEOUT); + } catch (Exception ex) { + BaseView.takeScreenshot("settingsNew"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + + } + + public static void clickOnOrganizations() { + try { + SeleniumUtil.waitForElementIsClickable("linktext", "ORGANIZATIONS", 8, SeleniumUtilities.OBJWAITTIMEOUT); + SeleniumUtil.click("linktext", "ORGANIZATIONS", SeleniumUtilities.OBJWAITTIMEOUT); + } catch (Exception ex) { + BaseView.takeScreenshot("ORGANIZATIONS"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void clickOnNewButton(String newButtonId) { + try { + SeleniumUtil.waitForElementIsClickable("id", newButtonId, 8, SeleniumUtilities.OBJWAITTIMEOUT); + SeleniumUtil.click("id", newButtonId, SeleniumUtilities.OBJWAITTIMEOUT); + } catch (Exception ex) { + BaseView.takeScreenshot("newOrg"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void saveOrg() { + try { + SeleniumUtil.click("cssselector", "button[class='btn btn-primary btn-mini']", SeleniumUtilities.OBJWAITTIMEOUT); + } catch (Exception ex) { + BaseView.takeScreenshot("saveOrg"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void editOrg(String Organization) throws InterruptedException { + try { + SeleniumUtil.waitForElementIsClickable("xpath", ".//*[@id='envtable']/tbody/tr/td[text()='" + Organization + "']/../td[4]//a[@title='Edit']", 8, SeleniumUtilities.OBJWAITTIMEOUT); + SeleniumUtil.click("xpath", ".//*[@id='envtable']/tbody/tr/td[text()='" + Organization + "']/../td[4]//a[@title='Edit']", SeleniumUtilities.OBJWAITTIMEOUT); + } catch (Exception ex) { + BaseView.takeScreenshot("editOrg"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void clearTheField(String idOfEditbox) { + try { + SeleniumUtil.waitForElementIsClickable("id", idOfEditbox, 8, SeleniumUtilities.OBJWAITTIMEOUT); + SeleniumUtil.clear("id", idOfEditbox, SeleniumUtilities.OBJWAITTIMEOUT); + logger.info("Field cleared :" + idOfEditbox); + + } catch (Exception ex) { + BaseView.takeScreenshot("clearTheField"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void enterNewOrgName(String New_Organization) { + try { + SeleniumUtil.waitForElementIsClickable("id", "orgname", 8, SeleniumUtilities.OBJWAITTIMEOUT); + SeleniumUtil.clear("id", "orgname", SeleniumUtilities.OBJWAITTIMEOUT); + SeleniumUtil.type("id", "orgname", New_Organization, SeleniumUtilities.OBJWAITTIMEOUT); + } catch (Exception ex) { + BaseView.takeScreenshot("editOrg"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void delOrg(String New_Organization) { + try { + SeleniumUtil.waitForElementIsClickable("xpath", ".//*[@id='envtable']/tbody/tr/td[text()='" + New_Organization + "']/../td[4]/div/button", 8, SeleniumUtilities.OBJWAITTIMEOUT); + SeleniumUtil.click("xpath", ".//*[@id='envtable']/tbody/tr/td[text()='" + New_Organization + "']/../td[4]/div/button", SeleniumUtilities.OBJWAITTIMEOUT); + } catch (Exception ex) { + BaseView.takeScreenshot("delOrg"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void clickOnOK() { + try { + SeleniumUtil.waitForElementIsClickable("xpath", "//button[text()='OK']", 8, SeleniumUtilities.OBJWAITTIMEOUT); + SeleniumUtil.click("xpath", "//button[text()='OK']", SeleniumUtilities.OBJWAITTIMEOUT); + } catch (Exception ex) { + BaseView.takeScreenshot("clickOnOK"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void clickOnSettingsFromOrgPage() { + try { + SeleniumUtil.waitForElementIsClickable("id", "settingsNew", 8, SeleniumUtilities.OBJWAITTIMEOUT); + SeleniumUtil.click("id", "settingsNew", SeleniumUtilities.OBJWAITTIMEOUT); + } catch (Exception ex) { + BaseView.takeScreenshot("clickOnOK"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void seeWorkzone(String idOfElement) { + try { + SeleniumUtil.waitForElementIsClickable("id", idOfElement, 8, SeleniumUtilities.OBJWAITTIMEOUT); + assertTrue(SeleniumUtil.verifyTextValue("id", idOfElement, "WORKZONE", SeleniumUtilities.OBJWAITTIMEOUT)); + { + SeleniumUtil.Log.info("Workzone is displayed"); +// } else { +// SeleniumUtil.Log.info("Workzone is not displayed"); + } + } catch (Exception ex) { + BaseView.takeScreenshot("seeWorkzone"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + + } + + public static void verifyEditedOrg(String editedOrg) { + try { + SeleniumUtil.waitForElementVisibilityOf("xpath", ".//*[@id='envtable']//*[text()='" + editedOrg + "']", 8, SeleniumUtilities.OBJWAITTIMEOUT); + assertTrue(SeleniumUtil.waitUntilElementContainsText("xpath", ".//*[@id='envtable']//*[text()='" + editedOrg + "']", editedOrg, 5, SeleniumUtilities.OBJWAITTIMEOUT)); + { + logger.info("Verified edited Organization :" + editedOrg); +// } else { +// logger.info("Edited Organization" + editedOrg + " does not exist"); + } + } catch (Exception ex) { + BaseView.takeScreenshot("verifyEditedOrg"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void verifyLoginPage() { + try { + SeleniumUtil.waitForElementVisibilityOf("id", "login-form", 8, SeleniumUtilities.OBJWAITTIMEOUT); + SeleniumUtil.waitUntilElementContainsText("id", "login-form", "Login", 0, SeleniumUtilities.OBJWAITTIMEOUT); + assertTrue(SeleniumUtil.verifyTextValue("id", "login-form", "Login", SeleniumUtilities.OBJWAITTIMEOUT)); + { + logger.info("Verified : LoginPage"); + } + } catch (Exception ex) { + BaseView.takeScreenshot("verifyLoginPage"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void verifyStatusOfOrg(String status, String orgName) { + try { + Thread.sleep(2000); + SeleniumUtil.waitForElementVisibilityOf("xpath", ".//*[@id='envtable']//td[text()='" + orgName + "']/../td[text()='" + status + "']", 8, SeleniumUtilities.OBJWAITTIMEOUT); + assertTrue(SeleniumUtil.verifyTextValue("xpath", ".//*[@id='envtable']//td[text()='" + orgName + "']/../td[text()='" + status + "']", status, 5)); + logger.info("Verified : staus is Active"); + } catch (Exception ex) { + BaseView.takeScreenshot("verifyStatusOfOrg"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + + } + + public static void verifyDeletedOrg(String orgName) { + try { +// SeleniumUtil.waitForElementVisibilityOf("xpath", ".//*[@id='envtable']//*[text()='"+orgName+"']/following-sibling::td[2]",1, SeleniumUtilities.OBJWAITTIMEOUT); + assertFalse(SeleniumUtil.isElementExist("xpath", ".//*[@id='envtable']//*[text()='" + orgName + "']")); + logger.info("Organization does not exists :deleted"); + } catch (Exception ex) { + BaseView.takeScreenshot("verifyDeletedOrg"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void verifyCreatedOrg(String organizationName) { + try { + SeleniumUtil.waitForElementVisibilityOf("xpath", ".//*[@id='envtable']//*[text()='" + organizationName + "']", 8, SeleniumUtilities.OBJWAITTIMEOUT); + assertTrue(SeleniumUtil.verifyTextValue("xpath", ".//*[@id='envtable']//*[text()='" + organizationName + "']", organizationName, SeleniumUtilities.OBJWAITTIMEOUT)); + logger.info("Verified created organization:" + organizationName); + } catch (Exception ex) { + BaseView.takeScreenshot("verifyCreatedOrg"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void verifyDomainName(String domainName, String orgName) { + try { + SeleniumUtil.waitForElementVisibilityOf("xpath", ".//*[@id='envtable']//td[text()='" + orgName + "']/../td[text()='" + domainName + "']", 5, SeleniumUtilities.OBJWAITTIMEOUT); + assertTrue(SeleniumUtil.verifyTextValue("xpath", ".//*[@id='envtable']//td[text()='" + orgName + "']/../td[text()='" + domainName + "']", domainName, SeleniumUtilities.OBJWAITTIMEOUT)); + { + logger.info("Verified Domain Name:" + domainName); + } + } catch (Exception ex) { + BaseView.takeScreenshot("verifyDomainName"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void clickOnStatusButton() { + try { + SeleniumUtil.click("xpath", ".//*[@name='checkbox-toggle']/following-sibling::i", SeleniumUtilities.OBJWAITTIMEOUT); + } catch (Exception ex) { + BaseView.takeScreenshot("clickOnStatusButton"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void selectAllInShowDropDown(String expectedValFromDropdown) { + try { + SeleniumUtil.selectByVisibleText("id", "filteractive", expectedValFromDropdown, SeleniumUtilities.OBJWAITTIMEOUT); + } catch (Exception ex) { + BaseView.takeScreenshot("selectAllInShowDropDown"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void clickOnOkOnAlertPopUp() { + try { + SeleniumUtil.handleParticularAlert("You have selected to change the status of this organization. Proceed?"); + } catch (Exception ex) { + BaseView.takeScreenshot("selectAllInShowDropDown"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void clickOnCloseToast() { + try { + SeleniumUtil.click("cssselector", ".toast-close-button", SeleniumUtilities.OBJWAITTIMEOUT); + } catch (Exception ex) { + BaseView.takeScreenshot("clickOnCloseToast"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void moveCursorOnMenu() { + try { + Thread.sleep(2000); + SeleniumUtil.mouseOver("xpath", "//strong[text()='Menu']", SeleniumUtilities.OBJWAITTIMEOUT); + } catch (Exception ex) { + BaseView.takeScreenshot("moveCursorOnMenu"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void checkAndDecide() { + try { + Thread.sleep(2000); + boolean value = SeleniumUtil.waitForElementVisibilityOf("xpath", "//span[text()='Instances']", 2, SeleniumUtilities.OBJWAITTIMEOUT); + if (value == true){ + System.out.println("Instances Element is visible"); + logger.info("Instances Element is visible"); + SeleniumUtil.click("xpath", ".//*[@id='settings']/a", 8); + + } + else { + logger.info("Instances Element is NOT visible Its In the Settings Page"); + System.out.println("Its In the Settings Page"); + } + } catch (Exception ex) { + BaseView.takeScreenshot("moveCursorOnMenu"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } +} + diff --git a/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/views/CreateEditDelProjectViews.java b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/views/CreateEditDelProjectViews.java new file mode 100755 index 000000000..2d7a146c7 --- /dev/null +++ b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/views/CreateEditDelProjectViews.java @@ -0,0 +1,142 @@ +package com.rl.qa.views; + +import com.rl.qa.browsers.BrowserDriver; +import com.rl.qa.steps.LoginSteps; +import com.rl.qa.utils.BaseView; +import com.rl.qa.utils.SeleniumUtilities; +import org.openqa.selenium.support.PageFactory; + +import java.util.logging.Logger; + +import static junit.framework.TestCase.assertFalse; +import static junit.framework.TestCase.assertTrue; +import static junit.framework.TestCase.fail; + +/** + * Created by RLE0372 on 20-07-2016. + */ +public class CreateEditDelProjectViews { + private static final SeleniumUtilities SeleniumUtil = PageFactory.initElements(BrowserDriver.getCurrentDriver(), SeleniumUtilities.class); + private static final Logger logger = Logger.getLogger(LoginSteps.class.getName()); + public static void clickOnProLink() { + try { + SeleniumUtil.waitForElementIsClickable("linktext","Projects",8,SeleniumUtilities.OBJWAITTIMEOUT); + SeleniumUtil.click("linktext","Projects", SeleniumUtilities.OBJWAITTIMEOUT); + } catch (Exception ex) { + BaseView.takeScreenshot("clickOnProLink"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + public static void clickOnNewProButton() { + try { + SeleniumUtil.waitForElementIsClickable("id","newProj",8,SeleniumUtilities.OBJWAITTIMEOUT); + SeleniumUtil.click("id","newProj", SeleniumUtilities.OBJWAITTIMEOUT); + } catch (Exception ex) { + BaseView.takeScreenshot("clickOnNewProButton"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void clickOnOrg(String proOrg) { + try { + SeleniumUtil.waitForElementIsClickable("xpath",".//*[@id='select2-drop']//div[text()='"+proOrg+"']",8,SeleniumUtilities.OBJWAITTIMEOUT); + SeleniumUtil.click("xpath",".//*[@id='select2-drop']//div[text()='"+proOrg+"']",SeleniumUtilities.OBJWAITTIMEOUT); + } catch (Exception ex) { + BaseView.takeScreenshot("clickOnOrg"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void clearProNameField() { + try { + SeleniumUtil.waitForElementIsClickable("id","projectname",8,SeleniumUtilities.OBJWAITTIMEOUT); + SeleniumUtil.clear("id","projectname",SeleniumUtilities.OBJWAITTIMEOUT); + } catch (Exception ex) { + BaseView.takeScreenshot("clearProNameField"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void typeNewProj(String newProName) { + try { + SeleniumUtil.waitForElementIsClickable("id","projectname",8,SeleniumUtilities.OBJWAITTIMEOUT); + SeleniumUtil.type("id","projectname",newProName,SeleniumUtilities.OBJWAITTIMEOUT); + } catch (Exception ex) { + BaseView.takeScreenshot("typeNewProj"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void delProject(String proName) { + try { + SeleniumUtil.waitForElementIsClickable("xpath",".//*[@id='envtable']/tbody/tr/td[text()='"+proName+"']/../td/div/button[@title='Delete']",8,SeleniumUtilities.OBJWAITTIMEOUT); + SeleniumUtil.click("xpath",".//*[@id='envtable']/tbody/tr/td[text()='"+proName+"']/../td/div/button[@title='Delete']",SeleniumUtilities.OBJWAITTIMEOUT); + } catch (Exception ex) { + BaseView.takeScreenshot("typeNewProj"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void verifyCreatedProject(String proName) { + try { + SeleniumUtil.waitForElementVisibilityOf("xpath", ".//*[@id='envtable']//*[text()='"+proName+"']",5, SeleniumUtilities.OBJWAITTIMEOUT); + assertTrue (SeleniumUtil.verifyTextValue("xpath", ".//*[@id='envtable']//*[text()='"+proName+"']",proName,SeleniumUtilities.OBJWAITTIMEOUT)); { + logger.info("Verified created Project:"+proName); +// } else { +// logger.info("Project not found:" +proName); + } + } catch (Exception ex) { + BaseView.takeScreenshot("verifyCreatedProject"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void verifyDeletedPro(String proName) { + try { + SeleniumUtil.waitForElementVisibilityOf("xpath", ".//*[@id='envtable']//*[text()='"+proName+"']", 1, SeleniumUtilities.OBJWAITTIMEOUT); + assertFalse (SeleniumUtil.isElementExist("xpath", ".//*[@id='envtable']//*[text()='"+proName+"']")); { + logger.info("Project does not exists :deleted"); +// } else { +// logger.info("Project does not exists :"+proName+"deleted"); + } + } catch (Exception ex) { + BaseView.takeScreenshot("verifyDeletedProject"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void clickOnEnv() { + try { + SeleniumUtil.waitForElementVisibilityOf("xpath", ".//*[@data-swchon-text='YES']",8, SeleniumUtilities.OBJWAITTIMEOUT); + SeleniumUtil.click("xpath",".//*[@data-swchon-text='YES']",SeleniumUtilities.OBJWAITTIMEOUT); + logger.info("Clicked on environment"); + } catch (Exception ex) { + BaseView.takeScreenshot("verifyDeletedProject"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void verifyProjectInfo(String projectName, String projectDetails) { + try { + SeleniumUtil.waitForElementVisibilityOf("xpath", ".//*[@id='envtable']//td[text()='"+projectName+"']/../td[text()='"+projectDetails+"']",5, SeleniumUtilities.OBJWAITTIMEOUT); + assertTrue (SeleniumUtil.verifyTextValue("xpath", ".//*[@id='envtable']//td[text()='"+projectName+"']/../td[text()='"+projectDetails+"']",projectDetails,SeleniumUtilities.OBJWAITTIMEOUT)); { + logger.info("Verified Project with:"+projectDetails); +// } else { +// logger.info("Project not found:" +assignedOrg); + } + } catch (Exception ex) { + BaseView.takeScreenshot("verifyProjectInfo"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } +} \ No newline at end of file diff --git a/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/views/CreateEditDeleteTeamViews.java b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/views/CreateEditDeleteTeamViews.java new file mode 100755 index 000000000..4d77c83f7 --- /dev/null +++ b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/views/CreateEditDeleteTeamViews.java @@ -0,0 +1,127 @@ +package com.rl.qa.views; + +import com.rl.qa.browsers.BrowserDriver; +import com.rl.qa.steps.LoginSteps; +import com.rl.qa.utils.BaseView; +import com.rl.qa.utils.SeleniumUtilities; +import org.openqa.selenium.support.PageFactory; + +import java.util.logging.Logger; + +import static junit.framework.TestCase.assertFalse; +import static junit.framework.TestCase.assertTrue; +import static junit.framework.TestCase.fail; + +/** + * Created by RLE0372 on 16-08-2016. + */ +public class CreateEditDeleteTeamViews { + private static final SeleniumUtilities SeleniumUtil = PageFactory.initElements(BrowserDriver.getCurrentDriver(), SeleniumUtilities.class); + private static final Logger logger = Logger.getLogger(LoginSteps.class.getName()); + + public static void verifyTeamName(String teamName) { + try { + while(true) { + if (SeleniumUtil.isElementExist("xpath", ".//*[@id='envtable']//*[text()='" + teamName + "']")) { + assertTrue(SeleniumUtil.verifyTextValue("xpath", ".//*[@id='envtable']//*[text()='" + teamName + "']", teamName, SeleniumUtilities.OBJWAITTIMEOUT)); + logger.info("Verified created Team:" + teamName); + break; + } + if(SeleniumUtil.getAttributeValue("id","envtable_next","class",SeleniumUtilities.OBJWAITTIMEOUT).equals("paginate_button next disabled")){ + assertTrue(SeleniumUtil.verifyTextValue("xpath", ".//*[@id='envtable']//*[text()='" + teamName + "']", teamName, SeleniumUtilities.OBJWAITTIMEOUT)); + break; + } + else { + SeleniumUtil.click("id", "envtable_next", SeleniumUtilities.OBJWAITTIMEOUT); + SeleniumUtil.waitForElementVisibilityOf("id", "newTeam", SeleniumUtilities.OBJWAITTIMEOUT); + } + } + + } catch (Exception ex) { + BaseView.takeScreenshot("verifyTeamName"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void verifyTeamDetails(String teamName, String teamDetails) { + try { + while(true) { + if (SeleniumUtil.isElementExist("xpath", ".//*[@id='envtable']//td[text()='" + teamName + "']/../td[text()='" + teamDetails + "']")) { + assertTrue(SeleniumUtil.verifyTextValue("xpath", ".//*[@id='envtable']//td[text()='" + teamName + "']/../td[text()='" + teamDetails + "']", teamDetails, SeleniumUtilities.OBJWAITTIMEOUT)); + logger.info("Verified created Team:" + teamName + "with " + teamDetails); + break; + } + if(SeleniumUtil.getAttributeValue("id","envtable_next","class",SeleniumUtilities.OBJWAITTIMEOUT).equals("paginate_button next disabled")){ + break; + } + else { + SeleniumUtil.click("id", "envtable_next", SeleniumUtilities.OBJWAITTIMEOUT); + SeleniumUtil.waitForElementVisibilityOf("id", "newTeam", SeleniumUtilities.OBJWAITTIMEOUT); + } + } + } catch (Exception ex) { + BaseView.takeScreenshot("verifyTEamDetails"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void checkTheCheckBox(String value) { + try { + SeleniumUtil.waitForElementVisibilityOf("xpath","//input[@value='"+value+"']/following-sibling::i",5, SeleniumUtilities.OBJWAITTIMEOUT); + SeleniumUtil.click("xpath","//input[@value='"+value+"']/following-sibling::i",SeleniumUtilities.OBJWAITTIMEOUT); + } catch (Exception ex) { + BaseView.takeScreenshot("checkTheCheckBox"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void searchAndEditTheTeam(String teamName, String edit) { + try { + while(true) { + if (SeleniumUtil.isElementExist("xpath", ".//*[@id='envtable']//*[text()='" + teamName + "']")) { + SeleniumUtil.click("xpath",".//*[@id='envtable']//td[text()='"+teamName+"']/following-sibling::td//*[@title='"+edit+"']",SeleniumUtilities.OBJWAITTIMEOUT); + logger.info("Verified created Team:" + teamName); + break; + } + if(SeleniumUtil.getAttributeValue("id","envtable_next","class",SeleniumUtilities.OBJWAITTIMEOUT).equals("paginate_button next disabled")){ + break; + } + else { + SeleniumUtil.click("id", "envtable_next", SeleniumUtilities.OBJWAITTIMEOUT); + SeleniumUtil.waitForElementVisibilityOf("id", "newTeam", SeleniumUtilities.OBJWAITTIMEOUT); + } + } + + } catch (Exception ex) { + BaseView.takeScreenshot("verifyTeamName"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void verifyTeamIsDeleted(String teamName) { + try { + SeleniumUtil.click("id","envtable_first",SeleniumUtilities.OBJWAITTIMEOUT); + while(true) { + assertFalse(SeleniumUtil.verifyTextValue("xpath", ".//*[@id='envtable']//*[text()='"+teamName+"']", teamName, SeleniumUtilities.OBJWAITTIMEOUT)); + if(SeleniumUtil.getAttributeValue("id","envtable_next","class",SeleniumUtilities.OBJWAITTIMEOUT).equals("paginate_button next disabled")){ + logger.info("Verified Team is deleted : " + teamName); + break; + } + else { + SeleniumUtil.click("id", "envtable_next", SeleniumUtilities.OBJWAITTIMEOUT); + SeleniumUtil.waitForElementVisibilityOf("id", "newTeam", SeleniumUtilities.OBJWAITTIMEOUT); + } + } + + } catch (Exception ex) { + BaseView.takeScreenshot("verifyTeamIsDeleted"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + + } +} diff --git a/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/views/ImportNodesFromChefViews.java b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/views/ImportNodesFromChefViews.java new file mode 100755 index 000000000..2bed7dec7 --- /dev/null +++ b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/views/ImportNodesFromChefViews.java @@ -0,0 +1,356 @@ +package com.rl.qa.views; + +import com.rl.qa.browsers.BrowserDriver; +import com.rl.qa.steps.LoginSteps; +import com.rl.qa.utils.BaseView; +import com.rl.qa.utils.SeleniumUtilities; +import org.openqa.selenium.By; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; +import org.openqa.selenium.support.PageFactory; + +import java.io.File; +import java.util.logging.Logger; + +import static junit.framework.TestCase.assertTrue; +import static junit.framework.TestCase.fail; + +/** + * Created by RLE0372 on 10-08-2016. + */ +public class ImportNodesFromChefViews { + + private static final SeleniumUtilities SeleniumUtil = PageFactory.initElements(BrowserDriver.getCurrentDriver(), SeleniumUtilities.class); + private static final Logger logger = Logger.getLogger(LoginSteps.class.getName()); + public static String awsid = ""; + public static String IpAddress=""; + + public static void clickOnAWSProvider() { + try { + SeleniumUtil.waitForElementIsClickable("xpath", ".//*[@id='blueprints']//div[@title='AWS']", 8, SeleniumUtilities.OBJWAITTIMEOUT); + SeleniumUtil.click("xpath", ".//*[@id='blueprints']//div[@title='AWS']", SeleniumUtilities.OBJWAITTIMEOUT); + } catch (Exception ex) { + BaseView.takeScreenshot("clickOnAWSProvider"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void selectBlueprintType(String blueprintType) { + try { + Thread.sleep(2000); + SeleniumUtil.waitForElementIsClickable("xpath", "//*[text()='"+blueprintType+"']", 8, SeleniumUtilities.OBJWAITTIMEOUT); + SeleniumUtil.click("xpath", "//*[text()='"+blueprintType+"']", SeleniumUtilities.OBJWAITTIMEOUT); + } catch (Exception ex) { + BaseView.takeScreenshot("selectBlueprintType"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void clickOnNext() { + try { + SeleniumUtil.waitForElementIsClickable("linktext", "Next", 8, SeleniumUtilities.OBJWAITTIMEOUT); + SeleniumUtil.click("linktext", "Next", SeleniumUtilities.OBJWAITTIMEOUT); + } catch (Exception ex) { + BaseView.takeScreenshot("clickOnNext"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void selectTemplate(String tempName) { + try { + SeleniumUtil.waitForElementIsClickable("xpath", ".//*[text()='" + tempName + "']", 8, SeleniumUtilities.OBJWAITTIMEOUT); + SeleniumUtil.click("xpath", ".//*[text()='" + tempName + "']", SeleniumUtilities.OBJWAITTIMEOUT); + } catch (Exception ex) { + BaseView.takeScreenshot("selectTemplate"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + + } + + public static void selectValues(String valueToSelect, String idOfSelectBox) { + try { + SeleniumUtil.waitForElementIsClickable("id", idOfSelectBox, 8, SeleniumUtilities.OBJWAITTIMEOUT); + SeleniumUtil.selectByVisibleText("id", idOfSelectBox, valueToSelect, SeleniumUtilities.OBJWAITTIMEOUT); + } catch (Exception ex) { + BaseView.takeScreenshot("selectTemplate"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void selectRegion(String region) { + try { + SeleniumUtil.waitForElementIsClickable("id", "region", 8, SeleniumUtilities.OBJWAITTIMEOUT); + SeleniumUtil.click("id", "region", SeleniumUtilities.OBJWAITTIMEOUT); + SeleniumUtil.waitForElementIsClickable("xpath", "//*[contains(text(),'" + region + "')]", 8, SeleniumUtilities.OBJWAITTIMEOUT); + WebElement wb = SeleniumUtil.getElement("xpath", "//*[contains(text(),'" + region + "')]", SeleniumUtilities.OBJWAITTIMEOUT); + SeleniumUtil.sendEnterKeyToElement(wb); + } catch (Exception ex) { + BaseView.takeScreenshot("selectTemplate"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void selectSecurityGrp() { + try { + SeleniumUtil.waitForElementIsClickable("xpath", "//*[text()='sg-eeff688b | default']", 8, SeleniumUtilities.OBJWAITTIMEOUT); + SeleniumUtil.click("xpath", "//*[text()='sg-eeff688b | default']", SeleniumUtilities.OBJWAITTIMEOUT); + } catch (Exception ex) { + BaseView.takeScreenshot("selectSecurityGrp"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void verifyEnvDetails(String envDetails) { + try { + SeleniumUtil.waitForElementIsClickable("xpath", "", 8, SeleniumUtilities.OBJWAITTIMEOUT); + assertTrue(SeleniumUtil.waitForElementContainText("xpath", "//span[contains(text(),'" + envDetails + "')]", envDetails)); + logger.info(envDetails + " is present"); + } catch (Exception ex) { + BaseView.takeScreenshot("verifyEnvDetails"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void clickOnLaunchBlueprint() { + try { + SeleniumUtil.waitForElementIsClickable("xpath", "//span[@title='Launch BluePrint']", 8, SeleniumUtilities.OBJWAITTIMEOUT); + SeleniumUtil.click("xpath", "//span[@title='Launch BluePrint']", SeleniumUtilities.OBJWAITTIMEOUT); + } catch (Exception ex) { + BaseView.takeScreenshot("clickOnLaunchBlueprint"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void clickOnWorkzone() { + try { + SeleniumUtil.waitForElementIsClickable("id","workZoneNew", 8, SeleniumUtilities.OBJWAITTIMEOUT); + SeleniumUtil.click("id","workZoneNew",SeleniumUtilities.OBJWAITTIMEOUT); + } catch (Exception ex) { + BaseView.takeScreenshot("clickOnWorkzone"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void clickOnLaunchBlueprintPopUp() { + try { + SeleniumUtil.waitForElementVisibilityOf("id", "blueprintLaunch",8, SeleniumUtilities.OBJWAITTIMEOUT); + SeleniumUtil.click("id","blueprintLaunch",SeleniumUtilities.OBJWAITTIMEOUT); + } catch (Exception ex) { + BaseView.takeScreenshot("clickOnWorkzone"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void clickOnLaunchOnSelBlueprintPopUp() { + try { + SeleniumUtil.waitForElementIsClickable("cssselector", ".btn.btn-default.btn-primary.launchBlueprintBtn", 8, SeleniumUtilities.OBJWAITTIMEOUT); + SeleniumUtil.click("cssselector", ".btn.btn-default.btn-primary.launchBlueprintBtn", SeleniumUtilities.OBJWAITTIMEOUT); + } catch (Exception ex) { + BaseView.takeScreenshot("clickOnLaunchOnSelBlueprintPopUp"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void captureIpAddress(String bluePrintName) { + try { + SeleniumUtil.waitForElementVisibilityOf("xpath", "//div[div[text()='"+bluePrintName+"']]/following-sibling::div/strong", 8, SeleniumUtilities.OBJWAITTIMEOUT); + IpAddress=SeleniumUtil.getElementText("xpath", "//div[div[text()='"+bluePrintName+"']]/following-sibling::div/strong", SeleniumUtilities.OBJWAITTIMEOUT); + System.out.println("Captured IP address "+IpAddress); + } catch (Exception ex) { + BaseView.takeScreenshot("captureIpAddress"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void captureAwsId(String bluePrintName) { + try { + SeleniumUtil.waitForElementVisibilityOf("xpath", "//div[div[text()='" +bluePrintName +"']]/../div[contains(text(),'AWS Id')]", 8, SeleniumUtilities.OBJWAITTIMEOUT); + String capturedText = SeleniumUtil.getElementText("xpath", "//div[div[text()='"+bluePrintName+"']]/../div[contains(text(),'AWS Id')]", SeleniumUtilities.OBJWAITTIMEOUT); + String[] parts = capturedText.split(":"); + String awsTitle = parts[0]; + awsid = parts[1].trim(); + System.out.println("AWS title"+awsTitle); + System.out.println("AWS id "+awsid); + } catch (Exception ex) { + BaseView.takeScreenshot("captureAwsId"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + public static void checkTheCheckBoxOfCorrespondingAWSID() { + try { + SeleniumUtil.waitForElementVisibilityOf("xpath",".//*[@id='nodeListTable_filter']//input", 8, SeleniumUtilities.OBJWAITTIMEOUT); + SeleniumUtil.type("xpath",".//*[@id='nodeListTable_filter']//input",awsid,SeleniumUtilities.OBJWAITTIMEOUT); + SeleniumUtil.waitForElementVisibilityOf("xpath", ".//*[@id='nodeListTable']//*[text()='"+awsid+"']/..//*[@type='checkbox']", 8, SeleniumUtilities.OBJWAITTIMEOUT); + SeleniumUtil.click("xpath", ".//*[@id='nodeListTable']//*[text()='"+awsid+"']/..//*[@type='checkbox']", SeleniumUtilities.OBJWAITTIMEOUT); + } catch (Exception ex) { + BaseView.takeScreenshot("clickOnLaunchOnSelBlueprintPopUp"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void clickOnImportNodesButton() { + try { + SeleniumUtil.waitForElementIsClickable("id", "buttonForIP", 8, SeleniumUtilities.OBJWAITTIMEOUT); + SeleniumUtil.click("id","buttonForIP", SeleniumUtilities.OBJWAITTIMEOUT); + } catch (Exception ex) { + BaseView.takeScreenshot("clickOnImportNodesButton"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void selectBGroupInImportPopUp(String businessGroup,String idOfDropDown) { + try { + SeleniumUtil.waitForElementVisibilityOf("id", idOfDropDown, 8, SeleniumUtilities.OBJWAITTIMEOUT); + SeleniumUtil.selectByVisibleText("id",idOfDropDown,businessGroup,SeleniumUtilities.OBJWAITTIMEOUT); + } catch (Exception ex) { + BaseView.takeScreenshot("selectBGroupInImportPopUp"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void enterUserNameInPopup(String userName, String idOfEditBox) { + try { + SeleniumUtil.waitForElementVisibilityOf("id", idOfEditBox, 8, SeleniumUtilities.OBJWAITTIMEOUT); + SeleniumUtil.type("id",idOfEditBox,userName,SeleniumUtilities.OBJWAITTIMEOUT); + } catch (Exception ex) { + BaseView.takeScreenshot("enterUserNameInPopup"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void importPemFileInPopupWindow() { + try{ + String path = new String(new File(".").getCanonicalPath() + "\\src\\test\\resources\\Upload\\bootstrapncal.pem"); + WebDriver driver=SeleniumUtil.getWebDriver(); + driver.findElement(By.id("importPemfileInput")).sendKeys(path); + } + catch(Exception ex){ + BaseView.takeScreenshot("importPemFileInPopupWindow"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void clickOnImportButton() { + try{ + SeleniumUtil.click("xpath","//button[text()='Import']",SeleniumUtilities.OBJWAITTIMEOUT); + } + catch(Exception ex){ + BaseView.takeScreenshot("clickOnImportButtonPopupWindow"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + + } + + public static void verifyImportingNodesPopUp() { + try{ + SeleniumUtil.waitForElementVisibilityOf("xpath","//h4[text()='Importing Nodes']",SeleniumUtilities.OBJWAITTIMEOUT); + assertTrue(SeleniumUtil.verifyTextValue("xpath","//h4[text()='Importing Nodes']","Importing Nodes",SeleniumUtilities.OBJWAITTIMEOUT)); + logger.info("Importing Nodes is displayed"); + } + catch(Exception ex){ + BaseView.takeScreenshot("verifyImportingNodesPopUp"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + + } + + public static void clickOnCloseButtonOnPopup() { + try{ + SeleniumUtil.click("cssselector",".btn.btn-default",SeleniumUtilities.OBJWAITTIMEOUT); + } + catch(Exception ex){ + BaseView.takeScreenshot("clickOnCloseButtonOnPopup"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + + + } + + public static void verifyNodeImportedMessage() { + try{ + SeleniumUtil.waitForElementPresent("xpath","//div[contains(text(),'Node Imported : "+awsid+"')]"); + SeleniumUtil.verifyTextValue("xpath","//div[contains(text(),'Node Imported : "+awsid+"')]","Node Imported : "+awsid+"",SeleniumUtilities.OBJWAITTIMEOUT); + } + catch(Exception ex){ + BaseView.takeScreenshot("verifyNodeImportedMessage"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } catch (Throwable throwable) { + throwable.printStackTrace(); + } + } + // public static void browsePemFile() { +// try{ +// //SeleniumUtil.waitForElementIsClickable("xpath","//*[@for='userpemfile']",8, SeleniumUtilities.OBJWAITTIMEOUT); +// //SeleniumUtil.click("xpath","//*[@for='userpemfile']",SeleniumUtilities.OBJWAITTIMEOUT); +// Thread.sleep(5000); +// String path = new String(new File(".").getCanonicalPath() + "/src/test/resources/Upload/mycatqa.pem"); +// SeleniumUtil.uploadPemFile(path); +// +// +// //original +// //String path="catalyst\\src\\test\\resources\\Upload"; +// // String path = new String(new File(".").getCanonicalPath() + "/src/test/resources/Upload/mycatqa.pem"); +// Thread.sleep(5000); +// } +// catch(Exception ex){ +// BaseView.takeScreenshot("clickOnPemFileBrowse"); +// SeleniumUtil.Log.info("Error :" + ex.getMessage()); +// fail(ex.getMessage()); +// } +// } + public static void selectEnv(String envName) { + try { + SeleniumUtil.selectByVisibleText("id", "chefEnv",envName,SeleniumUtilities.OBJWAITTIMEOUT); + } catch (Exception ex) { + BaseView.takeScreenshot("selectEnv"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void deleteInstance() { + try { + SeleniumUtil.click("xpath", "//*[@class='card-btns']//button",SeleniumUtilities.OBJWAITTIMEOUT); + SeleniumUtil.click("xpath","//span[@ng-click='operationSet.deleteInstance(inst, $index);']",SeleniumUtilities.OBJWAITTIMEOUT); + SeleniumUtil.click("cssselector",".btn.cat-btn-delete",SeleniumUtilities.OBJWAITTIMEOUT); + } catch (Exception ex) { + BaseView.takeScreenshot("selectEnv"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void verifyConfirmationMsg(String confirmationMsg) { + try { + assertTrue(SeleniumUtil.verifyTextValue("xpath","//*[text()='"+confirmationMsg+"']",confirmationMsg,SeleniumUtilities.OBJWAITTIMEOUT)); + SeleniumUtil.waitUntilElementDisappers("xpath","//*[text()='"+confirmationMsg+"']",3,SeleniumUtilities.OBJWAITTIMEOUT); + } catch (Exception ex) { + BaseView.takeScreenshot("verifyConfirmationMsg"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } +} \ No newline at end of file diff --git a/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/views/LoginViews.java b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/views/LoginViews.java new file mode 100755 index 000000000..c76390166 --- /dev/null +++ b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/views/LoginViews.java @@ -0,0 +1,234 @@ +package com.rl.qa.views; + +import com.rl.qa.browsers.BrowserDriver; +import com.rl.qa.utils.BaseView; +import com.rl.qa.utils.SeleniumUtilities; +import org.openqa.selenium.By; +import org.openqa.selenium.Keys; +import org.openqa.selenium.WebElement; +import org.openqa.selenium.support.PageFactory; + +import static junit.framework.Assert.assertTrue; +import static junit.framework.TestCase.fail; + + +/** + * Created by RLE0097 on 21-06-2016. + */ +public class LoginViews { + public static String gmail,yahoo; + private static final SeleniumUtilities SeleniumUtil = PageFactory.initElements(BrowserDriver.getCurrentDriver(), SeleniumUtilities.class); + //Actions act = new Actions(driver); + + public static void enterUsername(String strUserName){ + try { + SeleniumUtil.type("id","Email", strUserName, SeleniumUtilities.OBJWAITTIMEOUT); + Thread.sleep(8000); + WebElement wb=SeleniumUtil.getElement("id","Email",10); + wb.sendKeys(Keys.TAB); + Thread.sleep(3000); + wb.sendKeys(Keys.ENTER); +// SeleniumUtil.findWebElement("name","signIn",10); + Thread.sleep(8000); + System.out.println("I Entered the Gmail Email Address"); + + } + catch(Exception ex){ + BaseView.takeScreenshot("enterUsername"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void enterYahooUsername(String strUserName){ + try { +// SeleniumUtil.click("xpath","//*[@title='Sign in']",10); + SeleniumUtil.type("id","login-username", strUserName, SeleniumUtilities.OBJWAITTIMEOUT); + SeleniumUtil.click("id","login-signin",10); + System.out.println("I Entered the Yahoo Email Address"); + + } + catch(Exception ex){ + BaseView.takeScreenshot("enterUsername"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + + public static void enterPassword(String strPassword){ + try { + Thread.sleep(8000); + SeleniumUtil.type("id", "Passwd", strPassword, SeleniumUtilities.OBJWAITTIMEOUT); + System.out.println("I Entered the Gmail Password"); + } + catch(Exception ex){ + BaseView.takeScreenshot("enterPassword"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void enterYahooPassword(String strPassword){ + try { + Thread.sleep(1000); + SeleniumUtil.findWebElement(".//*[@id='login-passwd']"); + SeleniumUtil.type("xpath",".//*[@id='login-passwd']", strPassword, SeleniumUtilities.OBJWAITTIMEOUT); + System.out.println("I Entered the Yahoo Password"); + } + catch(Exception ex){ + BaseView.takeScreenshot("enterPassword"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + + public static void clickLoginButton(){ + try { + Thread.sleep(4000); + SeleniumUtil.click("xpath", ".//*[@id='signIn']", SeleniumUtilities.OBJWAITTIMEOUT); + System.out.println("I Clicked on Gmail login button"); + Thread.sleep(8000); + //SeleniumUtil.click("css",".T-I.J-J5-Ji.T-I-KE.L3",8); + //SeleniumUtil.waitForElementVisibilityOf("xpath","//*[@title='Starred']",8, 10); + //assertTrue(SeleniumUtil.verifyTextValue("xpath", "//*[@title='Starred']", "Starred" , SeleniumUtilities.OBJWAITTIMEOUT)); + //assertTrue(SeleniumUtil.verifyTextValue("xpath", "//*[@title='Starred']", "Starred" , SeleniumUtilities.OBJWAITTIMEOUT)); + //assertTrue(SeleniumUtil.isElementPresent(By.xpath("//div[text()='COMPOSE']"))); + assertTrue(SeleniumUtil.isElementPresent(By.xpath("//*[@title='Starred']"))); + System.out.println("I am able to see the starred button now"); + } + catch(Exception ex){ + BaseView.takeScreenshot("clickLoginButton"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void clickYahooLoginButton(){ + try { + SeleniumUtil.click("id", "login-signin", SeleniumUtilities.OBJWAITTIMEOUT); + System.out.println("I Clicked on Yahoo login button"); + Thread.sleep(4000); + //assertTrue(SeleniumUtil.verifyTextValue("xpath", "//b[text()='Home']", "Home" , SeleniumUtilities.OBJWAITTIMEOUT)); + assertTrue(SeleniumUtil.isElementPresent(By.xpath("//*[@id='uh-logo']"))); + System.out.println("I am able to see Home button"); + + } + catch(Exception ex){ + BaseView.takeScreenshot("clickLoginButton"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void signOutGmail(){ + try { + Thread.sleep(4000); + //SeleniumUtil.click("xpath","//div[@class='gb_uc gb_hb gb_yf gb_R']",SeleniumUtilities.OBJWAITTIMEOUT); + //SeleniumUtil.waitForElementIsClickable("xpath","//span[@class='gb_8a gbii']",8,SeleniumUtilities.OBJWAITTIMEOUT); +// SeleniumUtil.click("cssselector", "a[title='Sign Out']", SeleniumUtilities.OBJWAITTIMEOUT); + SeleniumUtil.click("xpath","//span[@class='gb_8a gbii']",SeleniumUtilities.OBJWAITTIMEOUT); + Thread.sleep(3000); + SeleniumUtil.waitForElementIsClickable("xpath","//a[text()='Sign out']",8,SeleniumUtilities.OBJWAITTIMEOUT); + SeleniumUtil.click("xpath","//a[text()='Sign out']",SeleniumUtilities.OBJWAITTIMEOUT); + Thread.sleep(5000); + assertTrue(SeleniumUtil.isElementPresent(By.xpath("//*[@value='Sign in']"))); + } + + catch(Exception ex){ + BaseView.takeScreenshot("signOut"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void signOutYahoo(){ + try { + Thread.sleep(4000); + SeleniumUtil.click("xpath","//li[@id='uh-profile']",10); + Thread.sleep(2000); + SeleniumUtil.click("xpath","//*[@id='uh-signout']",SeleniumUtilities.OBJWAITTIMEOUT); + Thread.sleep(3000); + assertTrue(SeleniumUtil.isElementPresent(By.xpath("//*[@id='uh-signin']"))); + + + //SeleniumUtil.waitForElementIsClickable("xpath","//span[@class='gb_8a gbii']",8,SeleniumUtilities.OBJWAITTIMEOUT); +// SeleniumUtil.click("cssselector", "a[title='Sign Out']", SeleniumUtilities.OBJWAITTIMEOUT); + //SeleniumUtil.click("xpath","//span[@class='gb_8a gbii']",SeleniumUtilities.OBJWAITTIMEOUT); + //Thread.sleep(2000); + //SeleniumUtil.waitForElementIsClickable("xpath","//a[text()='Sign out']",8,SeleniumUtilities.OBJWAITTIMEOUT); + //SeleniumUtil.click("xpath","//a[text()='Sign out']",SeleniumUtilities.OBJWAITTIMEOUT); + + } + + catch(Exception ex){ + BaseView.takeScreenshot("signOut"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void signOut(){ + try { + Thread.sleep(2000); + SeleniumUtil.waitForElementIsClickable("id","logout",8,SeleniumUtilities.OBJWAITTIMEOUT); +// SeleniumUtil.click("cssselector", "a[title='Sign Out']", SeleniumUtilities.OBJWAITTIMEOUT); + SeleniumUtil.click("id","logout",SeleniumUtilities.OBJWAITTIMEOUT); + Thread.sleep(2000); + SeleniumUtil.waitForElementIsClickable("xpath","//button[text()=' Yes']",8,SeleniumUtilities.OBJWAITTIMEOUT); + SeleniumUtil.click("xpath","//button[text()=' Yes']",SeleniumUtilities.OBJWAITTIMEOUT); + + } + + catch(Exception ex){ + BaseView.takeScreenshot("signOut"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + + public static void checkURLForApplication() + { + + } + + + public static void whichApplicationToLaunch(String strEmailAppName) + { + try + { + if(strEmailAppName == gmail) + { + System.out.println("Its an Gmail application"); + + + + } + else if (strEmailAppName == yahoo) + { + System.out.println("Its an Yahoo application"); + + } + else + { + System.out.println("Nonoe of the gmail or yahoo application will be opened"); + } + } + catch (Exception e) + { + e.printStackTrace(); + + } + + } + + + public static void loggedout() + { + System.out.println("Logged out of application successfully"); + } + + +} diff --git a/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/views/TemplateViews.java b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/views/TemplateViews.java new file mode 100755 index 000000000..22f772032 --- /dev/null +++ b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/views/TemplateViews.java @@ -0,0 +1,136 @@ +package com.rl.qa.views; + +import com.rl.qa.browsers.BrowserDriver; +import com.rl.qa.steps.LoginSteps; +import com.rl.qa.utils.BaseView; +import com.rl.qa.utils.SeleniumUtilities; +import org.openqa.selenium.By; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; +import org.openqa.selenium.remote.LocalFileDetector; +import org.openqa.selenium.remote.RemoteWebElement; +import org.openqa.selenium.support.PageFactory; + +import java.io.File; +import java.util.logging.Logger; + +import static junit.framework.TestCase.*; + +/** + * Created by RLE0372 on 11-08-2016. + */ +public class TemplateViews { + private static final SeleniumUtilities SeleniumUtil = PageFactory.initElements(BrowserDriver.getCurrentDriver(), SeleniumUtilities.class); + private static final Logger logger = Logger.getLogger(LoginSteps.class.getName()); + + public static void clickOnLink(String linkText) { + try { + SeleniumUtil.waitForElementIsClickable("linktext", "Gallery Setup", 8, SeleniumUtilities.OBJWAITTIMEOUT); + SeleniumUtil.click("linktext", "Gallery Setup", SeleniumUtilities.OBJWAITTIMEOUT); + } catch (Exception ex) { + BaseView.takeScreenshot("clickOnProLink"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void selectTempType(String tempType) { + try { + SeleniumUtil.selectByVisibleText("id","templatetypename",tempType,SeleniumUtilities.OBJWAITTIMEOUT); + } catch (Exception ex) { + BaseView.takeScreenshot("selectTempType"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void verifyTempDetails(String templateName, String tempDetails) { + try { + SeleniumUtil.waitForElementVisibilityOf("xpath", ".//*[@id='envtable']//*[text()='" + templateName + "']//*[text()='" + tempDetails + "']", 5, SeleniumUtilities.OBJWAITTIMEOUT); + assertTrue(SeleniumUtil.verifyTextValue("xpath", ".//*[@id='envtable']//*[text()='" + templateName + "']/following-sibling::td[text()='" + tempDetails + "']", tempDetails, SeleniumUtilities.OBJWAITTIMEOUT)); { + logger.info("Verified :" + tempDetails); +// } else { +// logger.info("Not found:" + tempDetails); + } + } catch (Exception ex) { + BaseView.takeScreenshot("verifyTempDetails"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void verifyDeletedTemp(String tempName) { + try { + SeleniumUtil.waitForElementVisibilityOf("xpath", ".//*[@id='envtable']//*[text()='" + tempName + "']", 1, SeleniumUtilities.OBJWAITTIMEOUT); + assertFalse(SeleniumUtil.isElementExist("xpath", ".//*[@id='envtable']//*[text()='" + tempName + "']")); { + logger.info("Template does not exists :deleted"); +// } else { +// logger.info("Template does not exists : deleted"); + } + } catch (Exception ex) { + BaseView.takeScreenshot("verifyDeletedTemp"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void verifyChefFactory(String idOfChkBox) { + try { + SeleniumUtil.waitForElementVisibilityOf("id", idOfChkBox,5, SeleniumUtilities.OBJWAITTIMEOUT); + assertTrue(SeleniumUtil.isElementExist("id", idOfChkBox)); { + logger.info("Chef Factory is displayed"); +// } else { +// logger.info("Chef factory is displayed"); + } + } catch (Exception ex) { + BaseView.takeScreenshot("verifyChefFactory"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void verifyTempName(String tempName) { + try { + SeleniumUtil.waitForElementVisibilityOf("xpath", ".//*[@id='envtable']//*[text()='"+tempName+"']",4, SeleniumUtilities.OBJWAITTIMEOUT); + assertTrue(SeleniumUtil.verifyTextValue("xpath", ".//*[@id='envtable']//*[text()='"+tempName+"']",tempName,SeleniumUtilities.OBJWAITTIMEOUT)); { + logger.info(tempName + " Created Template is available"); +// } else { +// logger.info(tempName + " Craeted Template is not available"); + } + } catch (Exception ex) { + BaseView.takeScreenshot("verifyDeletedTemp"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void selectOrgInTemplatePage(String orgName) { + try { + SeleniumUtil.waitForElementVisibilityOf("id","orgname",1, SeleniumUtilities.OBJWAITTIMEOUT); + SeleniumUtil.selectByVisibleText("id","orgname",orgName, SeleniumUtilities.OBJWAITTIMEOUT); + } catch (Exception ex) { + BaseView.takeScreenshot("selectOrgInTemplatePage"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void browseAndUploadTemplateFile(String fileName) { + try { + WebDriver driver=SeleniumUtil.getWebDriver(); + WebElement element = driver.findElement(By.id("template")); + LocalFileDetector detector = new LocalFileDetector(); + String path = new String(new File(".").getCanonicalPath() + "/src/test/resources/Upload/"+fileName); + File f = detector.getLocalFile(path); + ((RemoteWebElement)element).setFileDetector(detector); + element.sendKeys(f.getAbsolutePath()); +// element.sendKeys(path); + } catch (Exception ex) { + BaseView.takeScreenshot("selectOrgInTemplatePage"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + +} + diff --git a/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/views/VMImageViews.java b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/views/VMImageViews.java new file mode 100755 index 000000000..7980a9b89 --- /dev/null +++ b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/java/com/rl/qa/views/VMImageViews.java @@ -0,0 +1,88 @@ +package com.rl.qa.views; + +import com.rl.qa.browsers.BrowserDriver; +import com.rl.qa.steps.LoginSteps; +import com.rl.qa.utils.BaseView; +import com.rl.qa.utils.SeleniumUtilities; +import org.openqa.selenium.support.PageFactory; + +import java.util.logging.Logger; + +import static junit.framework.Assert.assertTrue; +import static junit.framework.TestCase.fail; + +/** + * Created by RLE0372 on 11-08-2016. + */ +public class VMImageViews { + private static final SeleniumUtilities SeleniumUtil = PageFactory.initElements(BrowserDriver.getCurrentDriver(), SeleniumUtilities.class); + private static final Logger logger = Logger.getLogger(LoginSteps.class.getName()); + + + public static void selectOS(String osType) { + try { + SeleniumUtil.selectByVisibleText("id","osType",osType,SeleniumUtilities.OBJWAITTIMEOUT); + } catch (Exception ex) { + BaseView.takeScreenshot("selectOS"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void verifyCreatedImage(String imageName) { + try { + SeleniumUtil.waitForElementVisibilityOf("xpath", ".//*[@id='envtable']//*[text()='"+imageName+"']",5, SeleniumUtilities.OBJWAITTIMEOUT); + assertTrue(SeleniumUtil.verifyTextValue("xpath", ".//*[@id='envtable']//*[text()='"+imageName+"']",imageName,SeleniumUtilities.OBJWAITTIMEOUT)); { + logger.info("Verified created VMImage:"+imageName); +// } else { +// logger.info("VMImage not found:" +imageName); + } + } catch (Exception ex) { + BaseView.takeScreenshot("verifyCreatedImage"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void verifyVMImageDetails(String imageName, String imageDetail) { + try { + SeleniumUtil.waitForElementVisibilityOf("xpath", ".//*[@id='envtable']//*[text()='"+imageName+"']/following-sibling::td[text()='"+imageDetail+"']",5, SeleniumUtilities.OBJWAITTIMEOUT); + assertTrue (SeleniumUtil.verifyTextValue("xpath", ".//*[@id='envtable']//*[text()='"+imageName+"']/following-sibling::td[text()='"+imageDetail+"']",imageDetail,SeleniumUtilities.OBJWAITTIMEOUT)); { + logger.info("Verified VMImage details:"+imageDetail); +// } else { +// logger.info("VMImage details not found:" +imageDetail); + } + } catch (Exception ex) { + BaseView.takeScreenshot("verifyCreatedImage"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + + } + + public static void verifyImageId(String imageName, String imageDetail) { + try { + SeleniumUtil.waitForElementVisibilityOf("xpath", ".//*[@id='envtable']//*[text()='"+imageName+"']/following-sibling::td/span",5, SeleniumUtilities.OBJWAITTIMEOUT); + assertTrue(SeleniumUtil.verifyTextValue("xpath", ".//*[@id='envtable']//*[text()='"+imageName+"']/following-sibling::td/span",imageDetail,SeleniumUtilities.OBJWAITTIMEOUT)); { + logger.info("Verified VMImage details:"+imageDetail); +// } else { +// logger.info("VMImage details not found:" +imageDetail); + } + } catch (Exception ex) { + BaseView.takeScreenshot("verifyCreatedImage"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } + + public static void selectOrgInVMImagePage(String orgName) { + try { + SeleniumUtil.waitForElementVisibilityOf("id", "orgId",5, SeleniumUtilities.OBJWAITTIMEOUT); + SeleniumUtil.selectByVisibleText("id","orgId",orgName,SeleniumUtilities.OBJWAITTIMEOUT); + } catch (Exception ex) { + BaseView.takeScreenshot("selectOrgInVMImagePage"); + SeleniumUtil.Log.info("Error :" + ex.getMessage()); + fail(ex.getMessage()); + } + } +} diff --git a/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/resources/IEDriverServer.exe b/server/undefined58da62749a03cc310995d810/RLIndia-botsfactory-f9147731953d936b21e1c6bf4fd0d2a85ad55c18/Code/UI_BOTs/Gmail_UserCreation/src/main/resources/IEDriverServer.exe new file mode 100755 index 0000000000000000000000000000000000000000..ff6e0dcc5c2fe8bab7cde25a1e847ceb17a93370 GIT binary patch literal 2568704 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 Ns>N7f@P}lNc#eQ#_34RA% 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 LMEr*h@R+8TU9qzI2H6Q7t9uy9Np0mm0`TDGJ}` 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