最近在寫Selenium Java腳本時遇到一個問題,登錄進入系統之后,要點擊左側的一個菜單,但是執行到該語句時報下面的錯誤:
Firefox中報錯如下:
org.openqa.selenium.ElementClickInterceptedException: Element
錯誤的意思是:無法點擊這個元素,因為被另一個div掩蓋(obscure)住了。
Chrome 中報錯如下:
org.openqa.selenium.WebDriverException: unknown error: Element
(Session info: chrome=67.0.3396.99)
錯誤的意思是:無法點擊這個元素,另外一個div元素接收了這個點擊。
經分析調試,以下方法可以解決此類問題。
解決方法一:
思路:先使用invisibilityOf等待掩蓋的div消失不見,再使用elementToBeClickable等待要點擊的元素達到可點擊的狀態。
示例:
//要點擊的左側菜單元素
WebElement LeftMenu = driver.findElement(By.xpath("xpath"));
//掩蓋的div元素
WebElement ObscureDiv = driver.findElement(By.xpath("//div[@class='el-loading-mask is-fullscreen el-loading-fade-leave-active el-loading-fade-leave-to']"));
//使用顯示等待,等待掩蓋的div消失
WebDriverWait wait = new WebDriverWait(driver,60);
wait.until(ExpectedConditions.invisibilityOf(ObscureDiv));
//等待左側菜單到可點擊狀態
wait.until(ExpectedConditions.elementToBeClickable(LeftMenu ));
//之后再執行點擊
LeftMenu .click();
解決方法二:
思路:因為掩蓋的div可能會在進行一些操作后,會消失,所以登錄后執行一個頁面刷新的操作,此div即可消失。
再等待左側菜單到可點擊狀態即可。
示例:
//登錄之前的代碼
//登錄后加時間等待,並且進行一次頁面刷新
Thread.sleep(3000);
driver.navigate().refresh();
//要點擊的左側菜單元素
WebElement LeftMenu = driver.findElement(By.xpath("xpath"));
//等待左側菜單到可點擊狀態
WebDriverWait wait = new WebDriverWait(driver,60);
wait.until(ExpectedConditions.elementToBeClickable(LeftMenu ));
//之后再執行點擊
LeftMenu .click();
