我正在尝试检查注册表单上的所有复选框。但是它给出了 org.openqa.selenium.NoSuchElementException。
这是我尝试过的代码。
public class SelectCheckboxes {
public static void main(String[] args) {
WebDriver driver = new FirefoxDriver();
driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);
driver.get("http://www.wufoo.com/gallery/templates");
driver.findElement(By.xpath("//*[@id='reg']")).click();
driver.findElement(By.xpath("//*[@id='stage']/tbody/tr/td[2]/ul/li[2]/a/b")).click();
List<WebElement> elements = driver.findElements(By.xpath("//input[@type='checkbox']"));
for (WebElement el : elements) {
if (!el.isSelected())
el.click();
System.out.println("Checkboxes are selected");
}
答案 0 :(得分:0)
可能隐藏了部分复选框,然后尝试添加其他检查
if (!el.isSelected() && el.isDisplayed())
el.click();
但这只是建议,确保我们需要查看html代码的确切部分。
答案 1 :(得分:0)
您的代码几乎是正确的。但我认为你错过了,注册表格中有一个iframe。在对表单执行任何操作之前,您需要将控制权切换到iframe,然后执行您的任务。
以下是相同的工作代码。
public class SelectMultipleCheckboxes {
public static void main(String[] args) {
WebDriver driver = new FirefoxDriver();
driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);
driver.manage().window().maximize();
driver.get("http://www.wufoo.com/gallery/templates");
driver.findElement(By.xpath("//*[@id='reg']")).click();
driver.findElement(By.xpath("//*[@id='stage']/tbody/tr/td[2]/ul/li[2]/a/b")).click();
//Switch to Iframe
WebElement iframe = driver.findElement(By.xpath("//*[@id='wufooFormwu07ihv0jonvuv']"));
driver.switchTo().frame(iframe);
driver.findElement(By.xpath("//*[@id='Field10']")).click();
//Capturing all xpath in the list
List<WebElement> elements = driver.findElements(By.xpath("//input[@type='checkbox']"));
for (WebElement el : elements) {
if (!el.isSelected())
el.click();
System.out.println("Checkboxes are selected");
}
driver.switchTo().defaultContent();// Iframe is Switched to Main Again
driver.close(); // Closes the current driver instance.
driver.quit(); // Closes all instances of browser.
}
}