您好,登錄后才能下訂單哦!
哪怕你再精通selenium,陪伴測試人員最多的還是定位問題。
第一個坑:
要定位的頁面,出現html嵌套,也就是ifrmae。在html代碼頁面很直觀的就能發現這個東西。實際就是在一個頁面中引用了一個子頁面。這樣造成我們再用xpath或者css定位的時候直接找不到元素。這個時候我們需要用到一個新的東西來為她定位,其思路大體為:第一步,從父頁面切換至子頁面;第二步,在子頁面定位元素;第三步,返回父頁面(這個看個人需要,具體留在哪里需要結合實際)。
第一步的實現需要用到一個方法:switch_to_frmae。具體用法可以參考代碼。在此,我必須提醒大家一句,switch_to_frmae不一定管用,因為版本問題,可能會需要變為switch_to.frmae。一個‘_’,一個‘.’,這個坑我爬了好久啊。
第二步就相對簡單了,我們可以用firebug復制xpath或者css路徑就可以了。值得注意的是,這次的路徑是從子頁面開始的,與父頁面毫無關系,如果你想用id,class等等定位,應該也是可以的(當然我沒試過,我對這句不負責)。
第三步,返回,當我們不需要在這個子頁面中進行定位的時候需要退出,這要一個新的方法,
switch_to.default_content()。具體內容可以百度或者參照我的代碼貼圖。 至此,第一個坑跳出。 定位元素時,一定要注意element還是elements,一個單數,一個復數,意義真是差別太大了。當你find_element_by_id('p')只是一個id = ‘p’的元素,find_elements_by_id('p')的時候其實是一堆id = 'p'組成的列表。切記自己想要一個還是多個元素,切記切記。
我貼的代碼,是我測試賬號密碼登錄qq郵箱時候的問題,這次問題不在代碼,可能是因為網絡或者其他什么原因的問題,當我定位到qq郵箱‘登錄’按鈕時候,click()一直出現‘服務器繁忙的字樣’,開始我認為是點擊太快,我設置time.sleep(3)后依然如此(隱形等待我沒有試,不過有興趣的同學可以試試),為了解決這個問題,無奈的我只能先click(),再time.sleep(3)后,再click(),居然奇跡般的成功了。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。