Ejemplo n.º 1
0
    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)
Ejemplo n.º 2
0
    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)
Ejemplo n.º 3
0
    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)
Ejemplo n.º 4
0
    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)
Ejemplo n.º 5
0
 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)
Ejemplo n.º 6
0
    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/"])
Ejemplo n.º 7
0
    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/"])
Ejemplo n.º 8
0
    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)
Ejemplo n.º 9
0
 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)
Ejemplo n.º 10
0
    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"
Ejemplo n.º 11
0
    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
Ejemplo n.º 12
0
    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"
Ejemplo n.º 15
0
    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"
Ejemplo n.º 16
0
    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"
Ejemplo n.º 17
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")
Ejemplo n.º 18
0
 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")
Ejemplo n.º 19
0
    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
Ejemplo n.º 20
0
 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')
Ejemplo n.º 21
0
    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"
Ejemplo n.º 22
0
    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")
Ejemplo n.º 23
0
 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')
Ejemplo n.º 24
0
    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)
Ejemplo n.º 25
0
    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"
Ejemplo n.º 26
0
    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, [])
Ejemplo n.º 27
0
    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())
Ejemplo n.º 29
0
    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)
Ejemplo n.º 30
0
    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)
Ejemplo n.º 31
0
    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
Ejemplo n.º 35
0
    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
Ejemplo n.º 37
0
 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])
Ejemplo n.º 38
0
 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])
Ejemplo n.º 39
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")
Ejemplo n.º 40
0
 def setUp(self):
     self.driver = get_driver()
     self.uri = make_temp_page("<div id='simple_id'>default text</div>")
 def setUp(self):
     self.driver = get_driver()
     self.uri = make_temp_page("<div id='simple_id'>default text</div>")
Ejemplo n.º 42
0
    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, {})
Ejemplo n.º 43
0
 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")
Ejemplo n.º 44
0
    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, {})
Ejemplo n.º 45
0
 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")