Best JavaScript code snippet using playwright-internal
transaction.js
Source: transaction.js
...10 // create table display11 var attr_tr_next = {12 'data-id' : tr_id13 };14 var tr_next = Spr.createElm("tr","odd gradeX show-transaction-detail", "", attr_tr_next);15 var td_parent = Spr.createElm("td","", "", "");16 td_parent.setAttribute('colspan',"12");17 18 var table = Spr.createElm("table","table table-striped table-hover", "", "");19 var thead = Spr.createElm("thead","", "", "");20 table.appendChild(thead);21 var tr_thead = Spr.createElm("tr","warning", "", "");22 thead.appendChild(tr_thead);23 // Tao header24 var attr = {25 'style':"font-weight:bold"26 };27 var td_thead = Spr.createElm("td","", "", attr);28 var text = Spr.createTextNode("Product Code");29 td_thead.appendChild(text);30 tr_thead.appendChild(td_thead);31 var attr = {32 'style':"font-weight:bold"33 };34 var td_thead = Spr.createElm("td","", "", attr);35 var text = Spr.createTextNode("Product Name");36 td_thead.appendChild(text);37 tr_thead.appendChild(td_thead);38 var attr = {39 'style':"font-weight:bold"40 };41 var td_thead = Spr.createElm("td","", "", attr);42 var text = Spr.createTextNode("Product Image");43 td_thead.appendChild(text);44 tr_thead.appendChild(td_thead);45 var td_thead = Spr.createElm("td","", "", attr);46 var text = Spr.createTextNode("Order On Amazon");47 td_thead.appendChild(text);48 tr_thead.appendChild(td_thead);49 var td_thead = Spr.createElm("td","", "", attr);50 var text = Spr.createTextNode("Quantity");51 td_thead.appendChild(text);52 tr_thead.appendChild(td_thead);53 var td_thead = Spr.createElm("td","", "", attr);54 var text = Spr.createTextNode("Price Product");55 td_thead.appendChild(text);56 tr_thead.appendChild(td_thead);57 var td_thead = Spr.createElm("td","", "", attr);58 var text = Spr.createTextNode("Discount");59 td_thead.appendChild(text);60 tr_thead.appendChild(td_thead);61 var td_thead = Spr.createElm("td","", "", attr);62 var text = Spr.createTextNode("Total Price");63 td_thead.appendChild(text);64 tr_thead.appendChild(td_thead);65 // Tao Body66 var tbody = Spr.createElm("tbody","", "", "");67 var data = data.response;68 var total_price = 0;69 var total_product = 0;70 var total_discount = 0;71 for(var obj in data){72 total_product ++;73 // du lieu dung chung 74 var price = data[obj].price;75 var discount = data[obj].price_save;76 var quantity = data[obj].quantity;77 //==================================================78 var tr = Spr.createElm("tr","odd gradeX", "", "");79 tbody.appendChild(tr);80 // Create td Product Code .81 var td = Spr.createElm("td","product-code", "", "");82 var attr = {83 'target' : "_blank",84 'href' : '' + window.location.origin +'/dp?code='+ data[obj].product_code + '',85 };86 var a = Spr.createElm('a',"","",attr);87 var text = Spr.createTextNode(data[obj].product_code);88 a.appendChild(text);89 td.appendChild(a);90 tr.appendChild(td);91 // End create td Product Code92 // Create td product name93 var td = Spr.createElm("td","name-product", "", "");94 var text = Spr.createTextNode(data[obj].name);95 td.appendChild(text);96 tr.appendChild(td);97 // End create td product name98 // create td image product99 var td = Spr.createElm("td","name-product", "", attr);100 var attr = {101 'src' : data[obj].img,102 'style' : "width:96px;height:72px",103 };104 var img = Spr.createElm("img","", "", attr); 105 td.appendChild(img);106 tr.appendChild(td);107 // end create td image product108 // Create td Order Product on Amazon109 var td = Spr.createElm("td","product-amazon", "", "");110 var attr = {111 'target' : "_blank",112 'href' : 'https://www.amazon.co.jp/dp/'+ data[obj].product_code + '',113 };114 var a = Spr.createElm('a',"","",attr);115 var text = Spr.createTextNode('View on Amazon');116 a.appendChild(text);117 td.appendChild(a);118 tr.appendChild(td);119 // End td Order Product on Amazon120 // Create td quantity Product121 var td = Spr.createElm("td","quantity-product", "", attr);122 var text = Spr.createTextNode(data[obj].quantity);123 td.appendChild(text);124 tr.appendChild(td); 125 // End create td quantity Product126 // Create td price Product 127 var td = Spr.createElm("td","price-product", "", "");128 var span = Spr.createElm("span","font-red", "","");129 var sup = Spr.createElm("sup","", "", "");130 var text_sup = Spr.createTextNode(" Ä ");131 var text_span = Spr.createTextNode(Helper.formatNumber(Math.floor(price * exchange_rate), 0));132 sup.appendChild(text_sup);133 span.appendChild(text_span);134 span.appendChild(sup);135 td.appendChild(span);136 tr.appendChild(td);137 138 // End create td price Product 139 // Create td discount Product 140 var td = Spr.createElm("td","discount", "", "");141 var span = Spr.createElm("span","font-red", "","");142 var sup = Spr.createElm("sup","", "", "");143 var text_sup = Spr.createTextNode(" Ä ");144 var text_span = Spr.createTextNode(Helper.formatNumber(Math.floor(discount * exchange_rate), 0));145 sup.appendChild(text_sup);146 span.appendChild(text_span);147 span.appendChild(sup);148 td.appendChild(span);149 tr.appendChild(td);150 151 // End create td discount Product 152 // Create td Total price Product 153 var td = Spr.createElm("td","total-price", "", "");154 var span = Spr.createElm("span","font-red", "","");155 var sup = Spr.createElm("sup","", "", "");156 var text_sup = Spr.createTextNode(" Ä ");157 var text_span = Spr.createTextNode(Helper.formatNumber(Math.floor(price * exchange_rate * quantity), 0));158 sup.appendChild(text_sup);159 span.appendChild(text_span);160 span.appendChild(sup);161 td.appendChild(span);162 tr.appendChild(td);163 164 // End create td discount Product in japan165 // Caculator Total166 total_price += (Math.floor(price * exchange_rate * quantity));167 }168 var tr = Spr.createElm("tr","odd gradeX warning", "", "");169 tbody.appendChild(tr);170 var attr = {171 'style':"font-weight:bold"172 };173 var td_total = Spr.createElm("td","total", "", attr);174 td_total.setAttribute('colspan','7');175 var text = Spr.createTextNode('Total :');176 td_total.appendChild(text);177 var td_value = Spr.createElm("td","total", "", ""); 178 var span = Spr.createElm("span","font-red", "","");179 var sup = Spr.createElm("sup","", "", "");180 var text_sup = Spr.createTextNode(" Ä ");181 var text_span = Spr.createTextNode(Helper.formatNumber(total_price, 0));182 sup.appendChild(text_sup);183 span.appendChild(text_span);184 span.appendChild(sup);185 td_value.appendChild(span);186 var td_first = Spr.createElm("td","", "", ""); 187 tr.appendChild(td_total);188 tr.appendChild(td_value); 189 table.appendChild(tbody);190 td_parent.appendChild(table);191 tr_next.appendChild(td_first);192 tr_next.appendChild(td_parent);193 $(tr_next).insertAfter(tr_current);194 }195 }196 var callback_get_data_info = function(data){197 if(data.meta.success){198 $('#transaction-code').text(data.response.code);199 $('#transaction-created-at').text(Spr.format_date(data.response.created_at));200 if(isNaN(data.response.expected_day)==false){...
quizView.js
Source: quizView.js
...81 createButton = (content) => {82 const $msg = document.createElement("button");83 $msg.setAttribute("class", CLS_QUIZ_BOT_BUTTON);84 $msg.innerHTML = content;85 const $inner = this.createElm(CLS_QUIZ_BOT_BUTTON_INNER_BOX);86 const $outer = this.createElm(CLS_QUIZ_BOT_BUTTON_OUTER_BOX);87 $inner.appendChild($msg);88 $outer.appendChild($inner);89 return $outer90 }9192 deleteAllButtons = () => {93 const $btns = document.getElementsByClassName(CLS_QUIZ_BOT_BUTTON_OUTER_BOX);94 for(let $btn of $btns){95 $btn.remove();96 }97 }9899 createUserNameBox = (userName) => {100 const $name = this.createElm(CLS_QUIZ_BOT_BOT_NAME);101 $name.innerHTML = userName;102 const $inner = this.createElm(CLS_QUIZ_BOT_BOT_NAME_INNER_BOX);103 //const $outer = this.createElm(CLS_QUIZ_BOT_BOT_NAME_OUTER_BOX);104 $inner.appendChild($name);105 //$outer.appendChild($inner); 106 return $inner;107 }108109 createBotNameBox = (botName) => {110 const $name = this.createElm(CLS_QUIZ_BOT_BOT_NAME);111 $name.innerHTML = botName;112 const $inner = this.createElm(CLS_QUIZ_BOT_BOT_NAME_INNER_BOX);113 //const $outer = this.createElm(CLS_QUIZ_BOT_BOT_NAME_OUTER_BOX);114 $inner.appendChild($name);115 //$outer.appendChild($inner);116 return $inner;117118 }119120 createInnerBox = () => {121 return this.createElm(CLS_QUIZ_BOT_INNER_BOX);122 }123124 createBotMessage = (msgName, type, subtype, content, botName, putbuttonHere) => {125 const $msg = this.createElm(CLS_QUIZ_BOT_BOT_MESSAGE);126 $msg.setAttribute("id", msgName);127 128 if(type == "one-way-message" && subtype == "link"){129 $msg.innerHTML = this.findMatchMessage(content); 130 } else {131 $msg.innerHTML = content;132 }133 134 const $inner = this.createElm(CLS_QUIZ_BOT_BOT_MESSAGE_INNER_BOX);135 const $outer = this.createElm(CLS_QUIZ_BOT_BOT_MESSAGE_OUTER_BOX);136 const $nameBox = this.createBotNameBox(botName);137 $inner.appendChild($msg);138 $inner.appendChild($nameBox);139 $outer.appendChild($inner);140141 if(putbuttonHere){142 const $btn = this.createButton("Next");143 this.bindButton($btn);144 $outer.appendChild($btn);145 }146 this.$root.appendChild($outer);147 }148 149 createOptions = ($box, name, subtype, options, disabledOptions) => {150 let type;151 if(subtype == "radio") type = "radio";152 else if (subtype == "checkbox") type = "checkbox";153 else console.error("error in createOptions - unsupported type:", subtype);154155 for(let key in options){156 let $option = document.createElement("input");157 let id = name + "@" + key;158 $option.setAttribute("type", type);159 $option.setAttribute("value", key);160 $option.setAttribute("id", id);161 $option.setAttribute("name", name);162 if( key in disabledOptions){163 $option.disabled = true;164 }165 $option.innerHTML = options[key];166 let $wrapper = document.createElement("div");167 $wrapper.appendChild($option)168 let $label = document.createElement("label")169 $label.setAttribute("for", id);170 $label.innerHTML = options[key];171 $wrapper.appendChild($label)172 $box.appendChild($wrapper);173 }174 }175 176 createUserMessage = (msgName, type, subtype, options, disabledOptions, numRetries, userName, putbuttonHere) => {177 let $msg = this.createElm(CLS_QUIZ_BOT_USER_MESSAGE);178 if(type == "multiple-choice") {179 this.createOptions($msg, msgName + numRetries, subtype, options, disabledOptions);180 }181 const $inner = this.createElm(CLS_QUIZ_BOT_USER_MESSAGE_INNER_BOX);182 const $outer = this.createElm(CLS_QUIZ_BOT_USER_MESSAGE_OUTER_BOX);183 const $nameBox = this.createUserNameBox(userName);184 $inner.appendChild($msg);185 $inner.appendChild($nameBox);186 $outer.appendChild($inner);187 if(putbuttonHere) {188 const $btn = this.createButton("Submit");189 this.bindButtonWithOptions($btn, msgName + numRetries);190 $outer.appendChild($btn);191 }192 this.$root.appendChild($outer);193 }194195196 //https://javascript.info/regexp-groups197 findMatchMessage = (text) => {198 const regex = /(?<msg>\[.+?\])(?<address>\(.+?\))/; // something like [Let's go to the next lesson](http://someaddress)199 const match = text.match(regex).groups; 200 return match.msg.substring(1,match.msg.length - 1)201 }202 findMatchAddress = (text) => {203 const regex = /(?<msg>\[.+?\])(?<address>\(.+?\))/; // something like [Let's go to the next lesson](http://someaddress)204 const match = text.match(regex).groups;205 return match.address.substring(1,match.address.length - 1)206 }207 createButtonOnlyUserMessage = (subtype, text) => {208 const $msg = document.createElement("button");209 $msg.setAttribute("class", CLS_QUIZ_BOT_BUTTON);210 if (subtype == "link") {211 $msg.innerHTML = "Next";212 this.bindButtonWithLink($msg, this.findMatchAddress(text));213 } else {214 $msg.innerHTML = "Next";215 this.bindButton($msg);216 }217218 const $inner = this.createElm(CLS_QUIZ_BOT_BUTTON_INNER_BOX);219 const $outer = this.createElm(CLS_QUIZ_BOT_BUTTON_OUTER_BOX);220 const $wrapper = this.createElm(CLS_QUIZ_BOT_USER_MESSAGE_OUTER_BOX);221 $inner.appendChild($msg);222 $outer.appendChild($inner);223 $wrapper.appendChild($outer)224 this.$root.appendChild($wrapper);225 }226227 createHint = (wrongToHints) => {228 console.log(wrongToHints)229 const $msg = this.createElm(CLS_QUIZ_BOT_HINT);230 let text = [];231 for(let key in wrongToHints){232 text.push(wrongToHints[key]);233 }234 console.log(text.join(' '));235 $msg.innerHTML = text.join(' ');236 const $inner = this.createElm(CLS_QUIZ_BOT_HINT_INNER_BOX);237 const $outer = this.createElm(CLS_QUIZ_BOT_HINT_OUTER_BOX);238 $inner.appendChild($msg);239 $outer.appendChild($inner);240 this.$root.appendChild($outer);241 }242243 installBot = ($dom) => {244 $dom.appendChild(this.createInnerBox());245 this.$root = $dom.lastChild;246 }247248 /**249 * 250 * @param {PayloadFromMachine} payload 251 */
...
index.js
Source: index.js
1function createElm(tag, objectCl) {2 const elem = document.createElement(tag);3 for (const key of Object.keys(objectCl)) {4 elem[key] = objectCl[key];5 }6 return elem;7}8function topSections(userData) {9 const headerSec = headerSection(userData);10 container.append(headerSec);11}12function bottomSection(postData, users) {13 console.log("bottom section users", users);14 const feedSec = feedSection(postData, users);15 const createPost = createPostSection(feedSec);16 mainSection.append(createPost, feedSec);17 container.append(mainSection);18}19function userProfile(userData, wrapperEl) {20 const chipEl = createElm("div", { className: "chip" });21 const avatarEl = createElm("div", { className: "avatar-small" });22 const imgEl = createElm("img", {23 src: userData.avatar,24 alt: userData.username,25 });26 const spanEl = createElm("span", { innerText: userData.username });27 avatarEl.append(imgEl);28 chipEl.append(avatarEl, spanEl);29 wrapperEl.append(chipEl);30 return wrapperEl;31}32function headerSection(userData) {33 const headerEl = createElm("header", { className: "main-header" });34 const wrapperEl = createElm("wrapper", { className: "wrapper" });35 for (const user of userData) {36 userProfile(user, wrapperEl);37 }38 headerEl.append(wrapperEl);39 return headerEl;40}41function createPostSection(postAdd) {42 const postSection = createElm("section", {43 className: "create-post-section",44 });45 const formEl = createElm("form", {46 id: "create-post-form",47 autocomplete: "off",48 });49 const h2El = createElm("h2", { innerText: "Create a post" });50 const labelElImage = createElm("label", { for: "image", innerText: "Image" });51 const inputImage = createElm("input", {52 id: "image",53 name: "image",54 type: "text",55 });56 const labelElTitle = createElm("label", { for: "title", innerText: "Title" });57 const inputTitle = createElm("input", {58 id: "title",59 name: "title",60 type: "text",61 });62 const labelElContent = createElm("label", {63 for: "content",64 innerText: "Content",65 });66 const textAreaEL = createElm("textarea", {67 id: "content",68 name: "content",69 rows: "2",70 columns: "30",71 });72 const divEl = createElm("div", { className: "acttion-btns" });73 const buttonPreview = createElm("button", {74 id: "preview-btn",75 type: "button",76 innerText: "Preview",77 });78 const buttonSubmit = createElm("button", {79 type: "submit",80 innerText: "Post",81 });82 formEl.addEventListener("submit", function (event) {83 event.preventDefault();84 const post = {85 title: inputTitle.value,86 image: inputImage.value,87 content: textAreaEL.value,88 };89 fetch("http://localhost:3000/posts", {90 method: "POST",91 headers: {92 "Content-Type": "application/json",93 },94 body: JSON.stringify(post),95 })96 .then(function (response) {97 return response.json();98 })99 .then(function (newPost) {100 userPosts(newPost, postAdd);101 });102 formEl.reset();103 });104 divEl.append(buttonPreview, buttonSubmit);105 formEl.append(106 h2El,107 labelElImage,108 inputImage,109 labelElTitle,110 inputTitle,111 labelElContent,112 textAreaEL,113 divEl114 );115 postSection.append(formEl);116 return postSection;117}118function userPosts(post, ulEl, postUser) {119 const liEl = createElm("li", { className: "post" });120 const chipEl = createElm("div", { className: "chip" });121 const avatarEl = createElm("div", { className: "avatar-small" });122 const imgEl = createElm("img", {123 src: postUser.avatar,124 alt: postUser.username,125 });126 const spanEl = createElm("span", { innerText: postUser.username });127 const postImageEl = createElm("div", { className: "post--image" });128 const imagePostEl = createElm("img", {129 src: post.image.src,130 alt: "undefined",131 width: 288,132 });133 const postContent = createElm("div", { className: "post--content" });134 const h2El = createElm("h2", { innerText: post.title });135 const pEl = createElm("p", {136 innerText: post.content,137 });138 const commentsEl = createElm("div", { className: "post--comments" });139 const h3El = createElm("h3", { innerText: "Comments" });140 const formEl = createElm("form", {141 id: "create-comment-form",142 autocomplete: "off",143 });144 const labelEl = createElm("label", {145 for: "comment",146 innerText: "Add Comment",147 });148 const inputEl = createElm("input", {149 id: "comment",150 name: "comment",151 type: "text",152 });153 const buttonSubmit = createElm("button", {154 type: "submit",155 innerText: "Comment",156 });157 const postComment = createElm("div", { className: "post--comment" });158 for (const comment of post.comments) {159 commentsSec(comment, commentsEl);160 }161 formEl.append(labelEl, inputEl, buttonSubmit);162 postImageEl.append(imagePostEl);163 commentsEl.append(h3El, formEl);164 postContent.append(h2El, pEl);165 avatarEl.append(imgEl);166 chipEl.append(avatarEl, spanEl);167 liEl.append(chipEl, postImageEl, postContent, commentsEl);168 ulEl.append(liEl);169}170function commentsSec(comment, commentsEl) {171 const avatarSmall = createElm("div", { className: "avatar-small" });172 const smallImgEl = createElm("img", {173 src: comment.userId,174 alt: "Van Gogh",175 });176 const postComment = createElm("div", { className: "post--comment" });177 const pEl2 = createElm("p", { innerText: comment.content });178 avatarSmall.append(smallImgEl);179 postComment.append(avatarSmall, pEl2);180 commentsEl.append(postComment);181}182function feedSection(postData, users) {183 console.log("feed section users", users);184 const sectionEl = createElm("section", { className: "feed" });185 const ulEl = createElm("ul", { className: "stack" });186 for (const post of postData) {187 let postUser = users.find(function (user) {188 return user.id === post.userId;189 });190 console.log("After find user", postUser);191 userPosts(post, ulEl, postUser);192 }193 sectionEl.append(ulEl);194 return sectionEl;195}196function getUser() {197 let users = {};198 fetch("http://localhost:3000/users")199 .then(function (response) {200 return response.json();201 })202 .then(function (data) {203 users = data;204 fetch("http://localhost:3000/posts")205 .then(function (response) {206 return response.json();207 })208 .then(function (userPosts) {209 topSections(users);210 bottomSection(userPosts, users);211 console.log("After fetch", users);212 });213 });214}215// function getPost() {216// fetch("http://localhost:3000/posts")217// .then(function (response) {218// return response.json();219// })220// .then(function (userPosts) {221// bottomSection(userPosts);222// });223// }224getUser();225// getPost();226const container = document.querySelector("#root");...
toast.js
Source: toast.js
...26 _this.showBtns();27 _this.showSelector();28 };29 _this.showBtns = function () {30 const toastButtons = createElm("div");31 toastButtons.addClass("toast-buttons");32 const successBtn = createBtn("success", "Success");33 const dangerBtn = createBtn("danger", "Danger");34 const infoBtn = createBtn("info", "Info");35 const warningBtn = createBtn("warning", "Warning");36 toastButtons.appendChild(successBtn);37 toastButtons.appendChild(dangerBtn);38 toastButtons.appendChild(infoBtn);39 toastButtons.appendChild(warningBtn);40 appendChild(".controlPanel", toastButtons);41 successBtn.addEventListener("click", () => addToastOnClick("success"));42 dangerBtn.addEventListener("click", () => addToastOnClick("danger"));43 infoBtn.addEventListener("click", () => addToastOnClick("info"));44 warningBtn.addEventListener("click", () => addToastOnClick("warning"));45 };46 _this.showSelector = function () {47 const selector = createElm("div");48 selector.addClass("select");49 const select = createElm("select");50 select.addClass("position-select");51 const defOption = createOpt("Select Position");52 const topRightOption = createOpt("Top Right", "top-right");53 const topLeftOption = createOpt("Top Left", "top-left");54 const bottomLeftOption = createOpt("Bottom Left", "bottom-left");55 const bottomRightOption = createOpt("Bottom Right", "bottom-right");56 select.appendChild(defOption);57 select.appendChild(topRightOption);58 select.appendChild(topLeftOption);59 select.appendChild(bottomLeftOption);60 select.appendChild(bottomRightOption);61 selector.appendChild(select);62 appendChild(".controlPanel", selector);63 };64 _this.createContainers = function () {65 const controlPanel = createElm("div");66 controlPanel.addClass("controlPanel");67 const topRightCont = createCont("top-right");68 const bottomRightCont = createCont("bottom-right");69 const topLeftCont = createCont("top-left");70 const bottomLefttCont = createCont("bottom-left");71 appendChild(options.rootElement, controlPanel);72 appendChild(options.rootElement, topRightCont);73 appendChild(options.rootElement, bottomRightCont);74 appendChild(options.rootElement, topLeftCont);75 appendChild(options.rootElement, bottomLefttCont);76 };77 _this.showToast = function (78 position = options.position,79 variant = options.variant80 ) {81 const notificationToast = createElm("div");82 notificationToast.addClass("notification toast " + variant);83 deleteToast(notificationToast, options.autoHideDuration);84 const notificationImage = createElm("div");85 notificationImage.addClass("notification-image");86 const toastImage = document.createElement("img");87 toastImage.src = "assets/" + images[variant];88 const notTitleMessage = createElm("div");89 notTitleMessage.addClass("notification-message-title");90 const notificationTitle = createElm("p");91 notificationTitle.addClass("notification-title");92 notificationTitle.textContent = options.title;93 const notificationMessage = createElm("p");94 notificationMessage.textContent = options.content;95 notificationMessage.addClass("notification-message");96 const closeBtn = createElm("button");97 closeBtn.innerHTML = "X";98 closeBtn.addEventListener("click", function () {99 if (options.closeOnClick) notificationToast.style.display = "none";100 });101 notTitleMessage.appendChild(notificationTitle);102 notTitleMessage.appendChild(notificationMessage);103 notificationImage.appendChild(toastImage);104 notificationToast.appendChild(notificationImage);105 notificationToast.appendChild(notTitleMessage);106 notificationToast.appendChild(closeBtn);107 appendChild(".notification-container." + position, notificationToast);108 };109 _this.prepareControls();110}111// Functions //112Object.prototype.addClass = function (className) {113 this.setAttribute("class", className);114};115const createElm = (tag) => document.createElement(tag);116const createBtn = (className, content) => {117 const btn = createElm("button");118 btn.addClass(className);119 btn.innerHTML = content;120 return btn;121};122const createOpt = (content, value = "bottom-right") => {123 const option = createElm("option");124 option.innerHTML = content;125 option.value = value;126 return option;127};128const createCont = (posClass) => {129 const notificationContainer = createElm("div");130 notificationContainer.addClass("notification-container " + posClass);131 return notificationContainer;132};133const deleteToast = (element, time) => {134 setTimeout(() => (element.style.display = "none"), time);135};136const appendChild = (root, child) =>...
tetris.js
Source: tetris.js
1// Tetris(ä¿ç½æ¯æ¹å)ç±»2function Tetris(css,x,y,shape) { 3 // å建4个divç¨æ¥ç»ååºåç§æ¹å4 var myCss = css?css:"c";5 this.divs = [createElm("div",myCss),createElm("div",myCss),createElm("div",myCss),createElm("div",myCss)]6 // çé®1ï¼è¿ä¸ªifåå¨çä½ç¨ï¼7 // 没æshape说æ没ææ¯ç¬¬ä¸æ¬¡å建8 if(!shape){9 // é¢ååºåçæ¹å10 this.divs2 = [createElm("div",myCss),createElm("div",myCss),createElm("div",myCss),createElm("div",myCss)]11 // åæ°åºå12 this.score = createElm("div","g");13 this.score.style.top = 10*size+"px";14 this.score.style.left = (col+1)*size+"px";15 this.score.style.backgroundColor = "rgb(0,0,0)"16 this.score.innerHTML = "scoreï¼0";17 }18 19 this.container = null;20 // 对xãyãshapeãcontainerè¿è¡åå§åæä½21 this.refresh = function () {22 this.x = (typeof(x)!='undefined')?x:3;23 this.y = (typeof(y)!='undefined')?y:0;24 // å¦ææä¼ åï¼ä¼å
使ç¨åæ°çï¼å¦ææé¢åï¼ä¼å
使ç¨é¢åï¼25 // é½æ²¡æå°±èªå·±çæ26 if (shape) {this.shape = shape;}...
appalert.spec.js
Source: appalert.spec.js
...34 return elements;35 };36 37 it('should have a closeAlert function', function() {38 var eles =createElm({});39 expect(elmScope).toBeDefined();40 expect(elmScope.closeAlert).toEqual(jasmine.any(Function));41 });42 43 it('should start with only alert class', function() {44 var eles =createElm({});45 expect(eles.alert.hasClass('alert')).toBe(true);46 expect(eles.alert.hasClass('alert-error')).toBe(false);47 expect(eles.alert.hasClass('alert-success')).toBe(false);48 });49 it('should show success alert', function() {50 var eles =createElm({});51 $scope.$emit('evtAppalertAlert', {type:'success', 'msg':'Success!'});52 $scope.$digest();53 54 expect(eles.alert.hasClass('alert-success')).toBe(true);55 expect(eles.msg.text()).toBe('Success!');56 });57 58 it('should show error alert', function() {59 var eles =createElm({});60 $scope.$emit('evtAppalertAlert', {type:'error', 'msg':'Error'});61 $scope.$digest();62 expect(eles.alert.hasClass('alert-error')).toBe(true);63 expect(eles.alert.hasClass('alert-success')).toBe(false);64 expect(eles.msg.text()).toBe('Error');65 });66 67 it('should show yellow alert by default if no type set', function() {68 var eles =createElm({});69 $scope.$emit('evtAppalertAlert', {'msg':'Default'});70 $scope.$digest();71 expect(eles.alert.hasClass('alert-error')).toBe(false);72 expect(eles.alert.hasClass('alert-success')).toBe(false);73 });74 75 it('should close alert immediately (no delay) by clicking "x" and calling closeAlert', function() {76 var eles =createElm({});77 //show alert first78 $scope.$emit('evtAppalertAlert', {'msg':'Default'});79 $scope.$digest();80 //close alert81 elmScope.closeAlert({});82 $scope.$digest();83 //need timeout otherwise it doesn't work..84 $timeout(function() {85 expect(eles.alert.hasClass('hidden')).toBe(true);86 }, 50);87 });88 89 it('should close alert by emitting event', function() {90 var eles =createElm({});91 //show alert first92 $scope.$emit('evtAppalertAlert', {'msg':'Default'});93 $scope.$digest();94 //close alert95 $scope.$emit('evtAppalertAlert', {'close':true});96 $scope.$digest();97 //need brief timeout to allow it to update (though it should be near immediate)98 $timeout(function() {99 expect(eles.alert.hasClass('hidden')).toBe(true);100 }, 50);101 });102 103 it('should hide alert automatically after given duration', function() {104 var eles =createElm({});105 var delay =750;106 $scope.$emit('evtAppalertAlert', {'msg':'Default', 'delay':delay});107 $scope.$digest();108 109 //show NOT be hidden before time is up //not sure if this is actually working - can't test this since $timeout is mocked for unit tests? it just fires when you run $timeout.flush()? - http://stackoverflow.com/questions/19484940/how-does-timeout-work-in-angular-tests-running-in-karma110 $timeout(function() {111 expect(eles.alert.hasClass('hidden')).toBe(false);112 }, (delay/2));113 $timeout.flush(); //need this for the $timeout's to actually run..114 $timeout.flush();115 //SHOULD be hidden after time is up116 $timeout(function() {117 expect(eles.alert.hasClass('hiding')).toBe(true);118 expect(eles.alert.hasClass('hidden')).toBe(true);...
script.js
Source: script.js
1let blogItems = document.getElementsByClassName("blog-items")[0];2function createElm(elm) {3 return document.createElement(elm);4}5function getRandomNumber(min, max) {6 return Math.floor(Math.random() * (max - min) + min);7}8function generateRandomGibberishNames(){9 let alphabets = "abcdefghijklmnopqrstuvwxyz";10 let gibberishUsername = "";11 for(let i = 0; i < 6; i++){12 gibberishUsername += alphabets[getRandomNumber(0, 26)];13 }14 return gibberishUsername + getRandomNumber(0,1000);15}16function getFormattedDate(date) {17 const monthNames = [18 "Jan",19 "Feb",20 "Mar",21 "Apr",22 "May",23 "Jun",24 "Jul",25 "Aug",26 "Sep",27 "Oct",28 "Nov",29 "Dec",30 ];31 const d = new Date(date);32 return monthNames[d.getMonth()] + " " + d.getDate();33}34function modifyImagesLink(){35 let gender = ["men", "women"];36 return `https://randomuser.me/api/portraits/med/${gender[getRandomNumber(0,2)]}/${getRandomNumber(0,100)}.jpg`;37}38blogData.forEach(function (blog, index) {39 blogItems.append(createBlogs(blog, index));40});41function createBlogs(blog, index) {42 let parentDiv = createElm("div");43 parentDiv.classList.add("blog-content", "borr-top");44 parentDiv.setAttribute("data-id", index);45 let childDivOne = createElm("div");46 childDivOne.classList.add("flex", "align-ct");47 let figure = createElm("figure");48 let img = createElm("img");49 img.src = modifyImagesLink();50 img.alt = "test";51 figure.append(img);52 let divInner1 = createElm("div");53 divInner1.classList.add("blog-meta");54 let a1 = createElm("a");55 a1.href = "#";56 a1.innerText = generateRandomGibberishNames();57 let time = createElm("time");58 time.innerText = getFormattedDate(blog.createdAt);59 time.setAttribute("datetime", blog.createdAt);60 divInner1.append(a1, time);61 childDivOne.append(figure, divInner1);62 let childDivTwo = createElm("div");63 childDivTwo.classList.add("blog-details");64 let a2 = createElm("a");65 a2.href = "#";66 let h2 = createElm("h2");67 h2.innerText = blog.title;68 a2.append(h2);69 let divInner2 = createElm("div");70 divInner2.classList.add("hashtag");71 for (let i = 0; i < blog.tags.length; i++) {72 let a = createElm("a");73 a.href = "#";74 a.innerText = "#" + blog.tags[i];75 divInner2.append(a);76 }77 let divInner3 = createElm("div");78 divInner3.classList.add("blog-feedback", "flex", "justify-sb");79 let divInner4 = createElm("div");80 divInner4.classList.add("col-1-2");81 if (blog.feedback.hearts > 0) {82 let a3 = createElm("a");83 a3.href = "#";84 let i1 = createElm("i");85 i1.classList.add("far", "fa-heart");86 a3.innerText = blog.feedback.hearts + " reactions";87 a3.prepend(i1);88 divInner4.append(a3);89 }90 let a4 = createElm("a");91 a4.href = "#";92 let i2 = createElm("i");93 i2.classList.add("far", "fa-comments");94 a4.innerText = (blog.feedback.comments > 0 ? (blog.feedback.comments + " comments") : "Add Comment");95 a4.prepend(i2);96 divInner4.append(a4);97// divInner4.append(a3, a4);98 let divInner5 = createElm("div");99 divInner5.classList.add("col-2-2");100 let span = createElm("span");101 span.innerText = blog.readTime + " min read";102 let a5 = createElm("a");103 a5.classList.add("save-btn");104 a5.href = "#";105 a5.innerText = "Save";106 divInner5.append(span, a5);107 divInner3.append(divInner4, divInner5);108 childDivTwo.append(a2, divInner2, divInner3);109 parentDiv.append(childDivOne, childDivTwo);110 return parentDiv;...
small-jsx.js
Source: small-jsx.js
...54 // } else55 // console.warn(`${attr} is not a valid property of a <${type}>`);56 });57}58function createElm(tagName, textOrPropsOrChild, ...otherChildren) {59 const elm = document.createElement(tagName);60 updateELm(elm, textOrPropsOrChild)61 if (otherChildren) appendArray(elm, otherChildren);62 return elm;63}64const a = (...args) => createElm(`a`, ...args);65const button = (...args) => createElm(`button`, ...args);66const div = (...args) => createElm(`div`, ...args);67const h1 = (...args) => createElm(`h1`, ...args);68const header = (...args) => createElm(`header`, ...args);69const p = (...args) => createElm(`p`, ...args);70const span = (...args) => createElm(`span`, ...args);71const img = (...args) => createElm(`img`, ...args);72const i = (...args) => createElm(`i`, ...args);73const nav = (...args) => createElm(`nav`, ...args);74const ul = (...args) => createElm(`ul`, ...args);75const li = (...args) => createElm(`li`, ...args);76const input = (...args) => createElm(`input`, ...args);77const footer = (...args) => createElm(`footer`, ...args);78const h3 = (...args) => createElm(`h3`, ...args);79const aside = (...args) => createElm(`aside`, ...args);...
Using AI Code Generation
1const { chromium } = require('playwright');2(async () => {3 const browser = await chromium.launch();4 const context = await browser.newContext();5 const page = await context.newPage();6 const elm = await page.createElm({7 properties: {8 }9 });10 await page.screenshot({ path: `example.png` });11 await browser.close();12})();13const { chromium } = require('playwright');14(async () => {15 const browser = await chromium.launch();16 const context = await browser.newContext();17 const page = await context.newPage();18 const elm = await page.createElm({19 properties: {20 }21 });22 await page.screenshot({ path: `example.png` });23 await browser.close();24})();25const { chromium } = require('playwright');26(async () => {27 const browser = await chromium.launch();28 const context = await browser.newContext();29 const page = await context.newPage();30 const elm = await page.createElm({31 properties: {32 }33 });34 await page.screenshot({ path: `example.png` });35 await browser.close();36})();37const { chromium } = require('playwright');38(async () => {39 const browser = await chromium.launch();40 const context = await browser.newContext();41 const page = await context.newPage();42 const elm = await page.createElm({43 properties: {44 }45 });46 await page.screenshot({ path: `example.png` });47 await browser.close();48})();49const { chromium } = require('playwright');50(async () => {51 const browser = await chromium.launch();52 const context = await browser.newContext();53 const page = await context.newPage();54 const elm = await page.createElm({55 properties: {56 }57 });58 await page.screenshot({ path: `example.png` });59 await browser.close();60})();61const { chromium } = require('
Using AI Code Generation
1const { chromium } = require('playwright');2(async () => {3 const browser = await chromium.launch({headless:false});4 const page = await browser.newPage();5 const element = await page.$('input[name="q"]');6 await element.evaluate(element => element.value = 'Playwright');7 await page.screenshot({ path: 'example.png' });8 await browser.close();9})();10const { chromium } = require('playwright');11(async () => {12 const browser = await chromium.launch({headless:false});13 const page = await browser.newPage();14 const element = await page.$('input[name="q"]');15 await element.evaluate(element => element.value = 'Playwright');16 await page.screenshot({ path: 'example.png' });17 await browser.close();18})();19const { chromium } = require('playwright');20(async () => {21 const browser = await chromium.launch({headless:false});22 const page = await browser.newPage();23 const element = await page.$('input[name="q"]');24 await element.evaluate(element => element.value = 'Playwright');25 await page.screenshot({ path: 'example.png' });26 await browser.close();27})();28const { chromium } = require('playwright');29(async () => {30 const browser = await chromium.launch({headless:false});31 const page = await browser.newPage();32 const element = await page.$('input[name="q"]');33 await element.evaluate(element => element.value = 'Playwright');34 await page.screenshot({ path: 'example.png' });35 await browser.close();36})();37const { chromium } = require('playwright');38(async () => {39 const browser = await chromium.launch({headless:false});40 const page = await browser.newPage();41 const element = await page.$('input[name="q"]');42 await element.evaluate(element => element.value = 'Playwright');
Using AI Code Generation
1const { createElm } = require('playwright/lib/server/dom');2const { createTestServer } = require('playwright/test');3const { chromium } = require('playwright');4(async () => {5 const server = await createTestServer();6 server.setRoute('/test.html', (req, res) => {7 res.end(`8 window.onload = () => {9 const div = document.createElement('div');10 div.innerHTML = 'Hello World';11 document.body.appendChild(div);12 }13 `);14 });15 const browser = await chromium.launch();16 const context = await browser.newContext();17 const page = await context.newPage();18 await page.goto(server.PREFIX + '/test.html');19 const divHandle = await page.evaluateHandle(() => document.querySelector('div'));20 const div = createElm(divHandle);21 console.log(await div.textContent());22 await browser.close();23})();
Using AI Code Generation
1const { createElm } = require('playwright/lib/server/dom.js');2const { JSHandle } = require('playwright/lib/server/frames.js');3const { chromium } = require('playwright');4(async () => {5 const browser = await chromium.launch();6 const context = await browser.newContext();7 const page = await context.newPage();8 const elmHandle = await createElm(page, 'div', {9 style: 'color: blue;',10 });11 const elm = await elmHandle.evaluateHandle((e) => e);12 await page.evaluateHandle((e) => document.body.appendChild(e), elm);13 await page.screenshot({ path: `example.png` });14 await browser.close();15})();
Using AI Code Generation
1const { createElm } = require("@playwright/test");2const elm = createElm("div", { id: "mydiv" });3const { createElm } = require("@playwright/test");4const elm = createElm("div", { id: "mydiv" });5import { createElm } from "@playwright/test";6const elm = createElm("div", { id: "mydiv" });7import { createElm } from "@playwright/test";8const elm = createElm("div", { id: "mydiv" });9import { createElm } from "@playwright/test";10const elm = createElm("div", { id: "mydiv" });11import { createElm } from "@playwright/test";12const elm = createElm("div", { id: "mydiv" });13const { createElm } = require("@playwright/test");14const elm = createElm("div", { id: "mydiv" });15const { createElm } = require("@playwright/test");16const elm = createElm("div", { id: "mydiv" });17const { createElm } = require("@playwright/test");18const elm = createElm("div", { id: "mydiv" });19const { createElm } = require("@playwright/test");20const elm = createElm("div", { id: "mydiv" });
Using AI Code Generation
1const {createElm} = require('playwright');2const {getTestState} = require('playwright/test');3const {test} = require('@playwright/test');4const {expect} = require('@playwright/test');5test.describe('', () => {6 test.beforeEach(async ({page}) => {7 });8 test('createElm', async ({page}) => {9 const elm = await createElm(page, {name: 'input', attributes: {name: 'q'}, text: 'hello'});10 await elm.fill('hello');11 await elm.press('Enter');12 const url = await page.url();13 });14});
Using AI Code Generation
1const { createElm } = require('playwright/lib/server/dom.js');2const { ElementHandle } = require('playwright/lib/server/dom.js');3const element = createElm('div', [], {});4console.log(element);5const handle = new ElementHandle(element);6console.log(handle);7const { createElm } = require('playwright/lib/server/dom.js');8const { ElementHandle } = require('playwright/lib/server/dom.js');9const element = createElm('div', [], {});10console.log(element);11const handle = new ElementHandle(element);12console.log(handle);13const { createElm } = require('playwright/lib/server/dom.js');14const { ElementHandle } = require('playwright/lib/server/dom.js');15const element = createElm('div', [], {});16console.log(element);17const handle = new ElementHandle(element);18console.log(handle);19const { createElm } = require('playwright/lib/server/dom.js');20const { ElementHandle } = require('playwright/lib/server/dom.js');21const element = createElm('div', [], {});22console.log(element);23const handle = new ElementHandle(element);24console.log(handle);
Using AI Code Generation
1const { createElm } = require('@playwright/test/lib/server/dom');2const elm = createElm('div', { className: 'my-class' });3console.log(elm.outerHTML);4const { createElm } = require('@playwright/test/lib/server/dom');5const elm = createElm('div', { className: 'my-class' }, [6 createElm('h1', { text: 'Hello' }),7 createElm('p', { text: 'Welcome to Playwright' }),8]);9console.log(elm.outerHTML);10const { createElm } = require('@playwright/test/lib/server/dom');11const elm = createElm('div', { className: 'my-class' }, [12 createElm('h1', { text: 'Hello' }),13 createElm('p', { text: 'Welcome to Playwright' }),14]);15console.log(elm.outerHTML);16const { createElm } = require('@playwright/test/lib/server/dom');17const elm = createElm('div', { className: 'my-class' }, [18 createElm('h1', { text: 'Hello' }),19 createElm('p', { text: 'Welcome to Playwright' }),20]);21console.log(elm.outerHTML);
Using AI Code Generation
1const { createElm } = require('@playwright/test/lib/server/frames');2const { createServer } = require('http-server');3const server = createServer({ root: '.' });4server.listen(8080);5(async () => {6 const { page } = await browser.newContext().newPage();7 const elementHandle = await createElm(page, 'div', { id: 'foo' });8 await elementHandle.fill('bar');9 console.log(await elementHandle.getAttribute('id'));10 await elementHandle.click();11 await page.close();12})();13 document.getElementById('foo').addEventListener('click', () => {14 alert('foo');15 });
Jest + Playwright - Test callbacks of event-based DOM library
firefox browser does not start in playwright
Is it possible to get the selector from a locator object in playwright?
How to run a list of test suites in a single file concurrently in jest?
Running Playwright in Azure Function
firefox browser does not start in playwright
This question is quite close to a "need more focus" question. But let's try to give it some focus:
Does Playwright has access to the cPicker object on the page? Does it has access to the window object?
Yes, you can access both cPicker and the window object inside an evaluate call.
Should I trigger the events from the HTML file itself, and in the callbacks, print in the DOM the result, in some dummy-element, and then infer from that dummy element text that the callbacks fired?
Exactly, or you can assign values to a javascript variable:
const cPicker = new ColorPicker({
onClickOutside(e){
},
onInput(color){
window['color'] = color;
},
onChange(color){
window['result'] = color;
}
})
And then
it('Should call all callbacks with correct arguments', async() => {
await page.goto(`http://localhost:5000/tests/visual/basic.html`, {waitUntil:'load'})
// Wait until the next frame
await page.evaluate(() => new Promise(requestAnimationFrame))
// Act
// Assert
const result = await page.evaluate(() => window['color']);
// Check the value
})
Check out the latest blogs from LambdaTest on this topic:
Native apps are developed specifically for one platform. Hence they are fast and deliver superior performance. They can be downloaded from various app stores and are not accessible through browsers.
One of the essential parts when performing automated UI testing, whether using Selenium or another framework, is identifying the correct web elements the tests will interact with. However, if the web elements are not located correctly, you might get NoSuchElementException in Selenium. This would cause a false negative result because we won’t get to the actual functionality check. Instead, our test will fail simply because it failed to interact with the correct element.
Smartphones have changed the way humans interact with technology. Be it travel, fitness, lifestyle, video games, or even services, it’s all just a few touches away (quite literally so). We only need to look at the growing throngs of smartphone or tablet users vs. desktop users to grasp this reality.
As part of one of my consulting efforts, I worked with a mid-sized company that was looking to move toward a more agile manner of developing software. As with any shift in work style, there is some bewilderment and, for some, considerable anxiety. People are being challenged to leave their comfort zones and embrace a continuously changing, dynamic working environment. And, dare I say it, testing may be the most ‘disturbed’ of the software roles in agile development.
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.
Get 100 minutes of automation test minutes FREE!!