元素加载在dom但元素不可点击 - Selenium

时间:2018-02-05 12:26:58

标签: angular selenium webdriver protractor automated-tests

我有一个页面,其中包含第一列中的复选框。该表默认加载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做同样的事情,也存在问题。

先谢谢。

2 个答案:

答案 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();
        }
    }

希望这对你有用!