require 'date' module Scoutui::Commands class Type < Command KEYBOARD_LIST={ '__DOWN__' => lambda { |obj| obj.send_keys(:arrow_down) }, '__TAB__' => lambda { |obj| obj.send_keys(:tab) }, '__CLEAR__' => lambda { |obj| obj.clear } } def _whenTyped(page_elt) if page_elt.is_a?(Hash) && page_elt.has_key?('when_typed') 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=nil, _notUsed=nil) @drv=drv if !drv.nil? _isKb=false _rc=false _req = Scoutui::Utils::TestUtils.instance.getReq() begin if @cmd.strip.match(/^\s*type\s*\(\s*__TAB__\s*\)\s*$/) Scoutui::Logger::LogMgr.instance.debug __FILE__ + (__LINE__).to_s + " HIT TAB key" @drv.action.send_keys(:tab).perform _rc=true _isKb=true elsif @cmd.strip.match(/^\s*type\s*\(\s*__ENTER__\s*\)\s*$/) Scoutui::Logger::LogMgr.instance.debug __FILE__ + (__LINE__).to_s + " ENTER" @drv.action.send_keys(:enter).perform _rc=true _isKb=true else _xpath = @cmd.match(/^\s*type[\!]*\(([^,]*),\s*/)[1].to_s _val = @cmd.match(/^\s*type[\!]*\([^,]*,\s*(.*)\)/)[1].to_s Scoutui::Logger::LogMgr.instance.commands.debug __FILE__ + (__LINE__).to_s + "Process TYPE #{_val} into #{_xpath}" obj = Scoutui::Base::QBrowser.findElement(@drv, _xpath, Scoutui::Commands::Utils.instance.getFrameSearch(), Scoutui::Commands::Utils.instance.getTimeout) Scoutui::Logger::LogMgr.instance.debug __FILE__ + (__LINE__).to_s + " type(#{_val})" Scoutui::Logger::LogMgr.instance.debug __FILE__ + (__LINE__).to_s + " tag : #{obj.tag_name}" if !obj.nil? && (obj.tag_name.downcase=='body' || !obj.attribute('type').downcase.match(/(text|textarea|password|email)/).nil? ) # Refactor in qbrowser wait = Selenium::WebDriver::Wait.new(:timeout => Scoutui::Commands::Utils.instance.getTimeout) isDisplayed=false isDisplayed = wait.until { true if obj.displayed? } if @cmd.match(/type\!/i) Scoutui::Logger::LogMgr.instance.debug __FILE__ + (__LINE__).to_s + " clear()" obj.clear if isDisplayed end Scoutui::Logger::LogMgr.instance.debug __FILE__ + (__LINE__).to_s + " send_keys(#{_val})" if isDisplayed if KEYBOARD_LIST.has_key?(_val.strip) KEYBOARD_LIST[_val.strip].call(obj) elsif _val.match(/^\s*__ENTER__\s*$/) obj.send_keys("") @drv.action.send_keys(:enter).perform else _uservars = _val.scan(/\$\{(.*?)\}/) _v2 = _val for i in 0 .. (_uservars.size - 1) _t = Scoutui::Base::UserVars.instance.get(_uservars[i][0]) puts __FILE__ + (__LINE__).to_s + " translate(#{_uservars[i][0]}) => #{_t}" if !_t.nil? && _uservars[i][0]!=_t _v2.gsub!("\$\{#{_uservars[i][0]}\}", _t) end puts __FILE__ + (__LINE__).to_s + " value => #{_v2}" end ## Global replaces _text_to_type = Scoutui::Base::UserVars.instance.get(_v2) puts __FILE__ + (__LINE__).to_s + " rawText : #{_text_to_type}" transList={ '__CHAR10__' => lambda { }, '__CITY__' => lambda { Faker::Address.city.to_s }, '__COMPANY.NAME__' => lambda { Faker::Company.name.to_s }, '__COMPANY.EIN__' => lambda { Faker::Company.ein.to_s }, '__COUNTRY__' => lambda { Faker::Address.country.to_s }, '__DATE__' => lambda { Time.now().to_s }, '__EMAIL__' => lambda { Faker::Internet.email.to_s}, '__DDMMYY__' => lambda { Date.parse(Time.now.to_s).strftime("%d%m%Y") }, '__PARAGRAPH__' => lambda { Faker::Lorem.paragraph.to_s }, '__PASSWORD__' => lambda { Faker::Internet.password.to_s }, '__PHONENUMBER__' => lambda { Faker::PhoneNumber.phone_number.to_s }, '__PHONENUMBER.AREACODE__' => lambda { Faker::Config.locale = 'en-US'; Faker::PhoneNumber.area_code.to_s }, '__PHONENUMBER.EXCHANGE__' => lambda { Faker::Config.locale = 'en-US'; Faker::PhoneNumber.exchange_code.to_s }, '__PHONENUMBER.SUBSCRIBER__' => lambda { Faker::PhoneNumber.subscriber_number.to_s }, '__PHONENUMBER.EXT__' => lambda { Faker::PhoneNumber.extension.to_s }, '__NUMBER__' => lambda { Faker::Number.number(5).to_s}, '__NUMBER(1)__' => lambda { Faker::Number.number(1).to_s}, '__NUMBER(2)__' => lambda { Faker::Number.number(2).to_s}, '__NUMBER(5)__' => lambda { Faker::Number.number(5).to_s}, '__NUMBER(8)__' => lambda { Faker::Number.number(8).to_s}, '__NUMBER(10)__' => lambda { Faker::Number.number(10).to_s}, '__NUMBER(1,28)__' => lambda { Faker::Number.between(1, 28).to_s }, '__NUMBER(1, 28)__' => lambda { Faker::Number.between(1, 28).to_s }, '__NUMBER(1,29)__' => lambda { Faker::Number.between(1, 29).to_s }, '__NUMBER(1, 29)__' => lambda { Faker::Number.between(1, 29).to_s }, '__NUMBER(1,30)__' => lambda { Faker::Number.between(1, 30).to_s }, '__NUMBER(1, 30)__' => lambda { Faker::Number.between(1, 30).to_s }, '__NUMBER(1,31)__' => lambda { Faker::Number.between(1, 31).to_s }, '__NUMBER(1, 31)__' => lambda { Faker::Number.between(1, 31).to_s }, '__SENTENCE__' => lambda { Faker::Lorem.sentence.to_s }, '__STREET__' => lambda { Faker::Address.street_address.to_s}, '__STATE__' => lambda { Faker::Address.state.to_s }, '__TIME__' => lambda { Time.now.to_s }, '__TIME.MMDDYY__' => lambda { Time.now.strftime "%m%d%y" }, '__TIME.MMDDYY.HM__' => lambda { Time.now.strftime "%m%d%y.%H%M" }, '__TIME.MMDDYY.HMS__' => lambda { Time.now.strftime "%m%d%y.%H%M%S" }, '__USERNAME__' => lambda { Faker::Internet.user_name.to_s }, '__ZIP__' => lambda { Faker::Address.zip_code.to_s }, } transList.each_pair do |_k, _v| if _text_to_type.include?(_k.to_s) _dynamicStr = _v.call.to_s puts __FILE__ + (__LINE__).to_s + " Dyanmic: #{_dynamicStr}" _text_to_type.gsub!(_k.to_s, _dynamicStr) else puts __FILE__ + (__LINE__).to_s + " **** #{_k.to_s} not found" end end puts __FILE__ + (__LINE__).to_s + " Text to type : #{_text_to_type}" obj.send_keys(_text_to_type) if !obj.nil? && false arr=_text_to_type.split(/__ENTER__/) i=0 arr.each do |_t| # puts __FILE__ + (__LINE__).to_s + " => #{_t}"; STDIN.gets; if i > 0 obj.send_keys("") @drv.action.send_keys(:enter).perform puts __FILE__ + (__LINE__).to_s + " ENTER"; STDIN.gets() obj.send_keys("") end obj.send_keys(_t) i+1 end end end _rc=true end else Scoutui::Logger::LogMgr.instance.commands.debug __FILE__ + (__LINE__).to_s + " Unable to process command TYPE => #{obj.to_s}" end end rescue => ex Scoutui::Logger::LogMgr.instance.debug "Error during processing: #{ex}" puts __FILE__ + (__LINE__).to_s + "Backtrace:\n\t#{ex.backtrace.join("\n\t")}" end if !_isKb Testmgr::TestReport.instance.getReq(_req).testcase('type').add(!obj.nil?, "Verify object #{_xpath} to type #{_val} exists : #{obj.class.to_s}") Testmgr::TestReport.instance.getReq(_req).testcase('type').add(_rc, "Verify typed data #{_rc}") end setResult(_rc) end end end