def ilias_5_4(driver, choices): for tr in driver.find_elements_by_css_selector( "#form_tst_question_correction table tbody tr"): answer_text_element, points_element = list( tr.find_elements_by_css_selector("td")) set_element_value( driver, points_element.find_element_by_css_selector("input"), str(choices[answer_text_element.text.strip()]))
def _set_ui(driver, choices): i = 0 while True: try: choice = driver.find_element_by_name("choice[answer][%d]" % i) except NoSuchElementException: break points = driver.find_element_by_name("choice[points][%d]" % i) set_element_value(driver, points, str(choices[choice.get_attribute("value")])) i += 1
def update_gap_options(driver, gap_index, options): for option_index, (key, score) in enumerate(options.items()): answer = driver.find_element_by_id("gap_%d[answer][%d]" % (gap_index, option_index)) answer_key = answer.get_attribute("value") if answer_key != key: raise InteractionException( "must not change title for gap %d, option %d from '%s' to '%s'" % (gap_index, option_index, answer_key, key)) points = driver.find_element_by_id("gap_%d[points][%d]" % (gap_index, option_index)) set_element_value(driver, points, str(score))
def ilias_5_4(driver, choices): for tr in driver.find_elements_by_css_selector( "#form_tst_question_correction table tbody tr"): answer_text_element, *points_elements = list( tr.find_elements_by_css_selector("td")) assert (len(points_elements) == 2) item = choices[answer_text_element.text.strip()] for element, value in zip( points_elements, (item.checked_score, item.unchecked_score)): set_element_value( driver, element.find_element_by_css_selector("input"), str(value))
def _ui_update_scores(driver, scores): current_keys = set(MatchingQuestion._ui_get_pair_keys(driver)) added = set(scores.keys()) - current_keys MatchingQuestion._ui_add_pairs(driver, added) removed = current_keys - set(scores.keys()) MatchingQuestion._ui_remove_pairs(driver, removed) current_pairs = MatchingQuestion._ui_get_pair_indices(driver) assert set(current_pairs.keys()) == set(scores.keys()) for key, score in scores.items(): points_element = driver.find_element_by_css_selector( 'input[name="pairs[points][%d]"]' % current_pairs[key]) set_element_value(driver, points_element, str(score))
def _readjust_ui(context, driver, scoring): halfpoints_checkbox = driver.find_element_by_name("score_partsol_enabled") if halfpoints_checkbox.is_selected() != scoring.halfpoints: halfpoints_checkbox.click() set_element_value(driver, driver.find_element_by_name("points"), str(scoring.score)) def ilias_5_4(driver, scoring): choices = dict( (choice.name.strip(), choice) for choice in scoring.choices) for tr in driver.find_elements_by_css_selector( "#kprim_answers table tbody tr"): answer_text_element, *points_elements = list( tr.find_elements_by_css_selector("td")) answer_text = answer_text_element.text.strip() choice = choices[answer_text] del choices[answer_text] radio_value = 1 if choice.is_correct else 0 for element in points_elements: radio = element.find_element_by_css_selector("input") if int(radio.get_attribute("value")) == radio_value: radio.click() break if choices: raise InteractionException( "some choices were not listed in readjustment ui") def ilias_5_3(driver, scoring): for i, choice in enumerate(scoring.choices): radio_value = 1 if choice.is_correct else 0 for radio in driver.find_elements_by_name( "kprim_answers[correctness][%d]" % i): if int(radio.get_attribute("value")) == radio_value: radio.click() break if context.ilias_version >= (5, 4): ilias_5_4(driver, scoring) else: ilias_5_3(driver, scoring)
def ilias_5_3(driver, choices): i = 0 while True: try: choice = driver.find_element_by_name("choice[answer][%d]" % i) except NoSuchElementException: break item = choices[choice.get_attribute("value")] for name, value in (('points', item.checked_score), ('points_unchecked', item.unchecked_score)): points = driver.find_element_by_name("choice[%s][%d]" % (name, i)) set_element_value(driver, points, str(value)) i += 1
def _set_ui(driver, scoring): halfpoints_checkbox = driver.find_element_by_name( "score_partsol_enabled") if halfpoints_checkbox.is_selected() != scoring.halfpoints: halfpoints_checkbox.click() set_element_value(driver, driver.find_element_by_name("points"), str(scoring.score)) for i, choice in enumerate(scoring.choices): radio_value = 1 if choice.is_correct else 0 for radio in driver.find_elements_by_name( "kprim_answers[correctness][%d]" % i): if int(radio.get_attribute("value")) == radio_value: radio.click() break
def _ui_update_scores(self, driver, scores, context): if context.ilias_version >= (5, 4): definition_ids = dict((label, i) for i, label in self.definitions.items()) term_ids = dict((label, i) for i, label in self.terms.items()) seen_keys = set() for tr in driver.find_elements_by_css_selector(".matchingpairwizard tbody tr"): tds = list(tr.find_elements_by_css_selector("td")) definition_id = definition_ids[tds[0].text.strip()] term_id = term_ids[tds[1].text.strip()] key = (definition_id, term_id) score = scores[key] set_element_value(driver, tds[2].find_element_by_css_selector("input"), str(score)) seen_keys.add(key) assert seen_keys == set(scores.keys()) else: current_keys = set(MatchingQuestion._ui_get_pair_keys(driver)) added = set(scores.keys()) - current_keys MatchingQuestion._ui_add_pairs(driver, added) removed = current_keys - set(scores.keys()) MatchingQuestion._ui_remove_pairs(driver, removed) current_pairs = MatchingQuestion._ui_get_pair_indices(driver) assert set(current_pairs.keys()) == set(scores.keys()) for key, score in scores.items(): points_element = driver.find_element_by_css_selector( 'input[name="pairs[points][%d]"]' % current_pairs[key]) set_element_value(driver, points_element, str(score))
def _set_ui(self, value, context): selector = '.ilc_question_TextQuestion textarea.ilc_qlinput_LongTextInput' element = self.driver.find_element_by_css_selector(selector) set_element_value(self.driver, element, value)
def update_scores(self): set_element_value( self.driver, self.driver.find_element_by_name("gap_%d_numeric_points" % self.gap_index), str(self.gap.score))
def update_numeric_gap_scoring(driver, gap_index, gap): set_element_value( driver, driver.find_element_by_name("gap_%d_numeric_points" % gap_index), str(gap.score))
def _set_ui(driver, score): points = driver.find_element_by_id("non_keyword_points") set_element_value(driver, points, str(score))
def value(self, new_value): match = self.driver.find_element_by_name(self.name) set_element_value(self.driver, match, new_value) self._value = new_value