按 Class 查找元素,空格无效

Find Element By Class with Spaces Not Working

我正在尝试通过 class 名称找到以下 WebElement:

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

并且由于它有一个 space,我尝试同时使用 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')]

并且,使用 explicit 等待以确保元素存在,然后再开始使用它。

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。至少对于 OP 提供的 html

注意: 认为 aui-column-content-last 在页面上是独一无二的

你见过jQuery吗?我对 XPath 没有太多经验,但它使选择元素更容易,如:

$(".classname")

对于 CSS、

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

应该这样做。希望我有所帮助!

如果末尾没有空白字符,您问题中的 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')]

会找到的。您不能使用该 div 的 @id 属性的任何原因?