devops:tests:protractor
Differences
This shows you the differences between two versions of the page.
| Next revision | Previous revision | ||
| devops:tests:protractor [2018/03/13 15:49] – created skipidar | devops:tests:protractor [2023/11/01 07:15] (current) – ↷ Page moved from camunda:devops:tests:protractor to devops:tests:protractor skipidar | ||
|---|---|---|---|
| Line 6: | Line 6: | ||
| * Run the tests against it | * Run the tests against it | ||
| + | Protractor is nothing but a wrapper over the Selenium WebDriverJS Api that translates its succinct code and methods to WebDriver JS methods. That said, you can use WebDriverJS methods too inside your e2e script. | ||
| + | |||
| + | https:// | ||
| {{https:// | {{https:// | ||
| + | |||
| + | ===== UI Tests ===== | ||
| + | |||
| + | |||
| + | |||
| + | ====== package.json ====== | ||
| + | NPM dependency configs. | ||
| + | |||
| + | <sxh > | ||
| + | { | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | }, | ||
| + | " | ||
| + | " | ||
| + | }, | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | }, | ||
| + | " | ||
| + | " | ||
| + | } | ||
| + | } | ||
| + | |||
| + | </ | ||
| + | |||
| + | |||
| + | |||
| + | ====== Execution script ====== | ||
| + | |||
| + | This script sets the environment variables, which then are passed into the | ||
| + | config files and then may be used in the tests. | ||
| + | |||
| + | <sxh shell> | ||
| + | if [ $# -eq 0 ] | ||
| + | then | ||
| + | echo " | ||
| + | exit 1 | ||
| + | fi | ||
| + | |||
| + | #update IDs prior to processing Spec | ||
| + | if [ $1 == ' | ||
| + | then | ||
| + | export APIURL=my.api.com | ||
| + | export SPACE_NAME=" | ||
| + | export BUILDINGIDB=03fjvA5B1CWOG33uprLUQT | ||
| + | export SPACE_ISPARTOF=b5c703a7-627d-4562-ba2c-6399557c670d | ||
| + | export DEVICE_NAME=" | ||
| + | export DEVICE_SOURCE=" | ||
| + | export DEVICE_TAG=air | ||
| + | export DEVICE_ISLOCATEDIN=233ffa56-c569-4ece-8781-23e021a8d990 | ||
| + | export EQUIPMENT_NAME=" | ||
| + | export EQUIPMENT_SOURCE=" | ||
| + | export EQUIPMENT_TAG=air | ||
| + | export EQUIPMENT_ISLOCATEDIN=233ffa56-c569-4ece-8781-23e021a8d990 | ||
| + | export TEST_ID=7890 | ||
| + | export FILE_ID=42be5ad2-fb95-4a3b-b4b9-c1a87699b711 | ||
| + | elif [ $1 == ' | ||
| + | then | ||
| + | export APIURL=my.api.com | ||
| + | export FLOOR_NAME=1OG | ||
| + | export SPACE_NAME=" | ||
| + | export BUILDINGIDB=03fjvA5B1CWOG33uprLUQT | ||
| + | export SPACE_ISPARTOF=6bfed7de-ccbc-4780-b834-5d8cbf73560f | ||
| + | export DEVICE_NAME=" | ||
| + | export DEVICE_SOURCE=" | ||
| + | export DEVICE_TAG=air | ||
| + | export DEVICE_ISLOCATEDIN=37124033-c860-43d0-b468-92b58198fbcb | ||
| + | export EQUIPMENT_NAME=" | ||
| + | export EQUIPMENT_SOURCE=" | ||
| + | export EQUIPMENT_TAG=air | ||
| + | export EQUIPMENT_ISLOCATEDIN=37124033-c860-43d0-b468-92b58198fbcb | ||
| + | export TEST_ID=1234 | ||
| + | export FILE_ID=2f6a1ae7-6a88-41a8-b2ba-bbf6f06ccf63 | ||
| + | fi | ||
| + | |||
| + | export TARGETAWSACCOUNT=$1 | ||
| + | export TOKEN_ENDPOINT=https:// | ||
| + | export TOKEN_AUDIENCE=https:// | ||
| + | |||
| + | export TOKEN_DEFAULT=$(node createToken.js clientDefault) | ||
| + | echo $TOKEN_DEFAULT | ||
| + | export TOKEN_ALICE=$(node createToken.js clientAlice) | ||
| + | echo $TOKEN_ALICE | ||
| + | export TOKEN_BOB=$(node createToken.js clientBob) | ||
| + | echo $TOKEN_BOB | ||
| + | export TOKEN_AUTH=$(node createTokenAuth.js) | ||
| + | echo $TOKEN_AUTH | ||
| + | echo $API_URL | ||
| + | |||
| + | export LOG_REQUESTS=true | ||
| + | |||
| + | protractor test_config.js --suite $TARGETAWSACCOUNT | ||
| + | ## | ||
| + | |||
| + | </ | ||
| + | |||
| + | |||
| + | ====== Configs ====== | ||
| + | To configure the protractor you will need the configs | ||
| + | |||
| + | |||
| + | === config.js === | ||
| + | The file where the environment variables are injected into the JS | ||
| + | |||
| + | <sxh javascript> | ||
| + | |||
| + | require(' | ||
| + | |||
| + | module.exports = { | ||
| + | seleniumAddress: | ||
| + | issuer:{ | ||
| + | endpoint: process.env.TOKEN_ENDPOINT, | ||
| + | audience: process.env.TOKEN_AUDIENCE, | ||
| + | audience_auth: | ||
| + | }, | ||
| + | params: { | ||
| + | apiUrl: process.env.APIURL, | ||
| + | buildingIdB: | ||
| + | floorName: process.env.FLOOR_NAME, | ||
| + | spaceName: process.env.SPACE_NAME, | ||
| + | spaceSource: | ||
| + | spaceIsPartOf: | ||
| + | deviceName: process.env.DEVICE_NAME, | ||
| + | deviceSource: | ||
| + | deviceTag: process.env.DEVICE_TAG, | ||
| + | deviceIsLocatedIn: | ||
| + | equipName: process.env.EQUIPMENT_NAME, | ||
| + | equipSource: | ||
| + | equipTag: process.env.EQUIPMENT_TAG, | ||
| + | equipIsLocatedIn: | ||
| + | testID: process.env.TEST_ID, | ||
| + | fileID: process.env.FILE_ID | ||
| + | }, | ||
| + | clientDefault: | ||
| + | clientId: process.env.CLIENT_ID, | ||
| + | clientSecret: | ||
| + | }, | ||
| + | clientAlice: | ||
| + | clientId: process.env.ALICE_CLIENT_ID, | ||
| + | clientSecret: | ||
| + | }, | ||
| + | clientBob: { | ||
| + | clientId: process.env.BOB_CLIENT_ID, | ||
| + | clientSecret: | ||
| + | }, | ||
| + | clientAuth: { | ||
| + | clientId: process.env.CLIENT_ID_AUTH, | ||
| + | clientSecret: | ||
| + | }, | ||
| + | token:{ | ||
| + | default: process.env.TOKEN_DEFAULT, | ||
| + | alice: process.env.TOKEN_ALICE, | ||
| + | bob: process.env.TOKEN_BOB, | ||
| + | auth: process.env.TOKEN_AUTH | ||
| + | }, | ||
| + | target:{ | ||
| + | url: process.env.URL, | ||
| + | auth_url: process.env.API_AUTH_URL | ||
| + | } | ||
| + | } | ||
| + | |||
| + | |||
| + | </ | ||
| + | |||
| + | |||
| + | ====== test_config.js ====== | ||
| + | This is the configuration file used by protractor for managing any config parameter used globally within the web application. | ||
| + | |||
| + | Uses the config.js file | ||
| + | |||
| + | <sxh javascript> | ||
| + | require(' | ||
| + | let options = require(" | ||
| + | var Jasmine2HtmlReporter = require(' | ||
| + | exports.config = { | ||
| + | framework: ' | ||
| + | seleniumAddress: | ||
| + | //specs is used for when calling protractor without passing suites to run | ||
| + | specs: [' | ||
| + | ' | ||
| + | ' | ||
| + | ' | ||
| + | ' | ||
| + | ' | ||
| + | ' | ||
| + | ' | ||
| + | ' | ||
| + | ' | ||
| + | ' | ||
| + | //' | ||
| + | // //' | ||
| + | //specs: [' | ||
| + | |||
| + | //Suites defined to run tests on Dev or Stage | ||
| + | suites: { | ||
| + | //dev: ' | ||
| + | // dev: [' | ||
| + | // ' | ||
| + | // ' | ||
| + | // ' | ||
| + | // // ' | ||
| + | // // ' | ||
| + | // // ' | ||
| + | // // ' | ||
| + | // ' | ||
| + | // ' | ||
| + | // ' | ||
| + | dev: [' | ||
| + | // stage: [' | ||
| + | // ' | ||
| + | // ' | ||
| + | // ' | ||
| + | // ' | ||
| + | // ' | ||
| + | // ' | ||
| + | // ' | ||
| + | // ' | ||
| + | // ' | ||
| + | stage: [' | ||
| + | }, | ||
| + | onPrepare: function () { | ||
| + | browser.driver.manage().window().maximize(); | ||
| + | |||
| + | jasmine.getEnv().addReporter(new Jasmine2HtmlReporter({ | ||
| + | savePath: ' | ||
| + | screenshotsFolder: | ||
| + | takeScreenshots: | ||
| + | takeScreenshotsOnlyOnFailures: | ||
| + | fixedScreenshotName: | ||
| + | showPassed: false, | ||
| + | filePrefix: ' | ||
| + | // consolidate: | ||
| + | // consolidateAll: | ||
| + | })); | ||
| + | |||
| + | var AllureReporter = require(' | ||
| + | jasmine.getEnv().addReporter(new AllureReporter({ | ||
| + | resultsDir: ' | ||
| + | })); | ||
| + | |||
| + | var jasmineReporters = require(' | ||
| + | jasmine.getEnv().addReporter(new jasmineReporters.JUnitXmlReporter({ | ||
| + | consolidateAll: | ||
| + | savePath: ' | ||
| + | filePrefix: ' | ||
| + | }) | ||
| + | ) | ||
| + | }, | ||
| + | |||
| + | ignoreUncaughtExceptions: | ||
| + | capabilities: | ||
| + | browserName: | ||
| + | noGlobals: false, | ||
| + | binary: ' | ||
| + | // | ||
| + | // | ||
| + | chromeOptions: | ||
| + | useAutomationExtension: | ||
| + | args: [" | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | // args: [ " | ||
| + | } | ||
| + | }, | ||
| + | // capabilities: | ||
| + | // | ||
| + | // ' | ||
| + | // args: [' | ||
| + | // | ||
| + | // // | ||
| + | // // | ||
| + | // } | ||
| + | // }, | ||
| + | // capabilities: | ||
| + | // | ||
| + | // | ||
| + | // // | ||
| + | // // | ||
| + | // | ||
| + | // | ||
| + | // args: [" | ||
| + | // " | ||
| + | // " | ||
| + | // " | ||
| + | // " | ||
| + | // " | ||
| + | // // args: [ " | ||
| + | // } | ||
| + | // }, | ||
| + | |||
| + | // TODO: Initial work proves multi browser testing works. | ||
| + | // multiCapabilities: | ||
| + | // | ||
| + | // ' | ||
| + | // ' | ||
| + | // } | ||
| + | // }, | ||
| + | // | ||
| + | // ' | ||
| + | // ' | ||
| + | // } | ||
| + | // } | ||
| + | // ], | ||
| + | |||
| + | // Options to be passed to Jasmine. | ||
| + | jasmineNodeOpts: | ||
| + | defaultTimeoutInterval: | ||
| + | }, | ||
| + | params: { | ||
| + | gWidgetID: ' | ||
| + | gCampusID: ' | ||
| + | } | ||
| + | } | ||
| + | |||
| + | </ | ||
| + | |||
| + | ====== Example test ====== | ||
| + | |||
| + | In the test the injected environment variables can be retireved via **config.params** | ||
| + | |||
| + | Example: | ||
| + | |||
| + | < | ||
| + | config.params.apiUrl | ||
| + | </ | ||
| + | |||
| + | <sxh javascript> | ||
| + | require(' | ||
| + | var config = require(' | ||
| + | var common = require(' | ||
| + | const { element, browser } = require(' | ||
| + | var EC = protractor.ExpectedConditions; | ||
| + | |||
| + | describe(' | ||
| + | // | ||
| + | common.SetupInitialize(" | ||
| + | |||
| + | //Login, Navigate to Building B files, validate that it loads | ||
| + | it(' | ||
| + | apiUrl = config.params.apiUrl; | ||
| + | |||
| + | var fPlans = element.all(by.cssContainingText(' | ||
| + | var fsvg = element.all(by.cssContainingText(' | ||
| + | var fThisIs = element.all(by.cssContainingText(' | ||
| + | |||
| + | browser.get(apiUrl + ' | ||
| + | |||
| + | browser.wait(EC.visibilityOf(fPlans, | ||
| + | fPlans.click(); | ||
| + | browser.wait(EC.visibilityOf(fsvg, | ||
| + | expect(fsvg).not.toBe(null); | ||
| + | browser.wait(EC.visibilityOf(fThisIs, | ||
| + | expect(fThisIs).not.toBe(null); | ||
| + | }); | ||
| + | |||
| + | /* | ||
| + | * Confirm details content is present and viable for ifc file | ||
| + | * */ | ||
| + | it(' | ||
| + | element.all(by.cssContainingText(' | ||
| + | browser.sleep(1000); | ||
| + | browser.wait(EC.visibilityOf(element.all(by.css(' | ||
| + | element.all(by.css(' | ||
| + | |||
| + | var detailsDrawer = element(by.css(' | ||
| + | expect(detailsDrawer.isPresent()).toBe(true); | ||
| + | browser.sleep(1000); | ||
| + | |||
| + | var filterBox = element(by.css(' | ||
| + | browser.wait(EC.visibilityOf(filterBox), | ||
| + | expect(filterBox.isPresent()).toBe(true); | ||
| + | expect(filterBox.getText()).toBe(' | ||
| + | expect(element(by.css(' | ||
| + | |||
| + | var labels = element.all(by.css(' | ||
| + | var texts = element.all(by.css(' | ||
| + | |||
| + | expect(labels.get(2).getText()).toBe(' | ||
| + | expect(labels.get(3).getText()).toBe(' | ||
| + | expect(labels.get(4).getText()).toBe(' | ||
| + | expect(labels.get(5).getText()).toBe(' | ||
| + | expect(labels.get(6).getText()).toBe(' | ||
| + | // | ||
| + | |||
| + | element(by.css(' | ||
| + | browser.sleep(1000); | ||
| + | element(by.cssContainingText(' | ||
| + | browser.sleep(3000); | ||
| + | |||
| + | var columns = element.all(by.css(' | ||
| + | browser.wait(EC.visibilityOf(columns.get(0)), | ||
| + | columns.get(0).click(); | ||
| + | expect(columns.get(0).isPresent()).toBe(true); | ||
| + | }); | ||
| + | |||
| + | /* | ||
| + | * IFC that is source for should not be able to be deleted. | ||
| + | * */ | ||
| + | |||
| + | it(' | ||
| + | browser.sleep(3000); | ||
| + | var ifcFile = element(by.cssContainingText(' | ||
| + | browser.wait(EC.visibilityOf(ifcFile), | ||
| + | ifcFile.click(); | ||
| + | browser.sleep(4000); | ||
| + | element(by.cssContainingText(' | ||
| + | browser.wait(EC.presenceOf(element(by.css(' | ||
| + | // | ||
| + | browser.sleep(3500); | ||
| + | expect(element(by.cssContainingText(' | ||
| + | }); | ||
| + | |||
| + | /* | ||
| + | * Renaming of building files | ||
| + | * Ensure that file name changes are propogated through both rename option and edit option | ||
| + | * */ | ||
| + | describe(' | ||
| + | |||
| + | it (' | ||
| + | var ifcFile = element(by.cssContainingText(' | ||
| + | browser.wait(EC.visibilityOf(ifcFile), | ||
| + | ifcFile.click(); | ||
| + | |||
| + | element(by.cssContainingText(' | ||
| + | element(by.cssContainingText(' | ||
| + | |||
| + | var displayName = element.all(by.css(' | ||
| + | var btnPrimary = element(by.css(' | ||
| + | |||
| + | browser.wait(EC.visibilityOf(displayName, | ||
| + | displayName.clear(); | ||
| + | displayName.sendKeys(' | ||
| + | btnPrimary.click(); | ||
| + | |||
| + | browser.sleep(1000); | ||
| + | browser.wait(EC.visibilityOf(element(by.cssContainingText(' | ||
| + | browser.wait(EC.visibilityOf(element(by.cssContainingText(' | ||
| + | expect(ifcFile.getText()).toBe(' | ||
| + | }); | ||
| + | |||
| + | it (' | ||
| + | browser.sleep(1000); | ||
| + | var displayName = element.all(by.css(' | ||
| + | var btnPrimary = element(by.css(' | ||
| + | var ifcFile = element(by.cssContainingText(' | ||
| + | |||
| + | element(by.cssContainingText(' | ||
| + | element(by.cssContainingText(' | ||
| + | |||
| + | browser.wait(EC.visibilityOf(displayName, | ||
| + | displayName.clear(); | ||
| + | displayName.sendKeys(' | ||
| + | |||
| + | // | ||
| + | browser.wait(EC.visibilityOf(element(by.cssContainingText(' | ||
| + | btnPrimary.click(); | ||
| + | |||
| + | browser.wait(EC.visibilityOf(element(by.cssContainingText(' | ||
| + | expect(ifcFile.getText()).toBe(' | ||
| + | browser.sleep(1000); | ||
| + | }); | ||
| + | |||
| + | it (' | ||
| + | |||
| + | browser.sleep(1000); | ||
| + | var displayName = element.all(by.css(' | ||
| + | var btnPrimary = element(by.css(' | ||
| + | var ifcFile = element(by.cssContainingText(' | ||
| + | |||
| + | browser.wait(EC.visibilityOf(element(by.cssContainingText(' | ||
| + | element(by.cssContainingText(' | ||
| + | element(by.cssContainingText(' | ||
| + | browser.wait(EC.visibilityOf(displayName, | ||
| + | |||
| + | displayName.clear(); | ||
| + | displayName.sendKeys(' | ||
| + | displayName.click(); | ||
| + | browser.sleep(5000); | ||
| + | |||
| + | browser.wait(EC.visibilityOf(btnPrimary), | ||
| + | btnPrimary.click(); | ||
| + | |||
| + | browser.wait(EC.visibilityOf(element.all(by.cssContainingText(' | ||
| + | |||
| + | var arrowRight = element(by.css(" | ||
| + | |||
| + | expect(ifcFile.getText()).toBe(' | ||
| + | }); | ||
| + | |||
| + | it (' | ||
| + | |||
| + | browser.sleep(2000); | ||
| + | var displayName = element.all(by.css(' | ||
| + | var btnPrimary = element(by.css(' | ||
| + | var ifcFile = element(by.cssContainingText(' | ||
| + | |||
| + | element(by.cssContainingText(' | ||
| + | browser.wait(EC.visibilityOf(element(by.cssContainingText(' | ||
| + | element(by.cssContainingText(' | ||
| + | browser.sleep(1000); | ||
| + | |||
| + | browser.wait(EC.visibilityOf(displayName, | ||
| + | displayName.clear(); | ||
| + | displayName.sendKeys(' | ||
| + | browser.sleep(1000); | ||
| + | |||
| + | expect(btnPrimary.isEnabled()).toBe(true); | ||
| + | btnPrimary.click(); | ||
| + | |||
| + | browser.wait(EC.visibilityOf(element.all(by.cssContainingText(' | ||
| + | |||
| + | //var arrowRight = element(by.css(" | ||
| + | // | ||
| + | |||
| + | }); | ||
| + | |||
| + | it (' | ||
| + | |||
| + | var ifcFile = element(by.cssContainingText(' | ||
| + | var arrowRight = element(by.css(" | ||
| + | |||
| + | arrowRight.isPresent().then(function(result) { | ||
| + | if (result) { | ||
| + | |||
| + | browser.wait(EC.visibilityOf(arrowRight), | ||
| + | arrowRight.click(); | ||
| + | |||
| + | browser.wait(EC.visibilityOf(element(by.cssContainingText(' | ||
| + | expect(ifcFile.getText()).toBe(' | ||
| + | browser.sleep(1000); | ||
| + | } | ||
| + | }); | ||
| + | }); | ||
| + | |||
| + | |||
| + | /* Neg case - Long building names | ||
| + | * Ensure that building names past api allowable length result in an error | ||
| + | * */ | ||
| + | it(' | ||
| + | console.log(' | ||
| + | var ifcFile = element(by.cssContainingText(' | ||
| + | var toastMessage = element(by.cssContainingText(' | ||
| + | |||
| + | browser.wait(EC.visibilityOf(ifcFile), | ||
| + | ifcFile.click(); | ||
| + | |||
| + | element(by.cssContainingText(' | ||
| + | element(by.cssContainingText(' | ||
| + | |||
| + | browser.sleep(1500); | ||
| + | var displayName = element.all(by.css(' | ||
| + | browser.wait(EC.visibilityOf(displayName, | ||
| + | displayName.sendKeys(' | ||
| + | //change file name to a value we know will fail | ||
| + | browser.wait(EC.visibilityOf(element(by.css(' | ||
| + | element(by.css(' | ||
| + | // | ||
| + | browser.sleep(4000); | ||
| + | browser.wait(EC.visibilityOf(toastMessage, | ||
| + | expect(toastMessage.getText()).toBe(' | ||
| + | toastMessage.click(); | ||
| + | //close toast message | ||
| + | }); | ||
| + | |||
| + | it(' | ||
| + | var ifcFile = element(by.cssContainingText(' | ||
| + | var arrowRight = element(by.css(" | ||
| + | |||
| + | browser.wait(EC.visibilityOf(arrowRight), | ||
| + | arrowRight.click(); | ||
| + | // close side menu | ||
| + | |||
| + | browser.wait(EC.visibilityOf(ifcFile), | ||
| + | expect(ifcFile.getText()).toBe(' | ||
| + | }); | ||
| + | |||
| + | it(' | ||
| + | element(by.cssContainingText(' | ||
| + | element(by.cssContainingText(' | ||
| + | |||
| + | browser.sleep(1500); | ||
| + | |||
| + | var txtDescription = element(by.name(' | ||
| + | browser.wait(EC.visibilityOf(txtDescription), | ||
| + | txtDescription.clear(); | ||
| + | txtDescription.sendKeys(' | ||
| + | |||
| + | element(by.cssContainingText(' | ||
| + | |||
| + | browser.wait(EC.visibilityOf(element(by.linkText(' | ||
| + | expect(element(by.id(' | ||
| + | |||
| + | browser.sleep(3000); | ||
| + | }); | ||
| + | |||
| + | it(' | ||
| + | |||
| + | element(by.cssContainingText(' | ||
| + | element(by.cssContainingText(' | ||
| + | browser.sleep(1500); | ||
| + | |||
| + | var txtDescription = element(by.name(' | ||
| + | browser.wait(EC.visibilityOf(txtDescription), | ||
| + | txtDescription.clear(); | ||
| + | txtDescription.sendKeys(' | ||
| + | txtDescription.sendKeys(protractor.Key.BACK_SPACE); | ||
| + | txtDescription.clear(); | ||
| + | |||
| + | element(by.cssContainingText(' | ||
| + | |||
| + | browser.wait(EC.visibilityOf(element(by.linkText(' | ||
| + | expect(element(by.id(' | ||
| + | expect(element(by.css(' | ||
| + | |||
| + | }); | ||
| + | }); | ||
| + | /* | ||
| + | * Create Folders | ||
| + | * From Root directory | ||
| + | * Create folder 1 and folder 2 , via the folder creation menu | ||
| + | * assert that folders exist in table and in side bar | ||
| + | * */ | ||
| + | describe(' | ||
| + | it (' | ||
| + | browser.sleep(3000); | ||
| + | var folder1 = element(by.cssContainingText(' | ||
| + | var folder2 = element(by.cssContainingText(' | ||
| + | var btnNew = element(by.cssContainingText(' | ||
| + | browser.wait(EC.visibilityOf(btnNew), | ||
| + | btnNew.click(); | ||
| + | element(by.cssContainingText(' | ||
| + | |||
| + | browser.wait(EC.visibilityOf(element(by.css(' | ||
| + | element(by.css(' | ||
| + | |||
| + | element(by.cssContainingText(' | ||
| + | browser.sleep(2000); | ||
| + | browser.wait(EC.visibilityOf(folder1) ,20000); | ||
| + | expect(folder1.isPresent()).toBe(true); | ||
| + | |||
| + | element(by.cssContainingText(' | ||
| + | element(by.cssContainingText(' | ||
| + | |||
| + | browser.wait(EC.visibilityOf(element(by.css(' | ||
| + | element(by.css(' | ||
| + | |||
| + | browser.wait(EC.visibilityOf(element.all(by.cssContainingText(' | ||
| + | element(by.cssContainingText(' | ||
| + | browser.sleep(2000); | ||
| + | |||
| + | browser.wait(EC.visibilityOf(folder2), | ||
| + | //check folder is in table | ||
| + | expect(folder2.isPresent()).toBe(true); | ||
| + | // check folder is in sidebar | ||
| + | expect(element(by.cssContainingText(' | ||
| + | }); | ||
| + | |||
| + | |||
| + | /* | ||
| + | * Trigger navigation via folder icon click | ||
| + | * get list of folders | ||
| + | * click first folder ( should be 2D Floorplans) | ||
| + | * confirm we were navigated by folder contents | ||
| + | * */ | ||
| + | it(' | ||
| + | var folders = $$(' | ||
| + | var fPlans = element.all(by.cssContainingText(' | ||
| + | // There should be three folders currently in the table | ||
| + | expect(folders.count()).toBe(3); | ||
| + | // navigate to 2D Floorplans folder through click on the folder icon | ||
| + | fPlans.click(); | ||
| + | // | ||
| + | browser.wait(EC.visibilityOf(element.all(by.cssContainingText(' | ||
| + | // expect we have loaded the contents of the folder | ||
| + | expect(element.all(by.cssContainingText(' | ||
| + | }); | ||
| + | |||
| + | /* | ||
| + | * Trigger navigation via breadcrumb | ||
| + | * Analyze bread crumbs in current path ( should be started in 2d floor plans folder) | ||
| + | * click breadcrumb to go to building files | ||
| + | * confirm we were navigated by folder contents | ||
| + | * confirm breadcrumbs were rebuilt properly. | ||
| + | * */ | ||
| + | it (' | ||
| + | // get list of breadcrumbs, | ||
| + | var crumbs = $$(' | ||
| + | expect(crumbs.count()).toBe(2); | ||
| + | expect(crumbs.get(0).getText()).toBe(' | ||
| + | expect(crumbs.get(1).getText()).toContain(' | ||
| + | element(by.cssContainingText(' | ||
| + | //Expect navigation back to root folder - Table | ||
| + | browser.wait(EC.visibilityOf(element.all(by.cssContainingText(' | ||
| + | expect(element(by.cssContainingText(' | ||
| + | |||
| + | // Expect crumbs to be 1 long after navigation | ||
| + | var newCrumbs = $$(' | ||
| + | expect(newCrumbs.count()).toBe(1); | ||
| + | expect(newCrumbs.get(0).getText()).toBe(' | ||
| + | }); | ||
| + | |||
| + | /** | ||
| + | * Creation of a sub-folder | ||
| + | * select folder 1, choose create new folder | ||
| + | * interact with folder modal , provide name and confirmation | ||
| + | * after- confirm that the folder exists | ||
| + | **/ | ||
| + | it(' | ||
| + | // select folder 1 and click | ||
| + | element.all(by.cssContainingText(' | ||
| + | browser.sleep(1000); | ||
| + | |||
| + | // select create new folder | ||
| + | element(by.cssContainingText(' | ||
| + | element(by.cssContainingText(' | ||
| + | browser.sleep(1000); | ||
| + | |||
| + | element(by.css(' | ||
| + | browser.sleep(1000); | ||
| + | |||
| + | element(by.cssContainingText(' | ||
| + | browser.sleep(2000); | ||
| + | |||
| + | // Folder should be created | ||
| + | var folderInsideFolder = element.all(by.css(' | ||
| + | browser.wait(EC.visibilityOf(folderInsideFolder, | ||
| + | expect(folderInsideFolder.getText()).toBe(' | ||
| + | |||
| + | element.all(by.cssContainingText(' | ||
| + | |||
| + | }); | ||
| + | }); | ||
| + | |||
| + | describe(' | ||
| + | /** | ||
| + | * disabling this test until we solve the challenge of uploading files in the pipeline | ||
| + | * Navigate to folder 1 clicks ' | ||
| + | * selecting a file, clicks ' | ||
| + | * Check for file presence | ||
| + | * */ | ||
| + | | ||
| + | xit(' | ||
| + | |||
| + | var path = require(' | ||
| + | var remote = require(' | ||
| + | browser.setFileDetector(new remote.FileDetector()); | ||
| + | |||
| + | element.all(by.cssContainingText(' | ||
| + | browser.sleep(2000); | ||
| + | |||
| + | var textFileToUpload = ' | ||
| + | var ifcFileToUpload = ' | ||
| + | |||
| + | absolutePath = path.resolve(__dirname, | ||
| + | absolutePath2 = path.resolve(__dirname, | ||
| + | |||
| + | element(by.cssContainingText(' | ||
| + | element(by.cssContainingText(' | ||
| + | |||
| + | browser.sleep(1000); | ||
| + | browser.wait(EC.visibilityOf(element(by.css(' | ||
| + | element(by.css(' | ||
| + | browser.sleep(1000); | ||
| + | |||
| + | var uploadButton = element(by.css(' | ||
| + | expect(uploadButton.isEnabled()).toBe(true); | ||
| + | uploadButton.click(); | ||
| + | |||
| + | browser.wait(EC.visibilityOf($(' | ||
| + | expect($(' | ||
| + | browser.wait(EC.invisibilityOf($(' | ||
| + | |||
| + | // | ||
| + | // | ||
| + | |||
| + | }); | ||
| + | |||
| + | xit(' | ||
| + | |||
| + | var path = require(' | ||
| + | var remote = require(' | ||
| + | browser.setFileDetector(new remote.FileDetector()); | ||
| + | |||
| + | var uploadButton = element(by.css(' | ||
| + | |||
| + | var textFileToUpload = ' | ||
| + | var ifcFileToUpload = ' | ||
| + | |||
| + | absolutePath = path.resolve(__dirname, | ||
| + | absolutePath2 = path.resolve(__dirname, | ||
| + | |||
| + | element(by.cssContainingText(' | ||
| + | element(by.cssContainingText(' | ||
| + | |||
| + | browser.sleep(1000); | ||
| + | browser.wait(EC.visibilityOf(element(by.css(' | ||
| + | element(by.css(' | ||
| + | browser.sleep(1000); | ||
| + | uploadButton.click(); | ||
| + | |||
| + | browser.wait(EC.visibilityOf($(' | ||
| + | expect($(' | ||
| + | browser.wait(EC.invisibilityOf($(' | ||
| + | // | ||
| + | // | ||
| + | |||
| + | console.log(" | ||
| + | }); | ||
| + | }; | ||
| + | /* | ||
| + | * Currently working test disabled until clean up implemented in next test | ||
| + | * */ | ||
| + | it(' | ||
| + | |||
| + | element.all(by.cssContainingText(' | ||
| + | browser.sleep(1000); | ||
| + | |||
| + | var ifcFile = element.all(by.cssContainingText(' | ||
| + | browser.wait(EC.visibilityOf(ifcFile, | ||
| + | |||
| + | ifcFile.click(); | ||
| + | |||
| + | browser.wait(EC.visibilityOf(element.all(by.cssContainingText(' | ||
| + | element(by.cssContainingText(' | ||
| + | //note: using a browser.wait here instead of .sleep causes timeout. | ||
| + | browser.sleep(1000); | ||
| + | |||
| + | var cutButton = element(by.css(' | ||
| + | | ||
| + | |||
| + | browser.wait(EC.visibilityOf(element.all(by.cssContainingText(' | ||
| + | browser.wait(EC.visibilityOf(element.all(by.cssContainingText(' | ||
| + | |||
| + | let ifcFiles = element.all(by.cssContainingText(' | ||
| + | expect(ifcFiles.count()).toBe(2); | ||
| + | browser.sleep(1000); | ||
| + | }); | ||
| + | |||
| + | /* | ||
| + | * Inprogress soec | ||
| + | * */ | ||
| + | it(' | ||
| + | |||
| + | apiUrl = config.params.apiUrl; | ||
| + | browser.get(apiUrl + ' | ||
| + | browser.sleep(5000); | ||
| + | let ifcFile = element(by.cssContainingText(' | ||
| + | expect(ifcFile).not.toBe(null); | ||
| + | browser.wait(EC.visibilityOf(ifcFile, | ||
| + | ifcFile.click(); | ||
| + | |||
| + | browser.wait(EC.visibilityOf(element(by.cssContainingText(' | ||
| + | element(by.cssContainingText(' | ||
| + | //note: using a browser.wait here instead of .sleep causes timeout. | ||
| + | var moveButton = element(by.cssContainingText(' | ||
| + | expect(moveButton).not.toBe(null); | ||
| + | moveButton.click(); | ||
| + | // Wait for modal here. | ||
| + | browser.wait(EC.visibilityOf(element.all(by.cssContainingText(' | ||
| + | browser.wait(EC.visibilityOf(element(by.cssContainingText(' | ||
| + | // wait for tree content to load - need a better check | ||
| + | let target = element.all(by.cssContainingText(' | ||
| + | target.click(); | ||
| + | |||
| + | let moveBtn = element.all(by.cssContainingText(' | ||
| + | moveBtn.click(); | ||
| + | // | ||
| + | browser.wait(EC.visibilityOf(element(by.cssContainingText(' | ||
| + | browser.wait(EC.invisibilityOf(element(by.cssContainingText(' | ||
| + | browser.sleep(2000); | ||
| + | //Verify that item is not in current folder | ||
| + | var detailsDrawer = element(by.cssContainingText(' | ||
| + | expect(detailsDrawer.isPresent()).toBe(false); | ||
| + | }); | ||
| + | |||
| + | it(' | ||
| + | let ifcFile = element(by.cssContainingText(' | ||
| + | let folder1 = element.all(by.cssContainingText(' | ||
| + | //navigate to folder 1 and validate it is there. | ||
| + | browser.wait(EC.invisibilityOf(ifcFile), | ||
| + | browser.wait(EC.visibilityOf(folder1, | ||
| + | folder1.click(); | ||
| + | |||
| + | browser.wait(EC.visibilityOf(ifcFile, | ||
| + | expect(ifcFile.isPresent()).toBe(true); | ||
| + | //go back to root for next test | ||
| + | element.all(by.cssContainingText(' | ||
| + | }); | ||
| + | /* | ||
| + | * delete of Folders | ||
| + | * clicks folder 2, and deletes. | ||
| + | * Clicks folders 1 and deletes | ||
| + | * | ||
| + | * */ | ||
| + | it(' | ||
| + | browser.sleep(1000); | ||
| + | browser.wait(EC.visibilityOf(element(by.cssContainingText(' | ||
| + | var folder = element(by.cssContainingText(' | ||
| + | folder.click(); | ||
| + | |||
| + | element(by.cssContainingText(' | ||
| + | var deleteButton = element(by.css(' | ||
| + | |||
| + | deleteButton.click(); | ||
| + | |||
| + | browser.sleep(1000); | ||
| + | |||
| + | element(by.css(' | ||
| + | browser.wait(EC.visibilityOf(element(by.cssContainingText(' | ||
| + | browser.wait(EC.invisibilityOf(element(by.cssContainingText(' | ||
| + | browser.sleep(2000); | ||
| + | expect(folder.isPresent()).toBe(false); | ||
| + | browser.wait(EC.visibilityOf(element(by.cssContainingText(' | ||
| + | |||
| + | folder = element(by.cssContainingText(' | ||
| + | folder.click(); | ||
| + | |||
| + | element(by.cssContainingText(' | ||
| + | deleteButton = element(by.css(' | ||
| + | deleteButton.click(); | ||
| + | browser.sleep(1000); | ||
| + | |||
| + | element(by.css(' | ||
| + | browser.wait(EC.visibilityOf(element(by.cssContainingText(' | ||
| + | browser.wait(EC.visibilityOf(element(by.css(' | ||
| + | let loader = element(by.css(' | ||
| + | browser.wait(EC.not(EC.presenceOf(loader))); | ||
| + | |||
| + | browser.sleep(1000); | ||
| + | expect(folder.isPresent()).toBe(false); | ||
| + | }); | ||
| + | |||
| + | /* | ||
| + | * upload without file path provided | ||
| + | * clicks ' | ||
| + | * when no file is selected and then clicks ' | ||
| + | * */ | ||
| + | it ('wont allow upload without file path provided', | ||
| + | |||
| + | element(by.cssContainingText(' | ||
| + | element(by.cssContainingText(' | ||
| + | |||
| + | // | ||
| + | |||
| + | var cancelButton = element(by.css(' | ||
| + | var uploadButton = element(by.css(' | ||
| + | |||
| + | browser.wait(EC.visibilityOf(cancelButton), | ||
| + | expect(uploadButton.isEnabled()).toBe(false); | ||
| + | expect(cancelButton.isPresent()).toBe(true); | ||
| + | |||
| + | cancelButton.click(); | ||
| + | browser.sleep(1000); | ||
| + | expect(cancelButton.isPresent()).toBe(false); | ||
| + | }); | ||
| + | }); | ||
| + | /* | ||
| + | * Check files details - **Currently disabled as uploads not working on pipeline. | ||
| + | * first clicks ifc file, checks if drawer shows up, changes description of file, downloads file, clicks | ||
| + | * ' | ||
| + | | ||
| + | * clicks ' | ||
| + | * ' | ||
| + | * */ | ||
| + | if(config.params.targetAwsAccount ==" | ||
| + | | ||
| + | |||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | |||
| + | var detailsDrawer = element(by.css(' | ||
| + | | ||
| + | |||
| + | | ||
| + | |||
| + | var downloadButton = element(by.css(' | ||
| + | | ||
| + | | ||
| + | | ||
| + | |||
| + | | ||
| + | |||
| + | | ||
| + | |||
| + | | ||
| + | |||
| + | var labels = element.all(by.css(' | ||
| + | |||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | |||
| + | var txtDescription = element(by.name(' | ||
| + | txtDescription.clear(); | ||
| + | txtDescription.sendKeys(' | ||
| + | |||
| + | | ||
| + | |||
| + | | ||
| + | |||
| + | var historyButton = element(by.linkText(' | ||
| + | var createButton = element(by.linkText(' | ||
| + | |||
| + | | ||
| + | |||
| + | | ||
| + | |||
| + | | ||
| + | | ||
| + | |||
| + | | ||
| + | | ||
| + | |||
| + | var fileName = element(by.cssContainingText(' | ||
| + | | ||
| + | //click cancel button | ||
| + | | ||
| + | |||
| + | | ||
| + | | ||
| + | | ||
| + | |||
| + | | ||
| + | |||
| + | |||
| + | }); | ||
| + | }; | ||
| + | |||
| + | |||
| + | }); | ||
| + | |||
| + | |||
| + | </ | ||
devops/tests/protractor.1520956148.txt.gz · Last modified: (external edit)
