t.me/atinfo_chat Telegram группа по автоматизации тестирования

Есть angular приложение не могу понять почему не работает click на определенные элементы списка

Теги: #<Tag:0x00007f748a1b79d8> #<Tag:0x00007f748a1b7870> #<Tag:0x00007f748a1b7758> #<Tag:0x00007f748a1b75c8>

Не работает click не понимаю почему…
html:

<treecontrol class="tree-classic ng-isolate-scope" expanded-nodes="expandedNodes" on-node-toggle="showToggle(node, expanded, $parentNode)" options="opts" on-selection="showSelected(node,selected)" tree-model="treeData">
<ul class="ng-scope">
<!-- ngRepeat: node in node.children | filter:filterExpression:filterComparator -->
<li class="ng-scope tree-collapsed" set-node-to-data="" ng-class="headClass(node)" ng-repeat="node in node.children | filter:filterExpression:filterComparator ">
<i class="tree-branch-head" ng-click="selectNodeHead(node)" ng-class="iBranchClass()"/>
<i class="tree-leaf-head "/>
<div class="tree-label " tree-transclude="" ng-click="selectNodeLabel(node)" ng-class="[selectedClass(), unselectableClass()]">
<span class="ng-binding ng-scope">Тестовый 1</span>
</div>
<!-- ngIf: nodeExpanded() -->
</li>
<!-- end ngRepeat: node in node.children | filter:filterExpression:filterComparator -->
<li class="ng-scope tree-collapsed" set-node-to-data="" ng-class="headClass(node)" ng-repeat="node in node.children | filter:filterExpression:filterComparator ">
<!-- end ngRepeat: node in node.children | filter:filterExpression:filterComparator -->
<li class="ng-scope tree-collapsed" set-node-to-data="" ng-class="headClass(node)" ng-repeat="node in node.children | filter:filterExpression:filterComparator ">
<!-- end ngRepeat: node in node.children | filter:filterExpression:filterComparator -->
<li class="ng-scope tree-collapsed" set-node-to-data="" ng-class="headClass(node)" ng-repeat="node in node.children | filter:filterExpression:filterComparator ">
<!-- end ngRepeat: node in node.children | filter:filterExpression:filterComparator -->
<li class="ng-scope tree-collapsed" set-node-to-data="" ng-class="headClass(node)" ng-repeat="node in node.children | filter:filterExpression:filterComparator ">
<!-- end ngRepeat: node in node.children | filter:filterExpression:filterComparator -->
<li class="ng-scope tree-collapsed" set-node-to-data="" ng-class="headClass(node)" ng-repeat="node in node.children | filter:filterExpression:filterComparator ">
<!-- end ngRepeat: node in node.children | filter:filterExpression:filterComparator -->

Мой метод такой на python:

    def select_section_from_plan(self, locator, section):
        try:
            angular_not_active()(self.driver)
            element = WebDriverWait(self.driver, 10).until(
                EC.presence_of_element_located(locator)
            )
            list_of_elements = element.find_elements_by_tag_name("li")
            list_of_elements[section].click()
        except TimeoutException:
            pass

сам тест такой:

def test_check_auto_fill_event_type_russia(fill_all_service_part):
    with pytest.allure.step("Проверка выбора из списка"):
        main_mmd_page.select_section_from_plan(TablePartLocators_19_10.plan_locator, 2)

Почему то не нажимает если указать в тесте например 0 или 2, но работает когда передаю в параметр 1,3.

Как я понимаю он нажимает , потому что ошибок никаких не выдается элементы все найдены

Такое впечатление, что элементы есть сам клик выполняется, но на экране открывается именно если передаю параметр 1,3,4,5,6(В браузере открывается пункт на который надо нажать)

Я правильно понимаю, что там, где <li> одной строкой, контент просто удален, а на самом деле внутри тоже куча тэгов, как у первого элемента?

Тогда, может быть, клик воспринимает не сам li, а какой-то элемент внутри него, <div>, например. А клик где-то отрабатывает, но это случайность.

У вас событие click на элементах <i class=“tree-branch-head” ng-click=“selectNodeHead(node)”

<div class="tree-label " tree-transclude="" ng-click="selectNodeLabel(node)" попробуйте кликать на них а не на li

Да все 6 тегов одинаковые.Я просто открыл один из li, а так там 6 совершенно одинаковых ли только с разными span.
Я не понимаю почему на некоторые кликает на некоторые нет они же одинаковые

Почему событие на тегах внутри!?? Я же получаю список element.find_elements_by_tag_name(“li”) грубо говоря разделов списка и кликаю потом на него по номеру??

Ну вы же когда кликаете на Body У вас же не кликаются все элементы на страницы, хотя все внутри тега body. Вообще зависит от реализации что там внутри selectNodeHead(node). Я просто предположил…

Возможно есть еще элементы li на странице и он кликает по ним, а не по тем которые вы предполагаете. И порядок в массиве может не соответсвовать желаемому. Посмотрите чему равен length ваших find_elements_by_tag_name(“li”) и покажите ваш локатор TablePartLocators_19_10.plan_locator, я в таких случаях использовал на JS

element.all(by.repeater('node in node.children')).get(index).click()

6 выдает length как и должно быть… А это на чем был код который с ngreapeter?? И куда его пихать?? Это джаваскрипт? Про js начал только читать… Пока окошки вывожу alert -том))) а тут еще надо понимать в самом фреймворке angularjs это мой следующий этап наверное)))

А как мне вместе скомпоновать js и python?? в python пока не силен особо… А тут js еще… Я могу это впихнуть в execute_javascript как -то так есть метод и туда параметром ваш скрипт ну или любой другой…??

Я пока далек от того что такое ng-reapeter и как еще по нему искать))))

Ну это я как пример показал, такое только в protractore можно делать, в питон никак не засунешь его.

6 выдает length как и должно быть

Тогда старнно, возможно стоит попробывать добавить ожидание перед кликом пока элемент станет Clickable.

и покажите ваш локатор TablePartLocators_19_10.plan_locator

так и не увидел

Завтра… Ушел уже с работы))

Да и попробуй сначала покликать, как подсказывали, не по самому элементу li, а по его div, span или
i. В ангуляре в репитерах часто такое, что нужно по определенному элементу клацнуть, именно тому на который клик повешен.

Я еще нашел какой то pytractor расширение для selenium +python. Завтра буду пробовать