lib/scoutui/eyes/eye_scout.rb in scoutui-2.0.3.15.pre vs lib/scoutui/eyes/eye_scout.rb in scoutui-2.0.3.16.pre

- old
+ new

@@ -1,8 +1,10 @@ #require 'eyes_selenium' #require 'testmgr' require 'httparty' +#require 'uri' +#require 'cgi' module Scoutui::Eyes class EyeScout @@ -34,14 +36,31 @@ #---- 5150 ----- def get_session_id(url) Scoutui::Logger::LogMgr.instance.info __FILE__ + (__LINE__).to_s + " -- get_session_id(#{url}) ==" _s=/sessions\/(?<session>\d+)/.match(url)[1] + end + def get_accountid(url) + Scoutui::Logger::LogMgr.instance.info __FILE__ + (__LINE__).to_s + " -- get_account_id(#{url}) ==" + + uri = URI(url) + queryString = CGI::parse(uri.query) + + accountid = queryString['accountId'] || queryString['accountid'] + + Scoutui::Logger::LogMgr.instance.info __FILE__ + (__LINE__).to_s + " => accountId : #{accountid}" + +# _s=/sessions\/(?<accountid>\d+)/.match(url)[1] + + accountid.is_a?(Array) ? accountid[0] : accountid end - def get_diff_urls(session_id, view_key) + def Legacyget_diff_urls(session_id, view_key) + + Scoutui::Logger::LogMgr.instance.debug __FILE__ + (__LINE__).to_s + "=== get_diffs_url(#{session_id} ===" + info = "https://eyes.applitools.com/api/sessions/#{session_id}/?ApiKey=#{view_key}&format=json" diff_template = "https://eyes.applitools.com/api/sessions/#{session_id}/steps/%s/diff?ApiKey=#{view_key}" diff_urls = Hash.new Scoutui::Logger::LogMgr.instance.info __FILE__ + (__LINE__).to_s + " info => #{info}" @@ -68,10 +87,49 @@ ; end end + + def get_diff_urls(session_id, account_id, view_key) + + Scoutui::Logger::LogMgr.instance.debug __FILE__ + (__LINE__).to_s + " == get_diffs_url(#{session_id} ==" + + info = "https://eyes.applitools.com/api/sessions/#{session_id}?ApiKey=#{view_key}&format=json" + #info = "https://eyes.applitools.com/api/sessions/#{session_id}?accountId=#{account_id}&format=json" + diff_template = "https://eyes.applitools.com/api/sessions/#{session_id}/steps/%s/diff?ApiKey=#{view_key}" + diff_template = "https://eyes.applitools.com/api/sessions/#{session_id}?accountId=#{account_id}&format=json" + + Scoutui::Logger::LogMgr.instance.debug __FILE__ + (__LINE__).to_s + " diff_template => #{diff_template}" + diff_urls = Hash.new + + Scoutui::Logger::LogMgr.instance.info __FILE__ + (__LINE__).to_s + " info => #{info}" + response = HTTParty.get(info) + + Scoutui::Logger::LogMgr.instance.info __FILE__ + (__LINE__).to_s + " RESP => #{response.to_s}" + + begin + data = JSON.parse(response.body) + index = 1 + data['actualOutput'].each do |elem| + if !elem.nil? && (elem['isMatching'] == false) + #diff_urls[index] = diff_template % [index] + Scoutui::Logger::LogMgr.instance.info __FILE__ + (__LINE__).to_s + " #{index.to_s} :#{elem['tag'].to_s}" + #diff_urls[index] = diff_template % [index] + diff_urls[index] = { :tag => elem['tag'].to_s, :url => diff_template % [index] } + index+=1 + end + end + + diff_urls + + rescue JSON::ParserError + ; + end + + end + def sanitize_filename(filename) # Split the name when finding a period which is preceded by some # character, and is followed by some character other than a period, # if there is no following period that is followed by something # other than a period @@ -85,25 +143,53 @@ # Finally, join the parts with a period and return the result return fn.join '.' end def download_images(diff_urls, destination) + Scoutui::Logger::LogMgr.instance.debug __FILE__ + (__LINE__).to_s + " download_images(#{diff_urls}, #{destination}" + diff_urls.each do |index, elem| save_name = sanitize_filename(elem[:tag]) + ".step_#{index}_diff.png" + Scoutui::Logger::LogMgr.instance.debug __FILE__ + (__LINE__).to_s + " => download : #{save_name}" + File.open("#{destination}/#{save_name}", 'wb') do |file| file.write HTTParty.get(elem[:url]) end end end + def Legacy_saveDiffs(_eyes, results, outdir, view_key) + Scoutui::Logger::LogMgr.instance.info __FILE__ + (__LINE__).to_s + " saveDiffs(#{outdir.to_s})" + Scoutui::Logger::LogMgr.instance.debug __FILE__ + (__LINE__).to_s + " | eyesResults => #{results.to_s}" + + Scoutui::Logger::LogMgr.instance.info __FILE__ + (__LINE__).to_s + " | steps : #{results.steps.to_s}" + session_id = get_session_id(results.url) + Scoutui::Logger::LogMgr.instance.info __FILE__ + (__LINE__).to_s + " session => #{session_id}" + + diffs = Legacyget_diff_urls(session_id, view_key) + + Scoutui::Logger::LogMgr.instance.debug __FILE__ + (__LINE__).to_s + " diffs => #{diffs}" + if diffs.is_a?(Array) + diffs.each do |d| + Scoutui::Logger::LogMgr.instance.info __FILE__ + (__LINE__).to_s + " #{d.to_s}" + end + + download_images(diffs, outdir) + end + + end + def saveDiffs(_eyes, results, outdir, view_key) Scoutui::Logger::LogMgr.instance.info __FILE__ + (__LINE__).to_s + " saveDiffs(#{outdir.to_s})" + Scoutui::Logger::LogMgr.instance.debug __FILE__ + (__LINE__).to_s + " results => #{results.to_s}" Scoutui::Logger::LogMgr.instance.info __FILE__ + (__LINE__).to_s + " | steps : #{results.steps.to_s}" session_id = get_session_id(results.url) Scoutui::Logger::LogMgr.instance.info __FILE__ + (__LINE__).to_s + " session => #{session_id}" + account_id = get_accountid(results.url) + diffs = get_diff_urls(session_id, view_key) diffs.each do |d| Scoutui::Logger::LogMgr.instance.info __FILE__ + (__LINE__).to_s + " #{d.to_s}" end @@ -119,18 +205,29 @@ # Scoutui::Base::QHarMgr.instance.stop('/tmp/scoutui.har') return if !Scoutui::Utils::TestUtils.instance.eyesEnabled? @testResults = eyes().close(false) + Scoutui::Logger::LogMgr.instance.debug __FILE__ + (__LINE__).to_s + " @eyes => #{eyes().to_s}" + + + Scoutui::Logger::LogMgr.instance.debug __FILE__ + (__LINE__).to_s + "| app_name : #{eyes().app_name}" + Scoutui::Logger::LogMgr.instance.debug __FILE__ + (__LINE__).to_s + "| match_level: #{eyes().match_level}" + Scoutui::Logger::LogMgr.instance.debug __FILE__ + (__LINE__).to_s + "| viewport_size: #{eyes().viewport_size.to_s}" + + eyes().viewport_size.to_hash.each_pair do |k, v| + Scoutui::Logger::LogMgr.instance.debug " o " + k.to_s + " : " + v.to_s + end + Testmgr::TestReport.instance.getReq("EYES").testcase('Images').add(@testResults.steps.to_i > 0, "Verify at least 1 shot taken (#{@testResults.steps.to_s} shots)") Testmgr::TestReport.instance.getReq("EYES").testcase('Images').add(@testResults.missing.to_i==0, "Verify Eyes did not miss any screens (#{@testResults.missing.to_s} screens)") # 5150 _diffdir=Scoutui::Utils::TestUtils.instance.getDiffDir() if ENV.has_key?('APPLITOOLS_VIEW_KEY') && !_diffdir.nil? if Dir.exists?(_diffdir) - saveDiffs(eyes(), @testResults, _diffdir, ENV['APPLITOOLS_VIEW_KEY']) + Legacy_saveDiffs(eyes(), @testResults, _diffdir, ENV['APPLITOOLS_VIEW_KEY']) else Scoutui::Logger::LogMgr.instance.warn " Specified Visual Diff folder does not exist - #{_diffdir.to_s}. Unable to download diffs" end else \ No newline at end of file