@atomic-testing/component-driver-html
Advanced tools
Comparing version 0.22.0 to 0.23.0
@@ -1,6 +0,15 @@ | ||
import { ComponentDriver, IInputDriver, Nullable } from '@atomic-testing/core'; | ||
import { ComponentDriver, IInputDriver, Nullable, PartLocatorType } from '@atomic-testing/core'; | ||
import { HTMLOptionDriver } from './HTMLOptionDriver'; | ||
type ValueT = string | readonly string[]; | ||
export declare class HTMLSelectDriver extends ComponentDriver<{}> implements IInputDriver<Nullable<ValueT>> { | ||
isMultiple(): Promise<boolean>; | ||
getValue(): Promise<Nullable<ValueT>>; | ||
setValue(value: Nullable<ValueT>): Promise<boolean>; | ||
getOptionByLocator(itemLocator: PartLocatorType): Promise<HTMLOptionDriver | null>; | ||
getOptionByIndex(index: number): Promise<HTMLOptionDriver | null>; | ||
getValuesByLabels(labels: readonly string[]): Promise<readonly string[]>; | ||
selectByLabel(label: string | readonly string[]): Promise<void>; | ||
getSelectedLabel(isMultiple: true): Promise<readonly string[] | null>; | ||
getSelectedLabel(isMultiple: false): Promise<string | null>; | ||
getSelectedLabel(): Promise<string | null>; | ||
isDisabled(): Promise<boolean>; | ||
@@ -7,0 +16,0 @@ isReadonly(): Promise<boolean>; |
@@ -14,7 +14,13 @@ "use strict"; | ||
const core_1 = require("@atomic-testing/core"); | ||
const HTMLOptionDriver_1 = require("./HTMLOptionDriver"); | ||
class HTMLSelectDriver extends core_1.ComponentDriver { | ||
isMultiple() { | ||
return __awaiter(this, void 0, void 0, function* () { | ||
const multiple = yield this.interactor.getAttribute(this.locator, 'multiple'); | ||
return multiple != null; | ||
}); | ||
} | ||
getValue() { | ||
return __awaiter(this, void 0, void 0, function* () { | ||
const multiple = yield this.interactor.getAttribute(this.locator, 'multiple'); | ||
const isMultiple = multiple != null; | ||
const isMultiple = yield this.isMultiple(); | ||
const values = yield this.interactor.getSelectValues(this.locator); | ||
@@ -35,2 +41,61 @@ const returnedValue = isMultiple ? values : values === null || values === void 0 ? void 0 : values[0]; | ||
} | ||
getOptionByLocator(itemLocator) { | ||
return __awaiter(this, void 0, void 0, function* () { | ||
const locator = core_1.locatorUtil.append(this.locator, itemLocator); | ||
const exists = yield this.interactor.exists(locator); | ||
if (exists) { | ||
return new HTMLOptionDriver_1.HTMLOptionDriver(locator, this.interactor); | ||
} | ||
else { | ||
return null; | ||
} | ||
}); | ||
} | ||
getOptionByIndex(index) { | ||
return __awaiter(this, void 0, void 0, function* () { | ||
const itemLocator = { | ||
type: core_1.LocatorType.Css, | ||
selector: `option:nth-of-type(${index + 1})`, | ||
}; | ||
return this.getOptionByLocator(itemLocator); | ||
}); | ||
} | ||
getValuesByLabels(labels) { | ||
return __awaiter(this, void 0, void 0, function* () { | ||
const labelSet = new Set(labels); | ||
let index = 0; | ||
let item = yield this.getOptionByIndex(index); | ||
const values = []; | ||
while (item != null) { | ||
const label = yield item.label(); | ||
const value = yield item.value(); | ||
if (label != null && labelSet.has(label) && value != null) { | ||
values.push(value); | ||
} | ||
index++; | ||
item = yield this.getOptionByIndex(index); | ||
} | ||
return values; | ||
}); | ||
} | ||
selectByLabel(label) { | ||
return __awaiter(this, void 0, void 0, function* () { | ||
const labels = Array.isArray(label) ? label : [label]; | ||
const values = yield this.getValuesByLabels(labels); | ||
yield this.setValue(values); | ||
}); | ||
} | ||
getSelectedLabel(isMultiple) { | ||
var _a; | ||
return __awaiter(this, void 0, void 0, function* () { | ||
if (yield this.exists()) { | ||
const labels = yield this.interactor.getSelectLabels(this.locator); | ||
if (isMultiple) { | ||
return labels; | ||
} | ||
return (_a = labels[0]) !== null && _a !== void 0 ? _a : null; | ||
} | ||
return null; | ||
}); | ||
} | ||
isDisabled() { | ||
@@ -37,0 +102,0 @@ return this.interactor.isDisabled(this.locator); |
@@ -7,2 +7,3 @@ export { HTMLAnchorDriver } from './components/HTMLAnchorDriver'; | ||
export { HTMLHiddenInputDriver } from './components/HTMLHiddenInputDriver'; | ||
export { HTMLOptionDriver } from './components/HTMLOptionDriver'; | ||
export { HTMLRadioButtonGroupDriver } from './components/HTMLRadioButtonGroupDriver'; | ||
@@ -9,0 +10,0 @@ export { HTMLSelectDriver } from './components/HTMLSelectDriver'; |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.HTMLTextInputDriver = exports.HTMLTextAreaDriver = exports.HTMLSelectDriver = exports.HTMLRadioButtonGroupDriver = exports.HTMLHiddenInputDriver = exports.HTMLElementDriver = exports.HTMLCheckboxGroupDriver = exports.HTMLCheckboxDriver = exports.HTMLButtonDriver = exports.HTMLAnchorDriver = void 0; | ||
exports.HTMLTextInputDriver = exports.HTMLTextAreaDriver = exports.HTMLSelectDriver = exports.HTMLRadioButtonGroupDriver = exports.HTMLOptionDriver = exports.HTMLHiddenInputDriver = exports.HTMLElementDriver = exports.HTMLCheckboxGroupDriver = exports.HTMLCheckboxDriver = exports.HTMLButtonDriver = exports.HTMLAnchorDriver = void 0; | ||
var HTMLAnchorDriver_1 = require("./components/HTMLAnchorDriver"); | ||
@@ -16,2 +16,4 @@ Object.defineProperty(exports, "HTMLAnchorDriver", { enumerable: true, get: function () { return HTMLAnchorDriver_1.HTMLAnchorDriver; } }); | ||
Object.defineProperty(exports, "HTMLHiddenInputDriver", { enumerable: true, get: function () { return HTMLHiddenInputDriver_1.HTMLHiddenInputDriver; } }); | ||
var HTMLOptionDriver_1 = require("./components/HTMLOptionDriver"); | ||
Object.defineProperty(exports, "HTMLOptionDriver", { enumerable: true, get: function () { return HTMLOptionDriver_1.HTMLOptionDriver; } }); | ||
var HTMLRadioButtonGroupDriver_1 = require("./components/HTMLRadioButtonGroupDriver"); | ||
@@ -18,0 +20,0 @@ Object.defineProperty(exports, "HTMLRadioButtonGroupDriver", { enumerable: true, get: function () { return HTMLRadioButtonGroupDriver_1.HTMLRadioButtonGroupDriver; } }); |
{ | ||
"name": "@atomic-testing/component-driver-html", | ||
"version": "0.22.0", | ||
"version": "0.23.0", | ||
"description": "HTML component driver for atomic-testing", | ||
@@ -25,3 +25,3 @@ "main": "dist/index.js", | ||
"dependencies": { | ||
"@atomic-testing/core": "0.22.0" | ||
"@atomic-testing/core": "0.23.0" | ||
}, | ||
@@ -28,0 +28,0 @@ "devDependencies": { |
@@ -1,9 +0,22 @@ | ||
import { ComponentDriver, IInputDriver, Nullable } from '@atomic-testing/core'; | ||
import { | ||
ComponentDriver, | ||
IInputDriver, | ||
LocatorType, | ||
locatorUtil, | ||
Nullable, | ||
PartLocatorType, | ||
} from '@atomic-testing/core'; | ||
import { HTMLOptionDriver } from './HTMLOptionDriver'; | ||
type ValueT = string | readonly string[]; | ||
export class HTMLSelectDriver extends ComponentDriver<{}> implements IInputDriver<Nullable<ValueT>> { | ||
async isMultiple(): Promise<boolean> { | ||
const multiple = await this.interactor.getAttribute(this.locator, 'multiple'); | ||
return multiple != null; | ||
} | ||
async getValue(): Promise<Nullable<ValueT>> { | ||
const multiple = await this.interactor.getAttribute(this.locator, 'multiple'); | ||
const isMultiple = multiple != null; | ||
const isMultiple = await this.isMultiple(); | ||
const values = await this.interactor.getSelectValues(this.locator); | ||
@@ -23,2 +36,57 @@ const returnedValue = isMultiple ? values : values?.[0]; | ||
async getOptionByLocator(itemLocator: PartLocatorType): Promise<HTMLOptionDriver | null> { | ||
const locator = locatorUtil.append(this.locator, itemLocator); | ||
const exists = await this.interactor.exists(locator); | ||
if (exists) { | ||
return new HTMLOptionDriver(locator, this.interactor); | ||
} else { | ||
return null; | ||
} | ||
} | ||
async getOptionByIndex(index: number): Promise<HTMLOptionDriver | null> { | ||
const itemLocator: PartLocatorType = { | ||
type: LocatorType.Css, | ||
selector: `option:nth-of-type(${index + 1})`, | ||
}; | ||
return this.getOptionByLocator(itemLocator); | ||
} | ||
async getValuesByLabels(labels: readonly string[]): Promise<readonly string[]> { | ||
const labelSet = new Set(labels); | ||
let index = 0; | ||
let item: HTMLOptionDriver | null = await this.getOptionByIndex(index); | ||
const values: string[] = []; | ||
while (item != null) { | ||
const label = await item.label(); | ||
const value = await item.value(); | ||
if (label != null && labelSet.has(label) && value != null) { | ||
values.push(value); | ||
} | ||
index++; | ||
item = await this.getOptionByIndex(index); | ||
} | ||
return values; | ||
} | ||
async selectByLabel(label: string | readonly string[]): Promise<void> { | ||
const labels = Array.isArray(label) ? label : [label]; | ||
const values = await this.getValuesByLabels(labels); | ||
await this.setValue(values); | ||
} | ||
async getSelectedLabel(isMultiple: true): Promise<readonly string[] | null>; | ||
async getSelectedLabel(isMultiple: false): Promise<string | null>; | ||
async getSelectedLabel(): Promise<string | null>; | ||
async getSelectedLabel(isMultiple?: boolean) { | ||
if (await this.exists()) { | ||
const labels = await this.interactor.getSelectLabels(this.locator); | ||
if (isMultiple) { | ||
return labels; | ||
} | ||
return labels![0] ?? null; | ||
} | ||
return null; | ||
} | ||
isDisabled(): Promise<boolean> { | ||
@@ -25,0 +93,0 @@ return this.interactor.isDisabled(this.locator); |
@@ -7,2 +7,3 @@ export { HTMLAnchorDriver } from './components/HTMLAnchorDriver'; | ||
export { HTMLHiddenInputDriver } from './components/HTMLHiddenInputDriver'; | ||
export { HTMLOptionDriver } from './components/HTMLOptionDriver'; | ||
export { HTMLRadioButtonGroupDriver } from './components/HTMLRadioButtonGroupDriver'; | ||
@@ -9,0 +10,0 @@ export { HTMLSelectDriver } from './components/HTMLSelectDriver'; |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
52254
51
863
+ Added@atomic-testing/core@0.23.0(transitive)
- Removed@atomic-testing/core@0.22.0(transitive)
Updated@atomic-testing/core@0.23.0