iframe中的复选框-如何检查是否存在复选框,如果是,请单击它

时间:2019-02-05 16:13:16

标签: java iframe checkbox selenium-chromedriver

我正在使用Java和chromedriver。到目前为止,我仅使用以下代码单击一个按钮,然后弹出一个小窗口,然后单击另一个按钮。有趣的是,我不必更改任何框架。一切都很好。这是代码:

// click on button
driver.findElement(By.xpath(hyperlink_take_order)).click();
// a second small window popped up and I clicked another button
driver.findElement(By.xpath("//a[contains(text(),'accept')]")).click();

到目前为止,我使用xpath来标识我需要单击的按钮。

我有时需要在第二个小窗口上不时有一个附加复选框(有时是多个复选框)。我试图通过xpath找到它们,但发现xpath在这里不起作用。我从HTML中得到的都是这样的:

在这种情况下,括号[]中的数字17232每次都不同,因此我找不到可用于此复选框的名称。我阅读了许多有关stackoverflow的文章,发现这种和平的代码也行不通。

// click on button
driver.findElement(By.xpath(hyperlink_take_order)).click();
// a second small window popped up         
try
{
driver.switchTo().frame(driver.findElement(By.tagName("iframe")));
System.out.println("change to iframe worked");
List<WebElement> CHECKBOXlist = driver.findElements(By.xpath("//input[@type='checkbox']"));
for(WebElement checkbox : CHECKBOXlist) 
{
System.out.println("there was a checkbox");
System.out.println(checkbox.getAttribute("name"));
checkbox.click();
}
driver.switchTo().defaultContent();
} 
catch (Exception e) 
{
System.out.println("there was no checkbox");
}
driver.findElement(By.xpath("//a[contains(text(),'accept')]")).click();
<div class="md-checkbox product-service md-theme-whitebackground">
<div tabindex="0" class=md-checkbox-container">
<input name="service[17232]" tabindex="-1" id="service_17232" type="checkbox" value ="1" />
</div>
<label class="md-check-label" for="service_17232">This one is blue</label>
</div>

您知道我如何可以简单地单击第二个小窗口上的所有(有时是多个)复选框吗?谢谢

1 个答案:

答案 0 :(得分:0)

基于您提供的HTML示例,它看起来好像不需要切换到iframe,因此driver.switchTo().frame(driver.findElement(By.tagName("iframe")));部分是无关紧要的。

要单击单个复选框,请执行以下操作:

driver.findElement(By.xpath(//input[@type='checkbox']));

用于单击多个复选框:

List<IWebElement> checkboxes = driver.findElements(By.xpath("//input[@type='checkbox']"));
foreach (IWebElement e in checkboxes) {  e.Click();  }

最后,您可能希望在小窗口中而不是整个页面中指定复选框,因此您应该使用此定位器:

//div[contains(@class, 'product-service')]/div/input[@type='checkbox']