def __manual_page_check(self, *args): if not args: instructions = DEFAULT_VALIDATION_MESSAGE # self.verify() else: instructions = str(args[0]) if len(args) > 1: pass question = "Approve?" # self.verify("") if instructions and "?" not in instructions: question = instructions + " <> Approve?" elif instructions and "?" in instructions: question = instructions wait_time_before_verify = WAIT_TIME_BEFORE_VERIFY if self.verify_delay: wait_time_before_verify = float(self.verify_delay) # Allow a moment to see the full page before the dialog box pops up time.sleep(wait_time_before_verify) use_jqc = False self.wait_for_ready_state_complete() if js_utils.is_jquery_confirm_activated(self.driver): use_jqc = True else: js_utils.activate_jquery_confirm(self.driver) get_jqc = None try: get_jqc = self.execute_script("return jconfirm") get_jqc = get_jqc["instances"] use_jqc = True except Exception: use_jqc = False if use_jqc: # Use the jquery_confirm library for manual page checks self.__jq_confirm_dialog(question) time.sleep(0.02) waiting_for_response = True while waiting_for_response: time.sleep(0.05) jqc_open = self.execute_script( "return jconfirm.instances.length") if str(jqc_open) == "0": break time.sleep(0.1) status = None try: status = self.execute_script("return $jqc_status") except Exception: status = "Failure!" pre_status = self.execute_script( "return jconfirm.lastClicked.hasClass('btn-green')") if pre_status: status = "Success!" else: # Fallback to plain js confirm dialogs if can't load jquery_confirm if self.browser == 'ie': text = self.execute_script( '''if(confirm("%s")){return "Success!"} else{return "Failure!"}''' % question) elif self.browser == 'chrome': self.execute_script('''if(confirm("%s")) {window.master_qa_result="Success!"} else{window.master_qa_result="Failure!"}''' % question) time.sleep(0.05) self.__wait_for_special_alert_absent() text = self.execute_script('return window.master_qa_result') else: try: self.execute_script('''if(confirm("%s")) {window.master_qa_result="Success!"} else{window.master_qa_result="Failure!"}''' % question) except WebDriverException: # Fix for https://github.com/mozilla/geckodriver/issues/431 pass time.sleep(0.05) self.__wait_for_special_alert_absent() text = self.execute_script('return window.master_qa_result') status = text self.manual_check_count += 1 try: current_url = self.driver.current_url except Exception: current_url = self.execute_script("return document.URL") if "Success!" in str(status): self.manual_check_successes += 1 self.page_results_list.append( '"%s","%s","%s","%s","%s","%s","%s","%s"' % (self.manual_check_count, "Success", "-", current_url, self.browser, self.__get_timestamp()[:-3], instructions, "*")) return 1 else: bad_page_name = "failed_check_%s.png" % self.manual_check_count self.save_screenshot(bad_page_name, folder=LATEST_REPORT_DIR) self.page_results_list.append( '"%s","%s","%s","%s","%s","%s","%s","%s"' % (self.manual_check_count, "FAILED!", bad_page_name, current_url, self.browser, self.__get_timestamp()[:-3], instructions, "*")) return 0
def manual_page_check(self, *args): if not args: instructions = DEFAULT_VALIDATION_MESSAGE # self.verify() else: instructions = str(args[0]) if len(args) > 1: pass question = "Approve?" # self.verify("") if instructions and "?" not in instructions: question = instructions + " <> Approve?" elif instructions and "?" in instructions: question = instructions use_jqc = False self.wait_for_ready_state_complete() if js_utils.is_jquery_confirm_activated(self.driver): use_jqc = True else: js_utils.activate_jquery_confirm(self.driver) get_jqc = None try: get_jqc = self.execute_script("return jconfirm") get_jqc = get_jqc["instances"] use_jqc = True except Exception: use_jqc = False if use_jqc: wait_time_before_verify = WAIT_TIME_BEFORE_VERIFY if self.verify_delay: wait_time_before_verify = float(self.verify_delay) # Allow a moment to see the full page before the dialog box pops up time.sleep(wait_time_before_verify) # Use the jquery_confirm library for manual page checks self.jq_confirm_dialog(question) time.sleep(0.02) waiting_for_response = True while waiting_for_response: time.sleep(0.05) jqc_open = self.execute_script( "return jconfirm.instances.length") if str(jqc_open) == "0": break time.sleep(0.1) status = None try: status = self.execute_script("return $jqc_status") except Exception: status = "Failure!" pre_status = self.execute_script( "return jconfirm.lastClicked.hasClass('btn-green')") if pre_status: status = "Success!" else: # Fallback to plain js confirm dialogs if can't load jquery_confirm if self.browser == 'ie': text = self.execute_script( '''if(confirm("%s")){return "Success!"} else{return "Failure!"}''' % question) elif self.browser == 'chrome': self.execute_script('''if(confirm("%s")) {window.master_qa_result="Success!"} else{window.master_qa_result="Failure!"}''' % question) time.sleep(0.05) self.wait_for_special_alert_absent() text = self.execute_script('return window.master_qa_result') else: try: self.execute_script( '''if(confirm("%s")) {window.master_qa_result="Success!"} else{window.master_qa_result="Failure!"}''' % question) except WebDriverException: # Fix for https://github.com/mozilla/geckodriver/issues/431 pass time.sleep(0.05) self.wait_for_special_alert_absent() text = self.execute_script('return window.master_qa_result') status = text self.manual_check_count += 1 try: current_url = self.driver.current_url except Exception: current_url = self.execute_script("return document.URL") if "Success!" in str(status): self.manual_check_successes += 1 self.page_results_list.append( '"%s","%s","%s","%s","%s","%s","%s","%s"' % ( self.manual_check_count, "Success", "-", current_url, self.browser, self.get_timestamp()[:-3], instructions, "*")) return 1 else: bad_page_name = "failed_check_%s.png" % self.manual_check_count self.save_screenshot(bad_page_name, folder=LATEST_REPORT_DIR) self.page_results_list.append( '"%s","%s","%s","%s","%s","%s","%s","%s"' % ( self.manual_check_count, "FAILED!", bad_page_name, current_url, self.browser, self.get_timestamp()[:-3], instructions, "*")) return 0
def jquery_confirm_button_dialog(driver, message, buttons, options=None): js_utils.activate_jquery_confirm(driver) # These defaults will be overwritten later if set theme = constants.JqueryConfirm.DEFAULT_THEME border_color = constants.JqueryConfirm.DEFAULT_COLOR width = constants.JqueryConfirm.DEFAULT_WIDTH if options: for option in options: if option[0].lower() == "theme": theme = option[1] elif option[0].lower() == "color": border_color = option[1] elif option[0].lower() == "width": width = option[1] else: raise Exception('Unknown option: "%s"' % option[0]) if not message: message = "" key_row = "" if len(buttons) == 1: # There's only one button as an option key_row = "keys: ['enter', 'y', '1']," # Shortcut: "Enter","Y","1" b_html = """button_%s: { btnClass: 'btn-%s', text: '<b>%s</b>', %s action: function(){ jqc_status = '%s'; $jqc_status = jqc_status; jconfirm.lastButtonText = jqc_status; } },""" all_buttons = "" btn_count = 0 for button in buttons: btn_count += 1 text = button[0] text = js_utils.escape_quotes_if_needed(text) if len(buttons) > 1 and text.lower() == "yes": key_row = "keys: ['y']," if btn_count < 10: key_row = "keys: ['y', '%s']," % btn_count elif len(buttons) > 1 and text.lower() == "no": key_row = "keys: ['n']," if btn_count < 10: key_row = "keys: ['n', '%s']," % btn_count elif len(buttons) > 1: if btn_count < 10: key_row = "keys: ['%s']," % btn_count color = button[1] if not color: color = "blue" new_button = b_html % (btn_count, color, text, key_row, text) all_buttons += new_button content = '<div></div><font color="#0066ee">%s</font>' % (message) content = js_utils.escape_quotes_if_needed(content) overlay_opacity = "0.32" if theme.lower() == "supervan": overlay_opacity = "0.56" if theme.lower() == "bootstrap": overlay_opacity = "0.64" if theme.lower() == "modern": overlay_opacity = "0.5" if theme.lower() == "material": overlay_opacity = "0.4" jqcd = """jconfirm({ boxWidth: '%s', useBootstrap: false, containerFluid: true, bgOpacity: %s, type: '%s', theme: '%s', animationBounce: 1, typeAnimated: true, animation: 'scale', draggable: true, dragWindowGap: 1, container: 'body', title: '%s', content: '<div></div>', buttons: { %s } });""" % ( width, overlay_opacity, border_color, theme, content, all_buttons, ) driver.execute_script(jqcd)
def jquery_confirm_full_dialog(driver, message, buttons, options=None): js_utils.activate_jquery_confirm(driver) # These defaults will be overwritten later if set theme = constants.JqueryConfirm.DEFAULT_THEME border_color = constants.JqueryConfirm.DEFAULT_COLOR width = constants.JqueryConfirm.DEFAULT_WIDTH if not message: message = "" btn_count = 0 b_html = """button_%s: { btnClass: 'btn-%s', text: '%s', action: function(){ jqc_input = this.$content.find('.jqc_input').val(); $jqc_input = this.$content.find('.jqc_input').val(); jconfirm.lastInputText = jqc_input; $jqc_status = '%s'; } },""" b1_html = """formSubmit: { btnClass: 'btn-%s', text: '%s', action: function(){ jqc_input = this.$content.find('.jqc_input').val(); $jqc_input = this.$content.find('.jqc_input').val(); jconfirm.lastInputText = jqc_input; jqc_status = '%s'; $jqc_status = jqc_status; jconfirm.lastButtonText = jqc_status; } },""" one_button_trigger = "" if len(buttons) == 1: # If there's only one button, allow form submit with "Enter/Return" one_button_trigger = "jc.$$formSubmit.trigger('click');" all_buttons = "" for button in buttons: text = button[0] text = js_utils.escape_quotes_if_needed(text) color = button[1] if not color: color = "blue" btn_count += 1 if len(buttons) == 1: new_button = b1_html % (color, text, text) else: new_button = b_html % (btn_count, color, text, text) all_buttons += new_button if options: for option in options: if option[0].lower() == "theme": theme = option[1] elif option[0].lower() == "color": border_color = option[1] elif option[0].lower() == "width": width = option[1] else: raise Exception('Unknown option: "%s"' % option[0]) content = '<div></div><font color="#0066ee">%s</font>' % (message) content = js_utils.escape_quotes_if_needed(content) overlay_opacity = "0.32" if theme.lower() == "supervan": overlay_opacity = "0.56" if theme.lower() == "bootstrap": overlay_opacity = "0.64" if theme.lower() == "modern": overlay_opacity = "0.5" if theme.lower() == "material": overlay_opacity = "0.4" jqcd = """jconfirm({ boxWidth: '%s', useBootstrap: false, containerFluid: true, bgOpacity: %s, type: '%s', theme: '%s', animationBounce: 1, typeAnimated: true, animation: 'scale', draggable: true, dragWindowGap: 1, container: 'body', title: '%s', content: '<div></div>' + %s, buttons: { %s }, onContentReady: function () { var jc = this; this.$content.find('form.jqc_form').on('submit', function (e) { // User submits the form by pressing "Enter" in the field e.preventDefault(); %s }); } });""" % ( width, overlay_opacity, border_color, theme, content, form_code, all_buttons, one_button_trigger, ) driver.execute_script(jqcd)
def jquery_confirm_text_dialog(driver, message, button=None, options=None): js_utils.activate_jquery_confirm(driver) # These defaults will be overwritten later if set theme = constants.JqueryConfirm.DEFAULT_THEME border_color = constants.JqueryConfirm.DEFAULT_COLOR width = constants.JqueryConfirm.DEFAULT_WIDTH if not message: message = "" if button: if not type(button) is list and not type(button) is tuple: raise Exception('"button" should be a (text, color) tuple!') if len(button) != 2: raise Exception('"button" should be a (text, color) tuple!') else: button = ("Submit", "blue") if options: for option in options: if option[0].lower() == "theme": theme = option[1] elif option[0].lower() == "color": border_color = option[1] elif option[0].lower() == "width": width = option[1] else: raise Exception('Unknown option: "%s"' % option[0]) btn_text = button[0] btn_color = button[1] if not btn_color: btn_color = "blue" content = '<div></div><font color="#0066ee">%s</font>' % (message) content = js_utils.escape_quotes_if_needed(content) overlay_opacity = "0.32" if theme.lower() == "supervan": overlay_opacity = "0.56" if theme.lower() == "bootstrap": overlay_opacity = "0.64" if theme.lower() == "modern": overlay_opacity = "0.5" if theme.lower() == "material": overlay_opacity = "0.4" jqcd = """jconfirm({ boxWidth: '%s', useBootstrap: false, containerFluid: true, bgOpacity: %s, type: '%s', theme: '%s', animationBounce: 1, typeAnimated: true, animation: 'scale', draggable: true, dragWindowGap: 1, container: 'body', title: '%s', content: '<div></div>' + %s, buttons: { formSubmit: { btnClass: 'btn-%s', text: '%s', action: function () { jqc_input = this.$content.find('.jqc_input').val(); $jqc_input = this.$content.find('.jqc_input').val(); jconfirm.lastInputText = jqc_input; $jqc_status = '%s'; // There is only one button }, }, }, onContentReady: function () { var jc = this; this.$content.find('form.jqc_form').on('submit', function (e) { // User submits the form by pressing "Enter" in the field e.preventDefault(); jc.$$formSubmit.trigger('click'); // Click the button }); } });""" % ( width, overlay_opacity, border_color, theme, content, form_code, btn_color, btn_text, btn_text, ) driver.execute_script(jqcd)