Пример #1
0
    def __init__(self, webdriver=None, max_time=WTF_TIMEOUT_MANAGER.EPIC, sleep=5, **kwargs):
        """
        Constructor

        Kwargs:
            webdriver (WebDriver) - Selenium Webdriver instance
            max_time (number) - Maximum wait time to keep the browser on stand by.
            sleep (number) - Number of seconds to wait between sending heart beats.

        """
        if webdriver is None:
            webdriver = WTF_WEBDRIVER_MANAGER.get_driver()

        self.webdriver = webdriver
        self._sleep_time = sleep
        self._max_time = max_time

        # This is used by the shortcut method 'start_standby', which is used 
        # with the 'with' statement.
        self._autostart = False
        try:
            if kwargs['_autostart']:
                self._autostart = True
        except KeyError:
            pass
Пример #2
0
 def create_page(cls, webdriver=None, **kwargs):
     """
     Class method short cut to call PageFactory on itself.
     @param webdriver: WebDriver to associate with this page.
     @type webdriver: WebDriver
     """
     if not webdriver:
         webdriver = WTF_WEBDRIVER_MANAGER.get_driver()
     return PageFactory.create_page(cls, webdriver=webdriver, **kwargs)
Пример #3
0
    def wait_until_page_loaded(page_obj_class,
                               webdriver=None,
                               timeout=WTF_TIMEOUT_MANAGER.NORMAL,
                               sleep=0.5,
                               bad_page_classes=[], **kwargs):
        """
        Waits until the page is loaded.
        
        Usage Example: 
            webdriver.get("http://www.mysite.com/login")
            # Wait up to 60 seconds for the page to load.
            login_page = wait_until_page_loaded(LoginPage, timeout=60)
        
        @return: Returns PageObject of type passed in.
        @rtype: PageObject
        """
        if not webdriver:
            webdriver = WTF_WEBDRIVER_MANAGER.get_driver()

        #convert this param to list if not already.
        if type(bad_page_classes) != list:
            bad_page_classes = [bad_page_classes]

        end_time = datetime.now() + timedelta(seconds=timeout)
        last_exception = None
        while datetime.now() < end_time:
            # Check to see if we're at our target page.
            try:
                page = PageFactory.create_page(page_obj_class, webdriver=webdriver, **kwargs)
                PageUtils.wait_until_page_ready(page)
                return page
            except Exception as e:
                last_exception = e
                pass
                # Check to see if we're at one of those labled 'Bad' pages.
            for bad_page_class in bad_page_classes:
                try:
                    PageFactory.create_page(bad_page_class, webdriver=webdriver, **kwargs)
                    #if the if/else statement succeeds, than we have an error.
                    raise BadPageEncounteredError("Encountered a bad page. " + bad_page_class.__name__)
                except BadPageEncounteredError as e:
                    raise e
                except:
                    pass #We didn't hit a bad page class yet.
                #sleep till the next iteration.
            time.sleep(sleep)

        print "Unable to construct page, last exception", last_exception
        raise PageLoadTimeoutError("Timedout while waiting for {page} to load. Url:{url}". \
            format(page=PageUtils.__get_name_for_class__(page_obj_class),
                   url=webdriver.current_url))
Пример #4
0
    def __init__(self, webdriver=None, max_time=WTF_TIMEOUT_MANAGER.EPIC, sleep=5):
        """
        Constructor

        Kwargs:
            webdriver (WebDriver) - Selenium Webdriver instance
            max_time (number) - Maximum wait time to keep the browser on stand by.
            sleep (number) - Number of seconds to wait between sending heart beats.

        """
        if webdriver is None:
            webdriver = WTF_WEBDRIVER_MANAGER.get_driver()

        self.webdriver = webdriver
        self._sleep_time = sleep
        self._max_time = max_time
