import { QConsole } from '../e2elib/lib/src/helper/qconsole';
|
import { MatrixEditor } from '../e2elib/lib/src/pageobjects/matrix/matrixeditor.component';
|
import { MatrixEditorCell } from '../e2elib/lib/src/pageobjects/matrix/matrixeditorcell.component';
|
import { browser } from '../e2elib/node_modules/protractor';
|
|
export interface CellLocator {
|
columnName: string;
|
rowName: string;
|
attributeId?: number;
|
}
|
|
export class MatrixEditorBase extends MatrixEditor {
|
/**
|
* Navigate to pass-in column header in matrix editor
|
*
|
* @param matrixColumnHeader target matrix column header navigate to
|
* @param navigateToRight [Optional] true to search column to right, false to left. [undefined will search to right then left]
|
*/
|
public async navigateToColumnAppear(matrixColumnHeader: string, navigateToRight?: boolean): Promise<void> {
|
let errorMessage = '';
|
const matrixWaitHelper = this.getWaitHelper();
|
if (navigateToRight) {
|
await matrixWaitHelper.navigateUntilColumnAppears(matrixColumnHeader);
|
} else if (navigateToRight === undefined) {
|
await matrixWaitHelper.navigateUntilColumnAppears(matrixColumnHeader);
|
if (!(await this.hasColumn(matrixColumnHeader))) {
|
await matrixWaitHelper.navigateUntilColumnAppears(matrixColumnHeader, false);
|
}
|
} else if (!navigateToRight) {
|
await matrixWaitHelper.navigateUntilColumnAppears(matrixColumnHeader, false);
|
}
|
await QConsole.waitForStable(2000);
|
|
if (!(await this.hasColumn(matrixColumnHeader))) {
|
errorMessage = `error when finding column '${matrixColumnHeader}' in matrix editor ${this.componentName}.`;
|
throw new Error(errorMessage);
|
}
|
}
|
|
/**
|
* @override
|
*/
|
public async getCell(rowID: string | number, attributeID: string | number, columnID: string | number): Promise<MatrixEditorCell> {
|
if (typeof columnID === 'string') {
|
// S&OP added browser.wait, some matrix refreshed by other UI
|
// thus need wait for matrix proper refresh else encounter stale web element references
|
await browser.wait(async () => {
|
try {
|
await this.navigateToColumnAppear(columnID);
|
return true;
|
} catch (error) {
|
return false;
|
}
|
}, 3000, `Matrix ${this.componentName}: Timeout encountered - cannot find matrix column "${columnID}" for row "${rowID}".`);
|
}
|
const cell = await super.getCell(rowID, attributeID, columnID);
|
|
return cell;
|
}
|
|
/**
|
* Find cell based on passed in CellLocator [If passed in CellLocator]
|
* Set value into searched cell / passed in MatrixEditorCell
|
*
|
* @param cell The matrix cell || An object containing the ColumnName and RowName
|
* @param value The value to be entered into the cell
|
*/
|
public async sendInputToCell(cell: CellLocator | MatrixEditorCell, value: string): Promise<string> {
|
if (!(cell instanceof MatrixEditorCell)) {
|
cell = await this.getCell(cell.rowName, cell.attributeId || 0, cell.columnName);
|
}
|
|
await cell.sendInput(value);
|
const enteredValue = await cell.getValue();
|
|
return enteredValue;
|
}
|
}
|