Java 按类查找不使用空格的元素
我正在尝试按类名查找以下WebElement:Java 按类查找不使用空格的元素,java,css,selenium,xpath,selenium-webdriver,Java,Css,Selenium,Xpath,Selenium Webdriver,我正在尝试按类名查找以下WebElement: <div class="aui-column-content aui-column-content-last lfr-asset-column-content lfr-asset-column-actions-content"> 但这两种解决方案都返回了一个无接触的例外。关于我做错了什么有什么建议吗 编辑:这里是一些相邻的html <div id="aui_3_2_0_11858" class="portlet-body">
<div class="aui-column-content aui-column-content-last lfr-asset-column-content lfr-asset-column-actions-content">
但这两种解决方案都返回了一个无接触的例外。关于我做错了什么有什么建议吗
编辑:这里是一些相邻的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
。正如@shohama所提到的,它看起来确实像是多个类。提供更多的html
,我们可以帮助您编写更完美的选择器
//div[包含(@class,'aui-column-content aui column content last lfr asset column content lfr asset column actions content')]
并且,在开始使用之前,使用wait确保元素存在
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列内容在页面上是唯一的你见过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属性的任何原因,该属性指示多个类,而不是一个带空格的类名。不允许。我们确定这个“contain”方法解决了我这里遇到的多类问题吗?我将发布更多相邻的html。@user215050contains()
效果很好。但是,类名相当长。无论如何,这可能不是一个好主意。更多html
将help@user2150250//div[contains(@class,'aui-column-content-last')]
这就足够了Contains()
提供了使用部分匹配进行搜索的功能。我仍然很好奇,为什么具有多个类名的Contains
无法找到元素。我尝试了答案中建议的所有方法。@user215050它绝对有效-如果您密切注意属性值中的空白并在XPath表达式中重现它。@user215050则您要么错误地应用了此XPath表达式,要么没有忠实地重现用作您的HTML输入。但为了确保您需要显示一个完整的HTML文档。我很抱歉。我不知道当我在html上复制的时候,额外的空间是怎么进来的。我问题中的原始内容是正确的。无法使用id属性,因为该特定元素用于的每个页面都不同。唯一的常量是类。
//div[contains(@class,'aui-column-content aui-column-content-last lfr-asset-column-content lfr-asset-column-actions-content')]