Пример #5
0
    def create_page(cls, webdriver=None, **kwargs):
        """Class method short cut to call PageFactory on itself.  Use it to instantiate 
        this PageObject using a webdriver.

        Args:
            webdriver (Webdriver): Instance of Selenium Webdriver.

        Returns:
            PageObject

        Raises:
            InvalidPageError

        """
        if not webdriver:
            webdriver = WTF_WEBDRIVER_MANAGER.get_driver()
        return PageFactory.create_page(cls, webdriver=webdriver, **kwargs)
Пример #6
0
    def create_page(cls, webdriver=None, **kwargs):
        """Class method short cut to call PageFactory on itself.  Use it to instantiate 
        this PageObject using a webdriver.

        Args:
            webdriver (Webdriver): Instance of Selenium Webdriver.

        Returns:
            PageObject

        Raises:
            InvalidPageError

        """
        if not webdriver:
            webdriver = WTF_WEBDRIVER_MANAGER.get_driver()
        return PageFactory.create_page(cls, webdriver=webdriver, **kwargs)
	def test_view_demo(self):
		webdriver = WTF_WEBDRIVER_MANAGER.get_driver()
		webdriver.get(self.index_url)
		index_page = PageFactory.create_page(IndexPage)
		self.assertTrue(index_page.view_demo())
	def test_search_in_navigation_bar(self):
		webdriver = WTF_WEBDRIVER_MANAGER.get_driver()
		webdriver.get(self.index_url)
		index_page = PageFactory.create_page(IndexPage)
		self.assertTrue(index_page.search_in_navigation_bar())
Пример #9
0
    def create_page(page_object_class_or_interface, \
                    webdriver=None, **kwargs):
        """
        Instantiate a page object from a given Interface or Abstract class.
        
        Instantiating a Page from PageObject from class usage:
            my_page_instance = PageFactory.create_page(MyPageClass)
        
        Instantiating a Page from an Interface or base class
            import pages.mysite.* 
            my_page_instance = PageFactory.create_page(MyPageInterfaceClass)
        
        Instantiating a Page from a list of classes.
            my_page_instance = PageFactory.create_page([PossiblePage1, PossiblePage2])
        
        Note: It'll only be able to detect pages that are imported.  To it's best to 
        do an import of all pages implementing a base class or the interface inside the 
        __init__.py of the package directory.  
        
        @param  page_object_class_or_interface: Class, AbstractBaseClass, or Interface to attempt to consturct.
        @param webdriver: Selenium Webdriver to use to instantiate the page.
        @type webdriver: WebDriver
        """

        if not webdriver:
            webdriver = WTF_WEBDRIVER_MANAGER.get_driver()

        # will be used later when tracking best matched page.
        current_matched_page = None


        # Walk through all classes of this sub class 
        if type(page_object_class_or_interface) == list:
            subclasses = []
            for page_class in page_object_class_or_interface:
                #attempt to instantiate class.
                page = PageFactory.__instantiate_page_object(page_class, \
                                                             webdriver, \
                                                             **kwargs)
                if isinstance(page, PageObject) and (current_matched_page == None or page > current_matched_page):
                    current_matched_page = page

                #check for subclasses
                subclasses += PageFactory.__itersubclasses(page_class)
        else:
            # Try the original class
            page_class = page_object_class_or_interface
            page = PageFactory.__instantiate_page_object(page_class,
                                                         webdriver,
                                                         **kwargs)
            if isinstance(page, PageObject):
                current_matched_page = page

            #check for subclasses
            subclasses = PageFactory.__itersubclasses(page_object_class_or_interface)

        # Iterate over subclasses of the passed in classes to see if we have a better match.
        for pageClass in subclasses:
            try:
                page = pageClass(webdriver, **kwargs)
                if current_matched_page == None or page > current_matched_page:
                    current_matched_page = page
            except InvalidPageError as e:
                print_debug("InvalidPageError", e)
                pass #This happens when the page fails check.
            except TypeError as e:
                print_debug("TypeError", e)
                pass #this happens when it tries to instantiate the original abstract class.
            except Exception as e:
                print_debug("Exception", e)
                #Unexpected exception.
                raise e

        # If no matching classes.
        if not isinstance(current_matched_page, PageObject):
            raise NoMatchingPageError("There's, no matching classes to this page. URL:%s" \
                                      % webdriver.current_url)
        else:
            return current_matched_page
