【问题标题】:WebDriverException: unknown error: Element is not clickable at pointWebDriverException:未知错误:元素此时不可点击
【发布时间】:2015-12-14 05:24:10
【问题描述】:

使用 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 会抛出以下错误:

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

关于分辨率的任何想法?也尝试使用 Actions 类,但无济于事。

【问题讨论】:

    标签: google-chrome selenium-webdriver


    【解决方案1】:

    你可以在报错之前写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.");
        }
    }
    

    【讨论】:

      【解决方案2】:

      使用 JavascriptExecutor 来解决这个问题:-

      WebElement element= driver.findElement(By.xpath("YOUR XPATH"));
      
      JavascriptExecutor executor = (JavascriptExecutor) driver;
      executor.executeScript("arguments[0].click();", element);
      

      【讨论】:

      • 这里的参数是什么??
      猜你喜欢
      • 2016-10-26
      • 2018-03-02
      • 2015-03-18
      • 1970-01-01
      • 2015-11-22
      • 1970-01-01
      • 2019-03-19
      • 2018-10-26
      • 2016-12-29
      相关资源
      最近更新 更多