Selenium Python: невозможно найти элемент h2, используя xpath или css (с текстом и без) - PullRequest
0 голосов
/ 11 февраля 2019

Я пытаюсь найти кликабельный (я думаю - см. Код ниже) элемент h2.

Вот фрагмент HTML:

<div class="center-block flex-y v-center h-fill">
    <div class="flex-y v-center h-start">
        <h2 class="section-name ng-binding" ng-attr-tabindex="{{ appbar.service.disableProductSectionClick ? -1 : 0 }}" ng-click="appbar.clickProductSection()" ng-keydown="appbar.clickProductSection($event)" ng-class="{ 'inactive': appbar.service.disableProductSectionClick || !appbar.homeState }" tabindex="0">Password Safe</h2>
        <app-bar-breadcrumbs class="ng-isolate-scope">
            <ul class="flex-x h-start v-center">
                <!-- ngRepeat: link in crumbs.service.list track by $index -->.
                <li ng-repeat="link in crumbs.service.list track by $index" ng-click="crumbs.navTo($index)" ng-keydown="crumbs.navTo($index, $event)" data-name="Requests" data-collapse="false" ng-attr-tabindex="{{ (crumbs.service.list.length === $index + 1 || link.method == 'stateless') ? '-1' : '0' }}" ng-hide="crumbs.service.hidden.indexOf($index) > -1" ng-class="{ 'stateless': link.method == 'stateless' }" class="flex-x static h-start v-center ng-binding ng-scope" tabindex="-1">
                </li>
                <!-- end ngRepeat: link in crumbs.service.list track by $index -->
            </ul>
        </app-bar-breadcrumbs>
    </div>
</div>

Я пытался найти элемент h2, используя xpath, иногда с текстом.Код всегда возвращает TimeOutException.Элемент не находится внутри фрейма, но находится внутри bt-app-bar.

  1. Полный xpath
homepage_link = wait.until(EC.element_to_be_clickable((By.XPATH, '/html/body/bt-app-chrome/bt-app-bar/div[2]/div[3]/div/h2')))
xpath с хвостом и содержит
homepage_link = wait.until(EC.element_to_be_clickable((By.XPATH, '//h2[contains(., "Password Safe")]')))
xpath с текстом
homepage_link = wait.until(EC.element_to_be_clickable((By.XPATH, '//*[text()="Password Safe"')))
еще один xpath с текстом
homepage_link = wait.until(EC.element_to_be_clickable((By.XPATH,
'/div/h2[contains(text(),"Password Safe")]')))
full css - немного многословно, чтобы воспроизвести здесь

Я также посмотрел сообщения здесь: Найдите элемент в селене, используя текст внутри тега h2 , и ничего там не работаетдля меня.Мне просто нужно найти его и щелкнуть по нему.

Вот что-то более простое, что может быть легче диагностировать.screenshot Я нажимаю на страницу, к которой я прикрепил скриншот выше.Как вы можете видеть, в верхней части окна находится панель приложения.Вверху справа находится меню с текстом «Запросы» на элементе, активируемом щелчком мыши.Когда мое приложение щелкает по нему, панель приложения теперь показывает «Учетные записи», где раньше отображались «Запросы».Я не могу обнаружить другие изменения в панели приложения.У меня есть time.sleep (5) и ожидание загрузки страницы после нажатия на «Запросы».Когда я наблюдаю за изменением исходного кода html с помощью этого клика, все, что, по-видимому, происходит (в контексте панели приложения), - это то, что текст «Запросы» теперь получает указание изменить «Учетные записи».См. HTML-код ниже.

Я могу найти элемент «Запросы», используя это:

requests_link = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, 'app-bar-quicklinks > ul > li:nth-child(1)')))

Когда панель приложения меняется на «Учетные записи», CSS для элемента кажется идентичнымЯ использую выше для «запросов».Тем не менее, это время вышло.Как получилось?

<app-bar-quicklinks class="ng-isolate-scope" style="opacity: 1;">
    <ul class="flex-x h-start v-center">
        <!-- ngRepeat: link in qlinks.service.list track by $index -->
        <li ng-repeat="link in qlinks.service.list track by $index" ng-click="qlinks.navTo($index)" ng-keydown="qlinks.navTo($index, $event)" tabindex="0" class="flex-x h-end v-center ng-binding ng-scope">Requests
        </li>
        <!-- end ngRepeat: link in qlinks.service.list track by $index --> .       
        <li ng-repeat="link in qlinks.service.list track by $index" ng-click="qlinks.navTo($index)" ng-keydown="qlinks.navTo($index, $event)" tabindex="-1" class="flex-x h-end v-center ng-binding ng-scope">Admin Sessions
        </li>
        <!-- end ngRepeat: link in qlinks.service.list track by $index -->
    </ul>
</app-bar-quicklinks>

1 Ответ

0 голосов
/ 18 февраля 2019

Я переключился на фрейм после нажатия «Запросы», и мне нужно было выйти из него, чтобы найти ссылку «Аккаунты».Решено сейчас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...