Пример #10
0
    def create_page(page_object_class_or_interface,
                    webdriver=None, **kwargs):
        """
        Instantiate a page object from a given Interface or Abstract class.

        Args:
            page_object_class_or_interface (Class): PageObject class, AbstractBaseClass, or 
            Interface to attempt to consturct.

        Kwargs:
            webdriver (WebDriver): Selenium Webdriver to use to instantiate the page. If none 
                                   is provided, then it was use the default from 
                                   WTF_WEBDRIVER_MANAGER

        Returns:
            PageObject

        Raises:
            NoMatchingPageError

        Instantiating a Page from PageObject from class usage::

            my_page_instance = PageFactory.create_page(MyPageClass)


        Instantiating a Page from an Interface or base class::

            import pages.mysite.*  # Make sure you import classes first, or else PageFactory will not know about it.
            my_page_instance = PageFactory.create_page(MyPageInterfaceClass)


        Instantiating a Page from a list of classes.::

            my_page_instance = PageFactory.create_page([PossiblePage1, PossiblePage2])


        Note: It'll only be able to detect pages that are imported.  To it's best to 
        do an import of all pages implementing a base class or the interface inside the 
        __init__.py of the package directory.  

        """
        if not webdriver:
            webdriver = WTF_WEBDRIVER_MANAGER.get_driver()

        # will be used later when tracking best matched page.
        current_matched_page = None

        # used to track if there is a valid page object within the set of PageObjects searched.
        was_validate_called = False

        # Walk through all classes if a list was passed.
        if type(page_object_class_or_interface) == list:
            subclasses = []
            for page_class in page_object_class_or_interface:
                # attempt to instantiate class.
                page = PageFactory.__instantiate_page_object(page_class,
                                                             webdriver,
                                                             **kwargs)

                if isinstance(page, PageObject):
                    was_validate_called = True
                    if (current_matched_page == None or page > current_matched_page):
                        current_matched_page = page

                elif page is True:
                    was_validate_called = True

                # check for subclasses
                subclasses += PageFactory.__itersubclasses(page_class)
        else:
            # A single class was passed in, try to instantiate the class.
            page_class = page_object_class_or_interface
            page = PageFactory.__instantiate_page_object(page_class,
                                                         webdriver,
                                                         **kwargs)
            # Check if we got a valid PageObject back.
            if isinstance(page, PageObject):
                was_validate_called = True
                current_matched_page = page
            elif page is True:
                was_validate_called = True

            # check for subclasses
            subclasses = PageFactory.__itersubclasses(
                page_object_class_or_interface)

        # Iterate over subclasses of the passed in classes to see if we have a
        # better match.
        for pageClass in subclasses:
            try:
                page = PageFactory.__instantiate_page_object(pageClass,
                                                      webdriver,
                                                      **kwargs)
                # If we get a valid PageObject match, check to see if the ranking is higher
                # than our current PageObject.
                if isinstance(page, PageObject):
                    was_validate_called = True
                    if current_matched_page == None or page > current_matched_page:
                        current_matched_page = page
                elif page is True:
                    was_validate_called = True

            except InvalidPageError as e:
                _wtflog.debug("InvalidPageError: %s", e)
                pass  # This happens when the page fails check.
            except TypeError as e:
                _wtflog.debug("TypeError: %s", e)
                # this happens when it tries to instantiate the original
                # abstract class.
                pass
            except Exception as e:
                _wtflog.debug("Exception during page instantiation: %s", e)
                # Unexpected exception.
                raise e

        # If no matching classes.
        if not isinstance(current_matched_page, PageObject):
            # Check that there is at least 1 valid page object that was passed in.
            if was_validate_called is False:
                raise TypeError("Neither the PageObjects nor it's subclasses have implemented " + 
                                "'PageObject._validate(self, webdriver)'.")

            try:
                current_url = webdriver.current_url
                raise NoMatchingPageError(u("There's, no matching classes to this page. URL:{0}")
                                          .format(current_url))
            except:
                raise NoMatchingPageError(u("There's, no matching classes to this page. "))
        else:
            return current_matched_page
