我有一个页面,其中包含第一列中的复选框。该表默认加载25行,滚动时另外加载25行。我使用下面的代码来获取默认加载的25个复选框并单击它们:
List<WebElement> checkboxes = driver.findElements(By.xpath("//input[@type='checkbox']"));
for(WebElement checkbox : checkboxes){
checkbox.click();
}
当我在执行时查看浏览器时,它会单击当前适合屏幕的复选框(8个复选框),对于第9个复选框,它会抛出当前异常时无法点击的元素。当我在调试模式下运行代码并在浏览器中滚动行后执行单击时,代码运行正常。 请让我知道如何解决这个问题。
P.S。网页是使用角度5制作的。我也尝试使用Protractor做同样的事情,也存在问题。
先谢谢。
答案 0 :(得分:0)
您可以滚动到每个复选框并单击它。
请参考以下代码
List<WebElement> checkboxes = driver.findElements(By.xpath("//input[@type='checkbox']"));
for(WebElement checkbox : checkboxes){
((JavascriptExecutor)driver).executeScript(“arguments[0].scrollIntoView(true);”, checkbox );
checkbox.click();
}
或者您可以尝试下面的代码滚动
public static void scrollToElement(WebElement element){
Point point = element.getLocation();
logger.info("X cord "+point.getX()+"y cord "+point.getY());
scroll(point.getX(), point.getY());
}
答案 1 :(得分:0)
这是一种解决方法......
List<WebElement> checkboxes = driver.findElements(By.xpath("//input[@type='checkbox']"));
for(WebElement checkbox : checkboxes){
try{
checkbox.click();
}catch(Exception e){
JavascriptExecutor executer = (JavascriptExecutor)driver;
executer.executeScript("scroll(0, 250)");
checkbox.click();
}
}
希望这对你有用!