FindHelpersMixin.js

const USING = require('./USING')

/**
 * It provides utility methods for the `findElement` and `findElements`.
 * Both {@link Driver} and {@link Element} include this mixin
 * @mixin FindHelpersMixin
 */
const FindHelpersMixin = (superClass) => class extends superClass {
  /**
   * Find first element matching CSS
   * @memberof FindHelpersMixin#
   * @async
   *
   * @param {string} value The CSS expression
   *
   * @example
   * var list = driver.findElementCss('.list')
   * var listTitle = list.findElementCss('.title')
   */
  findElementCss (value) {
    return this.findElement(USING.CSS, value)
  }

  /**
   * Find first element matching text
   * @memberof FindHelpersMixin#
   * @async
   *
   * @param {string} value The text to match
   *
   * @example
   * var a = driver.findElementLinkText('cick here')
   * // or...
   * var el = driver.findElementCss('#something') // or
   * var l = item.findElementLinkText('click here')
   */
  findElementLinkText (value) {
    return this.findElement(USING.LINK_TEXT, value)
  }

  /**
   * Find first element matching link text
   * @memberof FindHelpersMixin#
   * @async
   *
   * @param {string} value The link text to match
   *
   * @example
   * var a = driver.findElementPartialLinkText('cick here')
   * // or...
   * var el = driver.findElementCss('#something') // or
   * var l = item.findElementPartialLinkText('click here')
   */
  findElementPartialLinkText (value) {
    return this.findElement(USING.PARTIAL_LINK_TEXT, value)
  }

  /**
   * Find first element matching tag name
   * @memberof FindHelpersMixin#
   * @async
   *
   * @param {string} value The tag name to match
   *
   * @example
   * var item = driver.findElementTagName('item') // or
   * var subItem = item.findElementTagName('subitem')
   */
  findElementTagName (value) {
    return this.findElement(USING.TAG_NAME, value)
  }

  /**
   * Find first element matching xpath
   * @memberof FindHelpersMixin#
   * @async
   *
   * @param {string} value The xpath to match
   *
   * @example
   * var item = driver.findElementXpath('/html/body/form[1]') // or
   * var subItem = item.findElementXpath('/div/div/subitem')
   */
  findElementXpath (value) {
    return this.findElement(USING.XPATH, value)
  }

  /**
   * Find all elements matching CSS
   * @memberof FindHelpersMixin#
   * @async
   *
   * @param {string} value The CSS expression
   *
   * @example
   * var allItems = driver.findElementsCss('.list')
   * var item = allItems[0]
   * var allTitles = item.findElementsCss('.title')
   */
  findElementsCss (value) {
    return this.findElements(USING.CSS, value)
  }

  /**
   * Find all elements matching text
   * @memberof FindHelpersMixin#
   * @async
   *
   * @param {string} value The text to match
   *
   * @example
   * var links = driver.findElementsLinkText('cick here')
   * // or...
   * var el = driver.findElementCss('#something') // or
   * var links = item.findElementsLinkText('click here')
   */
  findElementsLinkText (value) {
    return this.findElements(USING.LINK_TEXT, value)
  }

  /**
   * Find all elements matching link text
   * @memberof FindHelpersMixin#
   * @async
   *
   * @param {string} value The link text to match
   *
   * @example
   * var links = driver.findElementsPartialLinkText('cick here')
   * // or...
   * var el = driver.findElementCss('#something') // or
   * var links = item.findElementsPartialLinkText('click here')
   */
  findElementsPartialLinkText (value) {
    return this.findElements(USING.PARTIAL_LINK_TEXT, value)
  }

  /**
   * Find all elements matching tag name
   * @memberof FindHelpersMixin#
   * @async
   *
   * @param {string} value The tag name to match
   *
   * @example
   * var items = driver.findElementsTagName('item') // or
   * var el = items[0]
   * var subItem = el.findElementsTagName('subitem')
   */
  findElementsTagName (value) {
    return this.findElements(USING.TAG_NAME, value)
  }

  /**
   * Find all elements matching xpath
   * @memberof FindHelpersMixin#
   * @async
   *
   * @param {string} value The xpath to match
   *
   * @example
   * var items = driver.findElementsXpath('/html/body') // or
   * var el = items[0]
   * var subItems = el.findElementXpath('/div/div/subitem')
   */
  findElementsXpath (value) {
    return this.findElements(USING.XPATH, value)
  }
}

exports = module.exports = FindHelpersMixin