Пример #11
0
    def wait_until_page_loaded(page_obj_class,
                               webdriver=None,
                               timeout=WTF_TIMEOUT_MANAGER.NORMAL,
                               sleep=0.5,
                               bad_page_classes=[],
                               message=None,
                               **kwargs):
        """
        Waits until the page is loaded.

        Args:
            page_obj_class (Class) : PageObject class

        Kwargs:
            webdriver (Webdriver) : Selenium Webdriver.  Default uses WTF_WEBDRIVER_MANAGER's instance.
            timeout (number) : Number of seconds to wait to allow the page to load.
            sleep (number) : Number of seconds to wait between polling.
            bad_page_classes (list) : List of PageObject classes to fail if matched.  For example, ServerError page.
            message (string) : Use your own message with PageLoadTimeoutError raised.

        Returns:
            PageObject

        Raises:
            PageUtilOperationTimeoutError : Timeout occurred before the desired PageObject was matched.
            BadPageEncounteredError : One or more of the PageObject in the specified 'bad_page_classes' list 
            was matched.


        Usage Example:: 
            webdriver.get("http://www.mysite.com/login")
            # Wait up to 60 seconds for the page to load.
            login_page = wait_until_page_loaded(LoginPage, timeout=60, [ServerErrorPage])

        This will wait for the login_page to load, then return a LoginPage() PageObject.

        """
        if not webdriver:
            webdriver = WTF_WEBDRIVER_MANAGER.get_driver()

        # convert this param to list if not already.
        if type(bad_page_classes) != list:
            bad_page_classes = [bad_page_classes]

        end_time = datetime.now() + timedelta(seconds=timeout)
        last_exception = None
        while datetime.now() < end_time:
            # Check to see if we're at our target page.
            try:
                page = PageFactory.create_page(page_obj_class,
                                               webdriver=webdriver,
                                               **kwargs)
                return page
            except Exception as e:
                _wtflog.debug("Encountered exception: %s ", e)
                last_exception = e

            # Check to see if we're at one of those labled 'Bad' pages.
            for bad_page_class in bad_page_classes:
                try:
                    PageFactory.create_page(bad_page_class,
                                            webdriver=webdriver,
                                            **kwargs)
                    # if the if/else statement succeeds, than we have an error.
                    raise BadPageEncounteredError(
                        u("Encountered a bad page. ") +
                        bad_page_class.__name__)
                except BadPageEncounteredError as e:
                    raise e
                except:
                    pass  # We didn't hit a bad page class yet.
            # sleep till the next iteration.
            time.sleep(sleep)

        print "Unable to construct page, last exception", last_exception

        # Attempt to get current URL to assist in debugging
        try:
            current_url = webdriver.current_url
        except:
            # unable to get current URL, could be a webdriver for a non-webpage like mobile app.
            current_url = None

        if message:
            err_msg = u(message) + u("{page}:{url}")\
                .format(page=PageUtils.__get_name_for_class__(page_obj_class),
                        url=current_url)
        else:
            err_msg = u("Timed out while waiting for {page} to load. Url:{url}")\
                .format(page=PageUtils.__get_name_for_class__(page_obj_class),
                        url=current_url)
        raise PageLoadTimeoutError(err_msg)
	def test_preview_vimeo_video_before_posting(self):
		webdriver = WTF_WEBDRIVER_MANAGER.get_driver()
		webdriver.get(self.emshare_url)
		emshare_page = PageFactory.create_page(EmSharePage)
		self.assertTrue(emshare_page.preview_vimeo_video_before_posting())
	def test_delete_tryon_item_from_current(self):
		webdriver = WTF_WEBDRIVER_MANAGER.get_driver()
		webdriver.get(self.tryon_url)
		tryon_page = PageFactory.create_page(TryonPage)
		self.assertTrue(tryon_page.delete_tryon_item_from_current())
	def test_switch_back_to_face_from_hand(self):
		webdriver = WTF_WEBDRIVER_MANAGER.get_driver()
		webdriver.get(self.tryon_url)
		tryon_page = PageFactory.create_page(TryonPage)
		self.assertTrue(tryon_page.switch_back_to_face_from_hand())
	def test_move_item_to_bottom_from_dropdown(self):
		webdriver = WTF_WEBDRIVER_MANAGER.get_driver()
		webdriver.get(self.tryon_url)
		tryon_page = PageFactory.create_page(TryonPage)
		self.assertTrue(tryon_page.move_item_to_bottom_from_dropdown())		
	def test_save_shirt_positioning_and_ratio(self):
		webdriver = WTF_WEBDRIVER_MANAGER.get_driver()
		webdriver.get(self.tryon_url)
		tryon_page = PageFactory.create_page(TryonPage)
		self.assertTrue(tryon_page.save_shirt_positioning_and_ratio())		
	def test_save_shirt_ratio_with_positioning_of_other_dragged_item(self):
		webdriver = WTF_WEBDRIVER_MANAGER.get_driver()
		webdriver.get(self.tryon_url)
		tryon_page = PageFactory.create_page(TryonPage)
		self.assertTrue(tryon_page.save_shirt_ratio_with_positioning_of_other_dragged_item())	
	def test_show_category_necklace(self):
		webdriver = WTF_WEBDRIVER_MANAGER.get_driver()
		webdriver.get(self.tryon_url)
		tryon_page = PageFactory.create_page(TryonPage)
		self.assertTrue(tryon_page.show_category_necklace())
	def test_filter_brand_soho(self):
		webdriver = WTF_WEBDRIVER_MANAGER.get_driver()
		webdriver.get(self.tryon_url)
		tryon_page = PageFactory.create_page(TryonPage)
		self.assertTrue(tryon_page.filter_brand_soho())
	def test_comment(self):
		webdriver = WTF_WEBDRIVER_MANAGER.get_driver()
		webdriver.get(self.emshare_url)
		emshare_page = PageFactory.create_page(EmSharePage)
		self.assertTrue(emshare_page.comment())
	def test_goto_my_page_from_emshare(self):
		webdriver = WTF_WEBDRIVER_MANAGER.get_driver()
		webdriver.get(self.emshare_url)
		emshare_page = PageFactory.create_page(EmSharePage)
		self.assertTrue(emshare_page.goto_my_page_from_emshare())
	def test_save_settings_without_tryon_items(self):
		webdriver = WTF_WEBDRIVER_MANAGER.get_driver()
		webdriver.get(self.tryon_url)
		tryon_page = PageFactory.create_page(TryonPage)
		self.assertTrue(tryon_page.save_settings_without_tryon_items())
	def test_post_sharing_with_vimeo_url(self):
		webdriver = WTF_WEBDRIVER_MANAGER.get_driver()
		webdriver.get(self.emshare_url)
		emshare_page = PageFactory.create_page(EmSharePage)
		self.assertTrue(emshare_page.post_sharing_with_vimeo_url())
	def test_tutorial(self):
		webdriver = WTF_WEBDRIVER_MANAGER.get_driver()
		webdriver.get(self.tryon_url)
		tryon_page = PageFactory.create_page(TryonPage)
		self.assertTrue(tryon_page.tutorial())
