Class: Gridium::Page
- Inherits:
-
Object
- Object
- Gridium::Page
- Defined in:
- lib/page.rb
Class Method Summary collapse
- .assert_selector(by, locator) ⇒ Object
- .evaluate_script(script) ⇒ Object
- .execute_script(script) ⇒ Object
- .has_button?(button_text, opts = {}) ⇒ Boolean
- .has_css?(css, opts = {}) ⇒ Boolean
- .has_flash?(text, opts = {}) ⇒ Boolean
- .has_link?(linktext, opts = {}) ⇒ Boolean
- .has_text?(text, opts = {}) ⇒ Boolean
- .has_xpath?(xpath, opts = {}) ⇒ Boolean
-
.jquery_click(selector) ⇒ Object
JQuery click Occasionaly selenium is unable to click on elements in the DOM which have some interesting React goodies around the element.
- .jquery_loaded? ⇒ Boolean
- .scroll_to_bottom ⇒ Object
- .scroll_to_top ⇒ Object
- .switch_to_default ⇒ Object
- .switch_to_frame(frame) ⇒ Object
- .wait_for_ajax ⇒ Object
Instance Method Summary collapse
- #all(by, locator) ⇒ Object
-
#check(id) ⇒ Object
checks a checkbox.
-
#click_button(button_name, button_index: nil) ⇒ Object
Click the button on the page.
-
#click_link(link_text, link_index: nil) ⇒ Object
Click the link on the page.
- #click_on(text) ⇒ Object
- #find(by, locator, opts = {}) ⇒ Object
- #first(by, locator) ⇒ Object
-
#mouse_over(text, x: 0, y: 0, index: 1) ⇒ Object
(also: #hover)
mouse/hover over request ‘text’ at options coordinates and optional index.
Class Method Details
.assert_selector(by, locator) ⇒ Object
12 13 14 15 16 17 18 19 |
# File 'lib/page.rb', line 12 def self.assert_selector(by, locator) asserted_element = Element.new("Asserted Element", by, locator) if asserted_element.eql? nil fail("Could not find element on page with locator #{locator} using #{by}") else Log.info("[GRIDIUM::Page] Asserted Element present with locator #{locator} using #{by}") end end |
.evaluate_script(script) ⇒ Object
130 131 132 |
# File 'lib/page.rb', line 130 def self.evaluate_script(script) Driver.evaluate_script script end |
.execute_script(script) ⇒ Object
126 127 128 |
# File 'lib/page.rb', line 126 def self.execute_script(script) Driver.execute_script_driver(script) end |
.has_button?(button_text, opts = {}) ⇒ Boolean
74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 |
# File 'lib/page.rb', line 74 def self.(, opts = {}) timeout = opts[:timeout] || 5 wait = Selenium::WebDriver::Wait.new(:timeout => timeout) begin elem = Element.new("#{} button", :xpath, "//button[contains(., \"#{}\")]", timeout: timeout) if opts[:disabled] wait.until {elem.disabled?} else wait.until {elem.enabled?} end rescue Exception => exception Log.debug("[GRIDIUM::Page] has_button? is false because this exception was rescued: #{exception}") return false end end |
.has_css?(css, opts = {}) ⇒ Boolean
21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
# File 'lib/page.rb', line 21 def self.has_css?(css, opts = {}) timeout = opts[:timeout] || 5 wait = Selenium::WebDriver::Wait.new(:timeout => timeout) begin if opts[:visible] wait.until {Driver.driver.find_element(:css, css).displayed?} else wait.until {Driver.driver.find_element(:css, css).enabled?} end rescue Exception => exception Log.debug("[GRIDIUM::Page] has_css? is false because this exception was rescued: #{exception}") return false end end |
.has_flash?(text, opts = {}) ⇒ Boolean
96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 |
# File 'lib/page.rb', line 96 def self.has_flash?(text, opts = {}) timeout = opts[:timeout] || 5 wait = Selenium::WebDriver::Wait.new(:timeout => timeout) begin if opts[:visible] element = wait.until { Element.new("Finding text '#{text}'", :xpath, "//*[text()=\"#{text}\"]", timeout: timeout).displayed? } else element = wait.until { Driver.html.include? text } end rescue Exception => exception Log.debug("[GRIDIUM::Page] exception was rescued: #{exception}") Log.warn("[GRIDIUM::Page] Could not find the text '#{text}'!") end if element return true else return false end end |
.has_link?(linktext, opts = {}) ⇒ Boolean
51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
# File 'lib/page.rb', line 51 def self.has_link?(linktext, opts = {}) timeout = opts[:timeout] || 5 wait = Selenium::WebDriver::Wait.new(:timeout => timeout) begin elem = nil wait.until do elem = Driver.driver.find_element(:link_text, linktext) elem.enabled? end if opts[:href] href = elem.attribute 'href' raise "Failed to verify link href='#{opts[:href]}': #{href} != #{opts[:href]}" unless href == opts[:href] end return true rescue Exception => exception Log.debug("[GRIDIUM::Page] has_link? is false because this exception was rescued: #{exception}") return false end end |
.has_text?(text, opts = {}) ⇒ Boolean
92 93 94 |
# File 'lib/page.rb', line 92 def self.has_text?(text, opts = {}) has_flash?(text, opts) end |
.has_xpath?(xpath, opts = {}) ⇒ Boolean
36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
# File 'lib/page.rb', line 36 def self.has_xpath?(xpath, opts = {}) timeout = opts[:timeout] || 5 wait = Selenium::WebDriver::Wait.new(:timeout => timeout) begin if opts[:visible] wait.until {Driver.driver.find_element(:xpath, xpath).displayed?} else wait.until {Driver.driver.find_element(:xpath, xpath).enabled?} end rescue Exception => exception Log.debug("[GRIDIUM::Page] has_xpath? is false because this exception was rescued: #{exception}") return false end end |
.jquery_click(selector) ⇒ Object
JQuery click Occasionaly selenium is unable to click on elements in the DOM which have some interesting React goodies around the element.
153 154 155 |
# File 'lib/page.rb', line 153 def self.jquery_click(selector) Driver.evaluate_script("$(\"#{selector}\").click().change();") end |
.jquery_loaded? ⇒ Boolean
142 143 144 |
# File 'lib/page.rb', line 142 def self.jquery_loaded? self.evaluate_script("jQuery.active").zero? end |
.scroll_to_bottom ⇒ Object
117 118 119 |
# File 'lib/page.rb', line 117 def self.scroll_to_bottom Driver.execute_script_driver('window.scrollTo(0,100000)') end |
.scroll_to_top ⇒ Object
121 122 123 124 |
# File 'lib/page.rb', line 121 def self.scroll_to_top #TODO Verify this Driver.execute_script_driver('window.scrollTo(100000,0)') end |
.switch_to_default ⇒ Object
8 9 10 |
# File 'lib/page.rb', line 8 def self.switch_to_default Driver.driver.switch_to.default_content end |
Instance Method Details
#all(by, locator) ⇒ Object
157 158 159 160 |
# File 'lib/page.rb', line 157 def all(by, locator) root = Element.new("root", :tag_name, "html") root.find_elements(by, locator) end |
#check(id) ⇒ Object
checks a checkbox
216 217 218 |
# File 'lib/page.rb', line 216 def check(id) #checks a checkbox Element.new("Checkbox", :id, id).click end |
#click_button(button_name, button_index: nil) ⇒ Object
Click the button on the page
201 202 203 204 205 206 207 208 209 210 211 212 213 214 |
# File 'lib/page.rb', line 201 def (, button_index: nil) #The button maybe a link that looks like a button - we want to handle both if = Element.new("Clicking #{} button (#{})", :xpath, "(//button[contains(., \"#{}\")])[#{}]") else = Element.new("Clicking #{} button", :xpath, "//button[contains(., \"#{}\")]") end begin .click rescue Exception => exception Log.debug("[GRIDIUM::Page] Button not found and this exception was rescued: #{exception} Attempting Link - speed up test by using click_link method if this works...") click_link , link_index: end end |
#click_link(link_text, link_index: nil) ⇒ Object
Click the link on the page
190 191 192 193 194 195 196 |
# File 'lib/page.rb', line 190 def click_link(link_text, link_index: nil) if link_index Element.new("Clicking #{link_text} Link (#{link_index})", :xpath, "(//a[contains(., \"#{link_text}\")])[#{link_index}]").click else Element.new("Clicking #{link_text} Link", :xpath, "//a[contains(., \"#{link_text}\")]").click end end |
#click_on(text) ⇒ Object
183 184 185 |
# File 'lib/page.rb', line 183 def click_on(text) Element.new("Clicking #{text}", :xpath, "//*[text()=\"#{text}\"]").click end |
#find(by, locator, opts = {}) ⇒ Object
162 163 164 |
# File 'lib/page.rb', line 162 def find(by, locator, opts = {}) Element.new("Page Find Element", by, locator, opts) end |
#first(by, locator) ⇒ Object
166 167 168 |
# File 'lib/page.rb', line 166 def first(by, locator) all(by, locator).first end |
#mouse_over(text, x: 0, y: 0, index: 1) ⇒ Object Also known as: hover
mouse/hover over request ‘text’ at options coordinates and optional index
177 178 179 |
# File 'lib/page.rb', line 177 def mouse_over(text, x: 0, y: 0, index: 1) Element.new("Clicking #{text}", :xpath, "(//*[text()=\"#{text}\"])[#{index}]").mouse_over(x: x, y: y) end |