Best JavaScript code snippet using differencify
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 differencify = require('differencify');2const differencifyConfig = require('./differencify.config.js');3const differencifyInstance = differencify.init(differencifyConfig);4differencifyInstance.launchBrowser();5const differencifyConfig = {6}7module.exports = differencifyConfig;8{9 "scripts": {10 },11}12module.exports = {13 "testEnvironmentOptions": {14 "jest-environment-puppeteer": {15 "launch": {16 }17 }18 },19}20const differencify = require('differencify');21const differencifyConfig = require('./differencify.config.js');22const differencifyInstance = differencify.init(differencifyConfig);23describe('sample test', () => {24 it('should take screenshot', async () => {25 await page.waitFor(5000);26 await differencifyInstance.takeScreenshot(page, 'google');27 });28});29const differencifyConfig = {30}31module.exports = differencifyConfig;
Using AI Code Generation
1const differencify = require('differencify');2differencify.launchBrowser().then(async (browser) => {3 const page = await browser.newPage();4 const image = await page.screenshot();5 await browser.close();6});7module.exports = {8};9const differencify = require('differencify');10differencify.launchBrowser({11}).then(async (browser) => {12 const page = await browser.newPage();13 const image = await page.screenshot();14 await browser.close();15});16differencify.launchBrowser({ executablePath: 'google-chrome' })17const differencify = require('differencify');18differencify.launchBrowser({19}).then(async (browser) => {20 const page = await browser.newPage();21 const image = await page.screenshot();22 await browser.close();23});24const differencify = require('differencify');25differencify.launchBrowser().then(async (browser) => {26 const page = await browser.newPage();27 const image = await page.screenshot();28 await browser.close();29});30differencify.launchBrowser({ headless: false })31const differencify = require('differencify');32differencify.launchBrowser({33}).then(async (browser) =>
Using AI Code Generation
1const differencify = require('differencify');2const differencifyConfig = require('./differencify.config.js');3const differencifyInstance = differencify.init(differencifyConfig);4const launchBrowser = async () => {5 const browser = await differencifyInstance.launchBrowser();6 return browser;7};8module.exports = launchBrowser;9const differencify = require('differencify');10const differencifyConfig = require('./differencify.config.js');11const differencifyInstance = differencify.init(differencifyConfig);12const launchBrowser = async () => {13 const browser = await differencifyInstance.launchBrowser();14 return browser;15};16module.exports = launchBrowser;17const differencify = require('differencify');18const differencifyConfig = require('./differencify.config.js');19const differencifyInstance = differencify.init(differencifyConfig);20const launchBrowser = async () => {21 const browser = await differencifyInstance.launchBrowser();22 return browser;23};24module.exports = launchBrowser;25const differencify = require('differencify');26const differencifyConfig = require('./differencify.config.js');27const differencifyInstance = differencify.init(differencifyConfig);28const launchBrowser = async () => {29 const browser = await differencifyInstance.launchBrowser();30 return browser;31};32module.exports = launchBrowser;33const differencify = require('differencify');34const differencifyConfig = require('./differencify.config.js');35const differencifyInstance = differencify.init(differencifyConfig);36const launchBrowser = async () => {37 const browser = await differencifyInstance.launchBrowser();38 return browser;39};40module.exports = launchBrowser;41const differencify = require('differencify');42const differencifyConfig = require('./differencify.config.js');
Using AI Code Generation
1const differencify = require('differencify')2const differencifyConfig = require('./differencify.config.js')3const differencifyInstance = differencify.init(differencifyConfig)4async function launchBrowser() {5 const browser = await differencifyInstance.launchBrowser()6}7module.exports = {8}
Using AI Code Generation
1const differencify = require('differencify');2const differencifyConfig = require('./differencify.config');3const differencifyInstance = differencify.init(differencifyConfig);4const { launchBrowser } = differencifyInstance;5launchBrowser();6const puppeteer = require('puppeteer');7const browser = await puppeteer.launch({8});9const webdriverio = require('webdriverio');10const browser = await webdriverio.remote({11 capabilities: {12 'goog:chromeOptions': {13 }14 }15});16const webdriverio = require('webdriverio');17const browser = await webdriverio.remote({18 capabilities: {19 'goog:chromeOptions': {20 }21 }22});23const webdriverio = require('webdriverio');24const browser = await webdriverio.remote({25 capabilities: {26 'goog:chromeOptions': {27 }28 }29});30const webdriverio = require('webdriverio');31const browser = await webdriverio.remote({32 capabilities: {33 'goog:chromeOptions': {34 }35 }36});37const webdriverio = require('webdriverio');38const browser = await webdriverio.remote({39 capabilities: {40 'goog:chromeOptions': {41 }42 }43});44const webdriverio = require('webdriverio');45const browser = await webdriverio.remote({46 capabilities: {47 'goog:chromeOptions': {
Using AI Code Generation
1const differencify = require('differencify');2const differencifyConfig = {3 formatImageName: '{tag}-{logName}-{width}x{height}',4 {5 }6 {7 }8};9const { launchBrowser } = differencify.init(differencifyConfig);10describe('Test', () => {11 let browser;12 let page;13 beforeAll(async () => {14 browser = await launchBrowser();15 page = await browser.newPage();16 });17 it('should take screenshot', async () => {18 await page.screenshot({ path: 'test.png' });19 });20 afterAll(async () => {21 await browser.close();22 });23});24const { launchBrowser } = differencify.init(differencifyConfig, { headless: true });
Using AI Code Generation
1import {launchBrowser} from 'differencify';2launchBrowser();3import {launchBrowser} from 'differencify';4launchBrowser();5import {launchBrowser} from 'differencify';6launchBrowser();7import {launchBrowser} from 'differencify';8launchBrowser();9import {launchBrowser} from 'differencify';10launchBrowser();11import {launchBrowser} from 'differencify';12launchBrowser();13import {launchBrowser} from 'differencify';14launchBrowser();15import {launchBrowser} from 'differencify';16launchBrowser();17import {launchBrowser} from 'differencify';18launchBrowser();19import {launchBrowser} from 'differencify';20launchBrowser();21import {launchBrowser} from 'differencify';22launchBrowser();23import {launchBrowser} from 'differencify';24launchBrowser();
Using AI Code Generation
1const differencify = require('differencify');2const differencifyInstance = differencify.init({});3const browser = await differencifyInstance.launchBrowser();4const browser = await differencifyInstance.launchBrowser({headless: false});5const browser = await differencifyInstance.launchBrowser({executablePath: '/usr/bin/chromium-browser'});6const browser = await differencifyInstance.launchBrowser({defaultViewport: {width: 1280, height: 800}});7const browser = await differencifyInstance.launchBrowser({args: ['--no-sandbox', '--disable-setuid-sandbox']});
Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!