module Wist

Attributes

wait_time_method[RW]

Public Class Methods

included(klass) click to toggle source
# File lib/wist.rb, line 7
def self.included(klass)
  klass.include CommonAssert
end

Public Instance Methods

alert_accept(expected_msg = false) { || ... } click to toggle source
# File lib/wist.rb, line 75
def alert_accept(expected_msg = false)
  page.execute_script "window.alert = function(msg) { window.lastAlertMsg = msg; }"
  yield

  wait_until do
    get_js('window.lastAlertMsg') == expected_msg
  end if expected_msg
end
assert_text(text, el_or_selector) click to toggle source
# File lib/wist.rb, line 152
def assert_text(text, el_or_selector)
  common_assert_equal(process_el_or_selector(el_or_selector).text, text)
end
assert_text_include(text, el) click to toggle source
# File lib/wist.rb, line 156
def assert_text_include(text, el)
  common_assert_equal(el.text.include?(text), true)
end
click(*args) click to toggle source
# File lib/wist.rb, line 45
def click(*args)
  find(*args).click
end
click_by_text(selector, text, text_include: true, downcase: true) click to toggle source
# File lib/wist.rb, line 164
def click_by_text(selector, text, text_include: true, downcase: true)
  all_with_wait(selector, visible: true).find do |el|
    el_text = downcase ? el.text.downcase : el.text
    text_include ? el_text.include?(text) : el_text == text
  end.click
end
do_instantly() { || ... } click to toggle source
# File lib/wist.rb, line 186
def do_instantly
  lambda do
    default_max_wait_time = get_capybara_wait_time
    @old_wait_time = default_max_wait_time if default_max_wait_time > 0
  end.()
  Capybara.public_send("#{Wist.wait_time_method}=", 0)

  begin
    yield
  rescue => e
    raise(e)
  ensure
    Capybara.public_send("#{Wist.wait_time_method}=", @old_wait_time)
  end
end
driver() click to toggle source
# File lib/wist.rb, line 60
def driver
  page.driver.browser
end
get_capybara_wait_time() click to toggle source
# File lib/wist.rb, line 182
def get_capybara_wait_time
  Capybara.public_send(Wist.wait_time_method)
end
get_js(code) click to toggle source
# File lib/wist.rb, line 84
def get_js(code)
  page.evaluate_script code
end
get_val(selector) click to toggle source
# File lib/wist.rb, line 92
def get_val(selector)
  find(selector).value
end
has_class?(el, class_name) click to toggle source
# File lib/wist.rb, line 101
def has_class?(el, class_name)
  klass = el[:class]
  return false if Helpers.blank?(klass)
  klass.split(' ').include?(class_name)
end
has_css_instant?(*args) click to toggle source
# File lib/wist.rb, line 178
def has_css_instant?(*args)
  do_instantly { has_css?(*args) }
end
interact_with_confirm(accept = true) click to toggle source
# File lib/wist.rb, line 71
def interact_with_confirm(accept = true)
  page.execute_script("window.confirm = function() { return #{accept.to_json} }")
end
jquery_selector(selector) click to toggle source
# File lib/wist.rb, line 88
def jquery_selector(selector)
  "$('#{selector}')"
end
parent(el) click to toggle source
# File lib/wist.rb, line 160
def parent(el)
  el.first(:xpath, './/..')
end
process_el_or_selector(el_or_selector) click to toggle source
# File lib/wist.rb, line 107
def process_el_or_selector(el_or_selector)
  if el_or_selector.is_a?(String)
    find(el_or_selector, visible: true)
  else
    el_or_selector
  end
end
refresh() click to toggle source
# File lib/wist.rb, line 128
def refresh
  visit current_url
end
scroll_to(selector) click to toggle source
# File lib/wist.rb, line 141
def scroll_to(selector)
  page.execute_script("#{jquery_selector('html, body')}.scrollTop(#{jquery_selector(selector)}.offset().top)")
end
set_input_and_press_enter(selector, val) click to toggle source
# File lib/wist.rb, line 96
def set_input_and_press_enter(selector, val)
  wait_til_element_visible(selector)
  page.execute_script("#{jquery_selector(selector)}.val('#{val}').trigger({type: 'keydown', which: 13}).trigger({ type: 'keypress', which: 13})")
end
set_value_and_trigger_evts(selector, val) click to toggle source
# File lib/wist.rb, line 49
def set_value_and_trigger_evts(selector, val)
  find(selector).set(val)
  page.execute_script("$('#{selector}').focusout().blur().change().trigger('input')")
end
switch_to_window_and_execute(new_window_lambda) { || ... } click to toggle source
# File lib/wist.rb, line 64
def switch_to_window_and_execute(new_window_lambda)
  within_window(window_opened_by(&new_window_lambda)) do
    yield
    driver.close
  end
end
verify_tweet_button(text) click to toggle source
# File lib/wist.rb, line 54
def verify_tweet_button(text)
  share_button_src = nil
  wait_until { share_button_src = find('.twitter-share-button')[:src] }
  common_assert_equal(CGI.parse(URI.parse(share_button_src.gsub('#', '?')).query)['text'][0], text)
end
wait_for_ajax() click to toggle source
# File lib/wist.rb, line 132
def wait_for_ajax
  wait_until { get_js '$.isReady && ($.active == 0)' }
end
wait_for_new_url(element_to_click = nil) { || ... } click to toggle source
# File lib/wist.rb, line 115
def wait_for_new_url(element_to_click = nil)
  old_url = current_url

  if element_to_click.nil?
    yield
  else
    process_el_or_selector(element_to_click).click
  end

  sleep 1
  wait_until { current_url != old_url }
end
wait_til_element_visible(selector) click to toggle source
# File lib/wist.rb, line 136
def wait_til_element_visible(selector)
  has_css?(selector, visible: true)
  find(selector)
end
wait_until(timeout: false) { || ... } click to toggle source
# File lib/wist.rb, line 33
def wait_until(timeout: false)
  do_instantly do
    Selenium::WebDriver::Wait.new(timeout: timeout || @old_wait_time).until do
      begin
        yield
      rescue
        false
      end
    end
  end
end