Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'qa/qa/page/base.rb')
-rw-r--r--qa/qa/page/base.rb38
1 files changed, 32 insertions, 6 deletions
diff --git a/qa/qa/page/base.rb b/qa/qa/page/base.rb
index d1b556b58fb..289094268b6 100644
--- a/qa/qa/page/base.rb
+++ b/qa/qa/page/base.rb
@@ -132,7 +132,7 @@ module QA
all(element_selector_css(name), **kwargs)
end
- def check_element(name)
+ def check_element(name, click_by_js = false)
if find_element(name, visible: false).checked?
QA::Runtime::Logger.debug("#{name} is already checked")
@@ -140,7 +140,7 @@ module QA
end
retry_until(sleep_interval: 1) do
- find_element(name, visible: false).click
+ click_checkbox_or_radio(name, click_by_js)
checked = find_element(name, visible: false).checked?
QA::Runtime::Logger.debug(checked ? "#{name} was checked" : "#{name} was not checked")
@@ -149,7 +149,7 @@ module QA
end
end
- def uncheck_element(name)
+ def uncheck_element(name, click_by_js = false)
unless find_element(name, visible: false).checked?
QA::Runtime::Logger.debug("#{name} is already unchecked")
@@ -157,7 +157,7 @@ module QA
end
retry_until(sleep_interval: 1) do
- find_element(name, visible: false).click
+ click_checkbox_or_radio(name, click_by_js)
unchecked = !find_element(name, visible: false).checked?
QA::Runtime::Logger.debug(unchecked ? "#{name} was unchecked" : "#{name} was not unchecked")
@@ -166,13 +166,31 @@ module QA
end
end
+ # Method for selecting radios
+ def choose_element(name, click_by_js = false)
+ if find_element(name, visible: false).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?
+
+ QA::Runtime::Logger.debug(selected ? "#{name} was selected" : "#{name} was not selected")
+
+ selected
+ end
+ end
+
# Use this to simulate moving the pointer to an element's coordinate
# and sending a click event.
# This is a helpful workaround when there is a transparent element overlapping
# the target element and so, normal `click_element` on target would raise
# Selenium::WebDriver::Error::ElementClickInterceptedError
- def click_element_coordinates(name)
- page.driver.browser.action.move_to(find_element(name).native).click.perform
+ def click_element_coordinates(name, **kwargs)
+ page.driver.browser.action.move_to(find_element(name, **kwargs).native).click.perform
end
# replace with (..., page = self.class)
@@ -403,6 +421,14 @@ module QA
end
end
end
+
+ private
+
+ def click_checkbox_or_radio(name, click_by_js)
+ box = find_element(name, visible: false)
+ # 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
end
end
end