Webdriver selenium java partial xpath with contains- can&t; t click元素

时间:2015-08-28 19:26:10

标签: 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>
<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>

这是我的硒代码:

driver.findElement(By.xpath("//div[contains(@style, '#0069FF')]")).click();

以下是我遇到的错误:

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

我做错了什么?

5 个答案:

答案 0 :(得分:0)

我发现cssSelector更容易,更可靠,在这种情况下它可能适合你。你可以尝试这样的事情:

By.cssSelector("div[style$='#0069FF']");

这会找到任何div,其样式属性以#0069FF结尾。

答案 1 :(得分:0)

您可以使用

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

正在寻找具有data-color属性=#0069FF的DIV。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

driver.findElement(By.xpath("(//*[@class='acme_color_swatch'])[11]")).click();

点击是acme_color_swatch 的第11个元素。

答案 4 :(得分:0)

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

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