Exemplo n.º 1
0
 def test_find_with_text_field_synonym(self):
     finder = ElementFinder()
     browser = mock()
     browser.current_url = "http://localhost/mypage.html"
     finder.find(browser, "test1", tag='text field')
     verify(browser).find_elements_by_xpath(
         "//input[@type='text' and (@id='test1' or @name='test1' or @value='test1' or @src='test1' or @src='http://localhost/test1')]")
 def test_find_with_locator_with_quote_and_apos(self):
     finder = ElementFinder()
     browser = mock()
     finder.find(browser, "test \"1\" and '2'")
     verify(browser).find_elements_by_xpath(
         "//*[(@id=concat('test \"1\" and ', \"'\", '2', \"'\", '') or @name=concat('test \"1\" and ', \"'\", '2', \"'\", ''))]"
     )
 def test_find_with_button(self):
     finder = ElementFinder()
     browser = mock()
     finder.find(browser, "test1", tag='button')
     verify(browser).find_elements_by_xpath(
         "//button[(@id='test1' or @name='test1' or @value='test1' or normalize-space(descendant-or-self::text())='test1')]"
     )
Exemplo n.º 4
0
 def test_find_with_link_synonym(self):
     finder = ElementFinder()
     browser = mock()
     browser.current_url = "http://localhost/mypage.html"
     finder.find(browser, "test1", tag='link')
     verify(browser).find_elements_by_xpath(
         "//a[(@id='test1' or @name='test1' or @href='test1' or normalize-space(descendant-or-self::text())='test1' or @href='http://localhost/test1')]")
Exemplo n.º 5
0
 def test_find_with_image_synonym(self):
     finder = ElementFinder()
     browser = mock()
     browser.current_url = "http://localhost/mypage.html"
     finder.find(browser, "test1", tag='image')
     verify(browser).find_elements_by_xpath(
         "//img[(@id='test1' or @name='test1' or @src='test1' or @alt='test1' or @src='http://localhost/test1')]")
Exemplo n.º 6
0
    def test_find_with_sloppy_criteria(self):
        finder = ElementFinder()
        browser = mock()

        elements = self._make_mock_elements('div', 'a', 'span', 'a')
        when(browser).find_elements_by_id("test1  ").thenReturn(elements)

        result = finder.find(browser, "id= test1  ")
        self.assertEqual(result, elements)
Exemplo n.º 7
0
 def test_find_with_explicit_default_strategy_and_equals(self):
     finder = ElementFinder()
     browser = mock()
     browser.current_url = "http://localhost/mypage.html"
     finder.find(browser, "default=page.do?foo=bar", tag='a')
     verify(browser).find_elements_by_xpath(
         "//a[(@id='page.do?foo=bar' or @name='page.do?foo=bar' or @href='page.do?foo=bar' or " +
         "normalize-space(descendant-or-self::text())='page.do?foo=bar' or " +
         "@href='http://localhost/page.do?foo=bar')]")
Exemplo n.º 8
0
    def test_find_by_dom(self):
        finder = ElementFinder()
        browser = mock()

        elements = self._make_mock_elements('div', 'a', 'span', 'a')
        when(browser).execute_script("return document.getElementsByTagName('a');").thenReturn(
            [elements[1], elements[3]])

        result = finder.find(browser, "dom=document.getElementsByTagName('a')")
        self.assertEqual(result, [elements[1], elements[3]])
Exemplo n.º 9
0
    def test_find_by_tag_name(self):
        finder = ElementFinder()
        browser = mock()

        elements = self._make_mock_elements('div', 'a', 'span', 'a')
        when(browser).find_elements_by_tag_name("div").thenReturn(elements)

        result = finder.find(browser, "tag=div")
        self.assertEqual(result, elements)
        result = finder.find(browser, "tag=div", tag='a')
        self.assertEqual(result, [elements[1], elements[3]])
Exemplo n.º 10
0
    def test_find_by_css_selector(self):
        finder = ElementFinder()
        browser = mock()

        elements = self._make_mock_elements('div', 'a', 'span', 'a')
        when(browser).find_elements_by_css_selector("#test1").thenReturn(elements)

        result = finder.find(browser, "css=#test1")
        self.assertEqual(result, elements)
        result = finder.find(browser, "css=#test1", tag='a')
        self.assertEqual(result, [elements[1], elements[3]])
