require_relative './commands' module Scoutui::Commands class ClickObject < Command def _then(pageElt) return if pageElt.nil? if !pageElt.nil? && pageElt.has_key?('page') && pageElt['page'].has_key?('then') pageElt['page']['then'].each do |_subcmd| if _subcmd.is_a?(String) puts __FILE__ + (__LINE__).to_s + " | then => #{_subcmd}" if _subcmd.match(/^\s*press\(__TAB__\)$/) @drv.action.send_keys(:tab).perform elsif _subcmd.match(/^\s*press\(__DOWN__\)$/) @drv.action.send_keys(:arrow_down).perform elsif _subcmd.match(/^\s*press\(__UP__\)$/) @drv.action.send_keys(:arrow_up).perform elsif _subcmd.match(/^\s*press\(__ENTER__\)\s*$/) @drv.action.send_keys(:enter).perform end end end end end def _whenClicked(page_elt) return if page_elt.nil? if page_elt.is_a?(Hash) && page_elt.has_key?('when_clicked') Scoutui::Logger::LogMgr.instance.debug __FILE__ + (__LINE__).to_s + " Verify #{page_elt['when_clicked']}" page_elt['when_clicked'].each do |_elt| _r = _elt.keys[0].to_s _pg = _elt[_r] # _c = Scoutui::Commands::VerifyElement.new("verifyelement(" + _elt + ")") # _c.execute(@drv) Scoutui::Logger::LogMgr.instance.debug __FILE__ + (__LINE__).to_s + " _whenClicked -> assertions (#{_pg}, #{_r.to_s})" if _pg.is_a?(Array) _pg.each do |_pg2| isVisible=Scoutui::Base::Assertions.instance.isVisible(@drv, _pg2, _r) end elsif _pg.is_a?(String) isVisible=Scoutui::Base::Assertions.instance.isVisible(@drv, _pg, _r) else puts __FILE__ + (__LINE__).to_s + " => #{_pg}" end # Scoutui::Logger::LogMgr.instance.debug __FILE__ + (__LINE__).to_s + " IsVisible #{isVisible} - PAUSE"; gets end end end def execute(drv, e=nil) @drv=drv if !drv.nil? bm=nil all_windows = @drv.window_handles.size _req = Scoutui::Utils::TestUtils.instance.getReq() _locator = @cmd.match(/click\s*\((.*)\)/)[1].to_s.strip Scoutui::Logger::LogMgr.instance.command.info __FILE__ + (__LINE__).to_s + " clickObject => #{_locator}" # _locator = Scoutui::Base::UserVars.instance.get(_locator) _locator = Scoutui::Base::UserVars.instance.normalize(_locator) Scoutui::Logger::LogMgr.instance.command.info __FILE__ + (__LINE__).to_s + " | translate : #{_locator}" if Scoutui::Utils::TestUtils.instance.isDebug? _clicked=false begin obj = Scoutui::Base::QBrowser.getElement(@drv, _locator, Scoutui::Commands::Utils.instance.getFrameSearch(), Scoutui::Commands::Utils.instance.getTimeout) if false obj = Scoutui::Base::QBrowser.findElement(@drv, _locator, Scoutui::Commands::Utils.instance.getFrameSearch(), Scoutui::Commands::Utils.instance.getTimeout) if Scoutui::Base::QBrowser.isStale?(obj) && !_locator.nil? wait = Selenium::WebDriver::Wait.new(:timeout => Scoutui::Commands::Utils.instance.getTimeout) isDisplayed = wait.until { if Scoutui::Base::QBrowser.isStale?(obj) obj = Scoutui::Base::QBrowser.findElement(@drv, _locator, Scoutui::Commands::Utils.instance.getFrameSearch(), Scoutui::Commands::Utils.instance.getTimeout) end true if obj.enabled? } end end if obj # Refactor in qbrowser isDisplayed=false begin wait = Selenium::WebDriver::Wait.new(:timeout => Scoutui::Commands::Utils.instance.getTimeout) isDisplayed = wait.until { true if obj.displayed? } rescue Selenium::WebDriver::Error::TimeOutError => ex Scoutui::Logger::LogMgr.instance.debug __FILE__ + (__LINE__).to_s + " Timeout waiting for display?: #{_locator}" end if isDisplayed isEnabled = wait.until { obj.enabled? } Scoutui::Logger::LogMgr.instance.debug __FILE__ + (__LINE__).to_s + " obj is enabled : #{isEnabled}" if e.is_a?(Hash) && e.has_key?('page') && e['page'].has_key?('highlight') && e['page']['highlight'] # # page: # highlight: true # obj=Scoutui::Base::QBrowser.highlight(@drv, obj) Scoutui::Logger::LogMgr.instance.debug __FILE__ + (__LINE__).to_s + " highlight then click : #{obj}" end (0..5).each do |_i| _retry = true puts __FILE__ + (__LINE__).to_s + " #{_i} => click(#{obj})" begin obj = Scoutui::Base::QBrowser.getElement(@drv, _locator, Scoutui::Commands::Utils.instance.getFrameSearch(), Scoutui::Commands::Utils.instance.getTimeout) @drv.action.move_to(obj).perform bm=Benchmark.measure { obj.click } setBenchmark(bm) _retry = false _clicked=true rescue Selenium::WebDriver::Error::UnknownError Scoutui::Logger::LogMgr.instance.debug __FILE__ + (__LINE__).to_s + " Retry #{_i} - Selenium::WebDriver::Error::UnknownError" _retry=true end break if !_retry end Scoutui::Logger::LogMgr.instance.debug __FILE__ + (__LINE__).to_s + " clicked(#{_locator}): #{_clicked}" page_elt = Scoutui::Utils::TestUtils.instance.getPageElement(_locator) Scoutui::Logger::LogMgr.instance.debug "PageElement(#{_locator}) => #{page_elt}" if all_windows > @drv.window_handles.size Scoutui::Logger::LogMgr.instance.debug __FILE__ + (__LINE__).to_s + " WINDOW was CLOSED. Activate first window as our default"; @drv.switch_to.window @drv.window_handles.first Scoutui::Logger::LogMgr.instance.debug __FILE__ + (__LINE__).to_s + " Switched to first window" end _whenClicked(page_elt) _then(page_elt) else Scoutui::Logger::LogMgr.instance.warn __FILE__ + (__LINE__).to_s + " Unable to click object that is not displayed." end end rescue => ex Scoutui::Logger::LogMgr.instance.warn __FILE__ + (__LINE__).to_s + " #{ex.class.to_s} : Error during processing: #{ex.message}" Scoutui::Logger::LogMgr.instance.warn "Backtrace:\n\t#{ex.backtrace.join("\n\t")}" end Scoutui::Logger::LogMgr.instance.asserts.info "Verify object to click exists #{_locator} : #{obj.class.to_s} - #{!obj.nil?.to_s}" Scoutui::Logger::LogMgr.instance.asserts.info __FILE__ + (__LINE__).to_s + " Verify clicked #{_locator} - #{_clicked.to_s}" Testmgr::TestReport.instance.getReq(_req).testcase('click').add(!obj.nil?, "Verify object to click exists #{_locator} : #{obj.class.to_s}") Testmgr::TestReport.instance.getReq(_req).testcase('click').add(_clicked, "Verify clicked #{_locator}") setResult(_clicked) end end end