Webdriver selenium java部分xpath,包含-can';t单击元素

Webdriver selenium java部分xpath,包含-can';t单击元素,selenium,xpath,selenium-webdriver,Selenium,Xpath,Selenium Webdriver,我试图使用部分xpath单击一个元素。我不能使用ID,因为有多个元素具有相同的ID。我知道我的xpath是正确的,因为当我在firepath中输入它时,它会突出显示正确的元素 以下是我的HTML代码: <div class="acme_color_swatches"> <div class="acme_color_swatch " data-color="#CC0000" style=" background-color:#CC0000"></div> <

我试图使用部分xpath单击一个元素。我不能使用ID,因为有多个元素具有相同的ID。我知道我的xpath是正确的,因为当我在firepath中输入它时,它会突出显示正确的元素

以下是我的HTML代码:

<div class="acme_color_swatches">
<div class="acme_color_swatch " data-color="#CC0000" style=" background-color:#CC0000"></div>
<div class="acme_color_swatch " data-color="#F9F9F9" style=" background-color:#F9F9F9"></div>
<div class="acme_color_swatch" data-color="#990000" style=" background-color:#990000"></div>
<div class="acme_color_swatch" data-color="#FAFAC5" style=" background-color:#FAFAC5"></div>
<div class="acme_color_swatch selected" data-color="#333333" style=" background-color:#333333"></div>
<div class="acme_color_swatch " data-color="#F2F2F2" style=" background-color:#F2F2F2"></div>
<div class="acme_color_swatch " data-color="#F7F7F7" style=" background-color:#F7F7F7"></div>
<div class="acme_color_swatch" data-color="#CB0000" style=" background-color:#CB0000"></div>
<div class="acme_color_swatch " data-color="#DDDDDD" style=" background-color:#DDDDDD"></div>
<div class="acme_color_swatch " data-color="#E2F2FF" style=" background-color:#E2F2FF"></div>
<div class="acme_color_swatch" data-color="#F5F5F5" style=" background-color:#F5F5F5"></div>
<div class="acme_color_swatch" data-color="#0069FF" style=" background-color:#0069FF"></div>
以下是我得到的错误:

FAILED: main
org.openqa.selenium.NoSuchElementException: Unable to locate element {"method":"xpath","selector":"//div[contains(@style, '#0069FF')]"}

我做错了什么?

我发现cssSelector更简单、更可靠,在这种情况下,它可能对您有用。您可以尝试以下方法:

By.cssSelector("div[style$='#0069FF']");
这将找到任何样式属性以
#0069FF

结尾的
div

driver.findElement(By.cssSelector("div[data-color='#0069FF']")).click();

它正在寻找一个具有
数据颜色
属性=#0069FF的DIV。

我能够自己解决这个问题。以下是我所做的: findElement(By.xpath(//div[contains(@style,'background color:#fafafac5')))))。单击();
连字符和“背景-”之间有一个空格。这引起了所有的悲痛。

这些div是一个数组,因此您可以使用:

driver.findElement(By.xpath((/*[@class='acme\u color\u swatch'])[11])。单击()


要单击第11个元素,其中class是acme\u color\u样例

我认为您需要在这里使用一些逻辑。尝试使用
classname
查找所有webelements,然后查找您的特定颜色。请尝试以下代码:

public void Findelement() throws InterruptedException {
    WebElement element = driver.findElement(By.classname("acme_color_swatch"));
    String Color = "#0069FF";
    if (element.contains(Color)){
        element.click();
    }
}

这是HTML代码:这是我的HTML代码:Kim,谢谢你的快速回复。我尝试了css,但得到了以下错误:给定的选择器//div[contains(@style,'.[0069FF')]无效或未生成WebElement。好的,是的,您实际上必须在cssSelector中使用
“div[style$='.\0069FF']”而不是xpath表达式。
。您介意告诉我如何使用吗?我对硒很陌生。提前谢谢。你可以使用你的大部分代码行。因此,完整的代码应该是:
driver.findelelement(By.cssSelector(“div[style$='#0069FF'])谢谢Kim,还是没用,但非常感谢你的帮助。谢谢Jeff,但我还是没法用。我得到了“无法定位元素:{”方法“:“css选择器”,“选择器”:“div[data color='#0069FF']]”错误。下面是我的部分xpath:您可以共享指向该页面的链接吗?考虑到您提供的HTML,这应该可以工作。//div[contains(@data color,##DDDDDD')]这是我的css选择器路径html body.site#page.lightthatch div#mainwrap div#bodyContainer.container-fluid div#bodywrap.row-fluid div#main container.span24 div#activity setupcontainer div.acme#dfm#u外部div.acme#dfm#dfm#main.with#预览div.acme#dfm#dfm#main.内容divdiv.acme\u纹理\u颜色\u托盘div.acme\u颜色\u样例div.acme\u颜色\u样例已选中
public void Findelement() throws InterruptedException {
    WebElement element = driver.findElement(By.classname("acme_color_swatch"));
    String Color = "#0069FF";
    if (element.contains(Color)){
        element.click();
    }
}