【轉】Selenium報錯:Element is not clickable at point的解決辦法


最近在寫Selenium Java腳本時遇到一個問題,登錄進入系統之后,要點擊左側的一個菜單,但是執行到該語句時報下面的錯誤:

Firefox中報錯如下:
org.openqa.selenium.ElementClickInterceptedException: Element

is not clickable at point (115,358) because another element
obscures it

錯誤的意思是:無法點擊這個元素,因為被另一個div掩蓋(obscure)住了。

Chrome 中報錯如下:
org.openqa.selenium.WebDriverException: unknown error: Element

...
is not clickable at point (115, 358). Other element would receive the click:
...

(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();

轉載地址:https://www.cnblogs.com/shengs/p/11203221.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM