def test_inherited_fillable_elements(self): class Section2(Element, Filling): s2_el1 = Input(XPath('s2_el1')) s2_el2 = Input(XPath('s2_el2')) class Section1(Element, Filling): locator = XPath('section1') section2 = Section2(XPath('section2')) s1_el1 = Input(XPath('s1_el1')) class Page(object): section1 = Section1() # basic test section1 = Page().section1() assert isinstance(section1, Section1) assert section1.web_element is self.web_element dict_to_fill = { 's1_el1': 's1_el1_value', 'section2': { 's2_el1': 's2_el1_value', 's2_el2': 's2_el2_value', } } section1.fill(dict_to_fill) # section1 must be found with driver self.driver.find_element.assert_has_calls([call('xpath', 'section1')]) # section2 and items of section1 must be found with web element of section1 self.web_element.find_element.assert_has_calls([ call('xpath', 's1_el1'), call('xpath', 'section2') ], any_order=True) self.web_element_inh.assert_has_calls([ call.clear(), call.send_keys('s1_el1_value'), ]) # items of section2 must be found with web element of section2 self.web_element_inh.find_element.assert_has_calls([ call('xpath', 's2_el1'), call('xpath', 's2_el2'), ], any_order=True) self.web_element_inh_2.assert_has_calls([ call.clear(), call.send_keys('s2_el1_value'), call.clear(), call.send_keys('s2_el2_value') ], any_order=True)
def test_stop_propagation(self): class Section2(Element, Filling): locator = XPath('section2') s2_el1 = Input(XPath('s2_el1')) s2_el2 = Input(XPath('s2_el2')) class Section1(Element, Filling): locator = XPath('section1') stop_propagation = True section2 = Section2() s1_el1 = Input(XPath('s1_el1')) class Page: section1 = Section1() section1 = Page().section1() assert isinstance(section1, Section1) dict_to_fill = { 's1_el1': 's1_el1_value', 'section2': { 's2_el1': 's2_el1_value', 's2_el2': 's2_el2_value', } } section1.fill(dict_to_fill) self.driver.find_element.assert_has_calls([call('xpath', 'section1')]) self.web_element.find_element.assert_has_calls([ call('xpath', 's1_el1'), ]) self.web_element_inh.assert_has_calls([ call.clear(), call.send_keys('s1_el1_value') ]) self.web_element_inh.find_element.assert_not_called() self.web_element_inh.get_attribute.return_value = 's1_el1_value' self.web_element_inh_2.get_attribute.side_effect = ['s2_el1_value', 's2_el2_value'] state = section1.get_state() result_dict = {'s1_el1': 's1_el1_value'} eq_(result_dict, state)