diff options
Diffstat (limited to 'qa/qa/page/base.rb')
-rw-r--r-- | qa/qa/page/base.rb | 41 |
1 files changed, 23 insertions, 18 deletions
diff --git a/qa/qa/page/base.rb b/qa/qa/page/base.rb index 289094268b6..66040bb9849 100644 --- a/qa/qa/page/base.rb +++ b/qa/qa/page/base.rb @@ -132,16 +132,16 @@ module QA all(element_selector_css(name), **kwargs) end - def check_element(name, click_by_js = false) - if find_element(name, visible: false).checked? + def check_element(name, click_by_js = false, visibility = false) + if find_element(name, visible: visibility).checked? QA::Runtime::Logger.debug("#{name} is already checked") return end retry_until(sleep_interval: 1) do - click_checkbox_or_radio(name, click_by_js) - checked = find_element(name, visible: false).checked? + click_checkbox_or_radio(name, click_by_js, visibility) + checked = find_element(name, visible: visibility).checked? QA::Runtime::Logger.debug(checked ? "#{name} was checked" : "#{name} was not checked") @@ -149,16 +149,16 @@ module QA end end - def uncheck_element(name, click_by_js = false) - unless find_element(name, visible: false).checked? + def uncheck_element(name, click_by_js = false, visibility = false) + unless find_element(name, visible: visibility).checked? QA::Runtime::Logger.debug("#{name} is already unchecked") return end retry_until(sleep_interval: 1) do - click_checkbox_or_radio(name, click_by_js) - unchecked = !find_element(name, visible: false).checked? + click_checkbox_or_radio(name, click_by_js, visibility) + unchecked = !find_element(name, visible: visibility).checked? QA::Runtime::Logger.debug(unchecked ? "#{name} was unchecked" : "#{name} was not unchecked") @@ -167,21 +167,22 @@ module QA end # Method for selecting radios - def choose_element(name, click_by_js = false) - if find_element(name, visible: false).checked? + def choose_element(name, click_by_js = false, visibility = false) + if find_element(name, visible: visibility).checked? QA::Runtime::Logger.debug("#{name} is already selected") return end retry_until(sleep_interval: 1) do - click_checkbox_or_radio(name, click_by_js) - selected = find_element(name, visible: false).checked? + click_checkbox_or_radio(name, click_by_js, visibility) + selected = find_element(name, visible: visibility).checked? QA::Runtime::Logger.debug(selected ? "#{name} was selected" : "#{name} was not selected") selected end + wait_for_requests end # Use this to simulate moving the pointer to an element's coordinate @@ -226,10 +227,12 @@ module QA wait = kwargs.delete(:wait) || Capybara.default_max_wait_time text = kwargs.delete(:text) klass = kwargs.delete(:class) + visible = kwargs.delete(:visible) + visible = visible.nil? && true try_find_element = ->(wait) do if disabled.nil? - has_css?(element_selector_css(name, kwargs), text: text, wait: wait, class: klass) + has_css?(element_selector_css(name, kwargs), text: text, wait: wait, class: klass, visible: visible) else find_element(name, original_kwargs).disabled? == disabled end @@ -337,8 +340,10 @@ module QA end end - def scroll_to_element(name, *args) - scroll_to(element_selector_css(name), *args) + def scroll_to_element(name, *kwargs) + text = kwargs.delete(:text) + + scroll_to(element_selector_css(name, kwargs), text: text) end def element_selector_css(name, *attributes) @@ -399,7 +404,7 @@ module QA end def visible? - raise NoRequiredElementsError.new(self.class) if self.class.required_elements.empty? + raise NoRequiredElementsError, self.class if self.class.required_elements.empty? self.class.required_elements.each do |required_element| return false if has_no_element? required_element @@ -424,8 +429,8 @@ module QA private - def click_checkbox_or_radio(name, click_by_js) - box = find_element(name, visible: false) + def click_checkbox_or_radio(name, click_by_js, visibility) + box = find_element(name, visible: visibility) # Some checkboxes and radio buttons are hidden by their labels and cannot be clicked directly click_by_js ? page.execute_script("arguments[0].click();", box) : box.click end |