Поиск элемента с несколькими значениями в атрибуте

Привет.
Если атрибут содержит более одного значения:

<div class="row-type ng-star-inserted">

То как можно найти его selenium’ом? Как должен выглядеть xpath селектор?

для поиска по всему содержимому класса
//*[@class='row-type ng-star-inserted']

или для частичного
//*[contains(@class, 'ng-star-inserted')]

  1. Так не подойдёт. потому что ng-star-inserted может не быть при следующем запуске (т.е. будет просто class=“row-type”
  2. Так не подойдёт, потому что могут быть элементы со значением например “ng-star-inserted-content” и они будут найдены вместо нужного

Можно добавить исключения
//*[contains(@class, ‘ng-star-inserted’) and not(contains(@class, ‘content’))]

Вариант)
А попроще никак нельзя? Неужели в Selenium’е нет встроенных средств для работы с этим?
Это же попадается повсеместно

Проще можно только если кооперироваться с разработчиками или иметь доступ с исходному коду и проставить самому @id элементам.

:frowning:

Может быть,
Также можешь выбрать атрибуты class у найденных селениумом элементов при помощи селектора выше, и получить нужный элемент средствами своего языка программирования, например, значение класса разбить на лист по пробелам, а потом выбрать тот элемент, лист которого содержит нужный класс
Сомневаюсь что это проще), но это буде средствами селениума

div.row-type.ng-star-inserted

В этом случае нужно привязыватся к чему то другому

Но если очень хочется -

div.row-type.ng-star-inserted,div.row-type

Найди элемент див с классами row-type и ng-star-inserted или элемент div с классом row-type

Это где задаётся в таком виде?

это css selector обычный - https://www.w3schools.com/cssref/css_selectors.asp

Для этого лучше использовать не xpath, а css селектор. Примерно так:

$(".row-type.ng-star-inserted").shouldHave (text("траляля"));

Добрый день, попробуйте так

//div[contains(@class,'row-type') and contains(@class,'ng-star-inserted')]

С таким селектором мы получим ложноположительное срабатывание в случае вроде такого

<div class="selected-row-type ng-star-inserted">

Не проблема)))

//div[contains(@class,'row-type') and contains(@class,'ng-star-inserted') and not(contains(@class,'selected')] 

Ну так можно до бесконечности писать not в селекторе, вместо простого и понятного
div.row-type.ng-star-inserted