我正在使用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>
您知道我如何可以简单地单击第二个小窗口上的所有(有时是多个)复选框吗?谢谢
答案 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']