Selenium Java - 如何在没有ID的情况下单击元素?

时间:2018-03-26 17:31:20

标签: javascript java html selenium web

我试图通过它的Xpath或Id单击一个单选按钮。 我使用Google Developer Tool检查了该元素,并且能够获得以下详细信息:

  1. 元素名称:<label for="1346_Voltagem_0" class="dimension-Voltagem espec_0 skuespec_110v skuespec_Voltagem_opcao_110V skuespec_Voltagem_opcao_110v">110V</label>

  2. 的Xpath: /html/body/div[9]/div/div/div[3]/div[3]/div[1]/div/ul/li[2]/span/label[1]

  3. 我想知道如何对代码说它必须点击那个radiobutton?

    Click here表示我要点击radioButton的页面。另外,请参阅以下屏幕截图,了解确切的元素

    actual image

4 个答案:

答案 0 :(得分:0)

避免使用绝对xpath,因为UI中的小变化将导致在代码中进行大量更改。 对于您的问题,以下xpath将起作用。

driver.findElement(By.xpath("//label[text()='110V']")).click();

driver.findElement(By.xpath("//label[contains(@class,'110v')]")).click();

答案 1 :(得分:0)

试试这个:

driver.findElement(By.xpath("//input[@class='skuselector-specification-label input-dimension-Voltagem sku-selector skuespec_110v change-image']")).click();

答案 2 :(得分:-1)

您应该使用xpath,因为您需要找到label,然后找到之前的输入

您可以使用

找到标签
//div[contains(@class,'prod-sku-selector')]//label[.='110V']

现在要获取之前的input,您可以使用

//div[contains(@class,'prod-sku-selector')]//label[.='110V']/preceding-sibling::input[1]

css selector

答案 3 :(得分:-1)

我一直认为xpath不应该太依赖于你的html div和层次结构,因为即使改变最小也很容易失败。所以,使用xPath就像&#34; / html / body / div [9] / div / div / div [3] / div [3] / div [1] / div / ul / li [2] / span / label [1]&#34;不是一个好选择。

在这种情况下,我建议你使用下面的xpath:

如果需要点击第一个单选按钮:

//div[contains(@class, 'prod-sku-selector')]//input[@type='radio'][1]

如果需要点击值为110v的单选按钮:

//div[contains(@class, 'prod-sku-selector')]//input[contains(@value, '110V')]

然后你可以使用:

获取元素
radioBtn1 = findElement(By.xpath("//div[contains(@class, 'prod-sku-selector')]//input[@type='radio'][0]"));

此外,您可以使用以下方式点击硒中的无线电:

radioBtn1.click();