Как идентифицировать элемент по тексту?

Я пытаюсь сделать некоторые базовые вещи с Selenium, и я пытаюсь найти элемент по «тексту», поскольку все мои элементы либо генерируются динамически, либо имеют общее имя и значение атрибута.

я хотел бы добраться до «SelTest» в следующем div, вот один блок:

 <div ng-mouseenter = "hover=true" ng-mouseleave = "hover=false" class = "object workspace" ng-repeat = "workspace in workspaces | filter:{'workspace_title':workspaceFilter, 'is_archived':false} | orderBy: 'workspace_title'" ui-sref = "main.workspace({workspaceId: workspace.id})" href = "#!/workspace/a43d95fa24acbfc4757ba86a4d8dec22">
            <i class = "mdi mdi-folder"></i>
            <div class = "title">SelTest</div>
            <div class = "desc"></div>
            <div class = "tools ng-hide" ng-show = "hover" style = "">
                <button type = "button" ng-click = "workspace.toggleArchive();$event.stopPropagation();" class = "btn btn-default btn-xs">
                    <span>Archive</span>
                </button>
            </div>
        </div>

в то время как остальная часть кода имеет такое же точное имя и значение атрибута.

а вот и большая картина:

Как идентифицировать элемент по тексту?

Есть ли способ добраться до Селтест?

Вы пытаетесь извлечь текст Сеттест или пытаетесь идентифицировать элемент с текстом как Сеттест?

undetected Selenium 16.04.2019 13:10

вы не можете получить элемент, используя content = driver.find_element_by_class_name('SetTest');

VSB 16.04.2019 13:13

@DebanjanB, я пытаюсь получить элемент с текстом как SetTest

Ali 16.04.2019 13:23

@VSB, нет, потому что .find_element_by_class_name не является приемлемым аргументом

Ali 16.04.2019 13:25

@Ali Нет элемента с текстом как Сеттест, но есть один элемент с текстом как Селтест. Я обновил ваш вопрос соответственно. Не стесняйтесь отменить редактирование, если оно неверно.

undetected Selenium 16.04.2019 13:25

@ChristopherMoore HTML сломался из-за плохого редактирования, я возвращаюсь назад.

undetected Selenium 16.04.2019 13:31
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
6
52
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Чтобы найти элемент с текстом как Селтест, вам нужно вызвать WebDriverWait для visibilityOfElementLocated(), и вы можете использовать любой из следующих Стратегии поиска:

  • cssSelector:

    WebElement ele = new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("div.object.workspace[ng-repeat^='workspace in workspaces'][href*='workspace'] div.title")));
    
  • xpath:

    WebElement ele = new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//div[@class='object workspace' and starts-with(@ng-repeat, 'workspace in workspaces')][contains(@href, 'workspace')]//div[@class='title' and text()='SelTest']")));
    

Я понятия не имел об ExpectedConditions, которые великолепны, и о том, что xpath ХОТЯ! большое спасибо. ваш ответ заставил меня понять, что мне нужно снова просмотреть свои коды. Спасибо

Ali 16.04.2019 13:29

Другие вопросы по теме