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']
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)
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']
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']
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))
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!')
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']
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']
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']
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")