如何借助瀏覽器Console使用Js進行定位和操作元素


    在進行Selenium自動化過程中,我們很難避免一些webdriver 很難定位到的一些元素(如:默認隱藏屬性元素),那對於一些比較難定位到的元素,有什么好的解決辦法?
    其實我們都知道,Selenium Webdriver他是支持,在腳本內調用Js腳本的,那JS才是網頁元素定位的鼻祖,為什么不試試用JS呢?下面簡單通過一個實例,介紹一下,使用JS在火狐控制台中定位元素的小技巧。
    如下圖:如何定位京東首頁中的【手機、數碼、京東通信】—【京東通信】—【自助服務】鏈接。
這個 也是之前群里面朋友自己寫Demo遇到的一個問題,那么這個問題很難嗎?到底難在什么地方,下面看看這個問題怎么破。

    首頁我們使用firebug定位並查看元素所在在HTML代碼。

    打開后的HTML代碼如下,我們可以清楚看到,HTML中的有個DIV下面代碼內容都是灰色的(屬性是隱藏的),對於這種HTML標簽,Webdriver是無法進行處理的(這也就是問題的難點了),如果一直想着用Selenium Webdriver去定位這個元素的話,確實是難為了webdriver只能默默訴說”臣妾做不到!“。那這個時候,我們就得換個思路去解決這個問題,另找別的方法,那就是通過JS的方法來定位它。

    如上圖HTML代碼所示,我們要找的元素的【自助服務】鏈接,他的唯一tag標識就是 a 屬性,在京東商務平台頁面,鏈接非常多所以查找到的<a>標簽也很多無法通過肉眼去數,所以我們也不能通過一次就定位到它的位置,那么可以考慮通過二次定位,先縮小<a>的范圍,然后在進行具體定位。再次自己審查HTML源碼,和【自助服務】一起在同一個<dl >下的元素只有三個鏈接,那么只要我們定位到這個<dl>,在定位【自助服務】就容易多了。
    <dl class="fore2"> 這個dl有className,在控制台中使用className定位看看:
JS腳本:document.getElementsByClassName("fore2")   |(回車)

    通過js腳本,返回了所有的 ClassName="fore2"的元素標識,並且是用逗號隔開的。我們要找的是 dl.fore2的隱藏元素,所以它首先是灰色的(我用紅色標識出來了)。然后我們挨個點擊查看,他會自動跳轉到所在的HTML標簽中。當我點到第三個 dl.fore2的時候,發現我找到了【自動服務】所在的標簽中,然后我們通過索引ID來,定位到這一層元素。在元素dl.fore2元素列表中,第一表元素開始從0開始數索引,它是第7個元素,所以他的索引ID是6.

JS: document.getElementsByClassName("fore2")[6]
    
    可以直接定位到了我們所要查到的 dl.fore2 元素層,可以點擊進去查看,【自助服務】鏈接標識在這一層中,然后再此基礎上,通過tag <a>來定位【自助服務】鏈接。
JS:document.getElementsByClassName("fore2")[6].getElementsByTagName("a")

    打印出來3個<a>標簽,也就是dl.fore2下的3個鏈接,同樣通過索引找到【自助服務】,【自助服務】在第三個鏈接,所以他的索引ID是2.
JS: document.getElementsByClassName("fore2")[6].getElementsByTagName("a")[2]

找到元素鏈接后,可以直接調用 click() 方法進行打開這個鏈接。
document.getElementsByClassName("fore2")[6].getElementsByTagName("a")[2].click()

     下面介紹一個小技巧,可以通過Console查看API,通過dir方法,來查看元素有哪些可以用的方法。比如我們上面的那個【自助服務】鏈接,如何去看呢,看下圖操作。
    我們先將元素內容賦值給變量 a,然后使用 dir(a)方法,進行查看,就會展示出該元素所有可以用的方法。


    另簡單看下JS在Console中的使用(詳細API請百度),Console可以說是前台開發的神器,他可以自動補齊你要使用的腳本,比如我們在腳本命令行輸入 "document"(甚至只輸入一個"d")它就會幫你顯示出所有以d開頭的方法,供你選擇使用,document也是我們進行元素定位是常用的方法。







免責聲明!

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



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