Найти элемент по классу с пробелами не работает

1

Я пытаюсь найти следующий WebElement по имени класса:

<div class="aui-column-content aui-column-content-last lfr-asset-column-content lfr-asset-column-actions-content">

И поскольку у него есть пробел, я попытался использовать как css, так и xpath, чтобы найти его так...

WebElement folderActions = driver.findElement(By.xpath("//div[@class='aui-column-content aui-column-content-last lfr-asset-column-content lfr-asset-column-actions-content ']"));


WebElement folderActions = driver.findElement(By.cssSelector("div[class='aui-column-content aui-column-content-last lfr-asset-column-content lfr-asset-column-actions-content ']"));

Но оба решения возвращают исключение NoSuchElementException. Любые предложения относительно того, что я делаю неправильно?

Изменить: Вот несколько смежных html...

<div id="aui_3_2_0_11858" class="portlet-body">
    <div class="top-links-container">
    <div id="aui_3_2_0_11857" class="aui-layout ">
        <div id="aui_3_2_0_11856" class="aui-layout-content ">
            <div class="taglib-header ">
                <span class="header-back-to">
                <h1 class="header-title">
            </div>
            <div class="aui-column aui-w75 lfr-asset-column lfr-asset-column-details aui-column-first ">
                <div class="aui-column-content aui-column-content-first lfr-asset-column-content lfr-asset-column-details-content ">
            </div>
        <div id="aui_3_2_0_11855" class="aui-column aui-w25 lfr-asset-column lfr-asset-column-actions aui-column-last">
            <div class="aui-column-content aui-column-content-last lfr-asset-column-content lfr-asset-column-actions-content">
        </div>
    </div>
</div>
  • 5
    это указывает на несколько классов, а не одно имя класса с пробелами.
Теги:
xpath
selenium
selenium-webdriver

3 ответа

3
Лучший ответ

Попробуйте использовать функцию contains() с помощью xpath. И, как сказал @Shoham A, он выглядит как несколько классов. Предоставьте больше html чтобы мы могли помочь вам написать более совершенный селектор.

//div[contains(@class,'aui-column-content aui-column-content-last lfr-asset-column-content lfr-asset-column-actions-content')]

И используйте явное ожидание, чтобы убедиться, что элемент присутствует, прежде чем начать использовать это.

By byXpath = By.xpath("//div[contains(@class,'aui-column-content aui-column-content-last lfr-asset-column-content lfr-asset-column-actions-content')]");
WebElement myDynamicElement = (new WebDriverWait(driver, 10))
  .until(ExpectedConditions.presenceOfElementLocated(byXpath ));

Изменить //div[contains(@class,'aui-column-content-last')] должно быть достаточно для поиска целевого div. По крайней мере, для html предоставленного OP.

ПРИМЕЧАНИЕ. Думая о том, что aui-column-content-last уникален на странице

  • 0
    Никакой сигары. Мы уверены, что этот «содержащий» метод объясняет проблему с несколькими классами, с которой я столкнулся здесь? Я выложу больше смежных HTML.
  • 0
    @ user2150250 contains() работает довольно хорошо. Но имя класса довольно длинное. Что может быть не очень хорошая идея для использования в любом случае. Больше html поможет
Показать ещё 5 комментариев
1

Выражение Xpath в вашем вопросе будет работать, если в конце не было символа пробела:

//div[@class='aui-column-content aui-column-content-last lfr-asset-column-content lfr-asset-column-actions-content']

это обязательно найдет этот элемент div. Я не говорю, что это лучший способ найти его, но все, кажется, думают, что выражения пути как-то не работают с несколькими классами.

РЕДАКТИРОВАТЬ

Вы обновили вопрос. Теперь div снова выглядит несколько иначе и только

//div[contains(@class,'aui-column-content aui-column-content-last   lfr-asset-column-content lfr-asset-column-actions-content')]

найдет его. По какой причине вы не можете использовать атрибут @id этого div?

  • 0
    Кажется, не нашел его до сих пор ...
  • 0
    @ user2150250 Тогда вы либо неправильно применить это выражение XPath или не точно воспроизвести HTML , который служит в качестве входных данных. Но чтобы быть уверенным, вам нужно показать полный HTML-документ.
Показать ещё 3 комментария
-1

Вы встречали jQuery? У меня нет большого опыта работы с XPath, но он упрощает выбор элементов:

$(".classname")

для CSS,

.aui-column-content.aui-column-content-last...
{
color: black;
}

должен это сделать. Надеюсь, я помог!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню