看起来像这样 id(“ ctl05_cbMulti_DropDown”)/ div [@ class =“ rcbScroll rcbWidth”] / ul [@ class =“ rcbList”] / li [@ class =“ rcbHovered”] / label [1] / input [@ class =“ rcbCheckBox “]
这些都不起作用
驱动程序。 findElement(By.xpath(“(// input [@ type ='checkbox'])[2]”))。click(); 要么 driver.findElement(By.id(“ ctl05_ctl03_cblUser_Input”))。sendKeys(“ Smith,John”);
答案 0 :(得分:0)
我在第一行代码中看到了一些错误。您不应在xpath中传递“(”。
正确的代码应为:
new WebDriverWait(driver, 30).until(ExpectedConditions.ElementToBeClickable (By.xpath("//input[@type='checkbox'][2]")));
driver. findElement(By.xpath("//input[@type='checkbox'][2]").click();
答案 1 :(得分:0)
根据您的后续评论,问题在于子选择器应为1,因为XPath子选择器基于零,并且不需要附加的括号。只需更改数字即可引用正确的复选框,例如:
如果要选择第一个复选框,请使用以下命令: 使用XPath:
driver.findElement(By.xpath("//input[@type='checkbox'][0]")).click();
获取复选框的另一种方法是使用CSS选择器:
driver.findElements(By.cssSelector("input[class='rcbCheckBox']")[0].click();
如果要选择第二个复选框: 使用XPath:
driver.findElement(By.xpath("//input[@type='checkbox'][1]")).click();
使用CSS:
driver.findElements(By.cssSelector("input[class='rcbCheckBox']")[1].click();
我对CSS更加熟悉,所以我的XPath语法并不完全正确。但是想法还是一样。
答案 2 :(得分:0)
在http://simplejavautomation.blogspot.com/p/dropdown-checkbox.html中查看此示例
driver.findElement(By.xpath("//span[@class='hida']")).click();
WebElement mutliSelect = driver.findElement(By.xpath("//div[@class='mutliSelect']"));
mutliSelect.findElements(By.xpath(".//li")).forEach(li -> {
li.findElement(By.xpath(".//input[@type='checkbox']")).click();
});