How to use attachFrame method in Playwright Internal

Best JavaScript code snippet using playwright-internal

goalAttachment.js

Source:goalAttachment.js Github

copy

Full Screen

1var atts = new Array(); // global array of attachments, one for each unique PAEMPGOAL record2var multipleAtts = new Array();3var fromRefreshForm = false;4var fromFirstRefresh = false;5var calledGetAttachment = false;6var attachFrame;7var func1 = null;8var actionGlobal = null;9function evalOpenView(funcToCall)10{11 if(func1 != null) {12 var tempStore = func1;13 func1 = null;14 eval(tempStore);15 }16}17function refreshForm(prodline,company, employee, seqNbr)18{19 if(actionGlobal == "D") {20 evalOpenView(func1);21 actionGlobal = null;22 }23 fromRefreshForm = true;24 var goalform = right.document.forms["goalform"];25 getAttachment(prodline, company, employee, seqNbr, "jsreturn2");26}27function getAttachment(prodline, company, employee, seqNbr, frameStr)28{29 frameStr = (frameStr) ? frameStr : "jsreturn2";30 var attachObj = new GETATTACHObject(prodline,"PAEMPGOAL");31 attachObj.index = "PGOSET1";32 attachObj.rectype = "C"; // comment attachment33 attachObj.key = "K1=" + escape(company) + "&K2=" + escape(employee) + "&K3=" + escape(seqNbr);34 attachObj.out = "JS";35 attachObj.opm = "T";36 attachObj.data = "TRUE";37 attachObj.stat = "TRUE";38 attachObj.header = "TRUE";39 //attachObj.encode = "TEXT";40 attachObj.debug = false;41 if(fromFirstRefresh){42 attachObj.func = "refreshFirstAttachment";43 fromFirstRefresh = false;44 }45 else {46 attachObj.func = "refreshAttachment";47 }48 GETATTACH(attachObj,frameStr);49}50function writeAttachment(cmtObj, prodline, company, employee, seqNbr, action, frameStr)51{52 frameStr = (frameStr) ? frameStr : "jsreturn";53 var attachObj = new WRITEATTACHObject(prodline,"PAEMPGOAL");54 attachObj.index = "PGOSET1";55 attachObj.rectype = "C"; // comment attachment56 attachObj.key = "K1=" + escape(company) + "&K2=" + escape(employee) + "&K3=" + escape(seqNbr);57 attachObj.out = "JS";58 attachObj.opm = (action == "D") ? "D" : "M";59 attachObj.usertype = cmtObj.getUserType();60 if (action != "A" && cmtObj.getRecKey() != null && cmtObj.getSeqKey() != null)61 {62 // modify this record63 attachObj.reckey = escape(cmtObj.getRecKey(),1);64 attachObj.seqkey = escape(cmtObj.getSeqKey(),1);65 }66 if (action != "D")67 {68 attachObj.title = escape(cmtObj.getTitle(),1);69 attachObj.body = escape(cmtObj.getText(),1);70 }71 attachObj.data = "TRUE";72 //attachObj.encode = "TEXT";73 attachObj.debug = false;74 actionGlobal = action;75 //Might be uneeded to do a refresh Attachment on a write76 if(attachObj.usertype == "C") {77 attachObj.func = (action == "D") ? "refreshForm" : "refreshAttachment";78 }79 else {80 fromFirstRefresh = true;81 attachObj.func = (action == "D") ? "refreshForm" : "refreshFirstAttachment";82 }83 WRITEATTACH(attachObj,frameStr);84}85function zeroPad(nbr, lgth)86{87 nbr = nbr.toString();88 for (var i=nbr.length; i<Number(lgth); i++)89 nbr = "0" + nbr;90 return nbr;91}92function highlightFieldInError(fldNm) {93 try {94 var formData = self.right.document.forms["goalform"];95 fldNm = fldNm.toString().toUpperCase();96 if (fldNm.indexOf("PGO-OBJECTIVE") >= 0)97 {98 fldObj = formData.elements["objective"];99 setRequiredField(fldObj);100 fldObj.focus();101 fldObj.select();102 } 103 else if (fldNm.indexOf("PGO-PRIORITY") >= 0)104 {105 fldObj = formData.elements["priority"];106 setRequiredField(fldObj);107 fldObj.focus();108 fldObj.select();109 } 110 else if (fldNm.indexOf("PGO-START-DATE") >= 0)111 {112 fldObj = formData.elements["startDate"];113 setRequiredField(fldObj);114 fldObj.focus();115 fldObj.select();116 } 117 else if (fldNm.indexOf("PGO-END-DATE") >= 0)118 {119 fldObj = formData.elements["endDate"];120 setRequiredField(fldObj);121 fldObj.focus();122 fldObj.select();123 }124 else if (fldNm.indexOf("PGO-PCT-COMPLETED") >= 0)125 {126 fldObj = formData.elements["pctComplete"];127 setRequiredField(fldObj);128 fldObj.focus();129 fldObj.select();130 }131 else if (fldNm.indexOf("PGO-COMPLETE-DATE") >= 0)132 {133 fldObj = formData.elements["completeDate"];134 setRequiredField(fldObj);135 fldObj.focus();136 fldObj.select();137 }138 } catch(e) {}139}140function updateDetailedDesc(prodline, company, employee, seqNbr, funcIncoming, userType)141{142 if (self.lawheader.abort == true) {143 highlightFieldInError(self.lawheader.gfldnbr);144 isUpdating = false;145 //stay on current edit screen146 return;147 }148 (seqNbr == 0) ? seqNbr = self.lawheader.currentSeqNbr: '';149 (funcIncoming) ? func1 = funcIncoming : '';150 var goalform = right.document.forms["goalform"];151 var co = zeroPad(company,4);152 var ee = zeroPad(employee,9);153 var seq = zeroPad(seqNbr,4);154 var parentKey = "K1=" + co + "&K2=" + ee + "&K3=" + seq;155 var attachText;156 var oCmt = new cmtAttach();157 if(userType == "P") {158 attachText = goalform.detailedDesc.value;159 oCmt.setTitle("GoalView Detailed Description"); // <-- use the short 30 character detailedDesc here160 oCmt.setUserType("P");161 }162 else {163 attachText = goalform.compComments.value;164 oCmt.setTitle("GoalView Completion Comments"); // <-- use the short 30 character detailedDesc here165 oCmt.setUserType("C");166 }167 if (attachText.indexOf("%0D%0A") == -1 && attachText.indexOf("%0A") != -1) {168 attachText = attachText.replace(/%0A/g,"%0D%0A");169 }170 // is this an add or a modification?171 // already exists, and attempting change172 if (atts[0] && (userType == "C"))173 {174 // change175 atts[0].setText(unescape(attachText));176 viewFlag = true;177 if(unescape(attachText) == ''){178 writeAttachment(atts[0], prodline, co, ee, seq, "D", "jsreturn");179 atts[0] = null;180 }181 else {182 writeAttachment(atts[0], prodline, co, ee, seq, "M", "jsreturn");183 }184 }185 else if (atts[1] && (userType == "P")) {186 // change187 atts[1].setText(unescape(attachText));188 viewFlag = true;189 if(unescape(attachText) == ''){190 writeAttachment(atts[1], prodline, co, ee, seq, "D", "jsreturn");191 atts[1] = null;192 }193 else {194 writeAttachment(atts[1], prodline, co, ee, seq, "M", "jsreturn");195 }196 }197 else198 {199 // add200 oCmt.setText(unescape(attachText));201 viewflag = true;202 writeAttachment(oCmt, prodline, co, ee, seq, "A", "jsreturn");203 }204}205function refreshFirstAttachment()206{207 fromFirstRefresh = false;208 attachFrame = self.jsreturn2;209 var goalform = right.document.forms["goalform"];210 var attachTextP = goalform.detailedDesc.value;211 if (attachFrame.CmtRec && attachFrame.CmtRec.length)212 {213 var lookingForP = "P";214 for(t=0;t<attachFrame.CmtRec.length;t++) {215 if(attachFrame.CmtRec[t].UserType == "P" && lookingForP == "P") {216 //attachTextP = doTextAttach(attachFrame.CommentData[t].join(""));217 addToArr(1,t,attachTextP, attachFrame);218 lookingForP = "";219 }220 }221 }222 // set the attachment text in the textarea223 goalform.detailedDesc.value = unescape(unescape(attachTextP));224 if(fromRefreshForm == true) {225 setTimeout(function(){document.getElementById("right").style.visibility = "visible";}, 100);226 //removeWaitAlert();227 fromRefreshForm = false;228 }229 evalOpenView(func1);230}231function refreshAttachment()232{233 // initial loading of attachments234 attachFrame = self.jsreturn2;235 var goalform = right.document.forms["goalform"];236 var attachTextP = goalform.detailedDesc.value;237 var attachTextC = goalform.compComments.value;238 // Initially set to null to prevent carryover from diff records239 atts[0] = null;240 atts[1] = null;241 if (attachFrame.CmtRec && attachFrame.CmtRec.length)242 {243 var lookingForC = "C";244 var lookingForP = "P";245 for(t=0;t<attachFrame.CmtRec.length;t++) {246 if(attachFrame.CmtRec[t].UserType == "C" && lookingForC == "C") {247 attachTextC = doTextAttach(attachFrame.CommentData[t].join(""));248 addToArr(0,t,attachTextC, attachFrame);249 lookingForC = "";250 }251 if(attachFrame.CmtRec[t].UserType == "P" && lookingForP == "P") {252 attachTextP = doTextAttach(attachFrame.CommentData[t].join(""));253 addToArr(1,t,attachTextP, attachFrame);254 lookingForP = "";255 }256 }257 }258 // set the attachment text in the textarea259 goalform.detailedDesc.value = unescape(unescape(attachTextP));260 goalform.compComments.value = unescape(unescape(attachTextC));261 if(fromRefreshForm == true) {262 setTimeout(function(){document.getElementById("right").style.visibility = "visible";}, 100);263 //removeWaitAlert();264 fromRefreshForm = false;265 }266 evalOpenView(func1);267}268function cmtAttach()269{270 this.title = null;271 this.text = null;272 this.modifiedDate = null;273 this.modifiedTime = null;274 this.userType = null;275 this.recKey = null;276 this.seqKey = null;277 this.parentKey = null;278}279cmtAttach.prototype.getTitle = function()280{281 return this.title;282}283cmtAttach.prototype.setTitle = function(t)284{285 this.title = t;286}287cmtAttach.prototype.getText = function()288{289 return this.text;290}291cmtAttach.prototype.setText = function(t)292{293 this.text = t;294}295cmtAttach.prototype.getModifiedDate = function()296{297 return this.modifiedDate;298}299cmtAttach.prototype.setModifiedDate = function(d)300{301 this.modifiedDate = d;302}303cmtAttach.prototype.getModifiedTime = function()304{305 return this.modifiedTime;306}307cmtAttach.prototype.setModifiedTime = function(t)308{309 this.modifiedTime = t;310}311cmtAttach.prototype.getUserType = function()312{313 return this.userType;314}315cmtAttach.prototype.setUserType = function(u)316{317 this.userType = u;318}319cmtAttach.prototype.getRecKey = function()320{321 return this.recKey;322}323cmtAttach.prototype.setRecKey = function(r)324{325 this.recKey = r;326}327cmtAttach.prototype.getSeqKey = function()328{329 return this.seqKey;330}331cmtAttach.prototype.setSeqKey = function(s)332{333 this.seqKey = s;334}335cmtAttach.prototype.getParentKey = function()336{337 return this.parentKey;338}339cmtAttach.prototype.setParentKey = function(p)340{341 this.parentKey = p;342}343// Extract a parameter value from a string.344function getVarFromString(varName, str, delim)345{346 var url = str;347 var ptr = url.indexOf(varName + "=");348 var ptr2;349 var val1 = "";350 var delim = (delim) ? delim : "&";351 if (ptr != -1)352 {353 var val1 = url.substring(ptr + varName.length + 1,url.length);354 var ptr2;355 if ((ptr2 = val1.indexOf(delim)) != -1)356 {357 if (ptr2 == -1)358 ptr2 = val1.length;359 val1 = val1.substring(0,ptr2);360 }361 }362 return val1;363}364function doTextAttach(textObj) {365 var attachText366 attachText = textObj;367 if (attachText.indexOf("%0D%0A") == -1 && attachText.indexOf("%0A") != -1) {368 attachText = attachText.replace(/%0A/g,"%0D%0A");369 }370 return attachText;371}372function addToArr(arrIndex, attachIndex, text, attachFrame) {373 var oCmt = new cmtAttach();374 oCmt.setTitle(attachFrame.CmtRec[attachIndex].Title);375 oCmt.setText(text);376 oCmt.setModifiedDate(attachFrame.CmtAttrib[attachIndex].ModifyDate);377 oCmt.setModifiedTime(attachFrame.CmtAttrib[attachIndex].ModifyTime);378 oCmt.setUserType(attachFrame.CmtRec[attachIndex].UserType);379 oCmt.setRecKey(attachFrame.CmtRec[attachIndex].RecKey);380 oCmt.setSeqKey(attachFrame.CmtRec[attachIndex].SeqKey);381 oCmt.setParentKey(attachFrame.CmtParentKey[attachIndex]);382 atts[arrIndex] = oCmt;...

