Class: AppiumFailureHelper::Capture
- Inherits:
-
Object
- Object
- AppiumFailureHelper::Capture
- Defined in:
- lib/appium_failure_helper/capture.rb
Constant Summary collapse
- PREFIX =
… (Constantes PREFIX, MAX_VALUE_LENGTH, @@logger permanecem iguais) …
{ 'android.widget.Button' => 'btn', 'android.widget.TextView' => 'txt', 'android.widget.ImageView' => 'img', 'android.widget.EditText' => 'input', 'android.widget.CheckBox' => 'chk', 'android.widget.RadioButton' => 'radio', 'android.widget.Switch' => 'switch', 'android.widget.ViewGroup' => 'group', 'android.widget.View' => 'view', 'android.widget.FrameLayout' => 'frame', 'android.widget.LinearLayout' => 'linear', 'android.widget.RelativeLayout' => 'relative', 'android.widget.ScrollView' => 'scroll', 'android.webkit.WebView' => 'web', 'android.widget.Spinner' => 'spin', 'XCUIElementTypeButton' => 'btn', 'XCUIElementTypeStaticText' => 'txt', 'XCUIElementTypeTextField' => 'input', 'XCUIElementTypeImage' => 'img', 'XCUIElementTypeSwitch' => 'switch', 'XCUIElementTypeScrollView' => 'scroll', 'XCUIElementTypeOther' => 'elm', 'XCUIElementTypeCell' => 'cell' }.freeze
- MAX_VALUE_LENGTH =
100
- @@logger =
nil
Class Method Summary collapse
-
.handler_failure(driver, exception) ⇒ Object
— MÉTODO PRINCIPAL (SEM ALTERAÇÕES) —.
Class Method Details
.handler_failure(driver, exception) ⇒ Object
— MÉTODO PRINCIPAL (SEM ALTERAÇÕES) —
30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
# File 'lib/appium_failure_helper/capture.rb', line 30 def self.handler_failure(driver, exception) begin self.setup_logger unless @@logger = Time.now.strftime('%Y%m%d_%H%M%S') output_folder = "reports_failure/failure_#{}" FileUtils.mkdir_p(output_folder) @@logger.info("Pasta de saída criada: #{output_folder}") screenshot_base64 = driver.screenshot_as(:base64) page_source = driver.page_source File.write("#{output_folder}/page_source_#{}.xml", page_source) doc = Nokogiri::XML(page_source) platform = driver.capabilities['platformName']&.downcase || 'unknown' failed_element_info = self.extract_info_from_exception(exception) local_element_map = self.load_local_element_map de_para_result = nil logical_name_key = failed_element_info[:selector_value].to_s.gsub(/^#/, '') if local_element_map.key?(logical_name_key) de_para_result = { logical_name: logical_name_key, correct_locator: local_element_map[logical_name_key] } end all_elements_suggestions = self.get_all_elements_from_screen(doc, platform) similar_elements = self.find_similar_elements(failed_element_info, all_elements_suggestions) targeted_report = { failed_element: failed_element_info, similar_elements: similar_elements, de_para_analysis: de_para_result } File.open("#{output_folder}/failure_analysis_#{}.yaml", 'w') { |f| f.write(YAML.dump(targeted_report)) } File.open("#{output_folder}/all_elements_dump_#{}.yaml", 'w') { |f| f.write(YAML.dump(all_elements_suggestions)) } html_content = self.generate_html_report(targeted_report, all_elements_suggestions, screenshot_base64, platform, ) File.write("#{output_folder}/report_#{}.html", html_content) @@logger.info("Relatórios gerados com sucesso em: #{output_folder}") rescue => e @@logger.error("Erro ao capturar detalhes da falha: #{e.}\n#{e.backtrace.join("\n")}") end end |