Пример #25
0
    def create_page(page_object_class_or_interface, webdriver=None, **kwargs):
        """
        Instantiate a page object from a given Interface or Abstract class.

        Args:
            page_object_class_or_interface (Class): PageObject class, AbstractBaseClass, or 
            Interface to attempt to consturct.

        Kwargs:
            webdriver (WebDriver): Selenium Webdriver to use to instantiate the page. If none 
                                   is provided, then it was use the default from 
                                   WTF_WEBDRIVER_MANAGER

        Returns:
            PageObject

        Raises:
            NoMatchingPageError

        Instantiating a Page from PageObject from class usage::

            my_page_instance = PageFactory.create_page(MyPageClass)


        Instantiating a Page from an Interface or base class::

            import pages.mysite.*  # Make sure you import classes first, or else PageFactory will not know about it.
            my_page_instance = PageFactory.create_page(MyPageInterfaceClass)


        Instantiating a Page from a list of classes.::

            my_page_instance = PageFactory.create_page([PossiblePage1, PossiblePage2])


        Note: It'll only be able to detect pages that are imported.  To it's best to 
        do an import of all pages implementing a base class or the interface inside the 
        __init__.py of the package directory.  

        """
        if not webdriver:
            webdriver = WTF_WEBDRIVER_MANAGER.get_driver()

        # will be used later when tracking best matched page.
        current_matched_page = None

        # used to track if there is a valid page object within the set of PageObjects searched.
        was_validate_called = False

        # Walk through all classes if a list was passed.
        if type(page_object_class_or_interface) == list:
            subclasses = []
            for page_class in page_object_class_or_interface:
                # attempt to instantiate class.
                page = PageFactory.__instantiate_page_object(
                    page_class, webdriver, **kwargs)

                if isinstance(page, PageObject):
                    was_validate_called = True
                    if (current_matched_page == None
                            or page > current_matched_page):
                        current_matched_page = page

                elif page is True:
                    was_validate_called = True

                # check for subclasses
                subclasses += PageFactory.__itersubclasses(page_class)
        else:
            # A single class was passed in, try to instantiate the class.
            page_class = page_object_class_or_interface
            page = PageFactory.__instantiate_page_object(
                page_class, webdriver, **kwargs)
            # Check if we got a valid PageObject back.
            if isinstance(page, PageObject):
                was_validate_called = True
                current_matched_page = page
            elif page is True:
                was_validate_called = True

            # check for subclasses
            subclasses = PageFactory.__itersubclasses(
                page_object_class_or_interface)

        # Iterate over subclasses of the passed in classes to see if we have a
        # better match.
        for pageClass in subclasses:
            try:
                page = PageFactory.__instantiate_page_object(
                    pageClass, webdriver, **kwargs)
                # If we get a valid PageObject match, check to see if the ranking is higher
                # than our current PageObject.
                if isinstance(page, PageObject):
                    was_validate_called = True
                    if current_matched_page == None or page > current_matched_page:
                        current_matched_page = page
                elif page is True:
                    was_validate_called = True

            except InvalidPageError as e:
                _wtflog.debug("InvalidPageError: %s", e)
                pass  # This happens when the page fails check.
            except TypeError as e:
                _wtflog.debug("TypeError: %s", e)
                # this happens when it tries to instantiate the original
                # abstract class.
                pass
            except Exception as e:
                _wtflog.debug("Exception during page instantiation: %s", e)
                # Unexpected exception.
                raise e

        # If no matching classes.
        if not isinstance(current_matched_page, PageObject):
            # Check that there is at least 1 valid page object that was passed in.
            if was_validate_called is False:
                raise TypeError(
                    "Neither the PageObjects nor it's subclasses have implemented "
                    + "'PageObject._validate(self, webdriver)'.")

            try:
                current_url = webdriver.current_url
                raise NoMatchingPageError(
                    u("There's, no matching classes to this page. URL:{0}").
                    format(current_url))
            except:
                raise NoMatchingPageError(
                    u("There's, no matching classes to this page. "))
        else:
            return current_matched_page
	def test_choose_tryon_items(self):
		webdriver = WTF_WEBDRIVER_MANAGER.get_driver()
		webdriver.get(self.tryon_url)
		tryon_page = PageFactory.create_page(TryonPage)
		self.assertTrue(tryon_page.choose_tryon_items())
	def test_use_grow_icon(self):
		webdriver = WTF_WEBDRIVER_MANAGER.get_driver()
		webdriver.get(self.tryon_url)
		tryon_page = PageFactory.create_page(TryonPage)
		self.assertTrue(tryon_page.use_grow_icon())
	def test_no_signin_link_after_signin(self):
		webdriver = WTF_WEBDRIVER_MANAGER.get_driver()
		webdriver.get(self.index_url)
		index_page = PageFactory.create_page(IndexPage)
		self.assertTrue(index_page.no_signin_link_after_signin())
