コード例 #1
0
ファイル: selector_builder.py プロジェクト: harsh183/nerodia
    def _normalize_selector(self):
        if len(self.wd_locators) > 1:
            raise LocatorException('Can not locate element with {}'.format(
                self.wd_locators))

        if self._merge_scope:
            self.selector['scope'] = self.query_scope.selector_builder.built

        if 'class' in self.selector or 'class_name' in self.selector:
            classes = [self.selector.get('class')]
            classes.extend([self.selector.pop('class_name', None)])
            classes = list(_ for _ in ClassHelpers._flatten(classes)
                           if _ is not None)

            for class_name in classes:
                if isinstance(
                        class_name,
                        tuple(STRING_TYPES)) and ' ' in class_name.strip():
                    self._deprecate_class_list(class_name)

            self.selector['class'] = classes

        if self.selector.get(
                'adjacent') == 'ancestor' and 'text' in self.selector:
            raise LocatorException(
                'Can not find parent element with text locator')

        for key in self.selector.copy():
            self._check_type(key, self.selector.get(key))
            how, what = self._normalize_locator(key,
                                                self.selector.pop(key, None))
            self.selector[how] = what
コード例 #2
0
ファイル: locator.py プロジェクト: orlandocsosa/nerodia
    def locate_all(self, built):
        self.built = copy(built)
        self.driver_scope = self._locator_scope.wd
        self.filter = 'all'
        if 'index' in self.built:
            raise ValueError("can't locate all elements by 'index'")

        return list(ClassHelpers._flatten(self._matching_elements))
コード例 #3
0
ファイル: matcher.py プロジェクト: orlandocsosa/nerodia
 def check_match(how, expected):
     if how == 'tag_name':
         return self._validate_tag(element, expected)
     elif how in ['class', 'class_name']:
         value = self._fetch_value(element, how)
         return all(any(self._matches_values(class_value, match) for class_value
                        in value.split()) for match in ClassHelpers._flatten([expected]))
     else:
         return self._matches_values(self._fetch_value(element, how), expected)
コード例 #4
0
ファイル: selector_builder.py プロジェクト: harsh183/nerodia
    def _attribute_string(self):
        attributes = []
        for key in self.selector.copy():
            attribute = self._process_attribute(key, self.selector.pop(key))
            if attribute is not None:
                attributes.append(attribute)
        attributes = list(ClassHelpers._flatten(attributes))

        return '[{}]'.format(
            ' and '.join(attributes)) if len(attributes) > 0 else ''
コード例 #5
0
ファイル: locator.py プロジェクト: orlandocsosa/nerodia
    def _matching_elements(self):
        if len(self.built) == 1 and self.filter == 'first':
            return self._locate_element(
                *list(ClassHelpers._flatten(self.built.items())))

        retries = 0
        while retries <= 2:
            try:
                locator = list(ClassHelpers._flatten(self._wd_locator.items()))
                elements = self._locate_elements(*locator)

                return self.element_matcher.match(elements, self._match_values,
                                                  self.filter)
            except StaleElementReferenceException:
                retries += 1
                sleep(0.5)
                pass

        target = 'element collection' if self.filter == 'all' else 'element'
        raise LocatorException('Unable to locate {} from {} due to changing '
                               'page'.format(target, self.selector))
コード例 #6
0
ファイル: selector_builder.py プロジェクト: harsh183/nerodia
    def _class_string(self):
        from nerodia.locators.class_helpers import ClassHelpers
        class_name = self.selector.pop('class', None)
        if class_name is None:
            return ''

        self.built['class'] = []

        predicates = []
        for value in ClassHelpers._flatten([class_name]):
            pred = self._process_attribute('class', value)
            if pred is not None:
                predicates.append(pred)

        if len(self.built['class']) == 0:
            self.built.pop('class')

        if len(predicates) > 0:
            return '[{}]'.format(' and '.join(predicates))
        else:
            return ''
コード例 #7
0
    def _class_string(self):
        from nerodia.locators.class_helpers import ClassHelpers
        class_name = self.selector.pop('class', None)
        if class_name is None:
            return ''

        if isinstance(class_name, str) and ' ' in class_name.strip():
            self._deprecate_class_list(class_name)

        self.requires_matches['class'] = []

        predicates = []
        for value in ClassHelpers._flatten([class_name]):
            pred = self._process_attribute('class', value)
            if pred is not None:
                predicates.append(pred)

        if len(self.requires_matches['class']) == 0:
            self.requires_matches.pop('class')

        if len(predicates) > 0:
            return '[{}]'.format(' and '.join(predicates))
        else:
            return ''
コード例 #8
0
ファイル: selector_builder.py プロジェクト: harsh183/nerodia
 def _check_type(self, how, what):
     if how in ['class', 'class_name']:
         for c in list(ClassHelpers._flatten([what])):
             self._raise_unless(c, self.VALID_WHATS[how])
     else:
         self._raise_unless(what, self.VALID_WHATS[how])