Я пытаюсь найти следующий 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>
Попробуйте использовать функцию 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
уникален на странице
contains()
работает довольно хорошо. Но имя класса довольно длинное. Что может быть не очень хорошая идея для использования в любом случае. Больше html
поможет
Выражение 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
?
Вы встречали jQuery? У меня нет большого опыта работы с XPath, но он упрощает выбор элементов:
$(".classname")
для CSS,
.aui-column-content.aui-column-content-last...
{
color: black;
}
должен это сделать. Надеюсь, я помог!