Пример #1
0
    def frame(self, frame_reference) -> None:
        """
        Switches focus to the specified frame, by index, name, or webelement.

        :Args:
         - frame_reference: The name of the window to switch to, an integer representing the index,
                            or a webelement that is an (i)frame to switch to.

        :Usage:
            ::

                driver.switch_to.frame('frame_name')
                driver.switch_to.frame(1)
                driver.switch_to.frame(driver.find_elements(By.TAG_NAME, "iframe")[0])
        """
        if isinstance(frame_reference, str):
            try:
                frame_reference = self._driver.find_element(
                    By.ID, frame_reference)
            except NoSuchElementException:
                try:
                    frame_reference = self._driver.find_element(
                        By.NAME, frame_reference)
                except NoSuchElementException:
                    raise NoSuchFrameException(frame_reference)

        self._driver.execute(Command.SWITCH_TO_FRAME, {'id': frame_reference})
Пример #2
0
def use_frame(locator):
    """Make following keywords to use frame on a page.

    Examples
    --------
    .. code-block:: robotframework

        UseFrame    //iframe

    Parameters
    ----------
    locator : str
        Xpath expression without xpath= prefix or index (first = 1 etc.)

    Raises
    ------
    NoSuchFrameException
        If the frame is not found
    """
    frame.wait_page_loaded()
    try:
        index = int(locator) - 1
        webelement = javascript.execute_javascript(
            'document.querySelectorAll("iframe, frame")[{}]'.format(index))
    except ValueError:
        webelement = element.get_unique_element_by_xpath(locator)
    driver = browser.get_current_browser()
    try:
        driver.switch_to_frame(webelement)
    except NoSuchFrameException:
        raise NoSuchFrameException('No frame wound with xpath: {0}'.format(locator))
Пример #3
0
 def frame(self, index):
     if self.driver.current_frame is None:
         children = self.driver.frames
     else:
         children = self.driver.current_frame.children
     try:
         new_frame = children[index]
     except IndexError:
         raise NoSuchFrameException()
     else:
         self.driver.current_frame = new_frame
Пример #4
0
 def switch(self, frame_name=None):
     try:
         if ((not frame_name) or (frame_name == 'relative=top')):
             self.driver.switch_to_default_content()
         elif frame_name.startswith('index='):
             self.driver.switch_to.frame(int(frame_name.split('=')[1]))
         elif (frame_name == 'relative=parent'):
             self.driver.switch_to.parent_frame()
         else:
             self.driver.switch_to.frame(frame_name)
     except NoSuchFrameException:
         raise NoSuchFrameException(('Invalid Frame ID: %s' % frame_name))
Пример #5
0
 def switch(self, frame_name=None):
     try:
         if not frame_name or frame_name == "relative=top":
             self.driver.switch_to_default_content()
         elif frame_name.startswith("index="):  # Switch using index frame using relative position
             self.driver.switch_to.frame(int(frame_name.split("=")[1]))
         elif frame_name == "relative=parent":  # Switch to parent frame of the current frame
             self.driver.switch_to.parent_frame()
         else:  # Use the selenium alternative
             self.driver.switch_to.frame(frame_name)
     except NoSuchFrameException:
         raise NoSuchFrameException("Invalid Frame ID: %s" % frame_name)
Пример #6
0
 def frame(self, index):
     if self.num_allowed_frame_switches > 0:
         self.num_allowed_frame_switches -= 1
         return super(TargetLocatorFailingAfterNFrameSwitches, self)\
          .frame(index)
     raise NoSuchFrameException()