def find_elements(self, by, value, view_cls=None):
        # type: (By, Any, Value) -> List[View]
        """
        Find one or more elements matching condition
        :param by: Type of condition
        :param value: Condition value
        :param view_cls: Optional custom class to wrap returned elements
        :return: List of matching web elements wrapped in a view
        """
        if view_cls is None:
            view_cls = View

        def get_elements():
            results = []

            try:
                results = self.root.find_elements(by, value)
            except NoSuchElementException:
                pass
            finally:
                return results

        def get_element_at_index(i):
            return lambda: get_elements()[i]

        return [view_cls(get_element_at_index(i)) for i, element in enumerate(get_elements())]
Find one or more elements matching condition
        :param by: Type of condition
        :param value: Condition value
        :param view_cls: Optional custom class to wrap returned elements
        :return: List of matching web elements wrapped in a view