Webdriver selenium java部分xpath,包含-can';t单击元素
我试图使用部分xpath单击一个元素。我不能使用ID,因为有多个元素具有相同的ID。我知道我的xpath是正确的,因为当我在firepath中输入它时,它会突出显示正确的元素 以下是我的HTML代码: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> <
<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();
}
}