Exemplo n.º 1
0
    def find_elements(self, by=By.ID, value=None):
        """
        'Private' method used by the find_elements_by_* methods.

        :Usage:
            Use the corresponding find_elements_by_* instead of this.

        :rtype: list of WebElement
        """
        if not By.is_valid(by) or not isinstance(value, str):
            raise InvalidSelectorException("Invalid locator values passed in")
        if self.w3c:
            if by == By.ID:
                by = By.CSS_SELECTOR
                value = '[id="%s"]' % value
            elif by == By.TAG_NAME:
                by = By.CSS_SELECTOR
            elif by == By.CLASS_NAME:
                by = By.CSS_SELECTOR
                value = ".%s" % value
            elif by == By.NAME:
                by = By.CSS_SELECTOR
                value = '[name="%s"]' % value

        return self.execute(Command.FIND_ELEMENTS,
                             {'using': by, 'value': value})['value']
Exemplo n.º 2
0
def query_selector(css_selector, wait_time, friendly=False):
    try:
        return WebDriverWait(driver, wait_time).until(
            ec.presence_of_element_located((By.CSS_SELECTOR, css_selector)))
    except TimeoutException:
        if friendly:
            return None
        raise InvalidSelectorException(css_selector)
Exemplo n.º 3
0
    def find_elements(self, by=By.ID, value=None):
        if isinstance(by, tuple) or isinstance(value, int) or value == None:
            raise InvalidSelectorException("Invalid locator values passed in")

        return self._execute(Command.FIND_CHILD_ELEMENTS, {
            "using": by,
            "value": value
        })['value']
Exemplo n.º 4
0
    def find_elements(self, by=By.ID, value=None):
        if not By.is_valid(by) or not isinstance(value, str):
            raise InvalidSelectorException("Invalid locator values passed in")

        return self._execute(Command.FIND_CHILD_ELEMENTS, {
            "using": by,
            "value": value
        })['value']
Exemplo n.º 5
0
 def find_element_by_jquery(self, jq):
     elems = self.find_elements_by_jquery(jq)
     if len(elems) == 1:
         return elems[0]
     else:
         raise InvalidSelectorException(
             "jQuery selector returned %i elements, expected 1" %
             len(elems))
Exemplo n.º 6
0
 def _grade_arbitrary_ml_section(self):
     # Grade an arbitrary section or throw an error if failure.
     for p in self.perms:
         xpath = self._get_arbitrary_xpath(*p)
         if xpath not in self.known_xpaths:
             try:
                 self.grader.find_by_xpath_click(xpath)
                 return p
             except NoSuchElementException:
                 pass
     raise InvalidSelectorException(
         'New or unknown xpath for this section!')
Exemplo n.º 7
0
    def find_elements(self, by=By.ID, value=None):
        """
        'Private' method used by the find_elements_by_* methods.

        :Usage:
            Use the corresponding find_elements_by_* instead of this.
        """
        if not By.is_valid(by) or not isinstance(value, str):
            raise InvalidSelectorException("Invalid locator values passed in")

        return self.execute(Command.FIND_ELEMENTS,
                             {'using': by, 'value': value})['value']
Exemplo n.º 8
0
    def find_element(self, by=By.ID, value=None):
        """
        'Private' method used by the find_element_by_* methods.

        :Usage:
            Use the corresponding find_element_by_* instead of this.
        """
        if isinstance(by, tuple) or isinstance(value, int) or value==None:
            raise InvalidSelectorException("Invalid locator values passed in")

        return self.execute(Command.FIND_ELEMENT,
                             {'using': by, 'value': value})['value']
Exemplo n.º 9
0
    def find_elements(self, by=By.ID, value=None):
        if not By.is_valid(by) or not isinstance(value, str):
            raise InvalidSelectorException("Invalid locator values passed in")

        if by == By.ID:
            by = By.CSS_SELECTOR
            value = '[id="%s"]' % value
        elif by == By.TAG_NAME:
            by = By.CSS_SELECTOR
        elif by == By.CLASS_NAME:
            by = By.CSS_SELECTOR
            value = ".%s" % value
        elif by == By.NAME:
            by = By.CSS_SELECTOR
            value = '[name="%s"]' % value

        return self._execute(Command.FIND_CHILD_ELEMENTS,
                             {"using": by, "value": value})['value']
Exemplo n.º 10
0
    def test_locate_elements_exception_handling(self):
        """Verify that the 'locate_elements' debugger command handles exceptions"""

        self.cli._highlight_element = mock.Mock()
        self.cli.selenium.get_webelements.side_effect = InvalidSelectorException(
            "invalid xpath")
        self.cli.stdout = StringIO()
        return_value = self.cli.do_locate_elements("//whatever")
        self.assertIsNone(return_value)
        self.cli._highlight_element.assert_not_called()
        self.assertEqual(self.cli.stdout.getvalue(),
                         "invalid locator '//whatever'\n")

        # Even if get_webelement throws an exception, the keyword
        # should handle it gracefully
        self.cli.selenium.get_webelements.side_effect = Exception(
            "something unexpected")
        self.cli.stdout = StringIO()
        return_value = self.cli.do_locate_elements("//whatever")
        self.assertIsNone(return_value)
        self.cli._highlight_element.assert_not_called()
        self.assertEqual(self.cli.stdout.getvalue(), "something unexpected\n")