def test_missing_elements(self): class SimplePage(Page): el_list = ElementMap(Locators.CLASS_NAME, "element") el_list_wait = ElementMap( Locators.CLASS_NAME, "elements", timeout=1) el_list_only_if = ElementMap( Locators.CLASS_NAME, "elements", timeout=1, only_if=lambda els: len(els) == 1) uri = make_temp_page(""" <body> <div class="_"> </div> </body> """) with hiro.Timeline().scale(10): page = SimplePage(self.driver, uri) self.assertEqual(page.el_list, {}) self.assertEqual(page.el_list_wait, {}) self.assertEqual(page.el_list_only_if, {}) uri = make_temp_page(""" <body> <div class="elements"> element_text </div> </body> """) page = SimplePage(self.driver, uri) self.assertEqual(page.el_list, {}) self.assertEqual(len(page.el_list_wait), 1) self.assertEqual(len(page.el_list_only_if), 1)
def test_missing_elements(self): class SimplePage(Page): el_list = Elements(Locators.CLASS_NAME, "element") el_list_wait = Elements( Locators.CLASS_NAME, "elements", timeout=1) el_list_only_if = Elements( Locators.CLASS_NAME, "elements", timeout=1, only_if=lambda els: len(els) == 1) uri = make_temp_page(""" <body> <div class="_"> </div> </body> """) with hiro.Timeline().scale(10): page = SimplePage(self.driver, uri) self.assertEqual(page.el_list, []) self.assertEqual(page.el_list_wait, []) self.assertEqual(page.el_list_only_if, []) uri = make_temp_page(""" <body> <div class="elements"> element_text </div> </body> """) page = SimplePage(self.driver, uri) self.assertEqual(page.el_list, []) self.assertEqual(len(page.el_list_wait), 1) self.assertEqual(len(page.el_list_only_if), 1)
def test_basic_po_with_frame(self): frame1 = """" <html> <body> <div class='section'> <div class='frame_el'>frame 1 el</div> </div> </body> </html>" """ frame2 = """" <html> <body> <div class='section'> <div class='frame_el'>frame 2 el</div> </div> </body> </html> """ uri_frame_1 = make_temp_page(frame1) uri_frame_2 = make_temp_page(frame2) p1 = ''' <html><body><iframe id="frame_1" src="%s"/></body></html> ''' % uri_frame_1 p2 = ''' <html> <body> <iframe id="frame_1" src="%s"></iframe> <iframe id="frame_2" src="%s"></iframe> </body> </html> ''' % (uri_frame_1, uri_frame_2) driver = get_driver() uri = make_temp_page(p1) with mock.patch("holmium.core.pageobject.log") as log: p = BasicPageIframe(driver, uri, iframe="frame_1") self.assertEqual(p.element.text, "frame 1 el") self.assertEqual(p.frame_1.element.text, "frame 1 el") self.assertTrue(p.frame_2.element is None) uri = make_temp_page(p2) driver.get(uri) self.assertTrue(p.frame_2.element is not None) self.assertEqual(p.frame_2.element.text, "frame 2 el") self.assertEqual(p.elements[0].text, "frame 1 el") self.assertEqual(log.error.call_count, 1)
def test_stale_element_in_wait(self): """ https://github.com/alisaifee/issues/23 """ driver = get_driver() def rem(): driver.execute_script( """ if ( document.getElementsByClassName('stale').length > 1 ){ var f = document.getElementById('container').firstChild; document.getElementById('container').removeChild(f); } """ ) class P(Page): e = Elements( Locators.CLASS_NAME, "stale", timeout=1, only_if=lambda els: rem() or any(e.is_displayed() for e in els) ) uri = make_temp_page( """ <html><body> <div id='container'><div class="stale">1</div><div class="stale">2</div></div> </body></html> """ ) p = P(driver, uri) self.assertEqual(len(p.e), 1)
def test_sections_by_index(self): driver = get_driver() page = """ <body> <div class='section'> <div class='token'>t0</div> </div> <div class='section'> <div class='token'>t1</div> </div> <div class='section'> <div class='token'>t2</div> </div> <div class='section'> <div class='token'>t3</div> </div> </body> """ uri = make_temp_page(page.strip()) po = BasicPageWithSections(driver, uri) self.assertEqual(len(po.sections), 4) self.assertEqual("t0", po.sections[0].tokens[0].text) self.assertEqual("t1", po.sections[1].tokens[0].text) self.assertEqual("t2", po.sections[2].tokens[0].text) self.assertEqual("t3", po.sections[3].tokens[0].text)
def test_basic_element(self): class SimplePage(Page): el_map_default = ElementMap(Locators.CLASS_NAME, "simple_class") el_map_keymapper = ElementMap(Locators.CLASS_NAME, "simple_class" , key = lambda el: el.find_element_by_tag_name("a").text) el_map_valuemapper = ElementMap(Locators.CLASS_NAME, "simple_class" , value = lambda el: el.find_element_by_tag_name("a").text) el_map_keyvaluemapper = ElementMap(Locators.CLASS_NAME, "simple_class" , key = lambda el: el.find_element_by_tag_name("a").text , value = lambda el: el.find_element_by_tag_name("a").get_attribute("href")) uri = make_temp_page(""" <body> <div class="simple_class"> simple class el 1 <a href="http://el1.com/">element 1</a> </div> <div class="simple_class"> simple class el 2 <a href="http://el2.com/">element 2</a> </div> <div class="simple_class"> simple class el 3 <a href="http://el3.com/">element 3</a> </div> </body> """) page = SimplePage(self.driver, uri) self.assertEqual(list(page.el_map_default.keys()) , ["simple class el 1 element 1", "simple class el 2 element 2", "simple class el 3 element 3"] ) self.assertEqual(list(page.el_map_keymapper.keys()) , ["element 1", "element 2", "element 3"] ) self.assertEqual(list(page.el_map_valuemapper.values()) , ["element 1", "element 2", "element 3"] ) self.assertEqual(list(page.el_map_keyvaluemapper.keys()) , ["element 1", "element 2", "element 3"] ) self.assertEqual(list(page.el_map_keyvaluemapper.values()) , ["http://el1.com/", u"http://el2.com/", u"http://el3.com/"])
def test_stale_element_in_wait(self): """ https://github.com/alisaifee/issues/23 """ driver = get_driver() def rem(): driver.execute_script(""" if ( document.getElementsByClassName('stale').length > 1 ){ var f = document.getElementById('container').firstChild; document.getElementById('container').removeChild(f); } """) class P(Page): e = Elements(Locators.CLASS_NAME, "stale", timeout=1, only_if=lambda els: rem() or any(e.is_displayed() for e in els)) uri = make_temp_page(""" <html> <body> <div id='container'><div class="stale">1</div><div class="stale">2</div></div> </body> </html> """) p = P(driver, uri) self.assertEqual(len(p.e), 1)
def test_basic_element_with_list(self): class SimplePage(Page): elements = [Element ( Locators.ID, "simple_id" ), Element(Locators.CLASS_NAME, "simple_class") ] uri = make_temp_page(ElementTest.page_content) page = SimplePage(self.driver, uri) assert page.elements[0].text == "simple_id" assert page.elements[1].text == "simple_class"
def test_basic_element_with_filter_by(self): class SimplePage(Page): id_el = Element(Locators.ID, "simple_id", filter_by=lambda el: el.text == "simple_id") id_el_none = Element(Locators.ID, "simple_id", filter_by=lambda el: el.text == "changed") uri = make_temp_page(ElementTest.page_content) page = SimplePage(self.driver, uri) assert page.id_el.text == "simple_id" assert page.id_el_none is None
def test_basic_element_with_dict(self): class SimplePage(Page): elements = { "id": Element ( Locators.ID, "simple_id" ), "class" : Element(Locators.CLASS_NAME, "simple_class") } uri = make_temp_page(ElementTest.page_content) page = SimplePage(self.driver, uri) assert page.elements["id"].text == "simple_id" assert page.elements["class"].text == "simple_class"
def test_non_existence_nq_element(self): """test object nonequivalence test that expected parameters are displayed""" class SimplePage(Page): class_el = Element(Locators.CLASS_NAME, "simple_class") class_xpath_el = Element(Locators.CLASS_NAME, "simple_xpath") uri = make_temp_page(ElementTest.page_content) page = SimplePage(self.driver, uri) non_exist_el = NonexistentElement() assert page != non_exist_el, "Expected SimplePage() and NonexistentElement != to evaluate FALSE"
def test_non_existence_eq_element(self): """test object equivalence test that expected parameters are displayed""" class SimplePage(Page): invalid_el = Element(Locators.ID, "foo") uri = make_temp_page(ElementTest.page_content) page = SimplePage(self.driver, uri) non_exist_el = NonexistentElement() assert page.invalid_el == non_exist_el, "Expected object equivalence to evaluate TRUE" assert page.invalid_el.locator_type != non_exist_el.locator_type, "Expected different locator types"
def test_basic_element_with_list(self): class SimplePage(Page): elements = [ Element(Locators.ID, "simple_id"), Element(Locators.CLASS_NAME, "simple_class") ] uri = make_temp_page(ElementTest.page_content) page = SimplePage(self.driver, uri) assert page.elements[0].text == "simple_id" assert page.elements[1].text == "simple_class"
def test_basic_element_with_dict(self): class SimplePage(Page): elements = { "id": Element(Locators.ID, "simple_id"), "class": Element(Locators.CLASS_NAME, "simple_class") } uri = make_temp_page(ElementTest.page_content) page = SimplePage(self.driver, uri) assert page.elements["id"].text == "simple_id" assert page.elements["class"].text == "simple_class"
def test_basic_element(self): class SimplePage(Page): el_list_default = Elements(Locators.CLASS_NAME, "simple_class") el_list_valuemapper = Elements( Locators.CLASS_NAME, "simple_class", value=lambda el: el.find_element_by_tag_name("a").text) el_list_valuemapper_complex = Elements( Locators.CLASS_NAME, "simple_class", value=lambda el: { "link": el.find_element_by_tag_name("a").get_attribute( "href"), "text": el.find_element_by_tag_name("a").text }) first_el = Element(Locators.TAG_NAME, "a", base_element=el_list_default[0]) uri = make_temp_page(""" <body> <div class="simple_class"> simple class el 1 <a href="http://el1.com/">element 1</a> </div> <div class="simple_class"> simple class el 2 <a href="http://el2.com/">element 2</a> </div> <div class="simple_class"> simple class el 3 <a href="http://el3.com/">element 3</a> </div> </body> """) page = SimplePage(self.driver, uri) self.assertEqual([k.text for k in page.el_list_default], [ "simple class el 1 element 1", "simple class el 2 element 2", "simple class el 3 element 3" ]) self.assertEqual(page.el_list_valuemapper, ["element 1", "element 2", "element 3"]) self.assertEqual(page.el_list_valuemapper_complex, [{ "link": "http://el1.com/", "text": "element 1" }, { "link": "http://el2.com/", "text": "element 2" }, { "link": "http://el3.com/", "text": "element 3" }]) self.assertEqual(page.first_el.text, "element 1")
def test_fluent(self): class FluentPage(Page): thing = Element(Locators.NAME, "thing") def get_text(self): return self.thing.text def click_thing(self): self.thing.click() page = "<div name='thing'>i am thing</div>" driver = get_driver() uri = make_temp_page(page) page = FluentPage(driver, uri) self.assertTrue(page.click_thing().get_text(), "i am thing")
def test_basic_po_real(self): driver = get_driver() page = """ <body> <div id='section'> <div class='token'> <div class='el'> section element 1 </div> </div> <div class='token'> <div class='el'> section element 2 </div> </div> </div> <div id='section_2'> <div class='token'> <div class='el'> section element 3 </div> </div> <div class='token'> <div class='el'> section element 4 </div> </div> </div> <span class='token'> <div class='el'> element 5 </div> </span> </body> """ uri = make_temp_page(page.strip()) po = BasicPage(driver, uri) self.assertEqual(len(po.tokens), 5) self.assertEqual(len(po.section.tokens), 2) self.assertEqual(len(po.section_2.tokens), 2) for i in range(0, 2): self.assertEqual(po.section.tokens[i].text, "section element %s" % (i + 1)) for i in range(0, 2): self.assertEqual(po.section_2.tokens[i].text, "section element %s" % (i + 3)) self.assertEqual(po.tokens[0].text, 'section element 1') self.assertEqual(po.tokens[1].text, 'section element 2') self.assertEqual(po.tokens[2].text, 'section element 3') self.assertEqual(po.tokens[3].text, 'section element 4')
def test_basic_element(self): class SimplePage(Page): id_el = Element(Locators.ID, "simple_id") class_el = Element(Locators.CLASS_NAME, "simple_class") selector_el = Element(Locators.CSS_SELECTOR, "div.simple_class") xpath_el = Element(Locators.XPATH, "//div[h3/text()='Simple XPATH']") uri = make_temp_page(ElementTest.page_content) page = SimplePage(self.driver, uri) assert page.id_el.text == "simple_id" assert page.class_el.text == "simple_class" assert page.selector_el.text == "simple_class" assert page.xpath_el.text == "Simple XPATH"
def test_fluent(self): class FluentPage(Page): thing = Element(Locators.NAME, "thing") def click_thing(self): self.thing.click() def get_thing(self): return self.thing page = "<div name='thing'>i am thing</div>" driver = get_driver() uri = make_temp_page(page) page = FluentPage(driver, uri) self.assertTrue(page.click_thing().get_thing().text, "i am thing")
def test_basic_po_with_frame(self): frame1 = "<html><body><div class='section'><div class='frame_el'>frame 1 el</div></div></body></html>" frame2 = "<html><body><div class='section'><div class='frame_el'>frame 2 el</div></div></body></html>" uri_frame_1 = make_temp_page(frame1) uri_frame_2 = make_temp_page(frame2) p1 = '<html><body><iframe id="frame_1" src="%s"/></body></html>' % uri_frame_1 p2 = '<html><body><iframe id="frame_1" src="%s"></iframe><iframe id="frame_2" src="%s"></iframe></body></html>' % ( uri_frame_1, uri_frame_2) driver = get_driver() uri = make_temp_page(p1) with mock.patch("holmium.core.pageobject.log") as log: p = BasicPageIframe(driver, uri, iframe="frame_1") self.assertEqual(p.element.text, "frame 1 el") self.assertEqual(p.frame_1.element.text, "frame 1 el") self.assertTrue(p.frame_2.element == None) uri = make_temp_page(p2) driver.get(uri) self.assertTrue(p.frame_2.element is not None) self.assertEqual(p.frame_2.element.text, "frame 2 el") self.assertEqual(p.elements[0].text, "frame 1 el") self.assertEqual(log.error.call_count, 1)
def test_elements_false_filter_by(self): class SimplePage(Page): el_list_filter_by = Elements( Locators.CLASS_NAME, "elements", filter_by=lambda el: el.text != "element_text") uri = make_temp_page(""" <body> <div class="elements"> element_text </div> </body> """) page = SimplePage(self.driver, uri) self.assertEqual(page.el_list_filter_by, [])
def test_elements_false_filter_by(self): class SimplePage(Page): el_list_only_if = ElementMap( Locators.CLASS_NAME, "elements", filter_by=lambda el: el.text != "element_text") uri = make_temp_page(""" <body> <div class="elements"> element_text </div> </body> """) page = SimplePage(self.driver, uri) self.assertEqual(page.el_list_only_if, {})
def test_context_any_condition(self): class P(Page): cl_els = ElementMap(Locators.CLASS_NAME , "cls", timeout = 5) uri = make_temp_page("<div id='base'><div class='cls'>one</div></div>") page = P(self.driver, uri) script = """ var el = document.createElement("div"); el.setAttribute("class", "cls"); el.innerHTML = '%s' document.getElementById("base").appendChild(el); """ runner = self.run_script(script % 'two', 1) with ANY(MATCHES_TEXT('two')): self.assertTrue(page.cl_els['two'] != NonexistentElement())
def test_context_any_condition(self): class P(Page): cl_els = ElementMap(Locators.CLASS_NAME, "cls", timeout=5) uri = make_temp_page("<div id='base'><div class='cls'>one</div></div>") page = P(self.driver, uri) script = """ var el = document.createElement("div"); el.setAttribute("class", "cls"); el.innerHTML = '%s' document.getElementById("base").appendChild(el); """ self.run_script(script % 'two', 1) with ANY(MATCHES_TEXT('two')): self.assertTrue(page.cl_els['two'] is not None)
def test_context_all_condition(self): class P(Page): cl_els = ElementMap(Locators.CLASS_NAME , "cls", timeout = 5) uri = make_temp_page("<div id='base'></div>") page = P(self.driver, uri) script = """ var el = document.createElement("div"); el.setAttribute("class", "cls"); el.innerHTML = '%s' document.getElementById("base").appendChild(el); """ runner = self.run_script(script % 'one', 1) with ALL(MATCHES_TEXT('one')): self.assertTrue(page.cl_els['one'] != None) self.assertEqual(len(page.cl_els), 1)
def test_basic_element_with_only_if(self): class SimplePage(Page): id_el = Element(Locators.ID, "simple_id") id_el_changed = Element(Locators.ID, "simple_id", timeout=10, only_if=lambda el: el.text == "changed") uri = make_temp_page(ElementTest.page_content) page = SimplePage(self.driver, uri) self.assertEqual(page.id_el.text, "simple_id") script = 'document.getElementById("simple_id").firstChild.nodeValue="changed";' runner = hiro.run_async(5, lambda: time.sleep(1) or self.driver.execute_script(script)) with hiro.Timeline().scale(10): self.assertEqual(page.id_el_changed.text, "changed") self.assertTrue(runner.get_response() == None) self.driver.refresh() with hiro.Timeline().scale(10): self.assertEqual(page.id_el_changed, None)
def test_non_existence_str_element(self): """test when str() is called on the object test that expected parameters are displayed""" class SimplePage(Page): class_el = Element(Locators.CLASS_NAME, "simple_class") exception_msg = "Class Name Found" query_string = "key1=value1&key2=value2" uri = make_temp_page(ElementTest.page_content) page = SimplePage(self.driver, uri) result = NonexistentElement(page.exception_msg,page.class_el.text,page.query_string) test_str = str(result) assert test_str == format(result) , " Expected object format and str value are same" assert page.exception_msg in test_str assert page.class_el.text in test_str assert page.query_string in test_str
def test_non_existence_getAttr_element(self): """test that if an undefined property is referenced, an Exception is thrown that includes the initialization data #properties, (exception_class_name, locator_type, query_string)""" class SimplePage(Page): class_el = Element(Locators.CLASS_NAME, "simple_class") exception_msg = "Class Name Found" query_string = "key1=value1&key2=value2" invalid_el = Element(Locators.ID, "blargh") uri = make_temp_page(ElementTest.page_content) page = SimplePage(self.driver, uri) non_exist_el = NonexistentElement(page.exception_msg, page.class_el.text, page.query_string) try: bar = non_exist_el.foo except Exception as e: assert page.exception_msg in e.message assert page.class_el.text in e.message assert page.query_string in e.message
def test_non_existence_repr_element(self): """when repr() is called on the object test that expected parameters can be referenced by name. (e.g: object.prop1, object.prop2 etc...)""" class SimplePage(Page): class_el = Element(Locators.CLASS_NAME, "simple_class") exception_msg = "Class Name Found" query_string = "key1=value1&key2=value2" uri = make_temp_page(ElementTest.page_content) page = SimplePage(self.driver, uri) non_exist_el = NonexistentElement() result = NonexistentElement(page.exception_msg, page.class_el.text, page.query_string) test_repr = repr(result) assert page.exception_msg in test_repr assert page.class_el.text in test_repr assert page.query_string in test_repr
def test_basic_element_with_only_if(self): class SimplePage(Page): id_el = Element(Locators.ID, "simple_id") id_el_changed = Element(Locators.ID, "simple_id", timeout=10, only_if=lambda el: el.text == "changed") uri = make_temp_page(ElementTest.page_content) page = SimplePage(self.driver, uri) self.assertEqual(page.id_el.text, "simple_id") script = 'document.getElementById("simple_id").firstChild.nodeValue="changed";' # noqa: E501 runner = hiro.run_async( 5, lambda: time.sleep(1) or self.driver.execute_script(script) ) with hiro.Timeline().scale(10): self.assertEqual(page.id_el_changed.text, "changed") self.assertTrue(runner.get_response() is None) self.driver.refresh() with hiro.Timeline().scale(10): self.assertEqual(page.id_el_changed, None)
def test_exception_from_webdriver(self): """test that if an undefined property is referenced, valid Webdriver exception information is returned""" class SimplePage(Page): class_el = Element(Locators.CLASS_NAME, "simple_class") exception_msg = "Class Name Found" query_string = "key1=value1&key2=value2" invalid_el = Element(Locators.ID, "blargh") uri = make_temp_page(ElementTest.page_content) page = SimplePage(self.driver, uri) locator_failure = page.invalid_el try: text = locator_failure.text except Exception as e: assert "NoSuchElementException" in e.message assert "id" in e.message assert "blargh" in e.message
def test_basic_po_with_sections(self): driver = get_driver() page = """ <body> <div class='section'> <div class='token'> <div class='el'> section element 1 </div> </div> <div class='token'> <div class='el'> section element 2 </div> </div> </div> <div class='section'> <div class='token'> <div class='el'> section element 3 </div> </div> <div class='token'> <div class='el'> section element 4 </div> </div> </div> </body> """ uri = make_temp_page(page.strip()) po = BasicPageWithSections(driver, uri) counter = 1 for section in po.sections: for token in section.tokens: self.assertEqual(token.text, "section element %s" % counter) counter += 1 self.assertEqual(len(po.sections), 2) self.assertRaises(IndexError, lambda: po.sections[2]) self.assertRaises(IndexError, lambda: po.missing_sections[0])
def test_basic_element(self): class SimplePage(Page): el_list_default = Elements(Locators.CLASS_NAME, "simple_class") el_list_valuemapper = Elements(Locators.CLASS_NAME, "simple_class" , value = lambda el: el.find_element_by_tag_name("a").text) el_list_valuemapper_complex = Elements(Locators.CLASS_NAME, "simple_class" , value = lambda el : { "link":el.find_element_by_tag_name("a").get_attribute("href") ,"text" : el.find_element_by_tag_name("a").text } ) first_el = Element( Locators.TAG_NAME, "a" , base_element = el_list_default[0] ) uri = make_temp_page(""" <body> <div class="simple_class"> simple class el 1 <a href="http://el1.com/">element 1</a> </div> <div class="simple_class"> simple class el 2 <a href="http://el2.com/">element 2</a> </div> <div class="simple_class"> simple class el 3 <a href="http://el3.com/">element 3</a> </div> </body> """) page = SimplePage(self.driver, uri) self.assertEqual([k.text for k in page.el_list_default], ["simple class el 1 element 1", "simple class el 2 element 2", "simple class el 3 element 3"]) self.assertEqual(page.el_list_valuemapper, ["element 1", "element 2", "element 3"]) self.assertEqual(page.el_list_valuemapper_complex, [{"link": "http://el1.com/", "text": "element 1"}, {"link": "http://el2.com/", "text": "element 2"}, {"link": "http://el3.com/", "text": "element 3"}]) self.assertEqual(page.first_el.text, "element 1")
def setUp(self): self.driver = get_driver() self.uri = make_temp_page("<div id='simple_id'>default text</div>")
def test_all_features(self): driver = get_driver() content = """ <div name='e1'>e1</div> <div> <div name='e2'>e2 - 1 <div name='e6'>e6</div> </div> <div name='e2'>e2 - 2</div> </div> <div> <div name='e3'>e3 - 1</div> <div name='e3'>e3 - 2</div> </div> <div name='e4'>e4</div> """ uri = make_temp_page(content) driver.get(uri) # this may appear weird, but its to test the usecase of providing a WebElement # as a base_element. #fml. web_element = driver.find_element_by_name("e2") class ExhaustivePage(Page): element = Element(Locators.NAME, "e1") element_invalid = Element(Locators.NAME, "3e") elements = Elements(Locators.NAME, "e2") elements_invalid = Elements(Locators.NAME, "3e") elementmap = ElementMap(Locators.NAME, "e3") elementmap_for_ref = ElementMap(Locators.NAME, "e2") elementmap_invalid = ElementMap(Locators.NAME, "3e") elementmap_raw = { "e4": Element(Locators.NAME, "e4"), "e2": Elements(Locators.NAME, "e2"), "e3": ElementMap(Locators.NAME, "e3") } elements_raw = [ Element(Locators.NAME, "e4"), Elements(Locators.NAME, "e2"), ElementMap(Locators.NAME, "e3") ] element_list_raw = [ Element(Locators.NAME, "e4"), Element(Locators.NAME, "e6") ] element_map_raw = { "e4": Element(Locators.NAME, "e4"), "e6": Element(Locators.NAME, "e6") } element_second = Element(Locators.NAME, "e2") element_ref = Element(Locators.NAME, "e6", base_element=elements[0]) element_map_ref = Element( Locators.NAME, "e6", base_element=elementmap_for_ref["e2 - 1\ne6"]) element_ref_direct = Element(Locators.NAME, "e6", base_element=element_second) element_ref_webelement = Element(Locators.NAME, "e6", base_element=web_element) element_ref_invalid = Element(Locators.NAME, "e6", base_element=42) page = ExhaustivePage(driver) self.assertEqual(page.element.text, "e1") self.assertEqual([el.text for el in page.elements], ["e2 - 1\ne6", "e2 - 2"]) self.assertEqual([(k, k) for k in page.elementmap], [("e3 - 1", "e3 - 1"), ("e3 - 2", "e3 - 2")]) self.assertEqual([k.text for k in page.element_list_raw], ["e4", "e6"]) self.assertEqual( sorted([k.text for k in page.element_map_raw.values()]), sorted(["e4", "e6"])) v1, v2 = page.element_map_raw.items() self.assertEquals(sorted([v1[0], v1[1].text, v2[0], v2[1].text]), sorted(["e4", "e4", "e6", "e6"])) self.assertEqual(page.elements_raw[0].text, "e4") self.assertEqual([k.text for k in page.elements_raw[1]], ["e2 - 1\ne6", "e2 - 2"]) self.assertEqual([k.text for k in page.elements_raw[2].values()], ["e3 - 1", "e3 - 2"]) self.assertEqual(page.elementmap_raw["e4"].text, "e4") self.assertEqual([k.text for k in page.elementmap_raw["e2"]], ["e2 - 1\ne6", "e2 - 2"]) self.assertEqual([k.text for k in page.elementmap_raw["e3"].values()], ["e3 - 1", "e3 - 2"]) self.assertEqual(page.element_ref.text, "e6") self.assertEqual(page.element_ref_direct.text, "e6") self.assertEqual(page.element_ref_webelement.text, "e6") self.assertEqual(page.element_map_ref.text, "e6") self.assertRaises(TypeError, lambda: page.element_ref_invalid) self.assertEqual(page.element_invalid, None) self.assertEqual(page.elements_invalid, []) self.assertEqual(page.elementmap_invalid, {})
def test_basic_po_real(self): driver = get_driver() uri = make_temp_page( """<body><div id='test_id'>test_text</div></body>""") po = PageTest.BasicPage(driver, uri) self.assertEqual(po.element.text, "test_text")
def test_all_features(self): driver = get_driver() content = """ <div name='e1'>e1</div> <div> <div name='e2'>e2 - 1 <div name='e6'>e6</div> </div> <div name='e2'>e2 - 2</div> </div> <div> <div name='e3'>e3 - 1</div> <div name='e3'>e3 - 2</div> </div> <div name='e4'>e4</div> """ uri = make_temp_page(content) driver.get(uri) # this may appear weird, but its to test the usecase of providing a WebElement # as a base_element. #fml. web_element = driver.find_element_by_name("e2") class ExhaustivePage(Page): element = Element(Locators.NAME, "e1") element_invalid = Element(Locators.NAME, "3e") elements = Elements(Locators.NAME, "e2") elements_invalid = Elements(Locators.NAME, "3e") elementmap = ElementMap(Locators.NAME, "e3") elementmap_for_ref = ElementMap(Locators.NAME, "e2") elementmap_invalid = ElementMap(Locators.NAME, "3e") elementmap_raw = { "e4": Element(Locators.NAME, "e4") , "e2": Elements(Locators.NAME, "e2") , "e3": ElementMap(Locators.NAME, "e3") } elements_raw = [ Element(Locators.NAME, "e4") , Elements(Locators.NAME, "e2") , ElementMap(Locators.NAME, "e3") ] element_list_raw = [ Element(Locators.NAME, "e4"), Element(Locators.NAME, "e6") ] element_map_raw = { "e4":Element(Locators.NAME, "e4"), "e6":Element(Locators.NAME, "e6") } element_second = Element(Locators.NAME, "e2") element_ref = Element( Locators.NAME, "e6", base_element = elements[0] ) element_map_ref = Element( Locators.NAME, "e6", base_element = elementmap_for_ref["e2 - 1\ne6"] ) element_ref_direct = Element( Locators.NAME, "e6", base_element = element_second ) element_ref_webelement = Element( Locators.NAME, "e6", base_element = web_element ) element_ref_invalid = Element( Locators.NAME, "e6", base_element = 42 ) page = ExhaustivePage(driver) self.assertEqual( page.element.text, "e1" ) self.assertEqual( [el.text for el in page.elements], ["e2 - 1\ne6", "e2 - 2"] ) self.assertEqual( [(k, k) for k in page.elementmap], [("e3 - 1","e3 - 1"), ("e3 - 2", "e3 - 2")]) self.assertEqual( [k.text for k in page.element_list_raw], ["e4", "e6"]) self.assertEqual( sorted([k.text for k in page.element_map_raw.values()]), sorted(["e4", "e6"])) v1, v2 = page.element_map_raw.items() self.assertEquals(sorted([v1[0], v1[1].text, v2[0], v2[1].text]), sorted(["e4","e4", "e6", "e6"])) self.assertEqual( page.elements_raw[0].text, "e4" ) self.assertEqual( [k.text for k in page.elements_raw[1]], ["e2 - 1\ne6","e2 - 2"]) self.assertEqual( [k.text for k in page.elements_raw[2].values()], ["e3 - 1","e3 - 2"]) self.assertEqual( page.elementmap_raw["e4"].text, "e4" ) self.assertEqual( [k.text for k in page.elementmap_raw["e2"]], ["e2 - 1\ne6", "e2 - 2"]) self.assertEqual( [k.text for k in page.elementmap_raw["e3"].values()], ["e3 - 1","e3 - 2"]) self.assertEqual( page.element_ref.text, "e6" ) self.assertEqual( page.element_ref_direct.text, "e6" ) self.assertEqual( page.element_ref_webelement.text, "e6" ) self.assertEqual( page.element_map_ref.text, "e6") self.assertRaises( TypeError, lambda: page.element_ref_invalid) self.assertEqual( page.element_invalid , None) self.assertEqual( page.elements_invalid, []) self.assertEqual(page.elementmap_invalid, {})
def test_basic_po_real(self): driver = get_driver() uri = make_temp_page("""<body><div id='test_id'>test_text</div></body>""") po = PageTest.BasicPage(driver, uri) self.assertEqual(po.element.text, "test_text")