Google chrome WebDriverException:未知错误:元素在点处不可单击

Google chrome WebDriverException:未知错误:元素在点处不可单击,google-chrome,selenium-webdriver,Google Chrome,Selenium Webdriver,使用WebDriver在Chrome上执行操作 我有一个扩展名为.xqy的网页。在这里,我执行一些操作并打开第一帧。在第一帧上做了一些动作之后,我打开第二帧,然后打开第三帧。 现在,我需要在第一帧上执行一些操作,因此我使用以下代码关闭selenium当前关注的第三帧,然后关闭第二帧: WebDriver dObjExit = driverObj.switchTo().frame(driverObj.findElement(By.xpath("html/body/div[4]/iframe")))

使用WebDriver在Chrome上执行操作

我有一个扩展名为.xqy的网页。在这里,我执行一些操作并打开第一帧。在第一帧上做了一些动作之后,我打开第二帧,然后打开第三帧。 现在,我需要在第一帧上执行一些操作,因此我使用以下代码关闭selenium当前关注的第三帧,然后关闭第二帧:

WebDriver dObjExit = driverObj.switchTo().frame(driverObj.findElement(By.xpath("html/body/div[4]/iframe"))).switchTo().frame(driverObj.findElement(By.xpath("//body[@class='dlg-page']/div[4]/iframe")));
dObjExit.findElement(By.xpath("//p[@class='modal-footer']/button")).click();
现在,我只剩下第一个框架,我使用以下代码单击其中的一个元素:

WebDriver dObjExit1 = driverObj.switchTo().parentFrame();
ObjExit1.findElement(By.xpath("//button[@id='srch-save']")).click();
但是Selenium抛出以下错误:

线程“main”org.openqa.selenium.WebDriverException中的异常: 未知错误:元素在点(54,88)处不可单击。其他 元素将收到单击:


对决议有什么想法?还尝试使用Actions类,但没有成功。

使用JavascriptExecutor解决此问题:-

WebElement element= driver.findElement(By.xpath("YOUR XPATH"));

JavascriptExecutor executor = (JavascriptExecutor) driver;
executor.executeScript("arguments[0].click();", element);

使用JavascriptExecutor解决此问题:-

WebElement element= driver.findElement(By.xpath("YOUR XPATH"));

JavascriptExecutor executor = (JavascriptExecutor) driver;
executor.executeScript("arguments[0].click();", element);

您可以在有错误的行之前编写2个方法,以等待加载页面并执行所有ajax,例如:

    public static void waitForPageLoaded() {
    ExpectedCondition<Boolean> expectationLoad = new
            ExpectedCondition<Boolean>() {
                public Boolean apply(WebDriver driver) {
                    return ((JavascriptExecutor) driver).executeScript("return document.readyState").toString().equals("complete");
                }
            };
    try {
        Thread.sleep(250);
        WebDriverWait waitForLoad = new WebDriverWait(driver, 33);
        waitForLoad.until(expectationLoad);
    } catch (Throwable error) {
        Assert.fail("Timeout waiting for Page Load Request to complete.");
    }
}

public static void waitForAjaxFinished() {
    ExpectedCondition<Boolean> expectationAjax = new
            ExpectedCondition<Boolean>() {
                public Boolean apply(WebDriver driver) {
                    return ((Boolean)((JavascriptExecutor)driver).executeScript("return jQuery.active == 0"));
                }
            };
    try {
        Thread.sleep(250);
        WebDriverWait waitForAjax = new WebDriverWait(driver, 33);
        waitForAjax.until(expectationAjax);
    } catch (Throwable error) {
        Assert.fail("Timeout waiting for Ajax Finished to complete.");
    }
}
publicstaticvoid waitForPageLoaded(){
ExpectedCondition expectationLoad=新
期望条件(){
公共布尔应用(WebDriver驱动程序){
return((JavascriptExecutor)driver.executeScript(“return document.readyState”).toString().equals(“complete”);
}
};
试一试{
睡眠(250);
WebDriverWaitForLoad=新的WebDriverWaitForLoad(驱动程序,33);
等待加载直到(预期加载);
}捕获(可丢弃错误){
Assert.fail(“等待页面加载请求完成的超时”);
}
}
公共静态void waitForaXfinished(){
ExpectedCondition expectationAjax=新建
期望条件(){
公共布尔应用(WebDriver驱动程序){
return((Boolean)((JavascriptExecutor)driver.executeScript(“return jQuery.active==0”);
}
};
试一试{
睡眠(250);
WebDriverWait waitForAjax=新的WebDriverWait(driver,33);
waitforax.until(expectationAjax);
}捕获(可丢弃错误){
Assert.fail(“等待Ajax完成的超时”);
}
}

您可以在有错误的行之前编写两个方法,以等待加载页面并执行所有ajax,例如:

    public static void waitForPageLoaded() {
    ExpectedCondition<Boolean> expectationLoad = new
            ExpectedCondition<Boolean>() {
                public Boolean apply(WebDriver driver) {
                    return ((JavascriptExecutor) driver).executeScript("return document.readyState").toString().equals("complete");
                }
            };
    try {
        Thread.sleep(250);
        WebDriverWait waitForLoad = new WebDriverWait(driver, 33);
        waitForLoad.until(expectationLoad);
    } catch (Throwable error) {
        Assert.fail("Timeout waiting for Page Load Request to complete.");
    }
}

public static void waitForAjaxFinished() {
    ExpectedCondition<Boolean> expectationAjax = new
            ExpectedCondition<Boolean>() {
                public Boolean apply(WebDriver driver) {
                    return ((Boolean)((JavascriptExecutor)driver).executeScript("return jQuery.active == 0"));
                }
            };
    try {
        Thread.sleep(250);
        WebDriverWait waitForAjax = new WebDriverWait(driver, 33);
        waitForAjax.until(expectationAjax);
    } catch (Throwable error) {
        Assert.fail("Timeout waiting for Ajax Finished to complete.");
    }
}
publicstaticvoid waitForPageLoaded(){
ExpectedCondition expectationLoad=新
期望条件(){
公共布尔应用(WebDriver驱动程序){
return((JavascriptExecutor)driver.executeScript(“return document.readyState”).toString().equals(“complete”);
}
};
试一试{
睡眠(250);
WebDriverWaitForLoad=新的WebDriverWaitForLoad(驱动程序,33);
等待加载直到(预期加载);
}捕获(可丢弃错误){
Assert.fail(“等待页面加载请求完成的超时”);
}
}
公共静态void waitForaXfinished(){
ExpectedCondition expectationAjax=新建
期望条件(){
公共布尔应用(WebDriver驱动程序){
return((Boolean)((JavascriptExecutor)driver.executeScript(“return jQuery.active==0”);
}
};
试一试{
睡眠(250);
WebDriverWait waitForAjax=新的WebDriverWait(driver,33);
waitforax.until(expectationAjax);
}捕获(可丢弃错误){
Assert.fail(“等待Ajax完成的超时”);
}
}

这里的参数是什么?这里的参数是什么??