@redhat-developer/page-objects
Version:
Page Object API implementation for a VS Code editor used by ExTester framework.
88 lines • 3.44 kB
JavaScript
/**
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License", destination); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.hasAttribute = hasAttribute;
exports.hasClass = hasClass;
exports.hasNotClass = hasNotClass;
exports.hasElement = hasElement;
exports.fromAttribute = fromAttribute;
exports.fromText = fromText;
exports.findBestContainingElement = findBestContainingElement;
function hasAttribute(attr, value, locator) {
return async (el) => {
el = locator ? await el.findElement(locator) : el;
const attrValue = await el.getAttribute(attr);
if (value === undefined) {
return attrValue !== null;
}
return attrValue === value;
};
}
function hasClass(classOrPredicate, locator) {
return async (el) => {
el = locator ? await el.findElement(locator) : el;
const klasses = await el.getAttribute('class');
const segments = klasses?.split(/\s+/g);
const predicate = typeof classOrPredicate === 'string' ? (klass) => klass === classOrPredicate : classOrPredicate;
return segments.find(predicate) !== undefined;
};
}
function hasNotClass(klass, locator) {
return async (el) => {
el = locator ? await el.findElement(locator) : el;
return !(await hasClass(klass).call(undefined, el));
};
}
function hasElement(locatorSelector) {
return async (el, locators) => {
return (await el.findElements(locatorSelector(locators))).length > 0;
};
}
function fromAttribute(attribute, locator) {
return async (el) => {
el = locator ? await el.findElement(locator) : el;
return await el.getAttribute(attribute);
};
}
function fromText(locator) {
return async (el) => {
el = locator ? await el.findElement(locator) : el;
return await el.getText();
};
}
async function findBestContainingElement(container, testElements) {
const areas = await Promise.all(testElements.map(async (value) => {
const rect = await value.getRect();
const ax = Math.max(container.x, rect.x);
const ay = Math.max(container.y, rect.y);
const bx = Math.min(container.x + container.width, rect.x + rect.width);
const by = Math.min(container.y + container.height, rect.y + rect.height);
return (bx - ax) * (by - ay);
}));
let bestIdx = -1;
for (let i = 0; i < testElements.length; i++) {
if (areas[i] < 0) {
continue;
}
if (bestIdx === -1 || areas[i] > areas[bestIdx]) {
bestIdx = i;
}
}
return bestIdx === -1 ? undefined : testElements[bestIdx];
}
//# sourceMappingURL=locators.js.map
;