Full Screen

Full Screen

frame.spec.js

Source:frame.spec.js Github

copy

Full Screen

...20 const {beforeAll, beforeEach, afterAll, afterEach} = testRunner;21 describe('Frame.executionContext', function() {22 it('should work', async({page, server}) => {23 await page.goto(server.EMPTY_PAGE);24 await utils.attachFrame(page, 'frame1', server.EMPTY_PAGE);25 expect(page.frames().length).toBe(2);26 const [frame1, frame2] = page.frames();27 const context1 = await frame1.executionContext();28 const context2 = await frame2.executionContext();29 expect(context1).toBeTruthy();30 expect(context2).toBeTruthy();31 expect(context1 !== context2).toBeTruthy();32 expect(context1.frame()).toBe(frame1);33 expect(context2.frame()).toBe(frame2);34 await Promise.all([35 context1.evaluate(() => window.a = 1),36 context2.evaluate(() => window.a = 2)37 ]);38 const [a1, a2] = await Promise.all([39 context1.evaluate(() => window.a),40 context2.evaluate(() => window.a)41 ]);42 expect(a1).toBe(1);43 expect(a2).toBe(2);44 });45 });46 describe('Frame.evaluateHandle', function() {47 it('should work', async({page, server}) => {48 await page.goto(server.EMPTY_PAGE);49 const mainFrame = page.mainFrame();50 const windowHandle = await mainFrame.evaluateHandle(() => window);51 expect(windowHandle).toBeTruthy();52 });53 });54 describe('Frame.evaluate', function() {55 it_fails_ffox('should throw for detached frames', async({page, server}) => {56 const frame1 = await utils.attachFrame(page, 'frame1', server.EMPTY_PAGE);57 await utils.detachFrame(page, 'frame1');58 let error = null;59 await frame1.evaluate(() => 7 * 8).catch(e => error = e);60 expect(error.message).toContain('Execution Context is not available in detached frame');61 });62 });63 describe('Frame Management', function() {64 it('should handle nested frames', async({page, server}) => {65 await page.goto(server.PREFIX + '/frames/nested-frames.html');66 expect(utils.dumpFrames(page.mainFrame())).toEqual([67 'http://localhost:<PORT>/frames/nested-frames.html',68 ' http://localhost:<PORT>/frames/two-frames.html (2frames)',69 ' http://localhost:<PORT>/frames/frame.html (uno)',70 ' http://localhost:<PORT>/frames/frame.html (dos)',71 ' http://localhost:<PORT>/frames/frame.html (aframe)'72 ]);73 });74 it('should send events when frames are manipulated dynamically', async({page, server}) => {75 await page.goto(server.EMPTY_PAGE);76 // validate frameattached events77 const attachedFrames = [];78 page.on('frameattached', frame => attachedFrames.push(frame));79 await utils.attachFrame(page, 'frame1', './assets/frame.html');80 expect(attachedFrames.length).toBe(1);81 expect(attachedFrames[0].url()).toContain('/assets/frame.html');82 // validate framenavigated events83 const navigatedFrames = [];84 page.on('framenavigated', frame => navigatedFrames.push(frame));85 await utils.navigateFrame(page, 'frame1', './empty.html');86 expect(navigatedFrames.length).toBe(1);87 expect(navigatedFrames[0].url()).toBe(server.EMPTY_PAGE);88 // validate framedetached events89 const detachedFrames = [];90 page.on('framedetached', frame => detachedFrames.push(frame));91 await utils.detachFrame(page, 'frame1');92 expect(detachedFrames.length).toBe(1);93 expect(detachedFrames[0].isDetached()).toBe(true);94 });95 it('should send "framenavigated" when navigating on anchor URLs', async({page, server}) => {96 await page.goto(server.EMPTY_PAGE);97 await Promise.all([98 page.goto(server.EMPTY_PAGE + '#foo'),99 utils.waitEvent(page, 'framenavigated')100 ]);101 expect(page.url()).toBe(server.EMPTY_PAGE + '#foo');102 });103 it('should persist mainFrame on cross-process navigation', async({page, server}) => {104 await page.goto(server.EMPTY_PAGE);105 const mainFrame = page.mainFrame();106 await page.goto(server.CROSS_PROCESS_PREFIX + '/empty.html');107 expect(page.mainFrame() === mainFrame).toBeTruthy();108 });109 it('should not send attach/detach events for main frame', async({page, server}) => {110 let hasEvents = false;111 page.on('frameattached', frame => hasEvents = true);112 page.on('framedetached', frame => hasEvents = true);113 await page.goto(server.EMPTY_PAGE);114 expect(hasEvents).toBe(false);115 });116 it('should detach child frames on navigation', async({page, server}) => {117 let attachedFrames = [];118 let detachedFrames = [];119 let navigatedFrames = [];120 page.on('frameattached', frame => attachedFrames.push(frame));121 page.on('framedetached', frame => detachedFrames.push(frame));122 page.on('framenavigated', frame => navigatedFrames.push(frame));123 await page.goto(server.PREFIX + '/frames/nested-frames.html');124 expect(attachedFrames.length).toBe(4);125 expect(detachedFrames.length).toBe(0);126 expect(navigatedFrames.length).toBe(5);127 attachedFrames = [];128 detachedFrames = [];129 navigatedFrames = [];130 await page.goto(server.EMPTY_PAGE);131 expect(attachedFrames.length).toBe(0);132 expect(detachedFrames.length).toBe(4);133 expect(navigatedFrames.length).toBe(1);134 });135 it('should support framesets', async({page, server}) => {136 let attachedFrames = [];137 let detachedFrames = [];138 let navigatedFrames = [];139 page.on('frameattached', frame => attachedFrames.push(frame));140 page.on('framedetached', frame => detachedFrames.push(frame));141 page.on('framenavigated', frame => navigatedFrames.push(frame));142 await page.goto(server.PREFIX + '/frames/frameset.html');143 expect(attachedFrames.length).toBe(4);144 expect(detachedFrames.length).toBe(0);145 expect(navigatedFrames.length).toBe(5);146 attachedFrames = [];147 detachedFrames = [];148 navigatedFrames = [];149 await page.goto(server.EMPTY_PAGE);150 expect(attachedFrames.length).toBe(0);151 expect(detachedFrames.length).toBe(4);152 expect(navigatedFrames.length).toBe(1);153 });154 it('should report frame from-inside shadow DOM', async({page, server}) => {155 await page.goto(server.PREFIX + '/shadow.html');156 await page.evaluate(async url => {157 const frame = document.createElement('iframe');158 frame.src = url;159 document.body.shadowRoot.appendChild(frame);160 await new Promise(x => frame.onload = x);161 }, server.EMPTY_PAGE);162 expect(page.frames().length).toBe(2);163 expect(page.frames()[1].url()).toBe(server.EMPTY_PAGE);164 });165 it('should report frame.name()', async({page, server}) => {166 await utils.attachFrame(page, 'theFrameId', server.EMPTY_PAGE);167 await page.evaluate(url => {168 const frame = document.createElement('iframe');169 frame.name = 'theFrameName';170 frame.src = url;171 document.body.appendChild(frame);172 return new Promise(x => frame.onload = x);173 }, server.EMPTY_PAGE);174 expect(page.frames()[0].name()).toBe('');175 expect(page.frames()[1].name()).toBe('theFrameId');176 expect(page.frames()[2].name()).toBe('theFrameName');177 });178 it('should report frame.parent()', async({page, server}) => {179 await utils.attachFrame(page, 'frame1', server.EMPTY_PAGE);180 await utils.attachFrame(page, 'frame2', server.EMPTY_PAGE);181 expect(page.frames()[0].parentFrame()).toBe(null);182 expect(page.frames()[1].parentFrame()).toBe(page.mainFrame());183 expect(page.frames()[2].parentFrame()).toBe(page.mainFrame());184 });185 it('should report different frame instance when frame re-attaches', async({page, server}) => {186 const frame1 = await utils.attachFrame(page, 'frame1', server.EMPTY_PAGE);187 await page.evaluate(() => {188 window.frame = document.querySelector('#frame1');189 window.frame.remove();190 });191 expect(frame1.isDetached()).toBe(true);192 const [frame2] = await Promise.all([193 utils.waitEvent(page, 'frameattached'),194 page.evaluate(() => document.body.appendChild(window.frame)),195 ]);196 expect(frame2.isDetached()).toBe(false);197 expect(frame1).not.toBe(frame2);198 });199 });200};

Full Screen

Full Screen

frame.js

Source:frame.js Github

copy

Full Screen

...18})19test.serial('Frame.executionContext should work', async t => {20 const { page, server } = t.context21 await page.goto(server.EMPTY_PAGE)22 await utils.attachFrame(page, 'frame1', server.EMPTY_PAGE)23 t.is(page.frames().length, 2)24 const [frame1, frame2] = page.frames()25 const context1 = await frame1.executionContext()26 const context2 = await frame2.executionContext()27 t.truthy(context1)28 t.truthy(context2)29 t.truthy(context1 !== context2)30 t.is(context1.frame(), frame1)31 t.is(context2.frame(), frame2)32 await Promise.all([33 context1.evaluate(() => (window.a = 1)),34 context2.evaluate(() => (window.a = 2))35 ])36 const [a1, a2] = await Promise.all([37 context1.evaluate(() => window.a),38 context2.evaluate(() => window.a)39 ])40 t.is(a1, 1)41 t.is(a2, 2)42})43test.serial('Frame.evaluateHandle should work', async t => {44 const { page, server } = t.context45 await page.goto(server.EMPTY_PAGE)46 const mainFrame = page.mainFrame()47 const windowHandle = await mainFrame.evaluateHandle(() => window)48 t.truthy(windowHandle)49})50test.serial('Frame.evaluate should throw for detached frames', async t => {51 const { page, server } = t.context52 const frame1 = await utils.attachFrame(page, 'frame1', server.EMPTY_PAGE)53 await utils.detachFrame(page, 'frame1')54 let error = null55 await frame1.evaluate(() => 7 * 8).catch(e => (error = e))56 t.true(57 error.message.includes(58 'Execution Context is not available in detached frame'59 )60 )61})62test.serial('Frame Management should handle nested frames', async t => {63 const { page, server } = t.context64 await page.goto(server.PREFIX + '/frames/nested-frames.html')65 t.deepEqual(utils.dumpFrames(page.mainFrame()), [66 'http://localhost:<PORT>/frames/nested-frames.html',67 ' http://localhost:<PORT>/frames/two-frames.html (2frames)',68 ' http://localhost:<PORT>/frames/frame.html (uno)',69 ' http://localhost:<PORT>/frames/frame.html (dos)',70 ' http://localhost:<PORT>/frames/frame.html (aframe)'71 ])72})73test.serial(74 'Frame Management should send events when frames are manipulated dynamically',75 async t => {76 const { page, server } = t.context77 await page.goto(server.EMPTY_PAGE)78 // validate frameattached events79 const attachedFrames = []80 page.on('frameattached', frame => attachedFrames.push(frame))81 await utils.attachFrame(page, 'frame1', './assets/frame.html')82 t.is(attachedFrames.length, 1)83 t.true(attachedFrames[0].url().includes('/assets/frame.html'))84 // validate framenavigated events85 const navigatedFrames = []86 page.on('framenavigated', frame => navigatedFrames.push(frame))87 await utils.navigateFrame(page, 'frame1', './empty.html')88 t.is(navigatedFrames.length, 1)89 t.is(navigatedFrames[0].url(), server.EMPTY_PAGE)90 // validate framedetached events91 const detachedFrames = []92 page.on('framedetached', frame => detachedFrames.push(frame))93 await utils.detachFrame(page, 'frame1')94 t.is(detachedFrames.length, 1)95 t.true(detachedFrames[0].isDetached())96 }97)98test.serial(99 'Frame Management should send "framenavigated" when navigating on anchor URLs',100 async t => {101 const { page, server } = t.context102 await page.goto(server.EMPTY_PAGE)103 await Promise.all([104 page.goto(server.EMPTY_PAGE + '#foo'),105 utils.waitEvent(page, 'framenavigated')106 ])107 t.is(page.url(), server.EMPTY_PAGE + '#foo')108 }109)110test.serial(111 'Frame Management should persist mainFrame on cross-process navigation',112 async t => {113 const { page, server } = t.context114 await page.goto(server.EMPTY_PAGE)115 const mainFrame = page.mainFrame()116 await page.goto(server.CROSS_PROCESS_PREFIX + '/empty.html')117 t.truthy(page.mainFrame() === mainFrame)118 }119)120test.serial(121 'Frame Management should not send attach/detach events for main frame',122 async t => {123 const { page, server } = t.context124 let hasEvents = false125 page.on('frameattached', frame => (hasEvents = true))126 page.on('framedetached', frame => (hasEvents = true))127 await page.goto(server.EMPTY_PAGE)128 t.false(hasEvents)129 }130)131test.serial(132 'Frame Management should detach child frames on navigation',133 async t => {134 const { page, server } = t.context135 let attachedFrames = []136 let detachedFrames = []137 let navigatedFrames = []138 page.on('frameattached', frame => attachedFrames.push(frame))139 page.on('framedetached', frame => detachedFrames.push(frame))140 page.on('framenavigated', frame => navigatedFrames.push(frame))141 await page.goto(server.PREFIX + '/frames/nested-frames.html')142 t.is(attachedFrames.length, 4)143 t.is(detachedFrames.length, 0)144 t.is(navigatedFrames.length, 5)145 attachedFrames = []146 detachedFrames = []147 navigatedFrames = []148 await page.goto(server.EMPTY_PAGE)149 t.is(attachedFrames.length, 0)150 t.is(detachedFrames.length, 4)151 t.is(navigatedFrames.length, 1)152 }153)154test.serial('Frame Management should support framesets', async t => {155 const { page, server } = t.context156 let attachedFrames = []157 let detachedFrames = []158 let navigatedFrames = []159 page.on('frameattached', frame => attachedFrames.push(frame))160 page.on('framedetached', frame => detachedFrames.push(frame))161 page.on('framenavigated', frame => navigatedFrames.push(frame))162 await page.goto(server.PREFIX + '/frames/frameset.html')163 t.is(attachedFrames.length, 4)164 t.is(detachedFrames.length, 0)165 t.is(navigatedFrames.length, 5)166 attachedFrames = []167 detachedFrames = []168 navigatedFrames = []169 await page.goto(server.EMPTY_PAGE)170 t.is(attachedFrames.length, 0)171 t.is(detachedFrames.length, 4)172 t.is(navigatedFrames.length, 1)173})174test.serial(175 'Frame Management should report frame from-inside shadow DOM',176 async t => {177 const { page, server } = t.context178 await page.goto(server.PREFIX + '/shadow.html')179 await page.evaluate(async url => {180 const frame = document.createElement('iframe')181 frame.src = url182 document.body.shadowRoot.appendChild(frame)183 await new Promise(x => (frame.onload = x))184 }, server.EMPTY_PAGE)185 t.is(page.frames().length, 2)186 t.is(page.frames()[1].url(), server.EMPTY_PAGE)187 }188)189test.serial('Frame Management should report frame.name()', async t => {190 const { page, server } = t.context191 await utils.attachFrame(page, 'theFrameId', server.EMPTY_PAGE)192 await page.evaluate(url => {193 const frame = document.createElement('iframe')194 frame.name = 'theFrameName'195 frame.src = url196 document.body.appendChild(frame)197 return new Promise(x => (frame.onload = x))198 }, server.EMPTY_PAGE)199 t.is(page.frames()[0].name(), '')200 t.is(page.frames()[1].name(), 'theFrameId')201 t.is(page.frames()[2].name(), 'theFrameName')202})203test.serial('Frame Management should report frame.parent()', async t => {204 const { page, server } = t.context205 await utils.attachFrame(page, 'frame1', server.EMPTY_PAGE)206 await utils.attachFrame(page, 'frame2', server.EMPTY_PAGE)207 t.falsy(page.frames()[0].parentFrame())208 t.is(page.frames()[1].parentFrame(), page.mainFrame())209 t.is(page.frames()[2].parentFrame(), page.mainFrame())210})211test.serial(212 'Frame Management should report different frame instance when frame re-attaches',213 async t => {214 const { page, server } = t.context215 const frame1 = await utils.attachFrame(page, 'frame1', server.EMPTY_PAGE)216 await page.evaluate(() => {217 window.frame = document.querySelector('#frame1')218 window.frame.remove()219 })220 t.true(frame1.isDetached())221 const [frame2] = await Promise.all([222 utils.waitEvent(page, 'frameattached'),223 page.evaluate(() => document.body.appendChild(window.frame))224 ])225 t.false(frame2.isDetached())226 t.true(frame1 != frame2)227 }...

Full Screen

Full Screen

link.js

Source:link.js Github

copy

Full Screen

1'use strict';2var EventEmitter = require('events').EventEmitter,3 Promise = require('bluebird'),4 util = require('util'),5 StateMachine = require('stately.js'),6 debug = require('debug')('amqp10:link'),7 u = require('./utilities'),8 pu = require('./policies/policy_utilities'),9 frames = require('./frames'),10 errors = require('./errors');11var stateMachine = function(link) {12 var detachHandler = function(frame) {13 if (this.getMachineState() === 'ATTACHED') {14 this.ATTACHED.sendDetach({ closed: frame.closed });15 }16 link._detached(frame);17 return this.DETACHED;18 };19 var states = {20 'DETACHED': {21 sendAttach: 'ATTACHING',22 reattach: 'REATTACHING'23 },24 'ATTACHING': { attachReceived: 'ATTACHED' },25 'REATTACHING': { attachReceived: 'ATTACHED' },26 'ATTACHED': {27 sendDetach: function(options) {28 link._sendDetach(options);29 return this.DETACHING;30 },31 },32 'DETACHING': { detached: 'DETACHED' }33 };34 Object.keys(states).forEach(function(s) {35 states[s].forceDetach = 'DETACHED';36 states[s].detachReceived = detachHandler;37 });38 return states;39};40/**41 * @class42 * @extends EventEmitter43 * @fires Link#errorReceived44 * @fires Link#attached45 * @fires Link#detached46 */47function Link(session, handle, linkPolicy) {48 this.policy = linkPolicy;49 pu.fixDeprecatedLinkOptions(this.policy);50 this.session = session;51 this.handle = handle;52 this.remote = { handle: undefined };53 this.deliveryCount = 0;54 this._onAttach = [];55 if (this.policy && this.policy.reattach) {56 this._timeouts = u.generateTimeouts(this.policy.reattach);57 }58 var self = this;59 this.sm = new StateMachine(stateMachine(this));60 this.sm.bind(function(event, oldState, newState) {61 debug('stateChange(' + self.id + '):', oldState, '=>', newState, ', reason:', event);62 });63}64util.inherits(Link, EventEmitter);65/**66 * Error received event67 *68 * @event Link#errorReceived69 * @param {object} error the received error70 */71Link.ErrorReceived = 'errorReceived';72/**73 * Attached event74 *75 * @event Link#attached76 */77Link.Attached = 'attached';78/**79 * Detached event80 *81 * @event Link#detached82 */83Link.Detached = 'detached';84// public api85/**86 * Detach the link from the session87 *88 * @inner @memberof Link89 * @param {object} [options] detach frame options90 * @return {Promise}91 */92Link.prototype.detach = function(options) {93 var self = this;94 this._timeouts = undefined; // Disable any re-attachment policy.95 var detachPromise = new Promise(function(resolve, reject) {96 var onError = function(err) { reject(err); };97 self.once(Link.ErrorReceived, onError);98 self.once(Link.Detached, function(info) {99 self.removeListener(Link.ErrorReceived, onError);100 if (!!info.error) return reject(info.error);101 if (!info.closed) {102 if (!options || options.closed) {103 return reject('link not closed');104 }105 }106 resolve();107 });108 });109 this.sm.sendDetach(options);110 return detachPromise;111};112// private api113Link.prototype.state = function() {114 return this.sm.getMachineState().toLowerCase();115};116Object.defineProperty(Link.prototype, 'id', {117 get: function() { return this.name + ':' + this.handle; }118});119Link.prototype.attach = function() {120 this.sm.sendAttach();121 var attachFrame = new frames.AttachFrame(this.policy.attach);122 attachFrame.channel = this.session.channel;123 this.name = attachFrame.name;124 this.role = attachFrame.role;125 this.linkCredit = 0;126 this.available = 0;127 this.drain = false;128 this.session.connection.sendFrame(attachFrame);129};130///131/// Force link state to detached without sending detach message - usually due to forcible disconnect or unmap from above.132/// Important bit is that this should not trigger auto-reattach behavior as that'll happen with reconnect.133///134Link.prototype.forceDetach = function() {135 var state = this.state();136 if (state !== 'attached' && state !== 'attaching' && state !== 'reattaching') {137 return;138 }139 debug('forceDetach(' + this.id + '): current state:', state);140 if (!!this._reattachTimer) clearTimeout(this._reattachTimer);141 this.sm.forceDetach();142 this.emit(Link.Detached, {143 closed: true,144 error: new errors.ProtocolError('amqp:link:detach-forced', 'detach-forced')145 });146};147Link.prototype._resolveAttachPromises = function(err, link) {148 for (var i = 0; i < this._onAttach.length; ++i) {149 var attachPromise = this._onAttach[i];150 attachPromise(err, link);151 }152 this._onAttach = [];153};154Link.prototype._attachReceived = function(attachFrame) {155 this.sm.attachReceived();156 // process params.157 this.remote.handle = attachFrame.handle;158 this.remote.attach = attachFrame;159 this.session._linksByRemoteHandle[this.remote.handle] = this;160 debug(this.name + ': attached CH=[' + this.session.channel + '=>' + attachFrame.channel + '], Handle=[' + this.handle + '=>' + attachFrame.handle + ']');161 this.emit(Link.Attached, this);162 this._resolveAttachPromises(null, this);163 this._checkCredit({ initial: true });164};165// default implementation does nothing166Link.prototype._checkCredit = function() {};167Link.prototype.flow = function(options) {168 options = options || {};169 var flowOptions = u.defaults(options, {170 channel: this.session.channel,171 handle: this.handle,172 linkCredit: this.linkCredit,173 nextIncomingId: this.session._sessionParams.nextIncomingId,174 incomingWindow: this.session._sessionParams.incomingWindow,175 nextOutgoingId: this.session._sessionParams.nextOutgoingId,176 outgoingWindow: this.session._sessionParams.outgoingWindow,177 available: this.available,178 deliveryCount: this.deliveryCount,179 drain: false180 });181 this.session.connection.sendFrame(new frames.FlowFrame(flowOptions));182};183Link.prototype._sendDetach = function(options) {184 options = options || {};185 var detachoptions = u.defaults(options, {186 handle: this.handle,187 channel: this.session.channel,188 closed: true,189 error: null190 });191 this.session.connection.sendFrame(new frames.DetachFrame(detachoptions));192};193Link.prototype._detached = function(frame) {194 if (frame && frame.error) {195 this.emit(Link.ErrorReceived, errors.wrapProtocolError(frame.error));196 }197 this.remote.detach = frame;198 if (this.remote.handle !== undefined) {199 delete this.session._linksByRemoteHandle[this.remote.handle];200 this.remote.handle = undefined;201 }202 this.emit(Link.Detached, { closed: frame.closed, error: errors.wrapProtocolError(frame.error) });203 this._resolveAttachPromises(frame.error ? frame.error : 'link closed');204 this.sm.detached();205 // now check for whether we should reattach206 var self = this;207 if (self.shouldReattach()) {208 process.nextTick(function() { self._attemptReattach(); });209 }210};211Link.prototype.shouldReattach = function() {212 if (this.session && !this.session.mapped) return false;213 if (!this.session || !this._timeouts) return false;214 if (!this._timeouts.length && !this.policy.reattach.forever) return false;215 return true;216};217Link.prototype._attemptReattach = function() {218 var self = this;219 if (!self._timeouts.length) {220 self._timeouts = u.generateTimeouts(self.policy.reattach);221 }222 self.sm.reattach();223 self._reattachTimer = setTimeout(function() {224 if (self.shouldReattach()) {225 debug('attempting to reattach: ' + self.id);226 self.attach();227 } else {228 process.nextTick(function() { self._attemptReattach(); });229 }230 }, self._timeouts.shift());231};...

Full Screen

Full Screen

rte.util.js

Source:rte.util.js Github

copy

Full Screen

1jQuery(document).ready(function () {2 var comment = document.getElementById("respond");3 var replyrow = document.getElementById("replyrow");4 if (comment && typeof (comment) != "undefined")5 {6 window.RTECONTAINER = comment;7 window.RTECHECKERTIMER = setInterval(RTE_CheckParent, 100);8 }9 else if (replyrow && typeof (replyrow) != "undefined")10 {11 window.RTECONTAINER = replyrow;12 window.RTECHECKERTIMER = setInterval(RTE_CheckParent, 100);13 } 14});15function RTE_CheckParent()16{17 /*for 3.0-3.2*/18 var ed_reply_qtags = document.getElementById("ed_reply_qtags");19 if (ed_reply_qtags && typeof (ed_reply_qtags) != "undefined")20 ed_reply_qtags.style.display="none";21 var post_status_info = document.getElementById("post-status-info");22 if (post_status_info && typeof (post_status_info) != "undefined")23 post_status_info.style.display = "none";24 var editor_toolbar = document.getElementById("editor-toolbar");25 if (editor_toolbar && typeof (editor_toolbar) != "undefined")26 editor_toolbar.style.display = "none";27 var quicktags = document.getElementById("quicktags");28 if (quicktags && typeof (quicktags) != "undefined")29 quicktags.style.display = "none";30 var content_parent = document.getElementById("content_parent");31 if (content_parent && typeof (content_parent) != "undefined")32 content_parent.style.display = "none";33 var editorcontainer = document.getElementById("editorcontainer");34 if (editorcontainer && typeof (editorcontainer) != "undefined")35 editorcontainer.style.border = "none";36 /*check reply row*/37 var replyrow = document.getElementById("replyrow");38 if (replyrow && !document.getElementById("content"))39 {40 var prow = replyrow.parentNode;41 var trs = prow.getElementsByTagName("tr");42 var ci = -1;43 for (var i = 0; i < trs.length; i++)44 {45 if (!trs[i].id)46 continue;47 if (trs[i].id == replyrow.id)48 {49 ci = i;50 break;51 }52 }53 if (ci == -1)54 return;55 if (!window.WP_REPLYROWINDEX) {56 window.WP_REPLYROWINDEX = ci;57 window.WP_RTEEDITOR.DetachFrame();58 window.WP_RTEEDITOR.AttachFrame();59 window.WP_RTEEDITOR.SetText("");60 return;61 }62 if (ci != window.WP_REPLYROWINDEX)63 {64 window.WP_REPLYROWINDEX = ci;65 window.WP_RTEEDITOR.DetachFrame();66 window.WP_RTEEDITOR.AttachFrame();67 window.WP_RTEEDITOR.SetText("");68 }69 return;70 }71 /*end for 3.0-3.2*/72 if (!window.WP_RTEEDITOR)73 return;74 if (!window.RTECONTAINER)75 return;76 if (!window.RTEPARENT)77 {78 window.RTEPARENT = window.RTECONTAINER.parentNode;79 return;80 }81 var curparent = window.RTECONTAINER.parentNode;82 //document.title = [curparent, window.RTEPARENT];83 if (window.RTEPARENT == curparent)84 return;85 window.RTEPARENT = curparent;86 window.WP_RTEEDITOR.DetachFrame();87 //rteeditor._config.skin_div_parent.insertBefore(div, rteeditor._config.skin_div_holder);88 //rteeditor._config.skin_div_parent.removeChild(rteeditor._config.skin_div_holder);89 //rteeditor._config.skin_div_holder = div;90 window.WP_RTEEDITOR.AttachFrame();91 window.WP_RTEEDITOR.SetText("");...

Full Screen

Full Screen

TaskExecutor.js

Source:TaskExecutor.js Github

copy

Full Screen

1// @flow2import * as React from 'react';3type ExecutorMessage = {4 command: string,5 payload: any,6};7export type CommandHandler = (payload: any) => void | Promise<void>;8type Props = {|9 code: string,10 handlers: {11 [command: string]: CommandHandler,12 },13|};14type Instance = React.ElementRef<'iframe'>;15const fetchExecutorDoc = fetch('/executor').then((response) => response.text());16/**17 * A TaskExecutor encapsulates a single hidden, sandboxed iframe containing the `/executor` document.18 * TaskExecutors are managed by an executor.19 *20 * The component sets up communication facilities for communication between the iframe and the IDE.21 */22const TaskExecutor = React.forwardRef<Props, Instance>(23 ({ code, handlers }: Props, ref: Ref<Instance>) => {24 // load the executorDoc in the beginning25 const [executorDoc, setExecutorDoc] = React.useState<string | null>(null);26 React.useEffect(() => {27 fetchExecutorDoc.then(setExecutorDoc);28 }, []);29 // the frame, stored for local use30 const [frame, setFrame] = React.useState<React.ElementRef<'iframe'> | null>(null);31 // uses useCallback because otherwise each render resets the ref.32 // (the ref could be registered with a new callback, so the callback needs to be stable)33 const attachFrame = React.useCallback(34 (f) => {35 // set the ref for this component36 if (typeof ref === 'function') ref(f);37 else ref.current = f;38 // set the frame state variable39 setFrame(f);40 },41 [ref],42 );43 // register message listener44 React.useEffect(() => {45 if (frame === null) return undefined;46 function receiveMessage({ data, origin, source }: MessageEvent) {47 if (origin !== 'null' || source !== frame.contentWindow) return;48 const { command, payload } =49 // if the source is what we expected, we assume the data is valid50 // $FlowExpectError51 (data: ExecutorMessage);52 handlers[command]?.(payload);53 }54 window.addEventListener('message', receiveMessage, false);55 return () => {56 window.removeEventListener('message', receiveMessage);57 };58 }, [frame, handlers]);59 // send execute command to iframe60 React.useEffect(() => {61 if (frame === null) return;62 frame.onload = () => {63 const sender = null;64 const command = 'init';65 const payload = code;66 frame.contentWindow.postMessage({ sender, command, payload }, '*');67 };68 }, [frame, code]);69 // only render the iframe after loading the executorDoc70 if (executorDoc === null) return null;71 return (72 // eslint-disable-next-line jsx-a11y/iframe-has-title73 <iframe74 ref={attachFrame}75 sandbox="allow-scripts"76 // src="/executor"77 srcDoc={executorDoc}78 style={{ display: 'none' }}79 />80 );81 },82);...

Full Screen

Full Screen

utils.js

Source:utils.js Github

copy

Full Screen

...20 * @param {string} url21 */22 attachFrame: async function(page, frameId, url) {23 await page.evaluate(attachFrame, frameId, url);24 function attachFrame(frameId, url) {25 const frame = document.createElement('iframe');26 frame.src = url;27 frame.id = frameId;28 document.body.appendChild(frame);29 return new Promise(x => frame.onload = x);30 }31 },32 /**33 * @param {!Page} page34 * @param {string} frameId35 */36 detachFrame: async function(page, frameId) {37 await page.evaluate(detachFrame, frameId);38 function detachFrame(frameId) {...

Full Screen

Full Screen

frame-utils.js

Source:frame-utils.js Github

copy

Full Screen

...21 * @return {!Promise}22 */23 attachFrame: async function(page, frameId, url) {24 await page.evaluate(attachFrame, frameId, url);25 function attachFrame(frameId, url) {26 const frame = document.createElement('iframe');27 frame.src = url;28 frame.id = frameId;29 document.body.appendChild(frame);30 return new Promise(x => frame.onload = x);31 }32 },33 /**34 * @param {!Page} page35 * @param {string} frameId36 * @return {!Promise}37 */38 detachFrame: async function(page, frameId) {39 await page.evaluate(detachFrame, frameId);...

Full Screen

Full Screen

Using AI Code Generation

copy

Full Screen

1const { attachFrame } = require('playwright/lib/server/chromium/crPage');2const { chromium } = require('playwright');3(async () => {4 const browser = await chromium.launch();5 const page = await browser.newPage();6 const frame = await page.frames()[0];7 await attachFrame(page, frame._id, frame._url);8 await page.evaluate((id) => {9 const frame = document.getElementById(id);10 frame.remove();11 }, frame._id);12 await browser.close();13})();14import { chromium } from 'playwright';15const { chromium } = require('playwright');16import { chromium } from 'playwright';17const { chromium } = require('playwright');18import { chromium } from 'playwright';19(async () => {20 const browser = await chromium.launch();21 const page = await browser.newPage();22 await page.screenshot({ path: 'example.png' });23 await browser.close();24})();25import { chromium } from 'playwright';26(async () => {27 const browser = await chromium.launch();28 const page = await browser.newPage();

Full Screen

Using AI Code Generation

copy

Full Screen

1const { attachFrame } = require('playwright/lib/server/chromium/crPage');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 console.log(frame.url());8 await browser.close();9})();

Full Screen

Using AI Code Generation

copy

Full Screen

1const { attachFrame } = require('playwright/lib/server/chromium/crPage');2const path = require('path');3(async () => {4 const browser = await chromium.launch();5 const page = await browser.newPage();6 const frame = await attachFrame(page, null, path.join(__dirname, 'frame.html'));7 await frame.waitForSelector('h1');8 await browser.close();9})();10The attachFrame method takes three parameters: the page object, the name of the frame (null in this case) and the path to the file

Full Screen

Using AI Code Generation

copy

Full Screen

1const { attachFrame } = require('@playwright/test/lib/frame');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 await frame.click('text=About');8 await page.close();9 await context.close();10 await browser.close();11})();12const { attachFrame } = require('@playwright/test/lib/frame');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 await frame.click('text=About');19 await page.close();20 await context.close();21 await browser.close();22})();23const { attachFrame } = require('@playwright/test/lib/frame');24const { chromium } = require('playwright');25(async () => {26 const browser = await chromium.launch();27 const context = await browser.newContext();28 const page = await context.newPage();29 await frame.click('text=About');30 await page.close();31 await context.close();32 await browser.close();33})();34const { attachFrame } = require('@playwright/test/lib/frame');35const { chromium } = require('playwright');36(async () => {37 const browser = await chromium.launch();38 const context = await browser.newContext();39 const page = await context.newPage();40 await frame.click('text=About');41 await page.close();42 await context.close();

Full Screen

Using AI Code Generation

copy

Full Screen

1const { chromium } = require('playwright-chromium');2const { attachFrame } = require('playwright-core/lib/server/chromium/crPage');3(async () => {4 const browser = await chromium.launch();5 const context = await browser.newContext();6 const page = await context.newPage();7 const frames = await page.frames();8 const frame = frames[1];9 const element = await frame.$('#hplogo');10 await attachFrame(page, frame, element);11 await browser.close();12})();

Full Screen

Using AI Code Generation

copy

Full Screen

1const { attachFrame } = require('playwright-core/lib/server/chromium/crPage');2const { createTestServer } = require('playwright-core/lib/utils/testserver/');3const { chromium } = require('playwright-core');4(async () => {5 const server = await createTestServer();6 server.setRoute('/empty.html', (req, res) => {7 res.end();8 });9 server.setRoute('/frame.html', (req, res) => {10 res.end(`11 <iframe src="${server.PREFIX}/empty.html"></iframe>12 `);13 });14 const browser = await chromium.launch();15 const context = await browser.newContext();16 const page = await context.newPage();17 await page.goto(server.EMPTY_PAGE);18 await page.setContent(`<iframe src="${server.PREFIX}/frame.html"></iframe>`);19 const frame = page.frames()[1];20 const childFrame = frame.childFrames()[0];21 await attachFrame(page, 'frameId', server.EMPTY_PAGE);22 await page.evaluate(frameId => {23 window.frames[frameId].location.href = '/empty.html';24 }, 'frameId');25 await childFrame.waitForNavigation();26 await browser.close();27 await server.stop();28})();29module.exports = {30 use: {31 }32};33{34 "scripts": {35 },36 "dependencies": {37 }38}

Full Screen

Using AI Code Generation

copy

Full Screen

1const { attachFrame } = require('playwright/lib/server/chromium/crPage');2const { chromium } = require('playwright');3const { createServer } = require('http-server');4(async () => {5 const server = createServer({ root: '.' });6 server.listen(8080);7 const browser = await chromium.launch({ headless: false });8 const page = await browser.newPage();9 await frame.waitForSelector('text=Playwright');10 await frame.click('text=Playwright');11 await browser.close();12 server.close();13})();14<button onclick="window.alert('Hello')">Click me</button>

Full Screen

Using AI Code Generation

copy

Full Screen

1const { chromium, webkit, firefox } = require('playwright');2(async () => {3 const browser = await chromium.launch();4 const context = await browser.newContext();5 const page = await context.newPage();6 const frame = page.mainFrame().childFrames()[0];7 await page.evaluate(() => {8 window.attachFrame = (frame) => {9 document.body.appendChild(frame);10 };11 });12 await page.evaluate(frame => window.attachFrame(frame), frame);13 await page.screenshot({ path: 'test.png' });14 await browser.close();15})();16const { test, expect } = require('@playwright/test');17test('test', async ({ page }) => {18 await page.goto('test.html');19 const frame = page.mainFrame().childFrames()[0];20 await page.evaluate(() => {21 window.attachFrame = (frame) => {22 document.body.appendChild(frame);23 };24 });25 await page.evaluate(frame => window.attachFrame(frame), frame);26 await page.screenshot({ path: 'test.png' });27});

Full Screen

Using AI Code Generation

copy

Full Screen

1const { attachFrame } = require('playwright-core/lib/server/dom.js');2const frame = await attachFrame(page, 'frameId', 'frameName', 'frameUrl');3const { detachFrame } = require('playwright-core/lib/server/dom.js');4await detachFrame(page, frame);5const { attachWorker } = require('playwright-core/lib/server/dom.js');6const worker = await attachWorker(page, 'workerId', 'workerUrl');7const { detachWorker } = require('playwright-core/lib/server/dom.js');8await detachWorker(page, worker);9const { setFileChooserIntercepted } = require('playwright-core/lib/server/dom.js');10await setFileChooserIntercepted(page, true);11const { setFileChooserFiles } = require('playwright-core/lib/server/dom.js');12await setFileChooserFiles(page, ['path/to/file1', 'path/to/file2']);13const { setFileChooserFiles } = require('playwright-core/lib/server/dom.js');14await setFileChooserFiles(page, ['path/to/file1', 'path/to/file2']);15const { setFileChooserFiles } = require('playwright-core/lib/server/dom.js');16await setFileChooserFiles(page, ['path/to/file1', 'path/to/file2']);17const { setFileChooserFiles } = require('playwright-core/lib/server/dom.js');18await setFileChooserFiles(page, ['path/to/file1', 'path/to/file2']);19const { setFileChooserFiles } = require('playwright-core/lib/server/dom.js');20await setFileChooserFiles(page, ['path/to/file1', 'path/to/file2']);21const { setFileChooserFiles } = require('playwright-core/lib/server/dom.js');22await setFileChooserFiles(page, ['path/to/file1', 'path/to/file2']);

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