Exemplo n.º 11
0
    def test_find_by_partial_link_text(self):
        finder = ElementFinder()
        browser = mock()

        elements = self._make_mock_elements('div', 'a', 'span', 'a')
        when(browser).find_elements_by_partial_link_text("my link").thenReturn(elements)

        result = finder.find(browser, "partial link=my link")
        self.assertEqual(result, elements)
        result = finder.find(browser, "partial link=my link", tag='a')
        self.assertEqual(result, [elements[1], elements[3]])
Exemplo n.º 12
0
    def test_find_by_xpath(self):
        finder = ElementFinder()
        browser = mock()

        elements = self._make_mock_elements('div', 'a', 'span', 'a')
        when(browser).find_elements_by_xpath("//*[(@test='1')]").thenReturn(elements)

        result = finder.find(browser, "xpath=//*[(@test='1')]")
        self.assertEqual(result, elements)
        result = finder.find(browser, "xpath=//*[(@test='1')]", tag='a')
        self.assertEqual(result, [elements[1], elements[3]])
    def test_find_by_id_with_synonym_and_constraints(self):
        finder = ElementFinder()
        browser = mock()

        elements = self._make_mock_elements('div', 'input', 'span', 'input',
                                            'a', 'input', 'div', 'input')
        elements[1].set_attribute('type', 'radio')
        elements[3].set_attribute('type', 'checkbox')
        elements[5].set_attribute('type', 'text')
        elements[7].set_attribute('type', 'file')
        when(browser).find_elements_by_id("test1").thenReturn(elements)

        result = finder.find(browser, "id=test1")
        self.assertEqual(result, elements)
        result = finder.find(browser, "id=test1", tag='input')
        self.assertEqual(result,
                         [elements[1], elements[3], elements[5], elements[7]])
        result = finder.find(browser, "id=test1", tag='radio button')
        self.assertEqual(result, [elements[1]])
        result = finder.find(browser, "id=test1", tag='checkbox')
        self.assertEqual(result, [elements[3]])
        result = finder.find(browser, "id=test1", tag='text field')
        self.assertEqual(result, [elements[5]])
        result = finder.find(browser, "id=test1", tag='file upload')
        self.assertEqual(result, [elements[7]])
Exemplo n.º 14
0
 def test_find_with_invalid_prefix(self):
     finder = ElementFinder()
     browser = mock()
     assert_raises_with_msg(ValueError, "Element locator with prefix 'something' is not supported.",
                            finder.find, browser, "something=test1")
     assert_raises_with_msg(ValueError, "Element locator with prefix 'by ID' is not supported.",
                            finder.find, browser, " by ID =test1")
Exemplo n.º 15
0
 def test_find_returns_bad_values(self):
     finder = ElementFinder()
     browser = mock()
     # selenium.webdriver.ie.webdriver.WebDriver sometimes returns these
     for bad_value in (None, {'': None}):
         for func_name in ('find_elements_by_id', 'find_elements_by_name',
                           'find_elements_by_xpath', 'find_elements_by_link_text',
                           'find_elements_by_css_selector', 'find_elements_by_tag_name'):
             when_find_func = getattr(when(browser), func_name)
             when_find_func(any()).thenReturn(bad_value)
         for locator in ("identifier=it", "id=it", "name=it", "xpath=//div",
                         "link=it", "css=div.it", "tag=div", "default"):
             result = finder.find(browser, locator)
             self.assertEqual(result, [])
             result = finder.find(browser, locator, tag='div')
             self.assertEqual(result, [])
Exemplo n.º 16
0
    def test_find_by_identifier(self):
        finder = ElementFinder()
        browser = mock()

        id_elements = self._make_mock_elements('div', 'a')
        name_elements = self._make_mock_elements('span', 'a')
        when(browser).find_elements_by_id("test1").thenReturn(list(id_elements)).thenReturn(list(id_elements))
        when(browser).find_elements_by_name("test1").thenReturn(list(name_elements)).thenReturn(list(name_elements))

        all_elements = list(id_elements)
        all_elements.extend(name_elements)

        result = finder.find(browser, "identifier=test1")
        self.assertEqual(result, all_elements)
        result = finder.find(browser, "identifier=test1", tag='a')
        self.assertEqual(result, [id_elements[1], name_elements[1]])
