     _.each commonElements, @setCommonElement
     @
 
+  ###
+  Wait until component is loaded before beginning tests.  Defaults to waiting for `css: '.is-loading'` to be not present.
+
+  The locator to wait for can be set in `commonElements` during instantiation as `loadingState`.
+
+  @returns {Selenium.Promise}
+  ###
   waitUntilLoaded: =>
-    # Adjust the test timeout *and* tell selenium to wait up to the same amount of time. Maybe this is redundant?
     @test.utils.wait.giveTime @options.defaultWaitTime, =>
       @test.utils.wait.until "Waiting until Loadable #{JSON.stringify(@el.loadingState().getLocator())} is gone", =>
         @el.loadingState().isPresent().then (isPresent) -> not isPresent
 
+  ###
+  Set item helper as a function that takes arguments for the locator on `el`.
+
+  @param {String} name The name the `el` will be accessed by.
+  @param {TestItemHelper|TestHelper} helper Usually a `TestItemHelper` that is exposed on `el`.
+  ###
   setCommonHelper: (name, helper) =>
     @el[name] = helper.fn or helper
 
+  ###
+  Takes `commonElements` from instantiation and wraps the `locator` with `TestItemHelper` methods
+
+  @param {Object|Function|String} locator Selenium locator object, or a function that returns a locator object based on parameters. If a string is provided, the locator is assumed to be a css locator.
+  @param {String} name The name the `el` will be accessed by.
+  ###
   setCommonElement: (locator, name) =>
     @setCommonHelper(name, new TestItemHelper(@test, locator,
       onBeforeMethodCall: (methodName, args...) ->


    @

  getLocator: (args...) =>
    locator = if _.isFunction(@locator)
      @locator(args...)


    waitFunction(locator, waitTime)

  ###
  Waits until element is visible before trying to return the Selenium.Promise of the matching Selenium.WebElement
  This will only wait until waitMs (default `60000`).

  @param {Any} args... Any number of parameters for `locator` to use if `locator` is a function dependent on parameters
  @param {Number} waitMs The last parameter, if provided and is a number.
  @returns {Selenium.Promise}
  ###
  get: (args...) =>
    @aliasWait(@test.utils.wait.for, args...)

  ###
  Waits until an element is visible before trying to return the Selenium.Promise of Array of matching Selenium.WebElements
  This will only wait until waitMs (default `60000`).

  @param {Any} args... Any number of parameters for `locator` to use if `locator` is a function dependent on parameters
  @param {Number} waitMs The last parameter, if provided and is a number.
  @returns {Selenium.Promise}
  ###
  getAll: (args...) =>
    @aliasWait(@test.utils.wait.forMultiple, args...)

  ###
  Helper for the common case of `wait.for(...).click()`.

  Plus, it allows a place to add logging since this is one of the most common places for Selenium to time out (trying to click on an element)

  This will only wait until waitMs (default `60000`).

  @param {Any} args... Any number of parameters for `locator` to use if `locator` is a function dependent on parameters
  @param {Number} waitMs The last parameter, if provided and is a number.
  @returns {Selenium.Promise}
  ###
  waitClick: (args...) =>
    @aliasWait(@test.utils.wait.click, args...)

  ###
  Tries to find and return Selenium.Promise of Selenium.WebElement immediately

  @param {Any} args... Any number of parameters for `locator` to use if `locator` is a function dependent on parameters
  @returns {Selenium.Promise}
  ###
  findElement: (args...) =>
    locator = @getLocator(args...)
    @test.driver.findElement(locator)

  ###
  Tries to find and return Selenium.Promise of array of matching Selenium.WebElement immediately

  @param {Any} args... Any number of parameters for `locator` to use if `locator` is a function dependent on parameters
  @returns {Selenium.Promise}
  ###
  findElements: (args...) =>
    locator = @getLocator(args...)
    @test.driver.findElements(locator)

  ###
  Tries to find and click immediately

  @param {Any} args... Any number of parameters for `locator` to use if `locator` is a function dependent on parameters
  @returns {Selenium.Promise}
  ###
  click: (args...) =>
    @findElement(args...).click()

  ###
  Checks if element matching locator is immediately present, returns Selenium.Promise that resolves to a boolean

  @param {Any} args... Any number of parameters for `locator` to use if `locator` is a function dependent on parameters
  @param {Function} forEachFunction The last parameter, if provided and is a function, will be run on each WebElement
  @param {Function} forEachFunction2 optional, If an additional function is available, this will run once before.
  ###
  forEach: (args..., forEachFunction, forEachFunction2) =>
    locator = @getLocator(args...)
    @test.utils.forEach(locator, forEachFunction, forEachFunction2)

  ###
  Checks if element matching locator is currently present, returns Selenium.Promise that resolves to a boolean

  @param {Any} args... Any number of parameters for `locator` to use if `locator` is a function dependent on parameters
  @returns {Selenium.Promise}
  ###
  isPresent: (args...) =>
    locator = @getLocator(args...)
    @test.driver.isElementPresent(locator)

  ###
  Checks if element matching locator is currently displayed, returns Selenium.Promise that resolves to a boolean

  @param {Any} args... Any number of parameters for `locator` to use if `locator` is a function dependent on parameters
  @returns {Selenium.Promise}
  ###
  isDisplayed: (args...) =>
    @isPresent(args...).then (isPresent) =>
      if isPresent
