| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 |
- const { centerOfBbox } = require("../tests/helpers");
- const { I } = inject();
- module.exports = {
- _rootSelector: ".lsf-outliner",
- _regionListSelector: ".lsf-outliner-tree",
- _regionListItemSelector: ".lsf-tree__node:not(.lsf-tree__node_type_footer)",
- _regionListItemSelectedSelector: ".lsf-tree-node-selected",
- _regionListItemIndex: ".lsf-outliner-item__index",
- _regionVesibilityActionButton: ".lsf-outliner-item__control_type_visibility button",
- _incompleteStateIcon: ".lsf-outliner-item__incomplete",
- locateOutliner() {
- return locate(this._rootSelector);
- },
- locate(locator) {
- return locator ? locate(locator).inside(this.locateOutliner()) : this.locateOutliner();
- },
- locateRegionList() {
- return this.locate(this._regionListSelector);
- },
- locateRegionItemList(text) {
- if (text) {
- return locate(this._regionListItemSelector).withText(text).inside(this.locateRegionList());
- }
- return locate(this._regionListItemSelector).inside(this.locateRegionList());
- },
- locateRegionItemIndex(idx) {
- return locate(this._regionListItemIndex).withText(`${idx}`).inside(this.locateRegionItemList());
- },
- locateRegionIndex(idx) {
- return this.locateRegionItemList().withDescendant(
- `${locate(this._regionListItemIndex).toXPath()}[text()='${idx}']`,
- );
- },
- locateSelectedItem(locator) {
- const selectedLocator = locate(this._regionListItemSelectedSelector).inside(this.locateRegionList());
- return locator ? selectedLocator.find(locator) : selectedLocator;
- },
- locateRegion(idxOrText) {
- return typeof idxOrText === "number" ? this.locateRegionItemIndex(idxOrText) : this.locateRegionItemList(idxOrText);
- },
- locateIncompleteStateIcon(idxOrText) {
- if (idxOrText === undefined) {
- return locate(this._incompleteStateIcon).inside(this.locateRegionList());
- }
- return locate(this._incompleteStateIcon).inside(this.locateRegion(idxOrText));
- },
- see(text) {
- I.see(text, this._regionListSelector);
- },
- dontSee(text) {
- I.dontSee(text, this._regionListSelector);
- },
- seeElement(locator) {
- I.seeElement(this.locate(locator));
- },
- seeRegions(count) {
- // Avoid tries to find a region when there are 0 of them
- count && I.seeElement(this.locateRegionItemIndex(count));
- I.dontSeeElement(this.locateRegionItemIndex(count + 1));
- },
- dontSeeRegions(count) {
- count && I.dontSeeElement(this.locateRegionItemList().at(count));
- count === +count && I.dontSeeElement(this.locateRegionItemIndex(count));
- !count && I.see("Labeled regions will appear here");
- },
- clickRegion(idxOrText) {
- I.click(this.locateRegion(idxOrText));
- },
- hoverRegion(idxOrText) {
- I.moveCursorTo(this.locateRegion(idxOrText));
- },
- toggleRegionVisibility(idxOrText) {
- // Hover to see action button
- this.hoverRegion(idxOrText);
- // This button exist only for hovered list item
- I.click(locate(this._regionVesibilityActionButton));
- },
- seeSelectedRegion(text = undefined) {
- I.seeElement(text ? this.locateSelectedItem().withText(text) : this.locateSelectedItem());
- },
- dontSeeSelectedRegion(text = undefined) {
- I.dontSeeElement(text ? this.locateSelectedItem().withText(text) : this.locateSelectedItem());
- },
- /**
- * Verifies that the incomplete state icon is visible in a region list or for the specific region.
- *
- * @param {number|string} [idxOrText] - The index or text reference used to locate the region that should contain incomplete state icon.
- * Otherwise, it tries to find any.
- * @return {void} This method does not return any value.
- */
- seeIncompleteRegion(idxOrText) {
- I.seeElement(this.locateIncompleteStateIcon(idxOrText));
- },
- /**
- * Verifies that the incomplete state icon is not visible in a region list or for the specific region.
- *
- * @param {number|string} [idxOrText] - The index or text reference used to locate the region that should contain incomplete state icon.
- * Otherwise, it tries to find any.
- * @return {void} This method does not return any value.
- */
- dontSeeIncompleteRegion(idxOrText) {
- I.dontSeeElement(this.locateIncompleteStateIcon(idxOrText));
- },
- /**
- * Drag and drop region through the outliner's regions tree
- * @param {number} dragRegionIdx - Index of the dragged region
- * @param {number} dropRegionIdx - Index of the region that will be a drop zone
- * @param {number} [steps=3] - Sends intermediate mousemove events.
- * @returns {Promise<void>}
- */
- async dragAndDropRegion(dragRegionIdx, dropRegionIdx, steps = 3) {
- const fromBbox = await I.grabElementBoundingRect(this.locateRegionItemIndex(dragRegionIdx));
- const toBbox = await I.grabElementBoundingRect(this.locateRegionItemIndex(dropRegionIdx));
- const fromPoint = centerOfBbox(fromBbox);
- const toPoint = {
- x: toBbox.x + toBbox.width / 2,
- y: toBbox.y + (3 * toBbox.height) / 4,
- };
- return await I.dragAndDropMouse(fromPoint, toPoint, "left", steps);
- },
- };
|