Exemplo n.º 17
0
    def test_find_with_sloppy_prefix(self):
        finder = ElementFinder()
        browser = mock()

        elements = self._make_mock_elements('div', 'a', 'span', 'a')
        when(browser).find_elements_by_id("test1").thenReturn(elements)
        when(browser).find_elements_by_partial_link_text("test1").thenReturn(elements)

        result = finder.find(browser, "ID=test1")
        self.assertEqual(result, elements)
        result = finder.find(browser, "iD=test1")
        self.assertEqual(result, elements)
        result = finder.find(browser, "id=test1")
        self.assertEqual(result, elements)
        result = finder.find(browser, "  id =test1")
        self.assertEqual(result, elements)
        result = finder.find(browser, "  partiallink =test1")
        self.assertEqual(result, elements)
        result = finder.find(browser, "  p art iallin k =test1")
        self.assertEqual(result, elements)
Exemplo n.º 18
0
def get_multi_elements_text(locator,
                            timeout=5,
                            fail_if_false=False,
                            hidden_element=False):
    """
    Get text for all elements that match locator. Return result as list

    :param locator: expression for locating elements
    :param timeout: in second, the method will return empty list or throw exception if can't retrieve elements text in specified time
    :param fail_if_false: set to True to fail the test case if can't get elements' text in :timeout seconds
    :param hidden_element: set to True to get text of hidden elements. (Selenium only give empty string for visible element)
    :return: all elements' text as list otherwise return empty list
    """
    s2l = get_s2l()
    start = datetime.now()
    ret = []
    while (datetime.now() - start).total_seconds() < timeout:
        try:
            elt_list = ElementFinder().find(s2l._current_browser(), locator)
            for elt in elt_list:
                if hidden_element is False:
                    ret.append(elt.text)
                else:
                    ret.append(elt.get_attribute('textContent'))

            return ret
        except Exception:
            ret = []

    msg = "Failed to get multi elements visibility within %s seconds due to NoSuchElementException, Timeout or StaleElementReferenceException " % timeout

    if fail_if_false:
        fail_test(msg)

    logger._warn(msg)
    return ret
Exemplo n.º 19
0
 def __init__(self, ctx):
     LibraryComponent.__init__(self, ctx)
     self.element_finder = ElementFinder()
     self.form_element = FormElementKeywords(ctx)