Пример #29
0
    def wait_until_page_loaded(page_obj_class,
                               webdriver=None,
                               timeout=WTF_TIMEOUT_MANAGER.NORMAL,
                               sleep=0.5,
                               bad_page_classes=[],
                               message=None,
                               **kwargs):
        """
        Waits until the page is loaded.

        Args:
            page_obj_class (Class) : PageObject class

        Kwargs:
            webdriver (Webdriver) : Selenium Webdriver.  Default uses WTF_WEBDRIVER_MANAGER's instance.
            timeout (number) : Number of seconds to wait to allow the page to load.
            sleep (number) : Number of seconds to wait between polling.
            bad_page_classes (list) : List of PageObject classes to fail if matched.  For example, ServerError page.
            message (string) : Use your own message with PageLoadTimeoutError raised.

        Returns:
            PageObject

        Raises:
            PageUtilOperationTimeoutError : Timeout occurred before the desired PageObject was matched.
            BadPageEncounteredError : One or more of the PageObject in the specified 'bad_page_classes' list 
            was matched.


        Usage Example:: 
            webdriver.get("http://www.mysite.com/login")
            # Wait up to 60 seconds for the page to load.
            login_page = wait_until_page_loaded(LoginPage, timeout=60, [ServerErrorPage])

        This will wait for the login_page to load, then return a LoginPage() PageObject.

        """
        if not webdriver:
            webdriver = WTF_WEBDRIVER_MANAGER.get_driver()

        # convert this param to list if not already.
        if type(bad_page_classes) != list:
            bad_page_classes = [bad_page_classes]

        end_time = datetime.now() + timedelta(seconds=timeout)
        last_exception = None
        while datetime.now() < end_time:
            # Check to see if we're at our target page.
            try:
                page = PageFactory.create_page(
                    page_obj_class, webdriver=webdriver, **kwargs)
                return page
            except Exception as e:
                _wtflog.debug("Encountered exception: %s ", e)
                last_exception = e

            # Check to see if we're at one of those labled 'Bad' pages.
            for bad_page_class in bad_page_classes:
                try:
                    PageFactory.create_page(
                        bad_page_class, webdriver=webdriver, **kwargs)
                    # if the if/else statement succeeds, than we have an error.
                    raise BadPageEncounteredError(
                        u("Encountered a bad page. ") + bad_page_class.__name__)
                except BadPageEncounteredError as e:
                    raise e
                except:
                    pass  # We didn't hit a bad page class yet.
            # sleep till the next iteration.
            time.sleep(sleep)

        print "Unable to construct page, last exception", last_exception

        # Attempt to get current URL to assist in debugging
        try:
            current_url = webdriver.current_url
        except:
            # unable to get current URL, could be a webdriver for a non-webpage like mobile app.
            current_url = None

        if message:
            err_msg = u(message) + u("{page}:{url}")\
                .format(page=PageUtils.__get_name_for_class__(page_obj_class),
                        url=current_url)
        else:
            err_msg = u("Timed out while waiting for {page} to load. Url:{url}")\
                .format(page=PageUtils.__get_name_for_class__(page_obj_class),
                        url=current_url)
        raise PageLoadTimeoutError(err_msg)
	def test_01_goto_signup_from_emshare_without_signin(self):
		webdriver = WTF_WEBDRIVER_MANAGER.get_driver()
		webdriver.get(self.emshare_url)
		emshare_page = PageFactory.create_page(EmSharePage)
		self.assertTrue(emshare_page.goto_signup_from_emshare_without_signin())		
