code: function () {
    let args = sliced(arguments)
    let done = args[args.length - 1]
    if (args.length < 2) {
      // not enought params
      return done()
    }
  
    let selector = args[0]
    if (typeof selector === 'string') {
      let callback = args[1]
      let timeout = null
  
      if (typeof callback === 'string') {
        let shouldBe = null
  
        if (typeof args[2] !== 'function') {
          shouldBe = args[2]
        }
  
        if (typeof args[3] === 'number') {
          timeout = args[3]
        }
  
        callback = (element) => _get(element, args[1]) === shouldBe
      } else if (typeof args[1] === 'number') {
        timeout = args[1]
      }
  
      if (args.length < 3) {
        callback = null
      }
  
      waitelem.apply({ timeout, callback }, [this, selector, done])
    } else {
      done()
    }
  }
docs: Wait
  
  @param {...} args