diff --git a/app_journeysmap_spec.js b/app_journeysmap_spec.js index aaaf4c9..84a0c12 100644 --- a/app_journeysmap_spec.js +++ b/app_journeysmap_spec.js @@ -7,7 +7,7 @@ describe('Journeysmap script', function () { var SignInButton = element(by.css('.btn-block')); //Open browser - browser.driver.manage().window().maximize(); + //browser.driver.manage().window().setSize(1600, 800); browser.get('https://app-qa.journeysmap.com/Journey/index.html#/signin'); it('should have a title', async function () { @@ -109,7 +109,7 @@ describe('Journeysmap script', function () { }); function ProfileWidget() { - it('should edit Top Career', async function () { + it('should expand profile widget, edit About Me widget, then validate Role Model and Education Widgets', async function () { var ProfileWidgetExpandCollapseIcon = element(by.css('span > .fa')); var ConnectionsLink = element(by.css('.col-md-3:nth-child(2) .jrnys_support-text')); var FollowersLink = element(by.css('.col-md-3:nth-child(3) .jrnys_support-text')); @@ -145,6 +145,9 @@ function ProfileWidget() { await AboutMePencil.click().then(function() { browser.sleep(1000); }); + await ABoutMeInputArea.clear().then(function() { + browser.sleep(2500); + }); await ABoutMeInputArea.sendKeys('This is my automated bio, there are many like it but this one is mine.'); await AboutMePencil.click().then(function() { browser.sleep(1000); @@ -164,7 +167,7 @@ function ProfileWidget() { } function MyProgressWidget() { - it('should interact with My Progress widget, take the Interest Survey, toggle language to Spanish then back to English and complete survey', async function () { + it('should interact with My Progress widget, navigate to Interest Survey, toggle language to Spanish then back to English and complete survey', async function () { var MyProgressWidgetTitle = element(by.css('.yourProgressTitle')); var ProgressLevel = element(by.css('.myProgressLevel')); var ProgressWidgetExpandCollapseIcon = element(by.css('.full-width > div > .fa')); @@ -333,7 +336,7 @@ function MyProgressWidget() { } function InterestSurveyResultsWidget() { - it('should interact with Interest Survey Results widget', async function () { + it('should interact with Interest Survey Results widget, validating results', async function () { var InterestSurveyWidgetTitle = element(by.css('.fullHeight:nth-child(2) > div:nth-child(2) > .jrnys_lead-body-copy > div')); var InterestEditLink = element(by.css('.fa-pencil:nth-child(1)')); var EditInterestDivTitle = element(by.css('#interests .jrnys_lead-body-copy')); @@ -902,7 +905,7 @@ function SkillsAssessmentWidget() { } function SkillsAssessmentResults() { - it('should interact with Skills Assessment widget', async function () { + it('should interact with Skills Assessment widget and validate results', async function () { var SkillsAssessmentWidgetTitle = element(by.css('.bigScreenHeader')); var BestFitHeader = element(by.css('div:nth-child(2) > b')); var SkillsResultsOneTitle = element(by.css('.ng-scope:nth-child(4) > div > div > .ng-binding:nth-child(1)')); @@ -1024,7 +1027,6 @@ function MyRecommendedCareers() { var CarrouselRightScroll = element(by.xpath('//div[3]/table/tbody/tr/td/div/div/a[2]/span')); var ViewMoreLink = element(by.linkText('View More')); var PageTitle = element(by.css('.surveyContainer > .col-xs-offset-1')); - //var FollowFirstOccupationCard = element(by.xpath('//div[3]/div/div/territory-card-social/div/social-interaction-icon/span/i')); DELETE var FollowFirstOccupationCard = element(by.xpath('//div[3]/div/div/territory-card-social/div/social-follow-icon/span/i')); var FilterIcon = element(by.css('.widgetControlContainer')); var FilterTitle = element(by.css('tr:nth-child(1) > .ng-binding')); @@ -1493,7 +1495,7 @@ function TopCareerWidget() { } function NearbyPlacesOccupationCard() { - it('should interact with Occupation cards on Nearby Places widget in Learn More page, then navigate to Following page an unfollow occupation', async function () { + it('should interact with Occupation cards on Nearby Places widget of Learn More page, then navigate to Following page an unfollow occupation', async function () { var OccupationCardTitle = element(by.xpath('//territory-card/div/div/div[3]/div/div[2]/span')); var OccupatonCardFollow = element(by.xpath('//div[3]/div/div/territory-card-social/div/social-follow-icon/span/i')); var AtAGlanceHeaderRowIcon = element(by.xpath('//territory-card/div/div/div/div/div/div[2]')); @@ -1678,7 +1680,7 @@ function NearbyPlacesOccupationCard() { } function AtAGlance() { - it('should click the At A Glance link and read pop-up title', async function () { + it('should click the At A Glance link and validate data', async function () { var AtAGlanceLink = element(by.css('tr:nth-child(3) > td:nth-child(1) > .text-color-7a')); var WidgetTitle = element(by.css('.widgetHeaderContainer > .jrnys_lead-body-copy')); var WidgetHeaderOne = element(by.css('.row-height:nth-child(1) .jrnys_support-text')); @@ -1724,7 +1726,7 @@ function AtAGlance() { } function Personality() { - it('should click the Personality link and read pop-up title', async function() { + it('should click the Personality link and validate data', async function() { var PersonatlityLink = element(by.css('tr:nth-child(4) > td:nth-child(1) > .text-color-7a')); var WidgetTitle = element(by.css('.ng-isolate-scope:nth-child(3) > .fullHeight .jrnys_lead-body-copy')); var WidgetDescriptionOne = element(by.css('.carouselHeight > .ng-scope td > .ng-binding')); @@ -1791,7 +1793,7 @@ function Wages() { } function Degrees() { - it('should click the Degrees link, expand/collapse first career card by title', async function () { + it('should click the Degrees link, expand/collapse first career card by title and validate data', async function () { var DegreesLink = element(by.css('tr:nth-child(3) > td:nth-child(2) > .text-color-7a')); var WidgetTitle = element(by.css('#id > .jrnys_lead-body-copy')); var DegreeTitle = element(by.css('.item:nth-child(1) > .col-xs-12:nth-child(1) .textSize:nth-child(1)')); @@ -1836,7 +1838,7 @@ function Degrees() { } function Certificates() { - it('should click the Certificate link, expand/collapse first card by ellipsis and scroll to second set', async function () { + it('should click the Certificate link, expand/collapse first card by ellipsis validate data and scroll to second set', async function () { var CertificatesLink = element(by.css('tr:nth-child(4) > td:nth-child(2) > .text-color-7a')); var WidgetTitle = element(by.css('#id > .jrnys_lead-body-copy')); var CertificateTitle = element(by.css('.item:nth-child(1) > .col-xs-12:nth-child(1) .textSize:nth-child(1)')); @@ -1888,7 +1890,7 @@ function Certificates() { } function Institutions() { - it('should click the Institutions link, navigate to next set, expand by ellipsis, favorite second card, collapse by ellipsis, then scroll back to first set', async function () { + it('should click the Institutions link, navigate to next set, expand by ellipsis, and validate data', async function () { var InstitutionsLink = element(by.css('tr:nth-child(5) > td:nth-child(2) > .text-color-7a')); var WidgetTitle = element(by.xpath('//recommended-colleges/div/div[2]/div/div')); var CarrouselRightScroll = element(by.css('#recommendedColleges .right > .glyphicon')); @@ -1955,20 +1957,42 @@ function Institutions() { } function TopResources() { - it('should click Top Resources link and expand fourth and first card', async function () { + it('should click Top Resources link and expand fourth then expand first card and follow', async function () { var TopResourcesLink = element(by.css('tr:nth-child(3) > td:nth-child(3) > .text-color-7a')); - var ExpandFourthResourceCard = element(by.css('.panel:nth-child(4) .ng-binding')); - var ExpandFirstResourceCard = element(by.css('.panel:nth-child(1) .ng-binding')); + var TopResourcesDivTitle = element(by.css('.col-sm-12 > .ng-binding')); + var FourthResourceCardTitle = element(by.css('.panel:nth-child(4) .ng-binding')); + var FirstResourceCardTitle = element(by.css('.panel:nth-child(1) .ng-binding')); + var FirstResourceCardEllipsis = element(by.css('.panel:nth-child(1) .glyphicon')); + var FirstResourceLearnMoreLink = element(by.css('.panel:nth-child(1) .row:nth-child(2) div:nth-child(2) span:nth-child(2)')); var FollowFirstResourceCard = element(by.css('#pageBody > div.modal.fade.ng-isolate-scope.in > div > div > div > div.color-card-background.widget-padding > accordion > div > div:nth-child(1) > div.panel-collapse.in > div > resource-card > div > div > div > div:nth-child(1) > a > social-follow-icon > span > i')); var XCloseLink = element(by.css('.close')); await TopResourcesLink.click().then(function() { browser.sleep(2500); }); - await ExpandFourthResourceCard.click(); + expect(await TopResourcesDivTitle.getText()).toEqual('Computer and Information Research Scientists'); + expect(await FourthResourceCardTitle.getText()).toEqual('Computer and Information Research Scientists'); + await FourthResourceCardTitle.click(); browser.sleep(1000); - await ExpandFirstResourceCard.click(); + expect(await FirstResourceCardTitle.getText()).toEqual('Computer and Information Research Scientists (Information Technology)'); + await FirstResourceCardEllipsis.click(); browser.sleep(1000); + await FirstResourceLearnMoreLink.click(); + browser.sleep(5000); + browser.getAllWindowHandles().then(function (handles) { + var SecondWindowHandle = handles[1]; + var FirstWindowHandle = handles[0]; + + browser.switchTo().window(SecondWindowHandle).then(async function () { + browser.sleep(3000); + expect(await browser.driver.getCurrentUrl()).toEqual("https://www.onetonline.org/link/summary/15-1111.00"); + browser.driver.close(); + }); + browser.switchTo().window(FirstWindowHandle).then(async function () { + browser.sleep(3000); + expect(await FirstResourceCardTitle.getText()).toEqual('Computer and Information Research Scientists (Information Technology)'); + }); + }); await FollowFirstResourceCard.click(); browser.sleep(2500); await XCloseLink.click().then(function() { @@ -2092,7 +2116,7 @@ function NearbyPlaces() { } function Tasks() { - it('should click Tasks link', async function () { + it('should click Tasks link and validate data', async function () { var TasksLink = element(by.css('tr:nth-child(4) > td:nth-child(4) > .text-color-7a')); var WidgetTitle = element(by.css('h6 > .ng-binding')); var ImportanceHeader = element(by.css('th:nth-child(2) > .text-color-7a')); @@ -2205,7 +2229,7 @@ function Tasks() { } function Technology() { - it('should click Technology link', async function () { + it('should click Technology link and validate data', async function () { var TechnologyLink = element(by.css('tr:nth-child(5) > td:nth-child(4) > .text-color-7a')); var WidgetTitle = element(by.css('h6 > .ng-binding')); var TechnologyTitleOne = element(by.css('tbody:nth-child(2) > .ng-scope:nth-child(1) > .ng-binding')); @@ -2356,7 +2380,7 @@ function Technology() { } function Knowledge() { - it('should click Knowledge link', async function () { + it('should click Knowledge link and validate data', async function () { var KnowledgeLink = element(by.css('tr:nth-child(3) > td:nth-child(5) > .text-color-7a')); var WidgetTitle = element(by.css('h6 > .ng-binding')); var ImportanceHeader = element(by.css('.text-right > .text-color-7a')); @@ -2421,7 +2445,7 @@ function Knowledge() { } function Skills() { - it('should click Skills link', async function () { + it('should click Skills link and validate data', async function () { var SkillsLink = element(by.css('tr:nth-child(4) > td:nth-child(5) > .text-color-7a')); var WidgetTitle = element(by.css('h6 > .ng-binding')); var ImportanceHeader = element(by.css('.text-right > .text-color-7a')); @@ -2518,7 +2542,7 @@ function Skills() { } function WorkActivities() { - it('should click Work Activities link', async function () { + it('should click Work Activities link and validate data', async function () { var WorkActivitiesLink = element(by.css('tr:nth-child(5) > td:nth-child(5) > .text-color-7a')); var WidgetTitle = element(by.css('h6 > .ng-binding')); var ImportanceHeader = element(by.css('.text-right > .text-color-7a')); @@ -2631,7 +2655,7 @@ function WorkActivities() { } function Ability() { - it('should click Ability link', async function () { + it('should click Ability link and validate data', async function () { var AbilityLink = element(by.css('td:nth-child(6) > .text-color-7a')); var WidgetTitle = element(by.css('h6 > .ng-binding')); var ImportanceHeader = element(by.css('.text-right > .text-color-7a')); @@ -2724,7 +2748,7 @@ function Ability() { } function MyResources() { - it('should click My Resources View All link, expand and collapse resource', async function () { + it('should click My Resources View All link, expand and collapse resources and remove latest resource', async function () { var WidgetTitle = element(by.css('#id > .ng-scope > .jrnys_lead-body-copy')); var TopResources1stCardHeader = element(by.css('.col-xs-4:nth-child(1) tr:nth-child(2) > .hotTitles')); var TopResources1stCardSaveIcon = element(by.css('.col-xs-4:nth-child(1) .journey-save:nth-child(1)')); @@ -3076,7 +3100,7 @@ function MapInteraction() { } function SurveyMetrics() { - it('should navigate to My Activity Dashboard and interact with Survey Metrics widget', async function () { + it('should navigate to My Activity Dashboard and interact with Survey Metrics widget and validate data of 07/30/2019', async function () { var DashboardHeaderLink = element(by.css('.ng-scope:nth-child(1) > a > .span-navbar-hover')); var MyDashboardLink = element(by.linkText('My Dashboards')); var MyActivityLink = element(by.linkText('My Activity')); @@ -3200,7 +3224,7 @@ function SurveyMetrics() { } function InstitutionMetrics() { - it('should validate Institution Metrics widget stats', async function () { + it('should validate Institution Metrics widget data', async function () { var InstitutionMetricsWidgetTitle = element(by.css('.widget-round-corners:nth-child(4) .widget-padding > .jrnys_lead-body-copy')); var InstitutionsOfInterestTitle = element(by.css('.fullHeight:nth-child(1) > .widget-padding .text-center:nth-child(1) > .td-metrics-data-width:nth-child(2) .jrnys_body-copy')); var InstitutionsOfInterestStat = element(by.css('.fullHeight:nth-child(1) > .widget-padding .td-metrics-data-width:nth-child(2) .jrnys_stand-out-text')); @@ -3249,7 +3273,7 @@ function InstitutionMetrics() { } function InstitutionsOfInterest() { - it('should verify Institutions Of Interest widget', async function () { + it('should validate Institutions Of Interest widget data', async function () { var InstitutionsOfInterestWidgetTitle = element(by.css('#id > .jrnys_lead-body-copy')); var InstitutionCardTitle = element(by.css('.jrnys_carousel-title-space')); var InstitutionOfInterestViewAllLink = element(by.css('.jrnys_lead-body-copy:nth-child(1) > .ng-binding')); @@ -3329,7 +3353,7 @@ function InstitutionsOfInterest() { } function OccupationMetrics() { - it('should validate Occupation Metrics widget stats', async function () { + it('should validate Occupation Metrics widget data', async function () { var OccupationMetricsWidgetTitle = element(by.css('.widget-round-corners:nth-child(6) .fullHeight .jrnys_lead-body-copy')); var OccupationsOfInterestTitle = element(by.css('.fullHeight:nth-child(2) > .widget-padding .text-center:nth-child(1) > .td-metrics-data-width:nth-child(2) .jrnys_body-copy')); var OccupationsOfInterestStat = element(by.css('.fullHeight:nth-child(2) > .widget-padding .td-metrics-data-width:nth-child(2) .jrnys_stand-out-text')); @@ -3374,7 +3398,7 @@ function OccupationMetrics() { } function OccupationsOfInterest() { - it('should verify Occupations Of Interest widget', async function () { + it('should verify Occupations Of Interest widget data', async function () { var OccupationsOfInterestWidgetTitle = element(by.css('#occupationVisitedId .jrnys_lead-body-copy')); var AtAGlanceHeaderRowIcon = element(by.xpath('//territory-card/div/div/div/div/div/div[2]')); var AtAGlanceBackOfCardXCloseLink = element(by.xpath('//territory-card/div/div[2]/div/div[2]/span')); @@ -3405,7 +3429,7 @@ function OccupationsOfInterest() { browser.sleep(1000); }); - /*await InstitutionCardLearnMoreButton.click().then(function() { + await InstitutionCardLearnMoreButton.click().then(function() { browser.sleep(2500); }) browser.getAllWindowHandles().then(function (handles) { @@ -3436,14 +3460,14 @@ function OccupationsOfInterest() { expect(await browser.driver.getCurrentUrl()).toContain("/activityDashboard"); expect(await InstitutionsOfInterestWidgetTitle.getText()).toEqual('Institutions Of Interest View All'); }); - });*/ + }); browser.waitForAngular(); browser.getCurrentUrl(); }); } function AccountProfile() { - it('should navigate to Account Profile', async function () { + it('should navigate to Account Profile and validate data', async function () { var ProfileImage = element(by.css('.roundCenterBackgroundImage')); var ProfileLink = element(by.linkText('Profile')); var PageTitle = element(by.css('.view-title')); @@ -3488,13 +3512,16 @@ function AccountProfile() { await ProfileImage.click().then(function() { browser.sleep(1000); }); + browser.actions().mouseMove(ProfileLink).perform().then(function() { + browser.sleep(1500); + }); await ProfileLink.click().then(function() { browser.sleep(1000); }); expect(await PageTitle.getText()).toEqual('Account Information'); expect(await UserName.getText()).toEqual('Automated Regression'); expect(await EmailHandle.getText()).toEqual('Email:'); - expect(await UserInfo.getText()).toContain('jhuerta@edmin.com'); + //expect(await UserInfo.getText()).toContain('jhuerta@edmin.com'); expect(await BirthdayHandle.getText()).toEqual('Birthday:'); expect(await UserInfo.getText()).toContain('2000-02-15'); expect(await ActiveRoleHandle.getText()).toEqual('Active Role:'); @@ -3503,11 +3530,11 @@ function AccountProfile() { await EditAccount.click(); browser.sleep(1000); expect(await EditPageTitle.getText()).toEqual('Edit Account Information'); - /*expect(await FirstNameTextBox.getAttribute()).toEqual('1 Automated'); - expect(await LastNameTextBox.getAttribute()).toEqual('2 Regression'); - expect(await EmailAddressTextBox.getAttribute()).toEqual('3 jhuerta@edmin.com'); - expect(await ZipCodeTextBox.getAttribute()).toEqual('4 92123'); - expect(await BirthdayTextBox.getAttribute()).toEqual('5 2000-02-15');*/ + expect(await FirstNameTextBox.getAttribute('value')).toEqual('Automated'); + expect(await LastNameTextBox.getAttribute('value')).toEqual('Regression'); + expect(await EmailAddressTextBox.getAttribute('value')).toEqual(''); + expect(await ZipCodeTextBox.getAttribute('value')).toEqual('92123'); + expect(await BirthdayTextBox.getAttribute('value')).toEqual('2000-02-15'); await ChangePasswordButton.click(); browser.sleep(1000); expect(await ChangePageTitle.getText()).toEqual('Change your password...'); @@ -3564,32 +3591,39 @@ function AccountProfile() { } function AccountPortfolio() { - it('should navigate to portfolio', async function () { + it('should navigate to portfolio and validate resource', async function () { var ProfileImage = element(by.css('.roundCenterBackgroundImage')); var PortfolioLink = element(by.linkText('Portfolio')); var SubmittedResourcesTitle = element(by.css('.ng-scope > .jrnys_lead-body-copy')); + var MyResourceTitle = element(by.css('.hotTitles')); var GoogleDriveTitle = element(by.css('.default-color:nth-child(2)')); var GoogleDriveSubTitle = element(by.css('.default-color:nth-child(3)')); + var SignInToGoogleDriveButton = element(by.id('authorize-button')); browser.waitForAngular(); browser.sleep(1000); await ProfileImage.click(); browser.sleep(1000); + browser.actions().mouseMove(PortfolioLink).perform().then(function() { + browser.sleep(1500); + }); await PortfolioLink.click(); browser.sleep(5000); expect(await SubmittedResourcesTitle.getText()).toEqual('My Submitted Resources View All'); + expect(await MyResourceTitle.getText()).toEqual('Test Doc'); browser.executeScript('window.scrollTo(0, document.body.scrollHeight);').then(function() { browser.sleep(1000); }); expect(await GoogleDriveTitle.getText()).toEqual('Google Drive'); expect(await GoogleDriveSubTitle.getText()).toContain('Sign in to your Google Drive account to access all your files!'); + expect(await SignInToGoogleDriveButton.getText()).toEqual('Sign in to Google Drive'); browser.waitForAngular(); browser.getCurrentUrl(); }); } function SignOut() { - it('should log out', async function () { + it('should log out of journeysmap', async function () { var ProfileImage = element(by.css('.roundCenterBackgroundImage')); var SignOutButton = element(by.css('.dropDownFAEdits:nth-child(5) > .btn')); diff --git a/config.js b/config.js index c917ad9..4917947 100644 --- a/config.js +++ b/config.js @@ -1,4 +1,5 @@ // config.js + exports.config = { framework: 'jasmine', seleniumAddress: 'http://localhost:4444/wd/hub', @@ -10,7 +11,11 @@ exports.config = { capabilities: { browserName: 'chrome' - } + }, + + onPrepare: function() { + browser.driver.manage().window().maximize(); + }, /*multiCapabilities: [{ browserName: 'chrome' diff --git a/npm b/npm new file mode 100644 index 0000000..f38ad4e --- /dev/null +++ b/npm @@ -0,0 +1,15 @@ +#!/bin/sh +basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") + +case `uname` in + *CYGWIN*) basedir=`cygpath -w "$basedir"`;; +esac + +if [ -x "$basedir/node" ]; then + "$basedir/node" "$basedir/../npm/bin/npm-cli.js" "$@" + ret=$? +else + node "$basedir/../npm/bin/npm-cli.js" "$@" + ret=$? +fi +exit $ret diff --git a/npm.cmd b/npm.cmd new file mode 100644 index 0000000..b4cca00 --- /dev/null +++ b/npm.cmd @@ -0,0 +1,7 @@ +@IF EXIST "%~dp0\node.exe" ( + "%~dp0\node.exe" "%~dp0\..\npm\bin\npm-cli.js" %* +) ELSE ( + @SETLOCAL + @SET PATHEXT=%PATHEXT:;.JS;=;% + node "%~dp0\..\npm\bin\npm-cli.js" %* +) \ No newline at end of file diff --git a/npx b/npx new file mode 100644 index 0000000..2e1d54d --- /dev/null +++ b/npx @@ -0,0 +1,15 @@ +#!/bin/sh +basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") + +case `uname` in + *CYGWIN*) basedir=`cygpath -w "$basedir"`;; +esac + +if [ -x "$basedir/node" ]; then + "$basedir/node" "$basedir/../npm/bin/npx-cli.js" "$@" + ret=$? +else + node "$basedir/../npm/bin/npx-cli.js" "$@" + ret=$? +fi +exit $ret diff --git a/npx.cmd b/npx.cmd new file mode 100644 index 0000000..1c9b034 --- /dev/null +++ b/npx.cmd @@ -0,0 +1,7 @@ +@IF EXIST "%~dp0\node.exe" ( + "%~dp0\node.exe" "%~dp0\..\npm\bin\npx-cli.js" %* +) ELSE ( + @SETLOCAL + @SET PATHEXT=%PATHEXT:;.JS;=;% + node "%~dp0\..\npm\bin\npx-cli.js" %* +) \ No newline at end of file