Пример #31
0
 def get_element_xpath(element, webdriver=None):
     if not webdriver:
         webdriver = WTF_WEBDRIVER_MANAGER.get_driver()
     element_xpath = webdriver.execute_script("gPt=function(c){if(c.id!==''){return'id(\"'+c.id+'\")'}if(c===document.body){return c.tagName}var a=0;var e=c.parentNode.childNodes;for(var b=0;b<e.length;b++){var d=e[b];if(d===c){return gPt(c.parentNode)+'/'+c.tagName+'['+(a+1)+']'}if(d.nodeType===1&&d.tagName===c.tagName){a++}}};return gPt(arguments[0]).toLowerCase();", element)
     return element_xpath
	def test_04_signin(self):
		webdriver = WTF_WEBDRIVER_MANAGER.get_driver()
		webdriver.get(self.base_url+'modules/index.php?pkg=account&contr=account')
		signin_page = PageFactory.create_page(SignInPage)
		self.assertTrue(signin_page.signin())
Пример #33
0
    def create_page(page_object_class_or_interface, \
                    webdriver=None, **kwargs):
        """
        Instantiate a page object from a given Interface or Abstract class.

        Args:
            page_object_class_or_interface (Class): PageObject class, AbstractBaseClass, or 
            Interface to attempt to consturct.
        
        Kwargs:
            webdriver (WebDriver): Selenium Webdriver to use to instantiate the page.
        
        Returns:
            PageObject
        
        Raises:
            NoMatchingPageError
        
        Instantiating a Page from PageObject from class usage::
        
            my_page_instance = PageFactory.create_page(MyPageClass)
            
        
        Instantiating a Page from an Interface or base class::
        
            import pages.mysite.*  # Make sure you import classes first, or else PageFactory will not know about it.
            my_page_instance = PageFactory.create_page(MyPageInterfaceClass)
            
        
        Instantiating a Page from a list of classes.::
        
            my_page_instance = PageFactory.create_page([PossiblePage1, PossiblePage2])
            
        
        Note: It'll only be able to detect pages that are imported.  To it's best to 
        do an import of all pages implementing a base class or the interface inside the 
        __init__.py of the package directory.  
        
        """

        if not webdriver:
            webdriver = WTF_WEBDRIVER_MANAGER.get_driver()

        # will be used later when tracking best matched page.
        current_matched_page = None

        # Walk through all classes of this sub class
        if type(page_object_class_or_interface) == list:
            subclasses = []
            for page_class in page_object_class_or_interface:
                #attempt to instantiate class.
                page = PageFactory.__instantiate_page_object(page_class, \
                                                             webdriver, \
                                                             **kwargs)
                if isinstance(page,
                              PageObject) and (current_matched_page == None
                                               or page > current_matched_page):
                    current_matched_page = page

                #check for subclasses
                subclasses += PageFactory.__itersubclasses(page_class)
        else:
            # Try the original class
            page_class = page_object_class_or_interface
            page = PageFactory.__instantiate_page_object(page_class, \
                                                         webdriver, \
                                                         **kwargs)
            if isinstance(page, PageObject):
                current_matched_page = page

            #check for subclasses
            subclasses = PageFactory.__itersubclasses(
                page_object_class_or_interface)

        # Iterate over subclasses of the passed in classes to see if we have a better match.
        for pageClass in subclasses:
            try:
                page = pageClass(webdriver, **kwargs)
                if current_matched_page == None or page > current_matched_page:
                    current_matched_page = page
            except InvalidPageError as e:
                print_debug("InvalidPageError", e)
                pass  #This happens when the page fails check.
            except TypeError as e:
                print_debug("TypeError", e)
                pass  #this happens when it tries to instantiate the original abstract class.
            except Exception as e:
                print_debug("Exception", e)
                #Unexpected exception.
                raise e

        # If no matching classes.
        if not isinstance(current_matched_page, PageObject):
            raise NoMatchingPageError("There's, no matching classes to this page. URL:%s" \
                                      % webdriver.current_url)
        else:
            return current_matched_page
	def test_goto_hand_tryon(self):
		webdriver = WTF_WEBDRIVER_MANAGER.get_driver()
		webdriver.get(self.index_url)
		index_page = PageFactory.create_page(IndexPage)
		self.assertTrue(index_page.goto_hand_tryon())