def handle_step(self, step_info): for elem_info in step_info['elems']: name = list(elem_info.keys())[0] value = str(elem_info[name]) # potentially returns more than one element elem = self.browser.find_by_name(name) # infer action from HTML tag # fails if splinter/selenium changes their API input_type = elem._element.get_property('type') if input_type == "radio": elem = ElementList( filter(lambda e: e.value == str(value), elem)) elem.check() elif input_type == "checkbox": if value: elem.check() elif input_type == "select": elem.select(value) else: elem.fill(value)