class MixpanelTesting::SeleniumProvider
Public Class Methods
new(selenium_url, capabilities = :firefox)
click to toggle source
# File lib/mixpaneltesting/selenium.rb, line 11 def initialize(selenium_url, capabilities = :firefox) @selenium_url = selenium_url @log = Logger.new(STDOUT) @log.info "Selenium initializer" if ![:chrome, :firefox].include? capabilities @caps = Selenium::WebDriver::Remote::Capabilities.new if capabilities['device'].nil? @log.info "Creating capabilities, desktop environment" # REQUIRED capabilities ['os', 'os_version', 'browser', 'browser_version', 'resolution'].each { |key| @caps[key] = capabilities[key] } # NOT REQUIRED capabilities [ 'platform', 'browserName'].each { |key| @caps[key.gsub('_','.')] = capabilities[key] unless capabilities[key].nil? } else @log.info "Creating capabilities, mobile environment" @caps["device"] = capabilities['device'] @caps[:platform] = capabilities['platform'] @caps[:browserName] = capabilities['browserName'] end ['build', 'project', 'browserstack_local', 'browserstack_debug', 'browserstack_localIdentifier' ].each { |key| @caps[key.gsub('_','.')] = capabilities[key] unless capabilities[key].nil? } else @caps = capabilities end @driver = nil @test_cases = [] @wait = 2 @log.info "Ready to connect" end
Public Instance Methods
click(selector)
click to toggle source
# File lib/mixpaneltesting/selenium.rb, line 134 def click(selector) # Click in the object given by selector. It should be visible in the # browser area. @log.debug "Clicking at #{selector}" link = @driver.find_element(selector) @driver.execute_script("arguments[0].scrollIntoView(true);", link) link = @driver.find_element(selector) link.click waitfor() end
connect!()
click to toggle source
# File lib/mixpaneltesting/selenium.rb, line 52 def connect! @log.info "Connecting to selenium through #{@selenium_url}" @log.debug @caps.inspect @driver = Selenium::WebDriver.for( :remote, :url => @selenium_url, :desired_capabilities => @caps) @log.info('Connected to selenium') @driver.manage.timeouts.implicit_wait = Settings.timeout end
driver()
click to toggle source
# File lib/mixpaneltesting/selenium.rb, line 109 def driver @driver end
end_session(site_url = nil)
click to toggle source
# File lib/mixpaneltesting/selenium.rb, line 87 def end_session(site_url = nil) puts @site_url site_url = site_url.nil? ? @site_url : site_url end_url = site_url.include?('?') ? "#{site_url}&" : "#{site_url}?" end_url = "#{end_url}mp_session_end=#{@session_id}" @driver.get end_url waitfor() end
get_page_source()
click to toggle source
# File lib/mixpaneltesting/selenium.rb, line 96 def get_page_source @driver.page_source end
quit()
click to toggle source
# File lib/mixpaneltesting/selenium.rb, line 100 def quit @log.info "Clossing selenium connection BYE!!" @driver.quit end
session_id()
click to toggle source
# File lib/mixpaneltesting/selenium.rb, line 105 def session_id @session_id end
start_session(site_url)
click to toggle source
# File lib/mixpaneltesting/selenium.rb, line 63 def start_session(site_url) @session_id = SecureRandom.uuid @session_timestamp = Time.now.getutc connect! if @driver.nil? @site_url = site_url @log.info "Start mixpanel session #{@session_id}" start_url = site_url.include?('?') ? "#{site_url}&" : "#{site_url}?" start_url = "#{start_url}mp_session_start=#{@session_id}" @driver.get start_url waitfor() end
waitfor(n=false)
click to toggle source
# File lib/mixpaneltesting/selenium.rb, line 113 def waitfor(n=false) # Use waitfor for correct mixpanel js loading and tracking wait = n ? n : @wait (1..wait).each { print "." sleep(1) } print "\r" end
waitfor_object_displayed(*selector)
click to toggle source
# File lib/mixpaneltesting/selenium.rb, line 123 def waitfor_object_displayed(*selector) # Use this method to tell selenium to wait until one element is displayed # Arguments: # selector: is selenium find_element selector # ex: waitfor_object_displayed(:class, 'cookies-eu-ok') @log.debug "Waiting for #{selector} to be displayed" return if @driver.find_element(*selector).displayed? wait = Selenium::WebDriver::Wait.new(:timeout => Settings.timeout) wait.until { !@driver.find_element(*selector).displayed? } end