如何单击xpath中的元素和具有option-id元素但是相同div类的selenium?

时间:2016-11-08 19:58:02

标签: java html selenium xpath

我有以下html代码段。

<div class="swatch-attribute-options clearfix">
    <div class="swatch-option color" option-type="1" option-id="49" option-label="Black" option-tooltip-value="#000000" "="" style="background: #000000 no-repeat center;"></div>
    <div class="swatch-option color" option-type="1" option-id="52" option-label="Gray"  option-tooltip-value="#8f8f8f" "="" style="background: #8f8f8f no-repeat center;"></div>
    <div class="swatch-option color" option-type="1" option-id="57" option-label="Purple"  option-tooltip-value="#ef3dff" "="" style="background: #ef3dff no-repeat center;"></div>
</div>

我想点击第一个选项(option-id="49" option-label="Black")到SeleniumJava,但不知道该怎么做。这是我尝试过的,我得到了例外。

driver.findElement(By.className("swatch-option color"));

例外:

org.openqa.selenium.InvalidSelectorException: invalid selector: Compound class names not permitted.
*** Element info: {Using=class name, value=swatch-option color}
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:206)
    at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:158)
    at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:678)
    at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:363)
    at org.openqa.selenium.remote.RemoteWebDriver.findElementByClassName(RemoteWebDriver.java:477)
    at org.openqa.selenium.By$ByClassName.findElement(By.java:391)
    at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:355)
    at com.radial.webstore.CheckoutFlowFunctionalTest.testCheckoutScenario(CheckoutFlowFunctionalTest.java:33)


Results :

Tests in error: 
  CheckoutFlowFunctionalTest.testCheckoutScenario:33 » InvalidSelector invalid s...

3 个答案:

答案 0 :(得分:2)

您可以使用css选择器,例如:

driver.findElement(By.cssSelector(".swatch-option.color")).click();

或xpath:

driver.findElement(By.xpath("//div[@class='swatch-option color']")).click();

当然你可以根据其他属性获得选择器,这里有一些css的例子:

.swatch-option.color[option-id=49]

.swatch-option.color[option-label=Black]

答案 1 :(得分:1)

有几种css方法可以做到这一点。因为,您要选择带有option-label =&#39; Black&#39;的元素。尝试

driver.findElement(By.cssSelector("div.swatch-attribute-options.clearfix > div[option-label='Black']"));

driver.findElement(By.cssSelector("div[option-label='Black']"));

上述代码之一可能有效。

答案 2 :(得分:0)

您需要的是

driver.findElements(By.cssSelector("div.swatch-option.color"))

这将为您提供所需的选项列表

希望这有帮助!