按 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 属性的任何原因?
我正在尝试通过 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 属性的任何原因?