import { Lanthan } from 'lanthan'; import { WebDriver, By, until } from 'selenium-webdriver'; export default class FormOptionPage { private webdriver: WebDriver; constructor(lanthan: Lanthan) { this.webdriver = lanthan.getWebDriver(); } async setBlacklist(nth: number, url: string): Promise { const selector = '.form-blacklist-form-row > .column-url'; const inputs = await this.webdriver.findElements(By.css(selector)); if (inputs.length <= nth) { throw new RangeError('Index out of range to set a blacklist') } await inputs[nth].sendKeys(url); await this.webdriver.executeScript(`document.querySelectorAll('${selector}')[${nth}].blur()`); } async setPartialBlacklist(nth: number, url: string, keys: string): Promise { let selector = '.form-partial-blacklist-form-row > .column-url'; let inputs = await this.webdriver.findElements(By.css(selector)); if (inputs.length <= nth) { throw new RangeError('Index out of range to set a partial blacklist') } await inputs[nth].sendKeys(url); await this.webdriver.executeScript(`document.querySelectorAll('${selector}')[${nth}].blur()`); selector = '.form-partial-blacklist-form-row > .column-keys'; inputs = await this.webdriver.findElements(By.css(selector)); if (inputs.length <= nth) { throw new RangeError('Index out of range to set a partial blacklist') } await inputs[nth].sendKeys(keys); await this.webdriver.executeScript(`document.querySelectorAll('${selector}')[${nth}].blur()`); } async setSearchEngine(nth: number, name: string, url: string) { let selector = '.form-search-form-row > .column-name'; let inputs = await this.webdriver.findElements(By.css(selector)); if (inputs.length <= nth) { throw new RangeError('Index out of range to set a search engine') } await inputs[nth].sendKeys(name); await this.webdriver.executeScript(`document.querySelectorAll('${selector}')[${nth}].blur()`); selector = '.form-search-form-row > .column-url'; inputs = await this.webdriver.findElements(By.css(selector)); if (inputs.length <= nth) { throw new RangeError('Index out of range to set a search engine') } await inputs[nth].sendKeys(url); await this.webdriver.executeScript(`document.querySelectorAll('${selector}')[${nth}].blur()`); } async addBlacklist(): Promise { const rows = await this.webdriver.findElements(By.css(`.form-blacklist-form-row`)); const button = await this.webdriver.findElement(By.css('.form-blacklist-form .ui-add-button')) await button.click(); await this.webdriver.wait(until.elementLocated(By.css(`.form-blacklist-form-row:nth-child(${rows.length + 1})`))); } async addPartialBlacklist(): Promise { const rows = await this.webdriver.findElements(By.css(`.form-partial-blacklist-form-row`)); const button = await this.webdriver.findElement(By.css('.form-partial-blacklist-form .ui-add-button')) await button.click(); await this.webdriver.wait(until.elementLocated(By.css(`.form-partial-blacklist-form-row:nth-child(${rows.length + 2})`))); } async removeBlackList(nth: number): Promise { const buttons = await this.webdriver.findElements(By.css('.form-blacklist-form-row .ui-delete-button')); if (buttons.length <= nth) { throw new RangeError('Index out of range to remove blacklist') } await buttons[nth].click() } async removePartialBlackList(nth: number): Promise { const buttons = await this.webdriver.findElements(By.css('.form-partial-blacklist-form-row .ui-delete-button')); if (buttons.length <= nth) { throw new RangeError('Index out of range to remove partial blacklist') } await buttons[nth].click() } async addSearchEngine(): Promise { const rows = await this.webdriver.findElements(By.css(`.form-search-form-row > .column-name`)); const button = await this.webdriver.findElement(By.css('.form-search-form > .ui-add-button')) await button.click(); await this.webdriver.wait(until.elementLocated(By.css(`.form-search-form-row:nth-child(${rows.length + 1})`))); } async setDefaultSearchEngine(nth: number): Promise { const radios = await this.webdriver.findElements(By.css('.form-search-form-row input[type=radio]')); if (radios.length <= nth) { throw new RangeError('Index out of range to set a default search engine'); } await radios[nth].click(); } }