Best JavaScript code snippet using chrominator
app.component.ts
Source:app.component.ts
1import { Component, OnInit } from '@angular/core'2import { FormControl } from '@angular/forms'3import { Observable } from 'rxjs'4import { map, switchMap, tap } from 'rxjs/operators'5import { MatSelectionListChange } from '@angular/material/list'6import { ChromeService } from './chrome.service'7import Fuse from 'fuse.js'8import { ChromeSharedOptionsService } from 'chrome-shared-options'9import Tab = chrome.tabs.Tab10import HistoryItem = chrome.history.HistoryItem11interface BrowserAction {12 name: string13 action: () => Promise<void>14}15interface SearchResult {16 name: string17 url: string18 faviconUrl: string19 tab?: Tab20 history?: HistoryItem21}22function filterUniqueValues(results: SearchResult[]): SearchResult[] {23 const set = new Set()24 return results.filter((result: SearchResult) => {25 if (set.has(result.url)) {26 // contains; no need to return27 return false28 }29 set.add(result.url)30 return true31 })32}33function isBrowserAction(34 result: SearchResult | BrowserAction,35): result is BrowserAction {36 return (result as BrowserAction).action !== undefined37}38@Component({39 selector: 'app-root',40 templateUrl: './app.component.html',41 styleUrls: ['./app.component.scss'],42})43export class AppComponent implements OnInit {44 title = 'butler'45 searchInput: FormControl = new FormControl()46 tabResults$: Observable<SearchResult[]>47 historyResults$: Observable<SearchResult[]>48 isSearchingHistory = false49 browserActions$: Observable<BrowserAction[]>50 constructor(51 private chromeService: ChromeService,52 private chromeSharedOptionsService: ChromeSharedOptionsService,53 ) {}54 async ngOnInit(): Promise<void> {55 const options = await this.chromeSharedOptionsService.getOptions()56 const BROWSER_ACTIONS: BrowserAction[] = [57 {58 name: 'Close other tabs',59 action: async () => {60 const tabs = await this.chromeService.tabsQuery({61 currentWindow: true,62 // Respect pinned63 pinned: false,64 })65 await this.chromeService.tabsRemove(66 tabs.filter((tab) => !tab.active).map((tab) => tab.id),67 )68 },69 },70 {71 name: 'Close tabs to the right',72 action: async () => {73 const currentTab = await this.chromeService.getCurrentTab()74 const tabs = await this.chromeService.tabsQuery({75 currentWindow: true,76 pinned: false,77 })78 const findIndex = tabs.findIndex((t) => t.id === currentTab.id)79 if (findIndex === -1) {80 // do nothing81 return82 }83 const tabIds = tabs.slice(findIndex + 1).map((t) => t.id)84 if (0 < tabIds.length) {85 await this.chromeService.tabsRemove(tabIds)86 }87 },88 },89 {90 name: 'Open settings',91 action: async () => {92 await this.chromeService.openSettings()93 },94 },95 ]96 this.browserActions$ = this.searchInput.valueChanges.pipe(97 map((searchInputText: string) => {98 return new Fuse<BrowserAction>(BROWSER_ACTIONS, {99 isCaseSensitive: false,100 keys: ['name'],101 })102 .search(searchInputText)103 .map((value) => {104 return value.item105 })106 }),107 )108 this.tabResults$ = this.searchInput.valueChanges.pipe(109 switchMap((searchInputText) => {110 if (!searchInputText || !options.includesTabs) {111 return []112 }113 return this.chromeService.tabsQuery({}).then((tabs) => {114 const filteredTabs = new Fuse<Tab>(tabs, {115 keys: ['title', 'url'],116 isCaseSensitive: false,117 }).search(searchInputText)118 return filteredTabs.map(({ item: tab }) => ({119 faviconUrl: tab.favIconUrl,120 name: tab.title,121 url: tab.url,122 tab,123 }))124 })125 }),126 )127 this.historyResults$ = this.searchInput.valueChanges.pipe(128 switchMap((searchInputText) => {129 if (!searchInputText || !options.includesHistory) {130 return []131 }132 this.isSearchingHistory = true133 return this.chromeService134 .historySearch({135 text: searchInputText,136 startTime: options.searchHistoryStartDateInUnixEpoch,137 })138 .then((histories) => {139 return histories.map((result) => ({140 faviconUrl: '',141 name: result.title,142 url: result.url,143 history: result,144 }))145 })146 }),147 // there could be many duplicate for history. Hence, remove the duplicates.148 map((results) => filterUniqueValues(results)),149 tap(() => {150 this.isSearchingHistory = false151 }),152 )153 }154 async onClickItem(result: SearchResult | BrowserAction): Promise<void> {155 if (isBrowserAction(result)) {156 await result.action()157 } else if (result.tab) {158 const currentWindow = await this.chromeService.getCurrentWindow()159 if (currentWindow.id === result.tab.windowId) {160 await this.chromeService.activateTab(result.tab.id)161 } else {162 await this.chromeService.activateWindow(result.tab.windowId)163 await this.chromeService.activateTab(result.tab.id)164 }165 } else if (result.history) {166 await this.chromeService.tabsCreate({ active: true, url: result.url })167 this.searchInput.reset()168 }169 // close the popup window.170 window.close()171 }172 async onSelectionChange(event: MatSelectionListChange): Promise<void> {173 await this.onClickItem(event.option.value)174 }...
background.js
Source:background.js
1import "@babel/polyfill";2import chromeService from "./services/chromeService";3import Routes from "./routes";4import messagePassing from "./services/messagePassing";5/**6 * Main extension functionality7 *8 * @class Main9 */10class Main {11 constructor() {12 this.ctxMenuId1 = null;13 this.ctxMenuId2 = null;14 this.ctxMenuId3 = null;15 this.init().catch(e => {16 console.log("Error loading extension", { e });17 });18 // on install listener callback19 this.onInstallListener();20 // set feedback form url21 this.setFeedbackFormUrl();22 }23 init = async () => {24 chromeService.setBadgeOnActionIcon("Loading...");25 await Routes();26 this.initContextMenu();27 this.popUpClickSetup();28 chromeService.setBadgeOnActionIcon("");29 };30 popUpClickSetup = () => {31 chrome.browserAction.onClicked.addListener(async () => {32 const screenshotUrl = await chromeService.takeScreenShot();33 await messagePassing.sendMessageToActiveTab(34 "/show_popup",35 { screenshotUrl },36 () => {}37 );38 });39 };40 /**41 * Context menu option initialization42 *43 * @method44 * @memberof Main45 */46 initContextMenu = () => {47 if (this.ctxMenuId1) return;48 this.ctxMenuId1 = chromeService.createContextMenu({49 title: "Extract Text from this screen",50 contexts: ["all"],51 onclick: this.onContextMenu1Click52 });53 if (this.ctxMenuId2) return;54 this.ctxMenuId2 = chromeService.createContextMenu({55 title: "Extract Text from this image",56 contexts: ["image"],57 onclick: this.onContextMenu2Click58 });59 if (this.ctxMenuId3) return;60 this.ctxMenuId3 = chromeService.createContextMenu({61 title: "upload pdf to extract text from",62 contexts: ["all"],63 onclick: this.onContextMenu3Click64 });65 };66 onContextMenu1Click = async (info, tab) => {67 const screenshotUrl = await chromeService.takeScreenShot();68 await messagePassing.sendMessageToActiveTab(69 "/show_popup",70 { screenshotUrl },71 () => {}72 );73 };74 onContextMenu2Click = (info, tab) => {75 const { srcUrl } = info;76 chromeService.openHelpPage("home", encodeURIComponent(srcUrl));77 };78 onContextMenu3Click = (info, tab) => {79 chromeService.openHelpPage("pdf");80 };81 /**82 *On install extension event83 * */84 onInstallListener = () => {85 chrome.runtime.onInstalled.addListener(details => {86 // details.reason for install method87 chromeService.openHelpPage("welcome");88 });89 };90 /**91 *set feedback form url shown while uninstalling92 * */93 setFeedbackFormUrl = () => {94 chrome.runtime.setUninstallURL("https://forms.gle/fmyBArGndYGxwS5V9");95 };96}97// init main...
sample-test.js
Source:sample-test.js
...20 options.addArguments('--disable-dev-shm-usage')21 options.addArguments('--no-sandbox')22 let driver = await new Builder()23 .forBrowser('chrome')24 .setChromeService(chromeService)25 .setChromeOptions(options)26 .build();27 try {28 await driver.get('http://www.google.com/ncr');29 await driver.findElement(By.name('q')).sendKeys('webdriver', Key.RETURN);30 await driver.wait(until.titleIs('webdriver - Google Search'), 1000);31 } finally {32 await driver.quit();33 }...
Using AI Code Generation
1const { ChromeService } = require('chrominator');2const chromeService = new ChromeService();3(async () => {4 const chrominator = new Chrominator({ chromeService });5 const browser = await chrominator.launch();6 const page = await browser.newPage();7 await page.type('input[name="q"]', 'chrominator');8 await page.click('input[name="btnK"]');9 await page.waitForSelector('h3');10 await page.close();11 await browser.close();12})();
Using AI Code Generation
1var chrominator = require('chrominator');2var chromeService = chrominator.chromeService;3chromeService.startChrome()4 .then(function(){5 chrominator.execute({6 })7 .then(function(){8 chromeService.stopChrome();9 });10 });11var chrominator = require('chrominator');12var chromeService = chrominator.chromeService;13chromeService.startChrome()14 .then(function(){15 chrominator.execute({16 })17 .then(function(){18 chromeService.stopChrome();19 });20 });
Using AI Code Generation
1var chrominator = require('chrominator');2var chromeService = chrominator.chromeService;3var chrome = chromeService.createChrome();4 return chrome.type("input[name='q']", "chrominator");5}).then(function () {6 return chrome.click("input[value='Google Search']");7}).then(function () {8 return chrome.wait(2000);9}).then(function () {10 return chrome.takeScreenshot();11}).then(function (screenshot) {12 console.log("Screenshot: " + screenshot);13}).then(function () {14 return chrome.close();15}).catch(function (error) {16 console.error(error);17});18Contributions are welcome! Please check out the [Contributing Guide](
Using AI Code Generation
1var chrominator = require('./chrominator.js');2var chromeService = require('./chromeService.js');3var fs = require('fs');4var chrome = new chromeService();5chrome.start();6chrome.wait(5000);7chrome.wait(5000);8chrome.wait(5000);9chrome.stop();10chrominator.wait(5000);11chrominator.wait(5000);12chrominator.wait(5000);13chrominator.stop();
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!!