Exemplo n.º 20
0
class ElementFinderTests(unittest.TestCase):
    def setUp(self):
        ctx = mock()
        _browser = mock()
        ctx._browser = _browser
        self.finder = ElementFinder(ctx)
        self.ctx = ctx

    def tearDown(self):
        unstub()

    def test_find_with_invalid_prefix(self):
        with self.assertRaises(ValueError) as error:
            self.finder.find("something=test1")
            self.assertEqual(
                str(error), "Element locator with prefix 'something' "
                "is not supported.")
        with self.assertRaises(ValueError) as error:
            self.finder.find(" by ID =test1")
            self.assertEqual(
                str(error), "Element locator with prefix 'by ID' is "
                "not supported.")

    def test_find_with_null_browser(self):
        ctx = mock()
        finder = ElementFinder(ctx)
        self.assertRaises(AttributeError, finder.find, None, "id=test1")

    def test_find_with_no_tag(self):
        self.finder.find("test1", required=False)
        verify(self.ctx._browser).find_elements_by_xpath("//*[(@id='test1' or "
                                                         "@name='test1')]")

    def test_find_with_explicit_default_strategy(self):
        self.finder.find("default=test1", required=False)
        verify(self.ctx._browser).find_elements_by_xpath("//*[(@id='test1' or "
                                                         "@name='test1')]")

    def test_find_with_explicit_default_strategy_and_equals(self):
        self.ctx._browser.current_url = "http://localhost/mypage.html"
        self.finder.find("default=page.do?foo=bar", tag='a', required=False)
        verify(self.ctx._browser).find_elements_by_xpath(
            "//a[(@id='page.do?foo=bar' or @name='page.do?foo=bar' or "
            "@href='page.do?foo=bar' or "
            "normalize-space(descendant-or-self::text())='page.do?foo=bar' or "
            "@href='http://localhost/page.do?foo=bar')]")

    def test_find_with_tag(self):
        self.finder.find("test1", tag='div', required=False)
        verify(self.ctx._browser).find_elements_by_xpath(
            "//div[(@id='test1' or @name='test1')]")

    def test_find_with_locator_with_apos(self):
        self.finder.find("test '1'", required=False)
        verify(self.ctx._browser).find_elements_by_xpath(
            "//*[(@id=\"test '1'\" or @name=\"test '1'\")]")

    def test_find_with_locator_with_quote(self):
        self.finder.find("test \"1\"", required=False)
        verify(self.ctx._browser).find_elements_by_xpath(
            "//*[(@id='test \"1\"' or @name='test \"1\"')]")

    def test_find_with_locator_with_quote_and_apos(self):
        self.finder.find("test \"1\" and '2'", required=False)
        verify(self.ctx._browser).find_elements_by_xpath(
            "//*[(@id=concat('test \"1\" and ', \"'\", '2', \"'\", '') "
            "or @name=concat('test \"1\" and ', \"'\", '2', \"'\", ''))]")

    def test_find_with_a(self):
        self.ctx._browser.current_url = "http://localhost/mypage.html"
        self.finder.find("test1", tag='a', required=False)
        verify(self.ctx._browser).find_elements_by_xpath(
            "//a[(@id='test1' or @name='test1' or @href='test1' or "
            "normalize-space(descendant-or-self::text())='test1' or "
            "@href='http://localhost/test1')]")

    def test_find_with_link_synonym(self):
        self.ctx._browser.current_url = "http://localhost/mypage.html"
        self.finder.find("test1", tag='link', required=False)
        verify(self.ctx._browser).find_elements_by_xpath(
            "//a[(@id='test1' or @name='test1' or @href='test1' or "
            "normalize-space(descendant-or-self::text())='test1' or "
            "@href='http://localhost/test1')]")

    def test_find_with_img(self):
        self.ctx._browser.current_url = "http://localhost/mypage.html"
        self.finder.find("test1", tag='img', required=False)
        verify(self.ctx._browser).find_elements_by_xpath(
            "//img[(@id='test1' or @name='test1' or @src='test1' or "
            "@alt='test1' or @src='http://localhost/test1')]")

    def test_find_with_image_synonym(self):
        self.ctx._browser.current_url = "http://localhost/mypage.html"
        self.finder.find("test1", tag='image', required=False)
        verify(self.ctx._browser).find_elements_by_xpath(
            "//img[(@id='test1' or @name='test1' or @src='test1' or "
            "@alt='test1' or @src='http://localhost/test1')]")

    def test_find_with_input(self):
        self.ctx._browser.current_url = "http://localhost/mypage.html"
        self.finder.find("test1", tag='input', required=False)
        verify(self.ctx._browser).find_elements_by_xpath(
            "//input[(@id='test1' or @name='test1' or @value='test1' or "
            "@src='test1' or @src='http://localhost/test1')]")

    def test_find_with_radio_button_synonym(self):
        self.ctx._browser.current_url = "http://localhost/mypage.html"
        self.finder.find("test1", tag='radio button', required=False)
        verify(self.ctx._browser).find_elements_by_xpath(
            "//input[@type='radio' and (@id='test1' or @name='test1' or "
            "@value='test1' or @src='test1' or "
            "@src='http://localhost/test1')]")

    def test_find_with_checkbox_synonym(self):
        self.ctx._browser.current_url = "http://localhost/mypage.html"
        self.finder.find("test1", tag='checkbox', required=False)
        verify(self.ctx._browser).find_elements_by_xpath(
            "//input[@type='checkbox' and (@id='test1' or @name='test1' or "
            "@value='test1' or @src='test1' or "
            "@src='http://localhost/test1')]")

    def test_find_with_file_upload_synonym(self):
        self.ctx._browser.current_url = "http://localhost/mypage.html"
        self.finder.find("test1", tag='file upload', required=False)
        verify(self.ctx._browser).find_elements_by_xpath(
            "//input[@type='file' and (@id='test1' or @name='test1' or "
            "@value='test1' or @src='test1' or "
            "@src='http://localhost/test1')]")

    def test_find_with_text_field_synonym(self):
        self.ctx._browser.current_url = "http://localhost/mypage.html"
        self.finder.find("test1", tag='text field', required=False)
        verify(self.ctx._browser).find_elements_by_xpath(
            "//input[@type[. = 'date' or . = 'datetime-local' or . = 'email' or "
            ". = 'month' or . = 'number' or . = 'password' or . = 'search' or "
            ". = 'tel' or . = 'text' or . = 'time' or . = 'url' or . = 'week'] and "
            "(@id='test1' or @name='test1' or @value='test1' or @src='test1' or "
            "@src='http://localhost/test1')]")

    def test_find_with_button(self):
        self.finder.find("test1", tag='button', required=False)
        verify(self.ctx._browser).find_elements_by_xpath(
            "//button[(@id='test1' or @name='test1' or @value='test1' or "
            "normalize-space(descendant-or-self::text())='test1')]")

    def test_find_with_select(self):
        self.finder.find("test1", tag='select', required=False)
        verify(self.ctx._browser).find_elements_by_xpath(
            "//select[(@id='test1' or @name='test1')]")

    def test_find_with_list_synonym(self):
        self.finder.find("test1", tag='list', required=False)
        verify(self.ctx._browser).find_elements_by_xpath(
            "//select[(@id='test1' or @name='test1')]")

    def test_find_with_implicit_xpath(self):
        elements = self._make_mock_elements('div', 'a', 'span', 'a')
        when(self.ctx._browser).find_elements_by_xpath(
            "//*[(@test='1')]").thenReturn(elements)
        result = self.finder.find("//*[(@test='1')]", first_only=False)
        self.assertEqual(result, elements)
        result = self.finder.find("//*[(@test='1')]",
                                  tag='a',
                                  first_only=False)
        self.assertEqual(result, [elements[1], elements[3]])

    def test_find_by_identifier(self):
        id_elements = self._make_mock_elements('div', 'a')
        name_elements = self._make_mock_elements('span', 'a')
        when(self.ctx._browser).find_elements_by_id("test1").thenReturn(
            list(id_elements)).thenReturn(list(id_elements))
        when(self.ctx._browser).find_elements_by_name("test1").thenReturn(
            list(name_elements)).thenReturn(list(name_elements))
        all_elements = list(id_elements)
        all_elements.extend(name_elements)
        result = self.finder.find("identifier=test1", first_only=False)
        self.assertEqual(result, all_elements)
        result = self.finder.find("identifier=test1",
                                  tag='a',
                                  first_only=False)
        self.assertEqual(result, [id_elements[1], name_elements[1]])

    def test_find_by_id(self):
        elements = self._make_mock_elements('div', 'a', 'span', 'a')
        when(self.ctx._browser).find_elements_by_id("test1").thenReturn(
            elements)
        result = self.finder.find("id=test1", first_only=False)
        self.assertEqual(result, elements)
        result = self.finder.find("id=test1", tag='a', first_only=False)
        self.assertEqual(result, [elements[1], elements[3]])

    def test_find_by_name(self):
        elements = self._make_mock_elements('div', 'a', 'span', 'a')
        when(self.ctx._browser).find_elements_by_name("test1").thenReturn(
            elements)
        result = self.finder.find("name=test1", first_only=False)
        self.assertEqual(result, elements)
        result = self.finder.find("name=test1", tag='a', first_only=False)
        self.assertEqual(result, [elements[1], elements[3]])

    def test_find_by_xpath(self):
        elements = self._make_mock_elements('div', 'a', 'span', 'a')
        when(self.ctx._browser).find_elements_by_xpath(
            "//*[(@test='1')]").thenReturn(elements)
        result = self.finder.find("xpath=//*[(@test='1')]", first_only=False)
        self.assertEqual(result, elements)
        result = self.finder.find("xpath=//*[(@test='1')]",
                                  tag='a',
                                  first_only=False)
        self.assertEqual(result, [elements[1], elements[3]])

    def test_find_by_dom(self):
        elements = self._make_mock_elements('div', 'a', 'span', 'a')
        elems = [elements[1], elements[3]]
        when(self.ctx._browser).execute_script(
            "return document.getElementsByTagName('a');").thenReturn(elems)
        result = self.finder.find("dom=document.getElementsByTagName('a')",
                                  first_only=False)
        self.assertEqual(result, [elements[1], elements[3]])

    def test_find_by_link_text(self):
        elements = self._make_mock_elements('div', 'a', 'span', 'a')
        when(self.ctx._browser).find_elements_by_link_text(
            "my link").thenReturn(elements)
        result = self.finder.find("link=my link", first_only=False)
        self.assertEqual(result, elements)
        result = self.finder.find("link=my link", tag='a', first_only=False)
        self.assertEqual(result, [elements[1], elements[3]])

    def test_find_by_partial_link_text(self):
        elements = self._make_mock_elements('div', 'a', 'span', 'a')
        when(self.ctx._browser).find_elements_by_partial_link_text(
            "my link").thenReturn(elements)
        result = self.finder.find("partial link=my link", first_only=False)
        self.assertEqual(result, elements)
        result = self.finder.find("partial link=my link",
                                  tag='a',
                                  first_only=False)
        self.assertEqual(result, [elements[1], elements[3]])

    def test_find_by_css_selector(self):
        elements = self._make_mock_elements('div', 'a', 'span', 'a')
        when(self.ctx._browser).find_elements_by_css_selector(
            "#test1").thenReturn(elements)
        result = self.finder.find("css=#test1", first_only=False)
        self.assertEqual(result, elements)
        result = self.finder.find("css=#test1", tag='a', first_only=False)
        self.assertEqual(result, [elements[1], elements[3]])

    def test_find_by_class_names(self):
        elements = self._make_mock_elements('div', 'a', 'span', 'a')
        when(self.ctx._browser).find_elements_by_class_name(
            "test1").thenReturn(elements)
        result = self.finder.find("class=test1", first_only=False)
        self.assertEqual(result, elements)
        result = self.finder.find("class=test1", tag='a', first_only=False)
        self.assertEqual(result, [elements[1], elements[3]])

    def test_find_by_tag_name(self):
        elements = self._make_mock_elements('div', 'a', 'span', 'a')
        when(self.ctx._browser).find_elements_by_tag_name("div").thenReturn(
            elements)
        result = self.finder.find("tag=div", first_only=False)
        self.assertEqual(result, elements)
        result = self.finder.find("tag=div", tag='a', first_only=False)
        self.assertEqual(result, [elements[1], elements[3]])

    def test_find_with_sloppy_prefix(self):
        elements = self._make_mock_elements('div', 'a', 'span', 'a')
        when(self.ctx._browser).find_elements_by_id("test1").thenReturn(
            elements)
        when(self.ctx._browser).find_elements_by_partial_link_text(
            "test1").thenReturn(elements)
        result = self.finder.find("ID=test1", first_only=False)
        self.assertEqual(result, elements)
        result = self.finder.find("iD=test1", first_only=False)
        self.assertEqual(result, elements)
        result = self.finder.find("id=test1", first_only=False)
        self.assertEqual(result, elements)
        result = self.finder.find("  id =test1", first_only=False)
        self.assertEqual(result, elements)
        result = self.finder.find("  partiallink =test1", first_only=False)
        self.assertEqual(result, elements)
        result = self.finder.find("  p art iallin k =test1", first_only=False)
        self.assertEqual(result, elements)

    def test_find_with_sloppy_criteria(self):
        elements = self._make_mock_elements('div', 'a', 'span', 'a')
        when(self.ctx._browser).find_elements_by_id("test1  ").thenReturn(
            elements)
        result = self.finder.find("id= test1  ", first_only=False)
        self.assertEqual(result, elements)

    def test_find_by_id_with_synonym_and_constraints(self):
        elements = self._make_mock_elements('div', 'input', 'span', 'input',
                                            'a', 'input', 'div', 'input',
                                            'input')
        elements[1].set_attribute('type', 'radio')
        elements[3].set_attribute('type', 'checkbox')
        elements[5].set_attribute('type', 'text')
        elements[7].set_attribute('type', 'file')
        elements[8].set_attribute('type', 'email')
        when(self.ctx._browser).find_elements_by_id("test1").thenReturn(
            elements)
        result = self.finder.find("id=test1", first_only=False)
        self.assertEqual(result, elements)
        result = self.finder.find("id=test1", tag='input', first_only=False)
        self.assertEqual(
            result,
            [elements[1], elements[3], elements[5], elements[7], elements[8]])
        result = self.finder.find("id=test1",
                                  tag='radio button',
                                  first_only=False)
        self.assertEqual(result, [elements[1]])
        result = self.finder.find("id=test1", tag='checkbox', first_only=False)
        self.assertEqual(result, [elements[3]])
        result = self.finder.find("id=test1",
                                  tag='text field',
                                  first_only=False)
        self.assertEqual(result, [elements[5], elements[8]])
        result = self.finder.find("id=test1",
                                  tag='file upload',
                                  first_only=False)
        self.assertEqual(result, [elements[7]])

    def test_find_returns_bad_values(self):
        # selenium.webdriver.ie.webdriver.WebDriver sometimes returns these
        locators = ('find_elements_by_id', 'find_elements_by_name',
                    'find_elements_by_xpath', 'find_elements_by_link_text',
                    'find_elements_by_css_selector',
                    'find_elements_by_tag_name')
        for bad_value in (None, {'': None}):
            for func_name in locators:
                when_find_func = getattr(when(self.ctx._browser), func_name)
                when_find_func(any()).thenReturn(bad_value)
            for locator in ("identifier=it", "id=it", "name=it", "xpath=//div",
                            "link=it", "css=div.it", "tag=div", "default"):
                result = self.finder.find(locator,
                                          required=False,
                                          first_only=False)
                self.assertEqual(result, [])
                result = self.finder.find(locator,
                                          tag='div',
                                          required=False,
                                          first_only=False)
                self.assertEqual(result, [])

    def _make_mock_elements(self, *tags):
        elements = []
        for tag in tags:
            element = self._make_mock_element(tag)
            elements.append(element)
        return elements

    def _make_mock_element(self, tag):
        element = mock()
        element.tag_name = tag
        element.attributes = {}

        def set_attribute(name, value):
            element.attributes[name] = value

        element.set_attribute = set_attribute

        def get_attribute(name):
            return element.attributes[name]

        element.get_attribute = get_attribute

        return element
