Best JavaScript code snippet using playwright-internal
browserservice.js
Source:browserservice.js
...75 done();76 });77 });78 it('should succeed if stoped with open browsers', function (done) {79 var id = _browserService.launchBrowser('http://google.com.ar', {}, function (event) {80 switch (event.name) {81 case 'onLaunched':82 assert.equal( id, event.browserID );83 _browserService.stop(done);84 break;85 }86 });87 });88 });89 describe('#isReady()', function() {90 beforeEach( function() {91 assert( _browserService.start(_cfg, _crashObserver, {'VK_ENTER': 13}) );92 });93 it('should emit ready events when htmlshellremote connects/disconnects', function(done) {94 assert( !_browserService.isReady() );95 var notReadyCalled = false;96 _browserService.on('ready', function(isReady) {97 if (isReady) {98 assert( _browserService.isReady() );99 _browserService.stop(function() {100 assert( !_browserService.isReady() );101 assert( notReadyCalled );102 done();103 });104 } else {105 notReadyCalled = true;106 }107 });108 });109 });110 describe('Browser methods and events', function () {111 beforeEach( function (done) {112 _browserService.once('ready', function (isReady) {113 if (isReady) {114 done();115 }116 });117 _cfg.htmlshell.unsupportedCodecs = ['webm'];118 assert( _browserService.start(_cfg, _crashObserver, {'VK_ENTER': 13}) );119 });120 afterEach( function (done) {121 _browserService.stop(done);122 });123 it('should throw a recovery error when receives an error from htmlshellremote', function (done) {124 Mocks.CheckRecoveryError('[BrowserService] Received remote error: TEST_REMOTE_ERROR', done);125 process.nextTick(function () {126 _htmlshell.emit('error', new Error('TEST_REMOTE_ERROR'));127 });128 });129 it('should close browser when remote disconnects and fail to send more messages', function (done) {130 var id = _browserService.launchBrowser('http://google.com.ar', {}, function (event) {131 switch (event.name) {132 case 'onLaunched':133 assert.equal( id, event.browserID );134 _htmlshell.emit('disconnected');135 break;136 case 'onClose':137 assert.equal( id, event.browserID );138 assert.equal( _browserService.launchBrowser('http://google.com.ar', {}), -1 );139 assert( !_browserService.closeBrowser(0) );140 assert( !_browserService.showBrowser(0) );141 done();142 break;143 }144 });145 assert.equal( id, 0 );146 });147 it('should succed to launch a browser when remote re-connects affter disconnection', function (done) {148 _htmlshell.emit('disconnected');149 assert.equal( _browserService.launchBrowser('http://google.com.ar', {}), -1 );150 _htmlshell.emit('connected');151 var id = _browserService.launchBrowser('http://google.com.ar', {}, function (event) {152 switch (event.name) {153 case 'onLaunched':154 assert.equal( id, event.browserID );155 done();156 break;157 }158 });159 assert.equal( id, 0 );160 });161 it('should launch a browser successfully from http url', function (done) {162 var id = _browserService.launchBrowser('http://google.com.ar', {}, function (event) {163 switch (event.name) {164 case 'onLaunched':165 assert.equal( id, event.browserID );166 done();167 break;168 }169 });170 assert.equal( id, 0 );171 });172 it('should launch a browser successfully from https url', function (done) {173 var id = _browserService.launchBrowser('https://google.com.ar', {}, function (event) {174 switch (event.name) {175 case 'onLaunched':176 assert.equal( id, event.browserID );177 done();178 break;179 }180 });181 assert.equal( id, 0 );182 });183 it('should launch a browser successfully from file url', function( done ) {184 var id = _browserService.launchBrowser('file://' + __dirname + '/resources/bin/basic.html', {}, function (event) {185 switch (event.name) {186 case 'onLaunched':187 assert.equal( id, event.browserID );188 done();189 break;190 }191 });192 assert.equal( id, 0 );193 });194 it('should launch a browser successfully from file url with params', function( done ) {195 var id = _browserService.launchBrowser('file://' + __dirname + '/resources/bin/basic.html?param=value', {}, function (event) {196 switch (event.name) {197 case 'onLaunched':198 assert.equal( id, event.browserID );199 done();200 break;201 }202 });203 assert.equal( id, 0 );204 });205 it('should launch a browser successfully with default options', function( done ) {206 let expectedInitJs = 'TacOnExit=c=>window.onbeforeunload=e=>{c(TacExit);e.returnValue="HTMLSHELL_ASYNC_EXIT";};' +207 'TacExit=()=>{window.onbeforeunload=null;HtmlShellCall("htmlshell","async_exit_complete");};' +208 'window.tacKeyboardLayout={"VK_ENTER":13};';209 _htmlshell.sendMessage = function (msg) {210 assert( msg.launchBrowser );211 var launchMsg = msg.launchBrowser;212 assert.equal( 0, launchMsg.options.bounds.x );213 assert.equal( 0, launchMsg.options.bounds.y );214 assert.equal( 0, launchMsg.options.bounds.w );215 assert.equal( 0, launchMsg.options.bounds.h );216 assert.equal( false, launchMsg.options.bgTransparent );217 assert.equal( true, launchMsg.options.focus );218 assert.equal( expectedInitJs, launchMsg.options.js );219 assert.equal( 0, launchMsg.options.plugins.length );220 };221 var id = _browserService.launchBrowser('https://google.com.ar', {}, function (event) {222 switch (event.name) {223 case 'onLaunched':224 assert.equal( id, event.browserID );225 done();226 break;227 }228 });229 assert.equal( id, 0 );230 });231 it('should launch a browser successfully with valid options', function( done ) {232 var expectedInitJs = 'TacOnExit=c=>window.onbeforeunload=e=>{c(TacExit);e.returnValue="HTMLSHELL_ASYNC_EXIT";};' +233 'TacExit=()=>{window.onbeforeunload=null;HtmlShellCall("htmlshell","async_exit_complete");};' +234 'function MakeApi(n,t,o){' +235 'var e=window;' +236 't.split(".").forEach(n=>{' +237 'e[n]=e[n]||{},' +238 'e=e[n]' +239 '}),' +240 'o.forEach(u=>{' +241 'e[u]=(...e)=>{' +242 'var o,i=e.length;' +243 'return i>0&&"function"==typeof e[--i]&&(o=e[i],e=e.slice(0,i)),HtmlShellCall("RemoteExtension",{id:n,name:t,method:u,params:e},o)' +244 '}' +245 '})' +246 '}' +247 'MakeApi("service.id","TestService",["method1","method2"]);' +248 'window.tacKeyboardLayout={' +249 '"VK_ENTER":13' +250 '};';251 _htmlshell.sendMessage = function (msg) {252 assert( msg.launchBrowser );253 var launchMsg = msg.launchBrowser;254 assert.equal( expectedInitJs, launchMsg.options.js );255 assert.equal( 10, launchMsg.options.bounds.x );256 assert.equal( 20, launchMsg.options.bounds.y );257 assert.equal( 200, launchMsg.options.bounds.w );258 assert.equal( 100, launchMsg.options.bounds.h );259 assert.equal( true, launchMsg.options.bgTransparent );260 assert.equal( false, launchMsg.options.focus );261 assert.equal( 2, launchMsg.options.plugins.length );262 assert.equal( 'PlugIn 1', launchMsg.options.plugins[0] );263 assert.equal( 'PlugIn 2', launchMsg.options.plugins[1] );264 };265 var id = _browserService.launchBrowser('https://google.com.ar', {266 apis:[{id:'service.id', name: 'TestService', exports: ['method1', 'method2']}],267 bounds: { x:10, y:20, w:200, h:100 },268 focus: false,269 bgTransparent: true,270 plugins: ['PlugIn 1', 'PlugIn 2']271 },272 function (event) {273 switch (event.name) {274 case 'onLaunched':275 assert.equal( id, event.browserID );276 done();277 break;278 }279 });280 assert.equal( id, 0 );281 });282 it('should launch browser with keyboard layout allways', function( done ) {283 var expectedInitJs = 'TacOnExit=c=>window.onbeforeunload=e=>{c(TacExit);e.returnValue="HTMLSHELL_ASYNC_EXIT";};' +284 'TacExit=()=>{window.onbeforeunload=null;HtmlShellCall("htmlshell","async_exit_complete");};' +285 'window.tacKeyboardLayout={"VK_ENTER":13};';286 _htmlshell.sendMessage = function (msg) {287 assert( msg.launchBrowser );288 assert.equal( expectedInitJs, msg.launchBrowser.options.js );289 };290 var id = _browserService.launchBrowser('https://google.com.ar', {},291 function (event) {292 switch (event.name) {293 case 'onLaunched':294 assert.equal( id, event.browserID );295 done();296 break;297 }298 });299 assert.equal( id, 0 );300 });301 it('should launch browser with disabled codecs', function( done ) {302 _htmlshell.sendMessage = function (msg) {303 assert( msg.launchBrowser );304 assert.equal(305 msg.launchBrowser.options.js,306 'TacOnExit=c=>window.onbeforeunload=e=>{c(TacExit);e.returnValue="HTMLSHELL_ASYNC_EXIT";};' +307 'TacExit=()=>{window.onbeforeunload=null;HtmlShellCall("htmlshell","async_exit_complete");};' +308 'window.tacKeyboardLayout={"VK_ENTER":13};' +309 'function DisableCodecs(e){function i(i,n){return void 0===n||e.some(function(e){return-1!=n.indexOf(e)})?"":i(n)}var n=document.createElement("video");n.__proto__.canPlayType=i.bind(this,n.canPlayType.bind(n));var o=window.MediaSource;void 0!==o&&(o.isTypeSupported=i.bind(this,o.isTypeSupported.bind(o)))}' +310 'DisableCodecs(["webm"]);'311 );312 };313 var id = _browserService.launchBrowser('https://google.com.ar', {hwCodecsOnly: true},314 function (event) {315 switch (event.name) {316 case 'onLaunched':317 assert.equal( id, event.browserID );318 done();319 break;320 }321 });322 assert.equal( id, 0 );323 });324 it('should emit error if a browser is launched for an inexistent id', function (done) {325 _browserService.on('BrowserServiceError', function (err) {326 assert.equal( 'Browser launched for inexisten id=5', err.message );327 done();328 });329 _htmlshell.evtCallback({330 type: 'onLaunched',331 browserID: 5332 });333 });334 it('should emit error if a browser is done loading when after browser was closed', function (done) {335 _browserService.on('BrowserServiceError', function (err) {336 assert.equal( 'Received browser loaded event for inexisten id=5', err.message );337 done();338 });339 _htmlshell.evtCallback({340 type: 'onLoaded',341 browserID: 5342 });343 });344 it('should fail to launch a browser from invalid urls', function() {345 _browserService.on('browserLaunched', function (/*id*/) {346 assert( false && 'Browser should fail to launch' );347 });348 assert.equal( -1, _browserService.launchBrowser('ftp://google.com.ar') );349 assert.equal( -1, _browserService.launchBrowser('file://' + __dirname + '/resources/bin/unexistent.html') );350 });351 it('should fail to launch a browser with invalid bounds parameter', function() {352 _browserService.on('browserLaunched', function (/*id*/) {353 assert( false && 'Browser should fail to launch' );354 });355 assert.equal( -1, _browserService.launchBrowser('http://google.com.ar', {bounds:'invalid param'}) );356 assert.equal( -1, _browserService.launchBrowser('http://google.com.ar', {bounds:{}}) );357 assert.equal( -1, _browserService.launchBrowser('http://google.com.ar', {bounds:{x:0,y:0,w:-1,h:0}}) );358 assert.equal( -1, _browserService.launchBrowser('http://google.com.ar', {bounds:{x:0,y:0}}) );359 });360 it('should fail to launch a browser with invalid plugins parameter', function() {361 _browserService.on('browserLaunched', function (/*id*/) {362 assert( false && 'Browser should fail to launch' );363 });364 assert.equal( -1, _browserService.launchBrowser('http://google.com.ar', {plugins:'invalid param'}) );365 assert.equal( -1, _browserService.launchBrowser('http://google.com.ar', {plugins:{}}) );366 assert.equal( -1, _browserService.launchBrowser('http://google.com.ar', {plugins:[1]}) );367 });368 it('should fail to launch a browser with invalid jsapis parameter', function() {369 _browserService.on('browserLaunched', function (/*id*/) {370 assert( false && 'Browser should fail to launch' );371 });372 assert.equal( -1, _browserService.launchBrowser('http://google.com.ar', null, 'invalid param') );373 assert.equal( -1, _browserService.launchBrowser('http://google.com.ar', null, {}) );374 assert.equal( -1, _browserService.launchBrowser('http://google.com.ar', null, ['']) );375 assert.equal( -1, _browserService.launchBrowser('http://google.com.ar', null, [{id: '', name: '', exports: []}]) );376 assert.equal( -1, _browserService.launchBrowser('http://google.com.ar', null, [{id: 'id', name: 'name', exports: ''}]) );377 });378 it('should launch two browsers successfully', function( done ) {379 var launched = 0;380 _browserService.on('browserLaunched', function (id) {381 launched++;382 switch (launched) {383 case 1:384 assert.equal( id1, id );385 break;386 case 2:387 assert.equal( id2, id );388 done();389 break;390 }391 });392 var id1 = _browserService.launchBrowser('http://google.com.ar');393 var id2 = _browserService.launchBrowser('file://' + __dirname + '/resources/bin/basic.html');394 assert.equal( id1, 0 );395 assert.equal( id2, 1 );396 });397 it('should show/hide a browser successfully', function (done) {398 var id = _browserService.launchBrowser('http://google.com.ar', {}, function (event) {399 switch (event.name) {400 case 'onLaunched':401 assert.equal( id, event.browserID );402 assert( _browserService.showBrowser(id, true) );403 assert( _browserService.showBrowser(id, false) );404 done();405 break;406 }407 });408 assert.equal( id, 0 );409 });410 it('should close a browser successfully after it was successfully launched if id is valid', function (done) {411 var id = _browserService.launchBrowser('http://google.com.ar', {}, function (event) {412 switch (event.name) {413 case 'onLaunched':414 assert.equal( id, event.browserID );415 assert( _browserService.closeBrowser(id) );416 break;417 case 'onClose':418 assert.equal( id, event.browserID );419 done();420 break;421 }422 });423 });424 it('should close a browser successfully inmediatly after it was launched if id is valid', function (done) {425 var id = _browserService.launchBrowser('http://google.com.ar', {}, function (event) {426 switch (event.name) {427 case 'onLaunched':428 done(new Error('Shouldn\'t call launched callback when browser is closed'));429 break;430 case 'onClose':431 assert.equal( id, event.browserID );432 done();433 break;434 }435 });436 assert( _browserService.closeBrowser(id) );437 });438 it('should close multiples browsers successfully', function (done) {439 var b2Closed = false;440 _browserService.on('browserClosed', function (id) {441 if (id === id1) {442 assert( b2Closed );443 done();444 }445 });446 var id1 = _browserService.launchBrowser('http://google.com.ar');447 var id2 = _browserService.launchBrowser('http://google.com.ar', {}, function (event) {448 switch (event.name) {449 case 'onLaunched':450 assert( id1 != id2 );451 assert.equal( id2, event.browserID );452 assert( _browserService.closeBrowser(id2) );453 assert( _browserService.closeBrowser(id1) );454 break;455 case 'onClose':456 assert.equal( id2, event.browserID );457 b2Closed = true;458 break;459 }460 });461 });462 it('should fail to close a browser from an invalid id', function () {463 _browserService.on('browserClosed', function (/*id*/) {464 assert( false && 'Should not call onBrowserClosed if closeBrowser fail' );465 });466 assert( !_browserService.closeBrowser(2) );467 });468 it('should fail to close a browser twice', function () {469 var closed = 0;470 var id = _browserService.launchBrowser('http://google.com.ar', {}, function (event) {471 switch (event.name) {472 case 'onClose':473 closed++;474 assert.equal( closed, 1 );475 assert.equal( id, event.browserID );476 break;477 }478 });479 assert( _browserService.closeBrowser(id) );480 assert( !_browserService.closeBrowser(id) );481 });482 it('should emit browserLaunched event when a browser is launched', function (done) {483 _browserService.once('browserLaunched', function (bId) {484 assert.equal( id, bId );485 assert( _browserService.closeBrowser(bId) );486 done();487 });488 var id = _browserService.launchBrowser('http://google.com.ar');489 assert.equal( id, 0 );490 });491 it('should emit browserLaunched event once for each browser launched', function (done) {492 var launched = 0;493 _browserService.on('browserLaunched', function (id) {494 launched++;495 if (id !== id1 && id !== id2) {496 done(new Error('browserLaunched emited with unexpected browser id'));497 }498 if (launched == 2) {499 assert( _browserService.closeBrowser(id1) );500 assert( _browserService.closeBrowser(id2) );501 done();502 }503 });504 var id1 = _browserService.launchBrowser('http://google.com.ar', {}, function (event) {505 switch (event.name) {506 case 'onLaunched': assert.equal( id1, event.browserID ); break;507 }508 });509 var id2 = _browserService.launchBrowser('http://html5test.com', {}, function (event) {510 switch (event.name) {511 case 'onLaunched': assert.equal( id2, event.browserID ); break;512 }513 });514 });515 it('should emit browserClosed event when a browser is closed', function (done) {516 _browserService.once('browserClosed', function (id) {517 assert.equal( id, bId );518 done();519 });520 var bId = _browserService.launchBrowser('http://google.com.ar', {}, function (event) {521 switch (event.name) {522 case 'onLaunched':523 assert.equal( bId, event.browserID );524 assert( _browserService.closeBrowser(bId) );525 break;526 }527 });528 });529 it('should emit browserClosed event for each browser closed', function (done) {530 var closed = 0;531 _browserService.on('browserClosed', function (id) {532 closed++;533 if (id !== bId1 && id !== bId2) done(new Error('Got bad id'));534 if (closed == 2) done();535 });536 var bId1 = _browserService.launchBrowser('http://google.com.ar', {}, function (event) {537 switch (event.name) {538 case 'onLaunched': assert.equal( bId1, event.browserID ); break;539 }540 });541 var bId2 = _browserService.launchBrowser('http://html5test.com', {}, function (event) {542 switch (event.name) {543 case 'onLaunched':544 assert.equal( bId2, event.browserID );545 assert( _browserService.closeBrowser(bId1) );546 assert( _browserService.closeBrowser(bId2) );547 break;548 }549 });550 });551 it('should emit browser closed for loaded browsers when remote disconnects', function (done) {552 _browserService.on('browserLaunched', function (id) {553 assert.equal( id, originalId );554 _htmlshell.emit('disconnected');555 });556 _browserService.on('browserClosed', function (id, error) {557 assert.equal( 'Htmlshell disconnected', error.message );558 assert.equal( id, originalId );559 done();560 });561 _htmlshell.shouldSendResponse = true;562 var originalId = _browserService.launchBrowser('http://google.com');563 assert.equal( originalId, 0 );564 });565 it('should emit browser closed for loading browsers when remote disconnects', function (done) {566 _browserService.on('browserClosed', function (id, error) {567 assert.equal( 'Htmlshell disconnected', error.message );568 assert.equal( id, originalId );569 done();570 });571 _htmlshell.shouldSendResponse = false;572 var originalId = _browserService.launchBrowser('http://google.com');573 assert.equal( originalId, 0 );574 _htmlshell.emit('disconnected');575 });576 it('should emit browser closed for closing browsers when remote disconnects', function (done) {577 _browserService.on('browserLaunched', function (id) {578 assert.equal( id, originalId );579 _htmlshell.shouldSendResponse = false;580 _browserService.closeBrowser(originalId);581 _htmlshell.shouldSendResponse = true;582 _htmlshell.emit('disconnected');583 });584 _browserService.on('browserClosed', function (id, error) {585 assert.equal( 'Htmlshell disconnected', error.message );586 assert.equal( id, originalId );587 done();588 });589 _htmlshell.shouldSendResponse = true;590 var originalId = _browserService.launchBrowser('http://google.com');591 assert.equal( originalId, 0 );592 });593 it('should not emit browser closed for closed browsers when remote disconnects', function () {594 _browserService.on('browserLaunched', function (id) {595 assert.equal( id, originalId );596 _browserService.closeBrowser(originalId);597 });598 _browserService.on('browserClosed', function (id) {599 assert.equal( id, originalId );600 _htmlshell.emit('disconnected');601 });602 var originalId = _browserService.launchBrowser('http://google.com');603 assert.equal( originalId, 0 );604 });605 it('apicall should return error if browser do not exist', function (done) {606 _htmlshell.sendMessage = function( msg ) {607 if (msg.jsResponse) {608 var evt = msg.jsResponse;609 assert.equal( 1, evt.queryID );610 assert.equal( 2, evt.browserID );611 assert.equal( 'Api call arrived from unexistent browser with id=2', evt.error );612 assert( !evt.response );613 assert( !evt.isSignal );614 done();615 }616 };617 _htmlshell.evtCallback({618 type: 'onAPI',619 browserID: '2',620 queryID: '1',621 params: '{"id":"ar.edu.unlp.info.lifia.tvd.FakeService","method":"test","params":["test_params"]}',622 });623 });624 it('apicall should return error if browser do not handle api call', function (done) {625 _htmlshell.sendMessage = function( msg ) {626 if (msg.jsResponse) {627 var evt = msg.jsResponse;628 assert.equal( bId, evt.browserID );629 assert.equal( 2, evt.queryID );630 assert.equal( 'Api call not handled by browser with id=' + bId, evt.error );631 assert( !evt.response );632 assert( !evt.isSignal );633 _browserService.closeBrowser(bId);634 }635 };636 _browserService.on('browserClosed', function (id) {637 assert.equal( bId, id );638 done();639 });640 _browserService.on('browserLaunched', function (id) {641 assert.equal( bId, id );642 _htmlshell.evtCallback({643 type: 'onAPI',644 browserID: bId,645 queryID: '2',646 params: '{"id":"ar.edu.unlp.info.lifia.tvd.FakeService","method":"test","params":["test_params"]}'647 });648 });649 var bId = _browserService.launchBrowser('http://google.com');650 });651 it('apicall should not remove callback if apicall is a signal', function (done) {652 var resultCB = null;653 var called = 0;654 _htmlshell.sendMessage = function( msg ) {655 if (msg.jsResponse) {656 var evt = msg.jsResponse;657 assert.equal( 2, evt.queryID );658 assert.equal( 0, evt.browserID );659 assert( !evt.error );660 assert.equal( 'Test signal', JSON.parse(evt.params) );661 assert( evt.isSignal );662 called++;663 }664 };665 var bId = _browserService.launchBrowser('http://google.com', {}, function (evt) {666 switch (evt.name) {667 case 'onLaunched':668 assert.equal( bId, evt.browserID );669 _htmlshell.evtCallback({670 type: 'onAPI',671 browserID: bId,672 queryID: 2,673 params: '{"id":"ar.edu.unlp.info.lifia.tvd.FakeService","method":"on","params":[]}'674 });675 break;676 case 'onClose':677 assert.equal( bId, evt.browserID );678 assert( !evt.error );679 done();680 break;681 case 'onAPI':682 assert.equal( bId, evt.browserID );683 assert.equal( 'ar.edu.unlp.info.lifia.tvd.FakeService', evt.serviceID );684 assert.equal( 'on', evt.method );685 assert.equal( evt.params, undefined );686 resultCB = evt.resultCB;687 }688 });689 process.nextTick(function() {690 assert( resultCB );691 resultCB({data:['Test signal'],isSignal:true});692 resultCB({data:['Test signal'],isSignal:true});693 assert.equal( 2, called );694 _browserService.closeBrowser(bId);695 });696 });697 it('apicall should call api handler correctly', function (done) {698 _htmlshell.sendMessage = function( msg ) {699 if (msg.jsResponse) {700 var evt = msg.jsResponse;701 assert.equal( 2, evt.queryID );702 assert.equal( bId, evt.browserID );703 assert.equal( 'test_response', JSON.parse(evt.params) );704 assert( !evt.error );705 assert( !evt.isSignal );706 _browserService.closeBrowser(bId);707 }708 };709 var bId = _browserService.launchBrowser('http://google.com', {}, function (evt) {710 switch (evt.name) {711 case 'onLaunched':712 assert.equal( bId, evt.browserID );713 _htmlshell.evtCallback({714 type: 'onAPI',715 browserID: bId,716 queryID: 2,717 params: '{"id":"ar.edu.unlp.info.lifia.tvd.FakeService","method":"test","params":["test_params"]}',718 });719 break;720 case 'onClose':721 assert.equal( bId, evt.browserID );722 assert( !evt.error );723 done();724 break;725 case 'onAPI':726 assert.equal( bId, evt.browserID );727 assert.equal( 'ar.edu.unlp.info.lifia.tvd.FakeService', evt.serviceID );728 assert.equal( 'test', evt.method );729 assert.equal( 'test_params', evt.params );730 evt.resultCB({data:['test_response'],isSignal:false});731 }732 });733 });734 it('key event should call onKey handler correctly', function (done) {735 var bId = _browserService.launchBrowser('http://google.com', {}, function (evt) {736 switch (evt.name) {737 case 'onLaunched':738 assert.equal( bId, evt.browserID );739 _htmlshell.evtCallback({740 type: 'onKey',741 browserID: bId,742 keyCode: 13,743 isUp: true744 });745 break;746 case 'onClose':747 assert.equal( bId, evt.browserID );748 assert( !evt.error );749 done();750 break;751 case 'onKey':752 assert.equal( bId, evt.browserID );753 assert.equal( "VK_ENTER", evt.code );754 assert.equal( true, evt.isUp );755 _browserService.closeBrowser(bId);756 break;757 }758 });759 });760 it('should emit error if a key event arrive for an inexsitent browser id', function (done) {761 _browserService.on('BrowserServiceError', function (err) {762 assert.equal( 'Received key event from invalid browser with id=5', err.message );763 done();764 });765 _htmlshell.evtCallback({766 type: 'onKey',767 browserID: 5,768 keyCode: 10,769 isUp: true770 });771 });772 it('error event should call onWebLog handler correctly', function (done) {773 var bId = _browserService.launchBrowser('http://google.com', {}, function (evt) {774 switch (evt.name) {775 case 'onLaunched':776 assert.equal( bId, evt.browserID );777 _htmlshell.evtCallback({778 type: 'onWebLog',779 browserID: bId,780 logData: {781 source: 'www.google.com.ar',782 line: 43,783 level: 2,784 message: 'Error description',785 }786 });787 break;788 case 'onClose':789 assert.equal( bId, evt.browserID );790 assert( !evt.error );791 done();792 break;793 case 'onWebLog':794 assert.equal( bId, evt.browserID );795 assert.equal( 'Error description', evt.logData.message );796 assert.equal( 'www.google.com.ar', evt.logData.source );797 assert.equal( 43, evt.logData.line );798 assert.equal( 2, evt.logData.level );799 _browserService.closeBrowser(bId);800 break;801 }802 });803 });804 it('should emit error if a webLog event arrive for an inexsitent browser id', function (done) {805 _browserService.on('BrowserServiceError', function (err) {806 assert.equal( 'Received weblog event from invalid browser with id=5', err.message );807 done();808 });809 _htmlshell.evtCallback({810 type: 'onWebLog',811 browserID: 5,812 logData: {813 message: 'Error description',814 source: 'www.google.com.ar',815 line: 43,816 level: 2817 }818 });819 });820 it('not handled message should emit error event', function (done) {821 _browserService.once('BrowserServiceError', function (err) {822 assert.equal( 'Received invalid message from htmlshell', err.message );823 done();824 });825 _htmlshell.evtCallback({826 type: 'badMsg'827 });828 });829 it('should check for minidumps when a browser is closed with error', function (done) {830 var bId = _browserService.launchBrowser('http://google.com', {}, function (evt) {831 switch (evt.name) {832 case 'onLaunched':833 assert.equal( bId, evt.browserID );834 _htmlshell.evtCallback({835 type: 'onLoaded',836 browserID: bId,837 });838 break;839 case 'onLoaded':840 _htmlshell.evtCallback({841 type: 'onClosed',842 browserID: bId,843 error: 'Renderer process crashed'844 });845 break;846 case 'onClose':847 assert.equal( bId, evt.browserID );848 assert.equal( evt.error.message, 'Renderer process crashed' );849 assert.equal( 1, _crashObserver.reports );850 done();851 break;852 }853 });854 });855 describe('dump', function() {856 it('should dump browser service state', function() {857 assert.equal( _browserService.launchBrowser('http://google.com'), 0 );858 var dump = _browserService.dumpState();859 assert.equal( dump.browsers.length, 1 );860 assert.equal( dump.browsers[0].id, 0 );861 assert.equal( dump.browsers[0].status, 'loading' );862 assert.equal( dump.browsers[0].url, 'http://google.com' );863 assert.equal( dump.browsers[0].apis.length, 0 );864 assert.equal( Object.keys(dump.crashes).length, 1 );865 assert.equal( dump.crashes['test.dmp'], 'ABCDE' );866 });867 });868 });...
index.js
Source:index.js
...9const { dividendsScrappyHosts } = require('./utils/scrappyHosts')10class ScrappyRepository {11 async scrappyFundamentalsData(symbol) {12 const formattedSymbol = symbol.toLowerCase()13 const { browser, evaluate } = await launchBrowser({ url: `https://statusinvest.com.br/acoes/${formattedSymbol}` })14 const result = await evaluate(tryGetFundamentals)15 browser.close()16 return result17 }18 async scrappyDailyData(symbol) {19 console.log('Tentando ativo:' + symbol)20 let result = {}21 const formattedSymbol = symbol.toLowerCase()22 const { browser, page, evaluate } = await launchBrowser({ url: `https://statusinvest.com.br/acoes/${formattedSymbol}` })23 result = await evaluate(tryGetStockData)24 if (result.failed) {25 await page.goto(`https://statusinvest.com.br/fundos-imobiliarios/${formattedSymbol}`)26 await page.waitFor(1000)27 result = await evaluate(tryGetStockData)28 }29 // console.log(JSON.stringify(result))30 await updateDailyData(symbol, result)31 browser.close()32 return result33 }34 async scrappyBenchmarks() {35 const benchmarkSymbols = {36 IBOV: 'ibovespa',37 IFIX: 'ifix'38 }39 const ibovNavigation = await launchBrowser({ url: `https://statusinvest.com.br/indices/${benchmarkSymbols.IBOV}` })40 const ibovResult = await ibovNavigation.evaluate(tryGetBenchmarks)41 ibovNavigation.browser.close()42 // console.log(ibovResult)43 const ifixNavigation = await launchBrowser({ url: `https://statusinvest.com.br/indices/${benchmarkSymbols.IFIX}` })44 const ifixResult = await ifixNavigation.evaluate(tryGetBenchmarks)45 ifixNavigation.browser.close()46 // console.log(ifixResult)47 await updateDailyData(benchmarkSymbols.IBOV, ibovResult)48 await updateDailyData(benchmarkSymbols.IFIX, ifixResult)49 return {50 ibovResult,51 ifixResult52 }53 }54 async scrappyStockDataFromB3(symbol, isRetry = false) {55 const formattedSymbol = symbol.toUpperCase()56 console.log('Trying ' + formattedSymbol)57 const actionIdentifiers = {58 input: '#txtCampoPesquisa',59 button: '#btnBuscarOutrosAtivos'60 }61 const { browser, page, evaluate } = await launchBrowser({ url: 'http://www.b3.com.br/pt_br/market-data-e-indices/servicos-de-dados/market-data/cotacoes/outros-ativos.htm' })62 const delay = isRetry ? 3000 : 200063 await page.$eval(actionIdentifiers.input, (el, value) => { el.value = value }, formattedSymbol)64 await page.click(actionIdentifiers.button)65 await page.waitFor(delay)66 const result = await evaluate(tryGetStockDataFromB3)67 await updateDailyData(symbol, result)68 browser.close()69 return result70 }71 async scrappyLastStockDataUpdate(stock) {72 const defaultSymbol = 'ITSA4'73 const symbolToScrappy = stock || defaultSymbol74 const actionIdentifiers = {75 input: '#txtCampoPesquisa',76 button: '#btnBuscarOutrosAtivos'77 }78 const { browser, page, evaluate } = await launchBrowser({ url: 'http://www.b3.com.br/pt_br/market-data-e-indices/servicos-de-dados/market-data/cotacoes/outros-ativos.htm' })79 await page.$eval(actionIdentifiers.input, (el, value) => { el.value = value }, symbolToScrappy)80 await page.click(actionIdentifiers.button)81 await page.waitFor(2000)82 const result = await evaluate(tryGetLastStockDataUpdate)83 browser.close()84 return result85 }86 async scrappyStockClass(symbol) {87 const quoteAlreadyExists = await Daily.findOne({ symbol: symbol.toUpperCase() })88 const classAlreadyExists = !!quoteAlreadyExists && quoteAlreadyExists.class !== 'Não aplicável'89 if (classAlreadyExists) return quoteAlreadyExists.class90 try {91 console.log('Classe do ativo:' + symbol)92 let result = {}93 const formattedSymbol = symbol.toLowerCase()94 const { browser, page, evaluate } = await launchBrowser({ url: `https://statusinvest.com.br/acoes/${formattedSymbol}` })95 result = await evaluate(tryGetStockClass)96 if (result.failed) {97 await page.goto(`https://statusinvest.com.br/fundos-imobiliarios/${formattedSymbol}`)98 await page.waitFor(1000)99 result = await evaluate(tryGetStockClass)100 }101 if (result.failed) {102 await page.goto(`https://statusinvest.com.br/bdrs/${formattedSymbol}`)103 await page.waitFor(2000)104 result = await evaluate(tryGetStockClass)105 }106 if (result.failed) {107 await page.goto(`https://statusinvest.com.br/etfs/${formattedSymbol}`)108 await page.waitFor(2000)109 result = await evaluate(tryGetStockClass)110 }111 await Daily.findByIdAndUpdate(quoteAlreadyExists._id, { class: result.class })112 browser.close()113 return result.class114 } catch (error) {115 return 'not found'116 }117 }118 async scrappyStockDividends() {119 // We need improve it to scrappy data for all companies120 const { browser, page, evaluate } = await launchBrowser({ url: dividendsScrappyHosts.stocks })121 await page.waitForSelector('#result')122 const stockEarnings = await evaluate(tryGetDividends)123 const { datePayment: stocksPaymentSection } = JSON.parse(stockEarnings)124 !!stockEarnings && await createAllEarnings(stocksPaymentSection)125 browser.close()126 return stocksPaymentSection127 }128 async scrappyFiisDividends() {129 // We need improve it to scrappy data for all companies130 const { browser, page, evaluate } = await launchBrowser({ url: dividendsScrappyHosts.fiis })131 await page.waitForSelector('#result')132 const fiisEarnings = await evaluate(tryGetDividends)133 const { datePayment: fiisPaymentSection } = JSON.parse(fiisEarnings)134 !!fiisEarnings && await createAllEarnings(fiisPaymentSection)135 browser.close()136 return fiisPaymentSection137 }138}...
右键添加“在IE中打开”.uc.js
Source:右键添加“在IE中打开”.uc.js
1// ==UserScript==2// @name View in other browser3// @include main4// @author Cye3s5// @version 1.0.201007156// ==/UserScript==7var LaunchBrowser = {8 browserName:"IE",9 browserPath:"C:\\Program Files\\Internet Explorer\\iexplore.exe",10 mSchemes: ["file", "ftp", "http", "https"],11 browser: Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsILocalFile),12 shellServicr:Cc["@mozilla.org/browser/shell-service;1"].getService(Ci.nsIShellService),13 init: function()14 {15 this.initialized = true;16 var menuLabel = "\u5728"+this.browserName+"\u4E2D\u6253\u5F00";17 this.browser.initWithPath(this.browserPath);18 this.mItem = document.createElement("menuitem");19 this.mItem.setAttribute("id", "context-LaunchBrowser");20 this.mItem.setAttribute("label", menuLabel);21 this.mItem.setAttribute("accesskey", "U");22 this.mItemPlace = document.createElement("menuitem");23 this.mItemPlace.setAttribute("id", "placesContext-LaunchBrowser");24 this.mItemPlace.setAttribute("label", menuLabel);25 this.mItemPlace.setAttribute("accesskey", "U");26 this.mItemPlace.setAttribute("selection","link");27 this.mItemPlace.setAttribute("selectiontype","single");28 document.getElementById("contentAreaContextMenu").addEventListener("popupshowing", function() { LaunchBrowser.onPopupShowing(this); }, false);29 document.getElementById("placesContext").addEventListener("popupshowing", function() { LaunchBrowser.onPopupShowingPlace(); }, false);30 document.getElementById("sidebar-box").addEventListener("load", function(event) {31 var doc = event.target;32 if (doc.location == "chrome://browser/content/history/history-panel.xul"||doc.location == "chrome://browser/content/bookmarks/bookmarksPanel.xul") {33 var context = doc.getElementById("placesContext");34 context.addEventListener("popupshowing", function() {35 window.parent.LaunchBrowser.mItemPlace.setAttribute("oncommand", "try {var LaunchBrowserSideBar=window.parent.LaunchBrowser;var node=document.popupNode;node = node.parentNode.view.nodeForTreeIndex(node.parentNode.view.selection.currentIndex);LaunchBrowserSideBar.shellServicr.openApplicationWithURI(LaunchBrowserSideBar.browser,node.uri);} catch (ex) { alert(ex.message);}");36 context.insertBefore(window.parent.LaunchBrowser.mItemPlace,doc.getElementById("placesContext_open:newwindow"));37 }, false);38 }39 }, true);40 41 this.mItemTab = document.createElement("menuitem");42 this.mItemTab.setAttribute("id", "tab-context-LaunchBrowser");43 this.mItemTab.setAttribute("label", menuLabel);44 this.mItemTab.setAttribute("accesskey", "U");45 this.mItemTab.setAttribute("oncommand", "LaunchBrowser.launch(gBrowser.getBrowserForTab(document.popupNode).currentURI);");46 gBrowser.mStrip.childNodes[1].appendChild(this.mItemTab);47 },48 onPopupShowing: function(aPopup)49 {50 aPopup.insertBefore(this.mItem, document.getElementById("context-sep-" + ((gContextMenu.onLink)?"open":"stop")));51 this.mItem.setAttribute("oncommand", "LaunchBrowser.launch(" + ((gContextMenu.onLink)?"gContextMenu.linkURI":"gBrowser.currentURI") + ");");52 this.mItem.hidden = !gContextMenu.onLink && (gContextMenu.isTextSelected || gContextMenu.onImage || gContextMenu.onTextInput);53 this.mItem.setAttribute("disabled", this.mItem.hidden || !this.isSupported((gContextMenu.onLink)?gContextMenu.linkURI:gBrowser.currentURI));54 },55 onPopupShowingPlace: function()56 {57 this.mItemPlace.setAttribute("oncommand", "LaunchBrowser.placesLaunch();");58 document.getElementById("placesContext").insertBefore(this.mItemPlace,document.getElementById("placesContext_open:newtab"));59 },60 launch: function(aURI)61 {62 if (!this.isSupported(aURI))63 {64 throw new Error("LaunchBrowser: unsupported URI scheme '" + aURI.scheme + "'!");65 }66 this.shellServicr.openApplicationWithURI(this.browser,aURI.spec);67 },68 isSupported: function(aURI)69 {70 return this.mSchemes.indexOf(aURI.scheme) > -1;71 },72 placesLaunch: function()73 {74 var n = document.popupNode;75 if (n.node && n.node.uri)76 {77 this.shellServicr.openApplicationWithURI(this.browser,n.node.uri);78 }79 else if (n._placesNode && n._placesNode.uri)80 {81 this.shellServicr.openApplicationWithURI(this.browser,n._placesNode.uri);82 }83 }84};...
cron.js
Source:cron.js
...12!(async () => {13 console.log(new Date(), process.argv)14 let browser = null;15 if (process.argv.includes('latest')) {16 browser = await launchBrowser()17 await fetchLatest(browser)18 //if (browser) await browser.close()19 }20 else if (process.argv.includes('novels')) {21 browser = await launchBrowser()22 await fetchNovels(browser)23 //if (browser) await browser.close()24 }25 else if (process.argv.includes('track')) {26 browser = await launchBrowser()27 await trackNovels(browser)28 if (!process.argv.includes('all'))29 setTimeout(async () => {30 process.exit()31 }, 170 * 1000)32 }33 else if (process.argv.includes('announce')) {34 await announceNovels()35 }36 else if (process.argv.includes('raw')) {37 browser = await launchBrowser()38 await checkRaw(browser)39 }40 else if (process.argv.includes('update')) {41 let params = {42 min: 0,43 max: 10000,44 cron: true,45 reqGroupID: 'updateChapters'46 };47 let queryStr = {48 where: {49 chapterContent: {50 [Sequelize.Op.not]: null51 }52 },53 group: ['novel.id'],54 attributes: [[Sequelize.fn('COUNT', 'id'), 'count']],55 include: ['novel']56 }57 const novel_ids = await Chapter.findAll(queryStr).then(chapters =>58 chapters.filter(c =>59 c.dataValues.count > numerics.update_chapter_limit && (!params.greed || c.novel.token == "greed")60 ).map(c => c.novel.id)61 )62 const novels = await Novel.findAll({63 where: {64 id: {65 [Sequelize.Op.in]: novel_ids66 }67 },68 include: ['trackers'],69 order: ['canonicalName']70 });71 browser = await launchBrowser()72 await scrapeNovels(novels, params)73 }74 if (browser) await browser.disconnect()75 process.exit()76 //await browser.close()...
simulate.js
Source:simulate.js
1// Copyright (c) Microsoft Corporation. All rights reserved.2/*eslint-env node */3var Simulator = require('./server/simulator');4var launchBrowser = function (target, url) {5 return require('cordova-serve').launchBrowser({ target: target, url: url });6};7var simulate = function (opts) {8 if(opts.generateids) {9 require('./devices/make-uuids');10 }11 var target = opts.target || 'default';12 var simulator = new Simulator(opts);13 return simulator.startSimulation()14 .then(function () {15 return launchBrowser(target, simulator.appUrl());16 })17 .then(function () {18 return launchBrowser(target, simulator.simHostUrl());19 })20 .then(function () {21 return simulator;22 })23 .catch(function (error) {24 // Ensure server is closed, then rethrow so it can be handled by downstream consumers.25 simulator.stopSimulation();26 if (error instanceof Error) {27 throw error;28 } else {29 throw new Error(error);30 }31 });32};...
browsers.js
Source:browsers.js
1import React from 'react';2import PropTypes from 'prop-types';3import {connect} from 'react-redux';4import Browser from './browser.js';5const byNameThenVersion = (a, b) => {6 if (a.name < b.name) return -1;7 if (a.name > b.name) return 1;8 if (a.version < b.version) return -1;9 if (a.version > b.version) return 1;10 return 0;11};12const Browsers = ({browsers, launchBrowser}) => {13 const browserElements = browsers14 .sort(byNameThenVersion)15 .map((browser, index) => {16 return <Browser browser={browser} launchBrowser={launchBrowser} key={index} />;17 });18 return <div className="browsers">{browserElements}</div>;19};20Browsers.propTypes = {21 browsers: PropTypes.array,22 launchBrowser: PropTypes.func.isRequired23};24import { launchBrowser } from '../../../common/actions/browsers.js';25import { getBrowsers } from '../../reducers/browsers.js';26const mapStateToProps = (state) => ({27 browsers: getBrowsers(state)28});29const mapDispatchToProps = {30 launchBrowser31};...
browser.js
Source:browser.js
1"use strict";2Object.defineProperty(exports, "__esModule", {3 value: true4});5exports.launchBrowser = void 0;6const puppeteer = require("puppeteer");7const launchBrowser = async () => {8 const option = {9 args: ["--no-sandbox", "--disable-setuid-sandbox"]10 };11 return await puppeteer.launch(option);12};...
given.js
Source:given.js
1import { Given } from 'cucumber';2import launchBrowser from '../support/action/launchBrowser';3Given(4 /^I launch "([^"]*)?" browser$/,5 launchBrowser...
Using AI Code Generation
1const playwright = require('playwright');2(async () => {3 const browser = await playwright.launchBrowser();4 const page = await browser.newPage();5 await page.screenshot({ path: 'screenshot.png' });6 await browser.close();7})();8const browserServer = require('./browserServer');9exports.launchBrowser = browserServer.launchBrowser;10exports.launchBrowser = async function() {11 const browser = await chromium.launch();12 return browser;13};14const playwright = require('playwright/lib/server/playwright');15const browser = await playwright.chromium.launch();
Using AI Code Generation
1const playwright = require('playwright-internal');2playwright.launchBrowser({headless: false});3const playwright = require('playwright');4playwright.launchBrowser({headless: false});5const playwright = require('playwright-internal');6const browser = await playwright.launchBrowser({headless: false});7const context = await browser.newContext();8const page = await context.newPage();9#### browser.close()10#### browser.newContext([options])11#### browser.version()12#### browserContext.close()13#### browserContext.clearCookies()14#### browserContext.clearPermissions()15#### browserContext.overridePermissions(origin, permissions)16#### browserContext.newPage()17#### browserContext.cookies([urls])18#### browserContext.addCookies(cookies)19#### browserContext.clearCookies()20#### browserContext.setGeolocation(geolocation)21#### browserContext.setOffline(offline)22#### browserContext.setHTTPCredentials(httpCredentials)23#### browserContext.setExtraHTTPHeaders(headers)24#### browserContext.addInitScript(source[, arg])
Using AI Code Generation
1const playwright = require('playwright');2(async () => {3 const browser = await playwright.launchBrowser({4 });5 const context = await browser.newContext();6 const page = await context.newPage();7 await page.screenshot({ path: 'google.png' });8 await browser.close();9})();10const playwright = require('playwright');11(async () => {12 const browser = await playwright.launchBrowser({13 });14 const context = await browser.newContext();15 const page = await context.newPage();16 await page.screenshot({ path: 'google.png' });17 await browser.close();18})();19const playwright = require('playwright');20(async () => {21 const browser = await playwright.launchBrowser({22 });23 const context = await browser.newContext();24 const page = await context.newPage();25 await page.screenshot({ path: 'google.png' });26 await browser.close();27})();28const playwright = require('playwright');29(async () => {30 const browser = await playwright.launchBrowser({31 });32 const context = await browser.newContext();33 const page = await context.newPage();34 await page.screenshot({ path: 'google.png' });35 await browser.close();36})();37const playwright = require('playwright');38(async () => {39 const browser = await playwright.launchBrowser({40 });41 const context = await browser.newContext();42 const page = await context.newPage();43 await page.screenshot({ path: 'google
Using AI Code Generation
1const { launchBrowser } = require('playwright-internal');2const browser = await launchBrowser({ headless: false });3const context = await browser.newContext();4const page = await context.newPage();5const { launchBrowser } = require('playwright-internal');6const browser = await launchBrowser({ headless: false });7const context = await browser.newContext();8const page = await context.newPage();9const { launchBrowser } = require('playwright-internal');10const browser = await launchBrowser({ headless: false });11const context = await browser.newContext();12const page = await context.newPage();13const { launchBrowser } = require('playwright-internal');14const browser = await launchBrowser({ headless: false });15const context = await browser.newContext();16const page = await context.newPage();17const { launchBrowser } = require('playwright-internal');18const browser = await launchBrowser({ headless: false });19const context = await browser.newContext();20const page = await context.newPage();21const { launchBrowser } = require('playwright-internal');22const browser = await launchBrowser({ headless: false });23const context = await browser.newContext();24const page = await context.newPage();25const { launchBrowser } = require('playwright-internal');26const browser = await launchBrowser({ headless: false });27const context = await browser.newContext();28const page = await context.newPage();29const { launchBrowser } = require('playwright-internal');30const browser = await launchBrowser({ headless: false });31const context = await browser.newContext();32const page = await context.newPage();33const { launchBrowser } = require('playwright-internal');34const browser = await launchBrowser({ headless: false });35const context = await browser.newContext();36const page = await context.newPage();37const { launchBrowser } = require('playwright-
Using AI Code Generation
1const playwright = require('playwright');2(async () => {3 const browser = await playwright.launchBrowser();4 console.log(browser);5})();6const playwright = require('playwright');7(async () => {8 const browser = await playwright.launchBrowser();9 console.log(browser);10})();11const playwright = require('playwright');12(async () => {13 const browser = await playwright.launchBrowser();14 console.log(browser);15})();16const playwright = require('playwright');17(async () => {18 const browser = await playwright.launchBrowser();19 console.log(browser);20})();21const playwright = require('playwright');22(async () => {23 const browser = await playwright.launchBrowser();24 console.log(browser);25})();26const playwright = require('playwright');27(async () => {28 const browser = await playwright.launchBrowser();29 console.log(browser);30})();31const playwright = require('playwright');32(async () => {33 const browser = await playwright.launchBrowser();34 console.log(browser);35})();36const playwright = require('playwright');37(async () => {38 const browser = await playwright.launchBrowser();39 console.log(browser);40})();41const playwright = require('playwright');42(async () => {43 const browser = await playwright.launchBrowser();44 console.log(browser);45})();46const playwright = require('playwright');47(async () => {48 const browser = await playwright.launchBrowser();49 console.log(browser);50})();51const playwright = require('playwright');52(async () => {53 const browser = await playwright.launchBrowser();54 console.log(browser);55})();
Using AI Code Generation
1const playwright = require('playwright');2const browser = await playwright.launchBrowser({3});4const context = await browser.newContext();5const page = await context.newPage();6await page.screenshot({ path: `example.png` });7await browser.close();
Using AI Code Generation
1const { launchBrowser } = require('@playwright/test/lib/server/playwright');2const browserServer = await launchBrowser({3});4const browser = await browserServer.connect();5const context = await browser.newContext();6const page = await context.newPage();7await page.screenshot({ path: 'google.png' });8await browser.close();9await browserServer.close();10 at async Playwright._launchServer (/home/runner/work/PlaywrightTest/PlaywrightTest/node_modules/playwright-core/lib/cjs/server/playwright.js:39:9)11 at async Playwright.launch (/home/runner/work/PlaywrightTest/PlaywrightTest/node_modules/playwright-core/lib/cjs/server/playwright.js:33:9)
Using AI Code Generation
1const playwright = require('playwright');2(async () => {3 const browser = await playwright.launchBrowser();4 const page = await browser.newPage();5 await browser.close();6})();7const browser = await playwright.launchBrowser(options);
Using AI Code Generation
1const playwright = require('@playwright/test');2const { launchBrowser } = require('@playwright/test/lib/server/browserType');3const browser = await launchBrowser({4});5const playwright = require('@playwright/test');6const { launchBrowser } = require('@playwright/test/lib/server/browserType');7playwright.use({8 async launchBrowser(options) {9 return launchBrowser({10 });11 },12});
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!!