def wait_true(opts = {})
      opts = opts.is_a?(Numeric) ? { timeout: opts } : opts

      if opts.is_a? Hash
        opts.empty? ? @core.wait_true { yield } : @core.wait_true(opts) { yield }
      else
        ::Appium::Logger.warn('Arguments should be Hash like {timeout: 100}')
      end
    end
def wait_true(opts = {})
      opts = opts.is_a?(Numeric) ? { timeout: opts } : opts

      if opts.is_a? Hash
        opts.empty? ? @core.wait_true { yield } : @core.wait_true(opts) { yield }
      else
        ::Appium::Logger.warn('Arguments should be Hash like {timeout: 100}')
      end
    end
Check every interval seconds to see if yield returns a truthy value.
 Note this isn't a strict boolean true, any truthy value is accepted.
 false and nil are considered failures.
 Give up after timeout seconds.

 Wait code from the selenium Ruby gem
 https://github.com/SeleniumHQ/selenium/blob/cf501dda3f0ed12233de51ce8170c0e8090f0c20/rb/lib/selenium/webdriver/common/wait.rb

 If only a number is provided then it's treated as the timeout value.

 @param [Hash|Numeric] opts Options. If the value is _Numeric_, the value is set as `{ timeout: value }`
 @option opts [Numeric] :timeout Seconds to wait before timing out. Set default by `appium_wait_timeout` (30).
 @option opts [Numeric] :interval Seconds to sleep between polls. Set default by `appium_wait_interval` (0.5).
 @option opts [String] :message Exception message if timed out.
 @option opts [Array, Exception] :ignore Exceptions to ignore while polling (default: Exception)

 @example

     wait_true(timeout: 20, interval: 0.2, message: 'custom message') { button_exact('Back') }.click
     wait_true(20) { button_exact('Back') }.click