UNPKG

selenium-webdriver

Version:

The official WebDriver JavaScript bindings from the Selenium project

154 lines (153 loc) 4.56 kB
// GENERATED CODE - DO NOT EDIT module.exports = (function (element, attribute) { const PROPERTY_ALIASES = { 'class': 'className', 'readonly': 'readOnly', }; const BOOLEAN_PROPERTIES = new Set([ 'allowfullscreen', 'allowpaymentrequest', 'allowusermedia', 'async', 'autofocus', 'autoplay', 'checked', 'compact', 'complete', 'controls', 'declare', 'default', 'defaultchecked', 'defaultselected', 'defer', 'disabled', 'ended', 'formnovalidate', 'hidden', 'indeterminate', 'iscontenteditable', 'ismap', 'itemscope', 'loop', 'multiple', 'muted', 'nohref', 'nomodule', 'noresize', 'noshade', 'novalidate', 'nowrap', 'open', 'paused', 'playsinline', 'pubdate', 'readonly', 'required', 'reversed', 'scoped', 'seamless', 'seeking', 'selected', 'truespeed', 'typemustmatch', 'willvalidate', ]); function getAttribute(element, attributeName) { return element.getAttribute(attributeName.toLowerCase()); } function getProperty(element, propertyName) { return element[propertyName]; } function isElement(node, tagName) { const elem = node; if (!elem || elem.nodeType !== 1) { return false; } if (!tagName) { return true; } const normalizedTag = tagName.toUpperCase(); if (node instanceof HTMLFormElement) { return normalizedTag === 'FORM'; } return typeof elem.tagName === 'string' && elem.tagName.toUpperCase() === normalizedTag; } function isSelectable(element) { if (isElement(element, 'OPTION')) { return true; } if (isElement(element, 'INPUT')) { const type = element.type.toLowerCase(); return type === 'checkbox' || type === 'radio'; } return false; } function isSelected(element) { var _a; if (isElement(element, 'OPTION')) { return element.selected; } const type = (_a = element.type) === null || _a === void 0 ? void 0 : _a.toLowerCase(); if (type === 'checkbox' || type === 'radio') { return element.checked; } return false; } function isObject(value) { return value !== null && (typeof value === 'object' || typeof value === 'function'); } const name = attribute.toLowerCase(); if (name === 'style') { const style = element.style; if (!style) { return null; } return typeof style === 'string' ? style : style.cssText; } if ((name === 'selected' || name === 'checked') && isSelectable(element)) { return isSelected(element) ? 'true' : null; } const isLink = isElement(element, 'A'); const isImg = isElement(element, 'IMG'); if ((isImg && name === 'src') || (isLink && name === 'href')) { const attrValue = getAttribute(element, name); if (attrValue) { return String(getProperty(element, name)); } return attrValue; } if (name === 'spellcheck') { const attrValue = getAttribute(element, name); if (attrValue !== null) { const lower = attrValue.toLowerCase(); if (lower === 'false') { return 'false'; } if (lower === 'true') { return 'true'; } } return String(getProperty(element, name)); } const propName = PROPERTY_ALIASES[name] || attribute; if (BOOLEAN_PROPERTIES.has(name)) { const hasAttr = element.getAttribute(name) !== null; const propValue = getProperty(element, propName); return hasAttr || !!propValue ? 'true' : null; } if (name === 'value' && isElement(element, 'LI')) { const attrValue = element.getAttribute(name); return attrValue != null ? attrValue : null; } let property; try { property = getProperty(element, propName); } catch (_e) { } if (property == null || isObject(property)) { const attrValue = element.getAttribute(name); return attrValue != null ? attrValue : null; } return property != null ? String(property) : null; });