From 5fb76e8991af6beddb73715e68937808dafa0990 Mon Sep 17 00:00:00 2001 From: Julio Casal Date: Thu, 1 Oct 2015 22:47:44 -0700 Subject: [PATCH] Adds support for opening QuickStart and Users blades, multiple APIs to support the canpinAllBladeParts test and support for waiting for notifications --- msportalfx-test/msportalfx-test-tests.ts | 55 +++++++++++++++- msportalfx-test/msportalfx-test.d.ts | 82 +++++++++++++++++++++--- 2 files changed, 125 insertions(+), 12 deletions(-) diff --git a/msportalfx-test/msportalfx-test-tests.ts b/msportalfx-test/msportalfx-test-tests.ts index 98f86dcd49..7d647106d7 100644 --- a/msportalfx-test/msportalfx-test-tests.ts +++ b/msportalfx-test/msportalfx-test-tests.ts @@ -17,11 +17,11 @@ var extensionUrl = 'https://localhost:44300/'; var voidPromise: Q.Promise; var boolPromise: Q.Promise; var anyPromise: Q.Promise; +var stringPromise: Q.Promise; var summaryBlade = new testFx.Blades.Blade(resourceName); -function TestPortal() { - +function TestPortal() { testFx.portal.portalContext.signInEmail = userName; testFx.portal.portalContext.signInPassword = password; testFx.portal.portalContext.features = [{ name: "greatfeature", value: "true" }]; @@ -35,11 +35,17 @@ function TestPortal() { var stringPromise = testFx.portal.takeScreenshot("TestPortal"); var stringArrayPromise = testFx.portal.getBrowserLogs(testFx.LogLevel.All); anyPromise = testFx.portal.waitUntilElementDoesNotContainAttribute(testFx.Locators.By.className('part'), 'class', 'invalid'); + voidPromise = testFx.portal.goHome(); + boolPromise = testFx.portal.waitForElementVisible(summaryBlade.getLocator()); + var anyArrayPromise = testFx.portal.waitForElementsLocated(summaryBlade.getLocator()); + var voidPromise = testFx.portal.executeScript("console.log('hello from script');"); + stringPromise = testFx.portal.getCurrentUrl(); } function TestBlades() { var blade = new testFx.Blades.Blade(resourceName); - blade.clickCommand('Delete'); + var bladePromise = blade.clickCommand('Delete'); + var tilesPromise = blade.getTiles(); var createBlade = new testFx.Blades.CreateBlade(bladeTitle); voidPromise = createBlade.actionBar.createButton.click(); @@ -52,6 +58,11 @@ function TestBlades() { var specPickerBlade = new testFx.Blades.SpecPickerBlade(bladeTitle); specPickerBlade.pickSpec('S2'); + + var quickStartBlade = new testFx.Blades.QuickStartBlade(); + voidPromise = quickStartBlade.clickLink('Learn more'); + + var usersBlade = new testFx.Blades.UsersBlade(); } function TestParts() { @@ -60,12 +71,21 @@ function TestParts() { boolPromise = part.isSelected(); boolPromise = part.waitUntilLoaded(); boolPromise = part.isLoaded(); + boolPromise = part.isClickable(); + boolPromise = part.hasError(); var resourceSummary = new testFx.Parts.ResourceSummaryPart(summaryBlade.getLocator()); var count = resourceSummary.properties.length; + voidPromise = resourceSummary.quickStartHotSpot.click(); + voidPromise = resourceSummary.accessHotSpot.click(); var pricingTier = new testFx.Parts.PricingTierPart(summaryBlade.getLocator()); voidPromise = pricingTier.click(); + + var tile = new testFx.Parts.Tile(summaryBlade.getLocator()); + voidPromise = tile.tryPin(); + var part: testFx.Parts.Part = tile.getPart(); + voidPromise = tile.waitUntilLoaded(); } function TestControls() { @@ -78,6 +98,9 @@ function TestControls() { var textField = new testFx.Controls.TextField(summaryBlade.getLocator(), "Resource name"); var textFieldPromise = textField.sendKeys(resourceName); + + var hotSpot = new testFx.Controls.HotSpot(summaryBlade.getLocator()); + boolPromise = hotSpot.isSelected(); } function TestActionBars() { @@ -90,4 +113,30 @@ function TestActionBars() { var pickerBar = new testFx.ActionBars.PickerActionBar(summaryBlade.getLocator()); voidPromise = pickerBar.selectButton.click(); +} + +function TestCommands() { + var menu = new testFx.Commands.ContextMenu(); + var itemName = "Pin"; + boolPromise = menu.hasItem(itemName); + voidPromise = menu.clickItem(itemName); + + var item = new testFx.Commands.ContextMenuItem(menu.getLocator(), itemName); + voidPromise = item.click(); +} + +function TestStartBoard() { + var board = new testFx.StartBoard(); + var tilesPromise = board.getTiles(); +} + +function TestNotifications() { + var menu = new testFx.Notifications.NotificationsMenu(); + menu.waitForNewNotification("success").then((notification) => { + stringPromise = notification.getDescription(); + }); +} + +function TestTests() { + boolPromise = testFx.Tests.Parts.canPinAllBladeParts(resourceId, bladeTitle); } \ No newline at end of file diff --git a/msportalfx-test/msportalfx-test.d.ts b/msportalfx-test/msportalfx-test.d.ts index 5ba4134843..6260387867 100644 --- a/msportalfx-test/msportalfx-test.d.ts +++ b/msportalfx-test/msportalfx-test.d.ts @@ -76,6 +76,7 @@ declare module MsPortalTestFx { constructor(title: string); clickCommand(commandText: string): Q.Promise; + getTiles(): Q.Promise; } export class CreateBlade extends Blade { @@ -95,6 +96,15 @@ declare module MsPortalTestFx { export class SpecPickerBlade extends Blade { pickSpec(specCode: string): Q.Promise; } + + export class QuickStartBlade extends Blade { + constructor(); + clickLink(linkText: string): Q.Promise; + } + + export class UsersBlade extends Blade { + constructor(); + } } export module Controls { @@ -127,12 +137,17 @@ declare module MsPortalTestFx { export class TextField extends FormElement { constructor(parentLocator?: Locators.Locator, label?: string, baseLocator?: Locators.Locator); - sendKeys(...var_args: string[]): Q.Promise; + sendKeys(...var_args: string[]): Q.Promise; } export class ResourceFilterTextField extends TextField { constructor(parentLocator?: Locators.Locator); } + + export class HotSpot extends PortalElement { + constructor(parentLocator?: Locators.Locator, baseLocator?: Locators.Locator); + isSelected(): Q.Promise; + } } export module Parts { @@ -143,6 +158,8 @@ declare module MsPortalTestFx { isSelected(): Q.Promise; isLoaded(): Q.Promise; waitUntilLoaded(timeout?: number): Q.Promise; + isClickable(): Q.Promise; + hasError(): Q.Promise; } export class PartProperty extends MsPortalTestFx.PortalElement { @@ -155,6 +172,8 @@ declare module MsPortalTestFx { export class ResourceSummaryPart extends Part { public properties: Array; public resourceGroupProperty: PartProperty; + public quickStartHotSpot: Controls.HotSpot; + public accessHotSpot: Controls.HotSpot; constructor(parentLocator?: Locators.Locator); } @@ -166,17 +185,57 @@ declare module MsPortalTestFx { public progressLocator: Locators.Locator; constructor(parentLocator?: Locators.Locator); + tryPin(): Q.Promise; + getPart(): Part; + waitUntilLoaded(timeout?: number): Q.Promise; + } + } + + export module Commands { + export class ContextMenu extends PortalElement { + constructor(); + public hasItem(text: string): Q.Promise; + public clickItem(text: string): Q.Promise; + } + + export class ContextMenuItem extends PortalElement { + constructor(parentLocator: Locators.Locator, text?: string); + } + } + + export module Notifications { + export class Notification extends PortalElement { + constructor(); + getTitle(): Q.Promise; + getDescription(): Q.Promise; + } + + export class NotificationsMenu extends PortalElement { + constructor(); + waitForNewNotification(title?: string, description?: string, timeout?: number): Q.Promise; + } + } + + export module Tests { + export module Parts { + export function canPinAllBladeParts(targetBladeDeepLink: string, targetBladeTitle: string, timeout?: number): Q.Promise; } } export class PortalElement { - protected baseLocator: Locators.Locator; + public baseLocator: Locators.Locator; protected parentLocator: Locators.Locator; constructor(baseLocator: Locators.Locator, parentLocator?: Locators.Locator); - getLocator(): Locators.Locator; click(): Q.Promise; + rightClick(): Q.Promise; getAttribute(attributeName: string): Q.Promise; + sendKeys(...var_args: string[]): Q.Promise; + getText(): Q.Promise; + isPresent(): Q.Promise; + isElementPresent(subLocator: Locators.Locator): Q.Promise; + isDisplayed(): Q.Promise; + getLocator(): Locators.Locator; } export interface TestExtension { @@ -216,23 +275,23 @@ declare module MsPortalTestFx { export class Portal { portalContext: PortalContext; - click(locator: Locators.Locator): Q.Promise; - sendKeys(locator: Locators.Locator, ...var_args: string[]): Q.Promise - getText(locator: Locators.Locator): Q.Promise; + + goHome(timeout?: number): Q.Promise; openGalleryCreateBlade(galleryPackageName: string, bladeTitle: string, timeout?: number): Q.Promise; openBrowseBlade(resourceProvider: string, resourceType: string, bladeTitle: string, timeout?: number): Q.Promise; openResourceBlade(resourceId: string, bladeTitle: string, timeout?: number): Q.Promise; navigateToDeepLink(deepLink: string, timeout?: number): Q.Promise; - getAttribute(locator: Locators.Locator, attributeName: string, timeout?: number): Q.Promise; + waitForElementVisible(locator: Locators.Locator, timeout?: number): Q.Promise; waitForElementNotVisible(locator: Locators.Locator, timeout?: number): Q.Promise; waitUntilElementContainsAttribute(locator: Locators.Locator, attributeName: string, attributeValue: string, timeout?: number): Q.Promise; waitUntilElementDoesNotContainAttribute(locator: Locators.Locator, attributeName: string, attributeValue: string, timeout?: number): Q.Promise; waitForElementLocated(locator: Locators.Locator, timeout?: number): Q.Promise; + waitForElementsLocated(locator: Locators.Locator, timeout?: number): Q.Promise; takeScreenshot(filePrefix?: string): Q.Promise; - goHome(timeout?: number): Q.Promise; getBrowserLogs(level: LogLevel): Q.Promise; - applyFeature(name: string, value: string): void; executeScript(script: string): Q.Promise; + applyFeature(name: string, value: string): void; + getCurrentUrl(): Q.Promise; quit(): Q.Promise; } @@ -240,6 +299,11 @@ declare module MsPortalTestFx { clickUntrustedExtensionsOkButton(): Q.Promise; } + export class StartBoard extends PortalElement { + constructor(); + getTiles(): Q.Promise; + } + export var portal: Portal; }