How to use isTextNode method in Playwright Internal

Best JavaScript code snippet using playwright-internal

Element.js

Source:Element.js Github

copy

Full Screen

...99 * 将目标节点添加到当前元素中100 * @param ele101 */102 childrenNodesAppend(ele) {103 if (!this.isTextNode()) {104 ele.childrenNodes().forEach(i => this.append(i));105 }106 return this;107 }108 /**109 * 将目标节点添加到当前元素中110 * @param ele111 */112 childrenNodesPrepend(ele) {113 if (!this.isTextNode()) {114 ele.childrenNodes().forEach(i => this.prepend(i));115 }116 return this;117 }118 /**119 * 在当前元素中插入指定节点120 * @param ele121 */122 append(ele) {123 if (!this.isTextNode()) {124 if (ele && ele.el) {125 this.el.append(ele.el);126 }127 }128 return this;129 }130 /**131 * 在当前元素中插入指定节点132 * @param ele133 */134 prepend(ele) {135 if (!this.isTextNode()) {136 if (ele && ele.el) {137 this.el.prepend(ele.el);138 }139 }140 return this;141 }142 /**143 * 元素定位144 * @param value145 * @returns {{top: *, left: *, width: *, height: *}|Element}146 */147 offset(value) {148 if (value !== undefined) {149 Object.keys(value).forEach((k) => {150 this.css(k, `${value[k]}px`);151 });152 return this;153 }154 const { offsetTop, offsetLeft } = this.el;155 const { offsetHeight, offsetWidth } = this.el;156 return {157 top: offsetTop,158 left: offsetLeft,159 height: offsetHeight,160 width: offsetWidth,161 };162 }163 /**164 * 获取当前元素的父节点165 * @returns {Element}166 */167 parent() {168 return this.el.parentNode169 ? new Element(this.el.parentNode) : null;170 }171 /**172 * 添加Class名称173 * @param name174 * @returns {Element}175 */176 addClass(name) {177 if (!this.isTextNode()) {178 this.el.classList.add(name);179 }180 return this;181 }182 /**183 * 是否具有指定Class名称184 * @param name185 * @returns {boolean}186 */187 hasClass(name) {188 if (!this.isTextNode()) {189 return this.el.classList.contains(name);190 }191 return false;192 }193 /**194 * 是否有子元素195 * @returns {boolean}196 */197 hasChildElement() {198 return this.children().length > 0;199 }200 /**201 * 是否有子节点202 * @returns {boolean}203 */204 hasChild() {205 return this.childrenNodes().length > 0;206 }207 /**208 * 删除Class名称209 * @param name210 * @returns {Element}211 */212 removeClass(name) {213 if (!this.isTextNode()) {214 this.el.classList.remove(name);215 }216 return this;217 }218 /**219 * 获取元素坐标信息220 * getBoundingClientRect221 * @returns {DOMRect}222 */223 box() {224 if (!this.isTextNode()) {225 return this.el.getBoundingClientRect();226 }227 return null;228 }229 /**230 * 获取当前第一个子元素231 * @returns {*}232 */233 first() {234 if (!this.isTextNode()) {235 return Element.wrapElement(this.el.firstChild);236 }237 return null;238 }239 /**240 * 获取最后一个子元素241 * @returns {*}242 */243 last() {244 if (!this.isTextNode()) {245 return Element.wrapElement(this.el.lastChild);246 }247 return null;248 }249 /**250 * 获取第一个文本节点251 */252 firstTextNode() {253 if (this.isTextNode()) {254 return this;255 }256 let find = null;257 let handle = (elem) => {258 if (elem.hasChild()) {259 elem.childrenNodes().forEach((elem) => {260 if (find === null) {261 handle(elem);262 }263 });264 }265 if (find === null) {266 if (elem.isTextNode()) {267 find = elem;268 }269 }270 };271 handle(this);272 return find;273 }274 /**275 * 获取最后一个文本节点276 */277 lastTextNode() {278 if (this.isTextNode()) {279 return this;280 }281 let find = null;282 let handle = (elem) => {283 if (elem.hasChild()) {284 elem.childrenNodes().reverse().forEach((elem) => {285 if (find === null) {286 handle(elem);287 }288 });289 }290 if (find === null) {291 if (elem.isTextNode()) {292 find = elem;293 }294 }295 };296 handle(this);297 return find;298 }299 /**300 * 删除当前元素下的子元素301 * @param target302 * @returns {boolean|ActiveX.IXMLDOMNode|*}303 */304 remove(target = null) {305 if (target) {306 if (!this.isTextNode()) {307 this.el.removeChild(target.el || target);308 }309 } else {310 const parent = this.parent();311 if (parent) {312 this.parent().remove(this);313 }314 }315 return this;316 }317 /**318 * 当前元素是否包含指定节点319 * @param ele320 * @returns {boolean|*}321 */322 contains(ele) {323 if (this.isTextNode()) {324 return false;325 }326 return this.el.contains(ele.el);327 }328 /**329 * 获取当前元素的上一个元素330 * @returns {*}331 */332 prev() {333 return this.el.previousSibling334 ? Element.wrapElement(this.el.previousSibling) : null;335 }336 /**337 * 获取当前元素的下一个元素338 * @returns {*}339 */340 next() {341 return this.el.nextSibling342 ? Element.wrapElement(this.el.nextSibling) : null;343 }344 /**345 * 设置元素的激活状态346 * @param flag347 * @param cls348 * @returns {Element}349 */350 active(flag = true, cls = 'active') {351 if (!this.isTextNode()) {352 if (flag) this.addClass(cls);353 else this.removeClass(cls);354 }355 return this;356 }357 /**358 * 设置元素文本359 * @param text360 * @returns {string|Element}361 */362 text(text) {363 if (this.isTextNode()) {364 return this.nodeValue();365 }366 if (text !== undefined) {367 this.el.innerText = text;368 return this;369 }370 return this.el.innerText;371 }372 /**373 * 设置元素html内容374 * @param html375 * @returns {Element|*}376 */377 html(html) {378 if (this.isTextNode()) {379 return this.nodeValue();380 }381 if (html !== undefined) {382 this.el.innerHTML = html;383 return this;384 }385 return this.el.innerHTML;386 }387 /**388 * 当前元素设置焦点389 */390 focus() {391 if (!this.isTextNode()) {392 this.el.focus();393 }394 return this;395 }396 /**397 * 移除焦点398 */399 blur() {400 if (!this.isTextNode()) {401 this.el.blur();402 }403 return this;404 }405 /**406 * 删除元素属性407 * @param key408 * @returns {Element}409 */410 removeAttr(key) {411 if (!this.isTextNode()) {412 this.el.removeAttribute(key);413 }414 return this;415 }416 /**417 * 添加style418 * @param style419 */420 style(style) {421 if (!this.isTextNode()) {422 this.attr('style', style);423 }424 return this;425 }426 /**427 * 添加元素属性428 * @param key429 * @param value430 * @returns {string|Element}431 */432 attr(key, value) {433 if (!this.isTextNode()) {434 if (value !== undefined) {435 if (this.el.setAttribute) {436 this.el.setAttribute(key, value);437 }438 } else {439 if (typeof key === 'string') {440 if (this.el.setAttribute) {441 return this.el.getAttribute(key);442 }443 return null;444 }445 if (this.el.setAttribute) {446 Object.keys(key).forEach((k) => {447 this.el.setAttribute(k, key[k]);448 });449 }450 }451 }452 return this;453 }454 /**455 * 设置元素Value456 * @param v457 * @returns {Element|*}458 */459 val(v) {460 if (!this.isTextNode()) {461 if (v !== undefined) {462 this.el.value = v;463 return this;464 }465 return this.el.value;466 }467 if (v === undefined) {468 return this.nodeValue();469 }470 return this;471 }472 /**473 * 获取原始节点474 * @returns {*}475 */476 get() {477 return this.el;478 }479 /**480 * 删除元素style属性481 * @param keys482 * @returns {Element}483 */484 cssRemoveKeys(...keys) {485 if (!this.isTextNode()) {486 if (this.el.style) {487 keys.forEach((k) => {488 if (this.el.style) {489 this.el.style.removeProperty(Element.hyphenateRE(k));490 }491 });492 }493 }494 return this;495 }496 /**497 * 删除元素style属性498 * @param key499 * @param value500 * @returns {Element}501 */502 cssRemoveVal(key, value) {503 if (!this.isTextNode()) {504 if (this.el.style) {505 const property = Element.hyphenateRE(key);506 const propertyValue = this.el.style.getPropertyValue(property);507 const newValue = propertyValue.replace(value, '');508 this.css(key, newValue);509 }510 }511 return this;512 }513 /**514 * 设置元素属性515 * @param name516 * @param value517 * @returns {Element|*}518 */519 css(name, value) {520 if (!this.isTextNode()) {521 if (this.el.style) {522 if (value === undefined && typeof name !== 'string') {523 Object.keys(name).forEach((key) => {524 const property = Element.hyphenateRE(key);525 this.el.style.setProperty(property, name[key]);526 });527 return this;528 }529 if (value !== undefined) {530 const property = Element.hyphenateRE(name);531 this.el.style.setProperty(property, value);532 return this;533 }534 const property = Element.hyphenateRE(name);535 return this.el.style.getPropertyValue(property);536 }537 }538 return null;539 }540 /**541 * 获取元素计算完成的样式542 * @returns {CSSStyleDeclaration}543 */544 computedStyle() {545 if (!this.isTextNode()) {546 return window.getComputedStyle(this.el, null);547 }548 return null;549 }550 /**551 * 显示552 * @returns {Element}553 */554 show() {555 if (!this.isTextNode()) {556 const style = this.computedStyle();557 if (style && style.display !== 'block') {558 this.css('display', 'block');559 }560 }561 return this;562 }563 /**564 * 隐藏565 * @returns {Element}566 */567 hide() {568 if (!this.isTextNode()) {569 const style = this.computedStyle();570 if (style && style.display !== 'none') {571 this.css('display', 'none');572 }573 }574 return this;575 }576 /**577 * 事件触发578 * @param type579 * @param message580 */581 trigger(type, message) {582 if (!this.isTextNode()) {583 switch (type) {584 case 'click': {585 const evt = new MouseEvent(type, {586 detail: message,587 bubbles: true,588 cancelable: false,589 });590 evt.initEvent('click', true, true);591 this.el.dispatchEvent(evt);592 break;593 }594 default: {595 const evt = new CustomEvent(type, {596 detail: message,597 bubbles: true,598 cancelable: false,599 });600 this.el.dispatchEvent(evt);601 break;602 }603 }604 }605 }606 /**607 * 查找子元素608 * @param select609 * @returns {[]|Element}610 */611 find(select) {612 if (!this.isTextNode()) {613 const result = this.el.querySelectorAll(select);614 if (result && result.length === 1) {615 return new Element(result[0]);616 }617 const array = [];618 if (result) {619 for (const item of result) {620 array.push(new Element(item));621 }622 }623 return array;624 }625 return [];626 }627 /**628 * 查找子元素629 * @param select630 * @returns {[]|Element}631 */632 finds(select) {633 if (!this.isTextNode()) {634 const result = this.el.querySelectorAll(select);635 const array = [];636 if (result) {637 for (const item of result) {638 array.push(new Element(item));639 }640 }641 return array;642 }643 return [];644 }645 /**646 * 获取当前元素的兄弟节点647 * @returns {[]}648 */649 sibling() {650 let sibling = this.el;651 const result = [];652 // eslint-disable-next-line no-cond-assign653 while ((sibling = sibling.previousElementSibling) !== null) result.push(new Element(sibling));654 sibling = this.el;655 // eslint-disable-next-line no-cond-assign656 while ((sibling = sibling.nextElementSibling) !== null) result.push(new Element(sibling));657 return result;658 }659 /**660 * 节点名称661 * @returns {string}662 */663 tagName() {664 return this.el.nodeName.toLocaleLowerCase();665 }666 /**667 * 节点内容668 * @returns {string}669 */670 nodeValue() {671 return this.el.nodeValue;672 }673 /**674 * 节点类型675 * @returns {number}676 */677 nodeType() {678 return this.el.nodeType;679 }680 /**681 * 在当前元素之后插入新元素682 * @param ele683 */684 after(ele) {685 if (this.el && ele && ele.el) {686 this.el.after(ele.el);687 }688 return this;689 }690 /**691 * 在当前元素之前插入新元素692 * @param ele693 */694 before(ele) {695 if (this.el && ele && ele.el) {696 this.el.before(ele.el);697 }698 return this;699 }700 /**701 * 复制702 */703 clone() {704 return new Element(this.el.cloneNode(true));705 }706 /**707 * 清空元素中的所有内容708 */709 empty() {710 if (!this.isTextNode()) {711 this.html('');712 }713 return this;714 }715 /**716 * 相等比较717 * @param other718 * @returns {boolean}719 */720 equals(other) {721 return this.el === other.el;722 }723 /**724 * 获取当前元素在父元素中的索引725 * @returns {number}726 */727 index() {728 let parent = this.parent();729 let index = -1;730 parent.childrenNodes()731 .forEach((v, i) => {732 if (v.equals(this)) {733 index = i;734 }735 });736 return index;737 }738 /**739 * 比较dom是否相同740 * @param ele741 * @returns {boolean}742 */743 is(ele) {744 return this.el === ele.el;745 }746 /**747 * 是否文本节点748 * @returns {boolean}749 */750 isTextNode() {751 return this.tagName() === '#text';752 }753 /**754 * 是否换行节点755 * @returns {boolean}756 */757 isBreakNode() {758 return this.tagName() === 'br';759 }760 /**761 * 是否文档碎片762 * @returns {boolean}763 */764 isDocumentFragment() {...

Full Screen

Full Screen

hero.js

Source:hero.js Github

copy

Full Screen

1var raf = typeof window !== 'undefined' && window.requestAnimationFrame || setTimeout;2var nextFrame = function nextFrame(fn) {3 raf(function () {4 raf(fn);5 });6};7function setNextFrame(obj, prop, val) {8 nextFrame(function () {9 obj[prop] = val;10 });11}12function getTextNodeRect(textNode) {13 var rect;14 if (document.createRange) {15 var range = document.createRange();16 range.selectNodeContents(textNode);17 if (range.getBoundingClientRect) {18 rect = range.getBoundingClientRect();19 }20 }21 return rect;22}23function calcTransformOrigin(isTextNode, textRect, boundingRect) {24 if (isTextNode) {25 if (textRect) {26 //calculate pixels to center of text from left edge of bounding box27 var relativeCenterX = textRect.left + textRect.width / 2 - boundingRect.left;28 var relativeCenterY = textRect.top + textRect.height / 2 - boundingRect.top;29 return relativeCenterX + 'px ' + relativeCenterY + 'px';30 }31 }32 return '0 0'; //top left33}34function getTextDx(oldTextRect, newTextRect) {35 if (oldTextRect && newTextRect) {36 return oldTextRect.left + oldTextRect.width / 2 - (newTextRect.left + newTextRect.width / 2);37 }38 return 0;39}40function getTextDy(oldTextRect, newTextRect) {41 if (oldTextRect && newTextRect) {42 return oldTextRect.top + oldTextRect.height / 2 - (newTextRect.top + newTextRect.height / 2);43 }44 return 0;45}46function isTextElement(elm) {47 return elm.childNodes.length === 1 && elm.childNodes[0].nodeType === 3;48}49var removed, created;50function pre() {51 removed = {};52 created = [];53}54function create(oldVnode, vnode) {55 var hero = vnode.data.hero;56 if (hero && hero.id) {57 created.push(hero.id);58 created.push(vnode);59 }60}61function destroy(vnode) {62 var hero = vnode.data.hero;63 if (hero && hero.id) {64 var elm = vnode.elm;65 vnode.isTextNode = isTextElement(elm); //is this a text node?66 vnode.boundingRect = elm.getBoundingClientRect(); //save the bounding rectangle to a new property on the vnode67 vnode.textRect = vnode.isTextNode ? getTextNodeRect(elm.childNodes[0]) : null; //save bounding rect of inner text node68 var computedStyle = window.getComputedStyle(elm, void 0); //get current styles (includes inherited properties)69 vnode.savedStyle = JSON.parse(JSON.stringify(computedStyle)); //save a copy of computed style values70 removed[hero.id] = vnode;71 }72}73function post() {74 var i, id, newElm, oldVnode, oldElm, hRatio, wRatio, oldRect, newRect, dx, dy, origTransform, origTransition, newStyle, oldStyle, newComputedStyle, isTextNode, newTextRect, oldTextRect;75 for (i = 0; i < created.length; i += 2) {76 id = created[i];77 newElm = created[i + 1].elm;78 oldVnode = removed[id];79 if (oldVnode) {80 isTextNode = oldVnode.isTextNode && isTextElement(newElm); //Are old & new both text?81 newStyle = newElm.style;82 newComputedStyle = window.getComputedStyle(newElm, void 0); //get full computed style for new element83 oldElm = oldVnode.elm;84 oldStyle = oldElm.style; //Overall element bounding boxes85 newRect = newElm.getBoundingClientRect();86 oldRect = oldVnode.boundingRect; //previously saved bounding rect87 //Text node bounding boxes & distances88 if (isTextNode) {89 newTextRect = getTextNodeRect(newElm.childNodes[0]);90 oldTextRect = oldVnode.textRect;91 dx = getTextDx(oldTextRect, newTextRect);92 dy = getTextDy(oldTextRect, newTextRect);93 } else {94 //Calculate distances between old & new positions95 dx = oldRect.left - newRect.left;96 dy = oldRect.top - newRect.top;97 }98 hRatio = newRect.height / Math.max(oldRect.height, 1);99 wRatio = isTextNode ? hRatio : newRect.width / Math.max(oldRect.width, 1); //text scales based on hRatio100 // Animate new element101 origTransform = newStyle.transform;102 origTransition = newStyle.transition;103 if (newComputedStyle.display === 'inline') newStyle.display = 'inline-block'; //this does not appear to have any negative side effects104 newStyle.transition = origTransition + 'transform 0s';105 newStyle.transformOrigin = calcTransformOrigin(isTextNode, newTextRect, newRect);106 newStyle.opacity = '0';107 newStyle.transform = origTransform + 'translate(' + dx + 'px, ' + dy + 'px) ' + 'scale(' + 1 / wRatio + ', ' + 1 / hRatio + ')';108 setNextFrame(newStyle, 'transition', origTransition);109 setNextFrame(newStyle, 'transform', origTransform);110 setNextFrame(newStyle, 'opacity', '1'); // Animate old element111 for (var key in oldVnode.savedStyle) {112 if (parseInt(key) != key) {113 var ms = key.substring(0, 2) === 'ms';114 var moz = key.substring(0, 3) === 'moz';115 var webkit = key.substring(0, 6) === 'webkit';116 if (!ms && !moz && !webkit) oldStyle[key] = oldVnode.savedStyle[key];117 }118 }119 oldStyle.position = 'absolute';120 oldStyle.top = oldRect.top + 'px'; //start at existing position121 oldStyle.left = oldRect.left + 'px';122 oldStyle.width = oldRect.width + 'px'; //Needed for elements who were sized relative to their parents123 oldStyle.height = oldRect.height + 'px'; //Needed for elements who were sized relative to their parents124 oldStyle.margin = '0'; //Margin on hero element leads to incorrect positioning125 oldStyle.transformOrigin = calcTransformOrigin(isTextNode, oldTextRect, oldRect);126 oldStyle.transform = '';127 oldStyle.opacity = '1';128 document.body.appendChild(oldElm);129 setNextFrame(oldStyle, 'transform', 'translate(' + -dx + 'px, ' + -dy + 'px) scale(' + wRatio + ', ' + hRatio + ')'); //scale must be on far right for translate to be correct130 setNextFrame(oldStyle, 'opacity', '0');131 oldElm.addEventListener('transitionend', function (ev) {132 if (ev.propertyName === 'transform') document.body.removeChild(ev.target);133 });134 }135 }136 removed = created = undefined;137}138export var heroModule = {139 pre: pre,140 create: create,141 destroy: destroy,142 post: post143};...

Full Screen

Full Screen

components.tabularList.js

Source:components.tabularList.js Github

copy

Full Screen

1/*2 * Copyright (C) 2005 - 2014 TIBCO Software Inc. All rights reserved.3 * http://www.jaspersoft.com.4 *5 * Unless you have purchased a commercial license agreement from Jaspersoft,6 * the following license terms apply:7 *8 * This program is free software: you can redistribute it and/or modify9 * it under the terms of the GNU Affero General Public License as10 * published by the Free Software Foundation, either version 3 of the11 * License, or (at your option) any later version.12 *13 * This program is distributed in the hope that it will be useful,14 * but WITHOUT ANY WARRANTY; without even the implied warranty of15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the16 * GNU Affero General Public License for more details.17 *18 * You should have received a copy of the GNU Affero General Public License19 * along with this program. If not, see <http://www.gnu.org/licenses/>.20 */21/**22 * @version: $Id: components.tabularList.js 47331 2014-07-18 09:13:06Z kklein $23 */24Element.addMethods({25 isTextNode: function(element) {26 element = $(element);27 return element.childElements().length == 0 && element.innerHTML.strip().length > 0;28 }29});30var TabularList = Class.create({31 initialize: function(tableId) {32 if(!tableId){33 this.tableId = 'resultsTable';34 } else {35 this.tableId = tableId;36 }37 },38 truncText: function() {39 //find all the nodes in the table that have text40 var textNodes = $$("#" + this.tableId + " .name *").findAll(Element.isTextNode);41 new Truncator(textNodes);42 $$("td.name").each(function (td) {43 td.setAttribute("nowrap", "nowrap");44 });45 textNodes = $$("#" + this.tableId + " .description *").findAll(Element.isTextNode);46 new Truncator(textNodes);47 $$("td.description").each(function (td) {48 td.setAttribute("nowrap", "nowrap");49 });50 textNodes = $$("#" + this.tableId + " .path *").findAll(Element.isTextNode);51 new Truncator(textNodes);52 $$("td.path").each(function (td) {53 td.setAttribute("nowrap", "nowrap");54 });55 textNodes = $$("#" + this.tableId + " .modifiedDate *").findAll(Element.isTextNode);56 new Truncator(textNodes);57 $$("td.modifiedDate").each(function (td) {58 td.setAttribute("nowrap", "nowrap");59 });60 },61 untruncText: function() {62 //find all the nodes in the table that have text63 var textNodes = $$("#" + this.tableId + " .name *").findAll(Element.isTextNode);64 new Truncator().untruncate(textNodes);65 $$("td.name").each(function (td) {66 td.removeAttribute("nowrap");67 });68 textNodes = $$("#" + this.tableId + " .description *").findAll(Element.isTextNode);69 new Truncator().untruncate(textNodes);70 $$("td.description").each(function (td) {71 td.removeAttribute("nowrap");72 });73 textNodes = $$("#" + this.tableId + " .objectPath *").findAll(Element.isTextNode);74 new Truncator(textNodes, 30);75// new Truncator().untruncate(textNodes);76 $$("td.path").each(function (td) {77 td.removeAttribute("nowrap");78 });79 textNodes = $$("#" + this.tableId + " .modifiedDate *").findAll(Element.isTextNode);80 new Truncator().untruncate(textNodes);81 $$("td.modifiedDate").each(function (td) {82 td.removeAttribute("nowrap");83 });84 },85 _isTextNode: function(node) {86 return node.childElements().length == 0 && node.innerHTML.strip().length > 0;87 }...

Full Screen

Full Screen

utils.js

Source:utils.js Github

copy

Full Screen

...3}4export function sameSign(a, b) {5 return a > 0 && b > 0 || a < 0 && b < 0;6}7export function isTextNode(el) {8 return el.nodeType === 3;9}10export function closest(el, s, limit) {11 if (isTextNode(el)) {12 el = el.parentNode;13 }14 if (!limit.contains(el)) return null;15 do {16 if (!el || !el.matches) {17 debugger18 }19 if (el.matches(s)) return el;20 el = el.parentElement;21 } while (el !== limit);22 return null;23};24export function setDataset(el, vs) {25 el.dataset[vs[0]] = vs[1];26}27export function eqDataset(el, vs) {28 return el.dataset && el.dataset[vs[0]] === vs[1];29}30export function getEqDatasetQuery(vs) {31 return `[data-${vs[0]}=${vs[1]}]`;32}33function traverseNode(n, datasetMap, fn) {34 if (isTextNode(n) || eqDataset(n, datasetMap.void)) {35 return fn(n);;36 }37 let ret = false;;38 if (n.childNodes) {39 for (const c of n.childNodes) {40 ret = traverseNode(c, datasetMap, fn);41 if (ret) {42 break;43 }44 }45 }46 return ret;47}48export function findNodesInBlock(p, datasetMap, { start, end }) {49 const nodes = [];50 let started = !start;51 traverseNode(p, datasetMap, (n) => {52 if (n === start) {53 started = true;54 }55 if (started) {56 let nn = n;57 if (isTextNode(nn)) {58 nn = nn.parentNode;59 }60 nodes.push(nn);61 }62 if (n === end) {63 started = false;64 return true;65 }66 });67 return nodes;68}69export function getChildElement(parent, index) {70 return parent && parent.childNodes && parent.childNodes[index];71}72export function px(i) {73 return i + 'px';74}75export function extendSelection(selection) {76 let { anchorNode, anchorOffset, focusNode, focusOffset } = selection;77 let anchorElement = anchorNode;78 if (!isTextNode(anchorElement)) {79 anchorElement = anchorNode.childNodes[anchorOffset];80 }81 let focusElement = focusNode;82 if (!isTextNode(focusElement)) {83 focusElement = focusNode.childNodes[focusOffset];84 }85 return {86 ...selection,87 focusElement,88 anchorElement,89 };90}91export function eqSelection(s1, s2) {92 return s1.focusNode === s2.focusNode &&93 s1.anchorNode === s2.anchorNode &&94 s1.focusOffset === s2.focusOffset &&95 s1.anchorOffset === s2.anchorOffset;96}97export function isVoidSelected(selection) {98 if (!selection) {99 return false;100 }101 const { focusNode, focusElement, anchorElement } = extendSelection(selection);102 return (!isTextNode(focusNode) && focusElement === anchorElement);...

Full Screen

Full Screen

isTextNode.js

Source:isTextNode.js Github

copy

Full Screen

23export default describe("Framework/TypeChecks/isTextNode", function() {4 //TRUE5 it("should return true if argument is a text node", function() {6 expect(isTextNode(document.createTextNode('text node'))).toBe(true);7 });8 //FALSE9 it("should return false if argument is a function", function() {10 expect(isTextNode(function(){})).toBe(false);11 });12 it("should return false if argument is an arrow function", function() {13 expect(isTextNode(() => {})).toBe(false);14 });15 it("should return false if argument is a class", function() {16 expect(isTextNode(class A {})).toBe(false);17 });18 it("should return false if argument is a string", function() {19 expect(isTextNode("a string")).toBe(false);20 });21 it("should return false if argument is object", function() {22 expect(isTextNode({})).toBe(false);23 });24 it("should return false if argument is array", function() {25 expect(isTextNode([])).toBe(false);26 });27 it("should return false if argument is a number = 1", function() {28 expect(isTextNode(1)).toBe(false);29 });30 it("should return false if argument is a number = 0", function() {31 expect(isTextNode(0)).toBe(false);32 });33 it("should return false if argument is a number = NaN", function() {34 expect(isTextNode(NaN)).toBe(false);35 });36 it("should return false if argument is a number = Infinity", function() {37 expect(isTextNode(Infinity)).toBe(false);38 });39 it("should return false if argument is a number = -Infinity", function() {40 expect(isTextNode(-Infinity)).toBe(false);41 });42 it("should return false if argument is a number = -1", function() {43 expect(isTextNode(-1)).toBe(false);44 });45 it("should return false if argument is undefined", function() {46 expect(isTextNode(undefined)).toBe(false);47 });48 it("should return false if argument is boolean = false", function() {49 expect(isTextNode(false)).toBe(false);50 });51 it("should return false if argument is boolean = true", function() {52 expect(isTextNode(true)).toBe(false);53 }); ...

Full Screen

Full Screen

isTextNode-test.js

Source:isTextNode-test.js Github

copy

Full Screen

...8 */9var isTextNode = require('isTextNode');10describe('isTextNode', () => {11 it('should reject strings', () => {12 expect(isTextNode('')).toBe(false);13 expect(isTextNode('a real string')).toBe(false);14 });15 it('should accept text nodes from DOM', () => {16 var span = document.createElement('span');17 span.innerHTML = '<b>some text</b>';18 document.body.appendChild(span);19 var textnode = document.body.lastChild.firstChild.firstChild;20 try {21 expect(isTextNode(textnode)).toBe(true);22 } finally {23 document.body.removeChild(span);24 }25 });26 it('should accept dynamically created text nodes', () => {27 var textnode = document.createTextNode('some more text');28 expect(isTextNode(textnode)).toBe(true);29 });...

Full Screen

Full Screen

Using AI Code Generation

copy

Full Screen

1const { isTextNode } = require('playwright/lib/server/dom.js');2const { chromium } = require('playwright');3(async () => {4 const browser = await chromium.launch();5 const context = await browser.newContext();6 const page = await context.newPage();7 const textNodes = await page.$$('body *');8 const node = textNodes.find(isTextNode);9 await node.evaluate(e => e.textContent = 'Hello!');10 await page.screenshot({ path: 'example.png' });11 await browser.close();12})();

Full Screen

Using AI Code Generation

copy

Full Screen

1const { isTextNode } = require('playwright/lib/utils/dom');2const { chromium } = require('playwright');3(async () => {4 const browser = await chromium.launch();5 const context = await browser.newContext();6 const page = await context.newPage();7 const firstTextNode = await page.$eval('body', (element) => {8 for (const node of element.childNodes) {9 if (isTextNode(node)) {10 return node.textContent;11 }12 }13 });14 console.log(firstTextNode);15 await browser.close();16})();

Full Screen

Using AI Code Generation

copy

Full Screen

1const { isTextNode } = require('playwright/lib/web/dom.js');2const { chromium } = require('playwright');3(async () => {4 const browser = await chromium.launch();5 const page = await browser.newPage();6 const elementHandle = await page.$('input[name="q"]');7 const isTextNode = await elementHandle.evaluate((node) => {8 return isTextNode(node);9 });10 console.log(isTextNode);11 await browser.close();12})();

Full Screen

Using AI Code Generation

copy

Full Screen

1const { isTextNode } = require('playwright/lib/client/selectorEngine');2const { chromium } = require('playwright');3const fs = require('fs');4(async () => {5 const browser = await chromium.launch();6 const context = await browser.newContext();7 const page = await context.newPage();8 const handle = await page.$('input[name="q"]');9 const node = await handle.evaluateHandle((node) => node);10 const isTextNode = await node.evaluate((node) => node.nodeType === 3);11 console.log(isTextNode);12 await browser.close();13})();14const { isTextNode } = require('playwright/lib/client/selectorEngine');15const { chromium } = require('playwright');16const fs = require('fs');17(async () => {18 const browser = await chromium.launch();19 const context = await browser.newContext();20 const page = await context.newPage();21 const handle = await page.$('input[name="q"]');22 const node = await handle.evaluateHandle((node) => node);23 const isTextNode = await node.evaluate((node) => node.nodeType === 3);24 console.log(isTextNode);25 await browser.close();26})();27const { isTextNode } = require('playwright/lib/client/selectorEngine');28const { chromium } = require('playwright');29const fs = require('fs');30(async () => {31 const browser = await chromium.launch();32 const context = await browser.newContext();33 const page = await context.newPage();34 const handle = await page.$('input[name="q"]');35 const node = await handle.evaluateHandle((node) => node);36 const isTextNode = await node.evaluate((node) => node.nodeType === 3);37 console.log(isTextNode);38 await browser.close();39})();40const { isTextNode } = require('playwright/lib/client/selectorEngine');41const { chromium } = require('playwright');42const fs = require('fs');43(async () => {44 const browser = await chromium.launch();

Full Screen

Using AI Code Generation

copy

Full Screen

1const { isTextNode } = require('@playwright/test/lib/server/dom');2const { test, expect } = require('@playwright/test');3test('isTextNode', async ({ page }) => {4 await page.setContent('<div>hello</div>');5 expect(await page.evaluate(isTextNode, page.locator('div').elementHandle())).toBe(false);6 expect(await page.evaluate(isTextNode, page.locator('div >> text=hello').elementHandle())).toBe(true);7});

Full Screen

Using AI Code Generation

copy

Full Screen

1const { isTextNode } = require('playwright/lib/server/dom.js');2const { chromium } = require('playwright');3(async () => {4 const browser = await chromium.launch({ headless: false });5 const context = await browser.newContext();6 const page = await context.newPage();7 const result = await page.evaluate(() => {8 const textNodes = [];9 const walk = document.createTreeWalker(10 );11 let node;12 while ((node = walk.nextNode())) {13 textNodes.push(node);14 }15 return textNodes.map((node) => node.textContent);16 });17 console.log(result);

Full Screen

Using AI Code Generation

copy

Full Screen

1const { isTextNode } = require('playwright/lib/server/dom.js');2const textNode = document.createTextNode('some text');3const { isElementNode } = require('playwright/lib/server/dom.js');4const element = document.createElement('div');5const { isShadowRoot } = require('playwright/lib/server/dom.js');6const shadowRoot = document.createElement('div').attachShadow({mode: 'open'});7const { isDocument } = require('playwright/lib/server/dom.js');8const document = document;9const { isWindow } = require('playwright/lib/server/dom.js');10const window = window;11const { isEventTarget } = require('playwright/lib/server/dom.js');12const eventTarget = document;13const { isNode } = require('playwright/lib/server/dom.js');14const node = document.body;

Full Screen

Using AI Code Generation

copy

Full Screen

1const { isTextNode } = require('playwright/lib/server/dom.js');2const { test, expect } = require('@playwright/test');3test('isTextNode', async ({ page }) => {4 await page.setContent('<div>Hello</div>');5 const div = await page.$('div');6 expect(await isTextNode(div)).toBe(false);7 const text = await page.evaluateHandle((div) => div.firstChild, div);8 expect(await isTextNode(text)).toBe(true);9});10const { isElementNode } = require('playwright/lib/server/dom.js');11const { test, expect } = require('@playwright/test');12test('isElementNode', async ({ page }) => {13 await page.setContent('<div>Hello</div>');14 const div = await page.$('div');15 expect(await isElementNode(div)).toBe(true);16 const text = await page.evaluateHandle((div) => div.firstChild, div);17 expect(await isElementNode(text)).toBe(false);18});19const { isShadowRoot } = require('playwright/lib/server/dom.js');20const { test, expect } = require('@playwright/test');21test('isShadowRoot', async ({ page }) => {22 await page.setContent('<div>Hello</div>');23 const div = await page.$('div');24 expect(await isShadowRoot(div)).toBe(false);25 const shadow = await page.evaluateHandle((div) => div.attachShadow({mode: 'open'}), div);26 expect(await isShadowRoot(shadow)).toBe(true);27});28const { isDocument } = require('playwright/lib/server/dom.js');29const { test, expect } = require('@playwright/test');30test('isDocument', async ({ page }) => {31 await page.setContent('<div>Hello</div>');32 const div = await page.$('div');33 expect(await isDocument(div)).toBe(false);34 const document = await page.evaluateHandle(() => document);35 expect(await isDocument(document)).toBe(true);36});

Full Screen

Using AI Code Generation

copy

Full Screen

1const { isTextNode } = require('@playwright/test/lib/server/domSnapshot.js');2const { assert } = require('console');3const { test, expect } = require('@playwright/test');4test('isTextNode', async ({ page }) => {5 await page.setContent('<div>Text</div>');6 const div = await page.$('div');7 const text = await page.evaluateHandle((div) => div.firstChild, div);8 expect(await isTextNode(text)).toBe(true);9});10const { isElementNode } = require('@playwright/test/lib/server/domSnapshot.js');11const { assert } = require('console');12const { test, expect } = require('@playwright/test');13test('isElementNode', async ({ page }) => {14 await page.setContent('<div>Text</div>');15 const div = await page.$('div');16 expect(await isElementNode(div)).toBe(true);17});18const { isShadowRoot } = require('@playwright/test/lib/server/domSnapshot.js');19const { assert } = require('console');20const { test, expect } = require('@playwright/test');21test('isShadowRoot', async ({ page }) => {22 await page.setContent('<div>Text</div>');23 const div = await page.$('div');24 const shadow = await page.evaluateHandle((div) => div.attachShadow({ mode: 'open' }), div);25 expect(await isShadowRoot(shadow)).toBe(true);26});27const { isDocumentNode } = require('@playwright/test/lib/server/domSnapshot.js');28const { assert } = require('console');29const { test, expect } = require('@playwright/test');30test('isDocumentNode', async ({ page }) => {31 await page.setContent('<div>Text</div>');32 const document = await page.evaluateHandle(() => document);33 expect(await isDocumentNode(document)).toBe(true);34});35const { isDocumentTypeNode } = require('@playwright/test/lib/server/domSnapshot.js');36const { assert } = require('console');37const { test, expect } =

Full Screen

Playwright tutorial

LambdaTest’s Playwright tutorial will give you a broader idea about the Playwright automation framework, its unique features, and use cases with examples to exceed your understanding of Playwright testing. This tutorial will give A to Z guidance, from installing the Playwright framework to some best practices and advanced concepts.

Chapters:

  1. What is Playwright : Playwright is comparatively new but has gained good popularity. Get to know some history of the Playwright with some interesting facts connected with it.
  2. How To Install Playwright : Learn in detail about what basic configuration and dependencies are required for installing Playwright and run a test. Get a step-by-step direction for installing the Playwright automation framework.
  3. Playwright Futuristic Features: Launched in 2020, Playwright gained huge popularity quickly because of some obliging features such as Playwright Test Generator and Inspector, Playwright Reporter, Playwright auto-waiting mechanism and etc. Read up on those features to master Playwright testing.
  4. What is Component Testing: Component testing in Playwright is a unique feature that allows a tester to test a single component of a web application without integrating them with other elements. Learn how to perform Component testing on the Playwright automation framework.
  5. Inputs And Buttons In Playwright: Every website has Input boxes and buttons; learn about testing inputs and buttons with different scenarios and examples.
  6. Functions and Selectors in Playwright: Learn how to launch the Chromium browser with Playwright. Also, gain a better understanding of some important functions like “BrowserContext,” which allows you to run multiple browser sessions, and “newPage” which interacts with a page.
  7. Handling Alerts and Dropdowns in Playwright : Playwright interact with different types of alerts and pop-ups, such as simple, confirmation, and prompt, and different types of dropdowns, such as single selector and multi-selector get your hands-on with handling alerts and dropdown in Playright testing.
  8. Playwright vs Puppeteer: Get to know about the difference between two testing frameworks and how they are different than one another, which browsers they support, and what features they provide.
  9. Run Playwright Tests on LambdaTest: Playwright testing with LambdaTest leverages test performance to the utmost. You can run multiple Playwright tests in Parallel with the LammbdaTest test cloud. Get a step-by-step guide to run your Playwright test on the LambdaTest platform.
  10. Playwright Python Tutorial: Playwright automation framework support all major languages such as Python, JavaScript, TypeScript, .NET and etc. However, there are various advantages to Python end-to-end testing with Playwright because of its versatile utility. Get the hang of Playwright python testing with this chapter.
  11. Playwright End To End Testing Tutorial: Get your hands on with Playwright end-to-end testing and learn to use some exciting features such as TraceViewer, Debugging, Networking, Component testing, Visual testing, and many more.
  12. Playwright Video Tutorial: Watch the video tutorials on Playwright testing from experts and get a consecutive in-depth explanation of Playwright automation testing.

Run Playwright Internal automation tests on LambdaTest cloud grid

Perform automation testing on 3000+ real desktop and mobile devices online.

Try LambdaTest Now !!

Get 100 minutes of automation test minutes FREE!!

Next-Gen App & Browser Testing Cloud

Was this article helpful?

Helpful

NotHelpful