Exemplo n.º 21
0
 def setUpClass(cls):
     cls.parse = ElementFinder()._parse_locator
Exemplo n.º 22
0
 def test_find_with_locator_with_quote(self):
     finder = ElementFinder()
     browser = mock()
     finder.find(browser, "test \"1\"")
     verify(browser).find_elements_by_xpath("//*[(@id='test \"1\"' or @name='test \"1\"')]")
Exemplo n.º 23
0
 def setUp(self):
     ctx = mock()
     _browser = mock()
     ctx._browser = _browser
     self.finder = ElementFinder(ctx)
     self.ctx = ctx
Exemplo n.º 24
0
 def test_find_with_tag(self):
     finder = ElementFinder()
     browser = mock()
     finder.find(browser, "test1", tag='div')
     verify(browser).find_elements_by_xpath("//div[(@id='test1' or @name='test1')]")
Exemplo n.º 25
0
 def test_find_with_locator_with_apos(self):
     finder = ElementFinder()
     browser = mock()
     finder.find(browser, "test '1'")
     verify(browser).find_elements_by_xpath("//*[(@id=\"test '1'\" or @name=\"test '1'\")]")
 def test_find_with_empty_locator(self):
     finder = ElementFinder()
     browser = mock()
     self.assertRaises(AssertionError, finder.find, browser, "")
Exemplo n.º 27
0
 def test_find_with_list_synonym(self):
     finder = ElementFinder()
     browser = mock()
     finder.find(browser, "test1", tag='list')
     verify(browser).find_elements_by_xpath(
         "//select[(@id='test1' or @name='test1')]")
Exemplo n.º 28
0
 def test_find_with_null_browser(self):
     finder = ElementFinder()
     self.assertRaises(AttributeError, finder.find, None, "id=test1")
Exemplo n.º 29
0
 def setUpClass(cls):
     ctx = mock()
     cls.parse = ElementFinder(ctx)._parse_locator
Exemplo n.º 30
0
 def test_find_with_explicit_default_strategy(self):
     finder = ElementFinder()
     browser = mock()
     finder.find(browser, "default=test1")
     verify(browser).find_elements_by_xpath("//*[(@id='test1' or @name='test1')]")