我试图使用部分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')]"}
我做错了什么?
答案 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();
}
}