selenium框架與chrome瀏覽器的不兼容問題


  在一次偶然的情況下,在chrome上用selenium框架去抓取某個id為XX的頁面元素,使用WebDriver的findElement().click()方法進行點擊,原來在firefox瀏覽器運行得好好的程序報錯了。編譯器給報了InvocationTargetException,有點經驗的coder都知道,這個異常范圍太廣了,並且最蛋疼的是不給出任何異常信息(StacktraceInformation為null)這時候就不得不用getCause方法來得到導致其出現的真正異常,並且得到異常信息,方便我們追蹤定位。這個不是本文重點,就不在這里說具體方法了。

      之前發現手動點擊正常,並且使用isDisplyed和isExists方法確定其沒有被其他元素遮擋或者沒有來得及加載出來,因此可以排除等待時間不夠和被其他元素遮擋的可能性;

​     查看元素的xpath發現並沒有被任何frame或者iframe嵌套,因此也可以排除焦點沒有切換到當前待點擊元素的可能。

      在firefox和IE上可以正常抓取,並且正常進行模擬點擊,再結合檢視頁面的html和js代碼​,網頁代碼有bug的可能性也基本可以排除了。

      最后定位后追蹤到谷歌瀏覽器的驅動chromedriver上,記得selenium是個開源項目,於是到github上搜這框架。找到驅動部分,果不其然,firefox的驅動還是selenium的人員開發的,而google的驅動卻是google內部人員開發的。畢竟不是原班人馬搞出來的東西,兼容性不好,有些東西不支持也是正常的,即使是google的工程師也不可能做到十全十美。

      既然找到原因就好辦了,他倆不兼容那我在chrome上不用那個方法就好。直接調用js的點擊事件

WebDriver driver = new ChromeDriver();

JavascriptExecutor jse = (JavascriptExecutor)driver;​

  • WebElement element = driver.findElement(By.id("XX")); 
  • jse.executeScript("arguments[0].click();", element); 

搞定。​


免責聲明!

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



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