Selenium_Python實踐遇到的問題一:頁面存在多窗口時,window_handles屬性在保存窗口句柄列表時的順序不一定和打開頁面的順序一致


問題背景:在項目實踐過程中有這樣一種情況:

      1..A頁面上點擊按鈕,打開新的頁面B

      2.B頁面上填入數據,完成后會自動關閉B頁面

      3.如果B頁面上的數據需要做參數化,那么必須采用循環不停的點擊A頁面上的按鈕、switch_to_window到B頁面、再switch_to_window到A頁面

實現步驟:1.A頁面點擊按鈕后,用window_handles保存所有的窗口句柄,此時列表有兩個元素

       2.切換到B頁面,采用switch_to_window[1],即窗口句柄列表的最后一個

     3.在B頁面輸入相關數據並確定

發現問題:在循環參數化的過程中,有時會在實現步驟的第3步找不到相關元素,導致腳本報錯。經過調試發現,一般情況下在保存窗口句柄列表時是和打開頁面

     的順序是一致的,但此次報錯時的順序發生了變化,B頁面的窗口句柄跑到了前面,所以實際上是根本沒有switch_to_window到B頁面,所以實現

          步驟的第3步找不到相關元素

問題解決:碰到這個問題的時候,實際是實現步驟的第2步存在問題,那怎么解決呢,經過思考,解決思路如下:

          1.A頁面打開時,window_handles保存所有的窗口句柄 listA【一個元素】

       2.b頁面打開后,window_handles再保存一次所有的窗口句柄 listAB【兩個元素】

          3.listAB、listA這兩個列表中會有一個元素是重復的,那就是A窗口的窗口句柄,那么listAB去掉這兩個列表中重復的元素,剩下的元素就是B窗口的

            句柄,再通過列表的iindex方法得到B窗口句柄在listAB的索引,填入實現步驟的第二步即可

          4.剩下的問題就轉化成了listAB、listA去掉重復的問題,也就是Python列表操作的問題

      5.為此寫了一個函數,接收兩個參數,即listA,listAB,可以得到去重后的窗口句柄對應的索引

      def tag_window(listA_win,listAB_win):
            for i in listAB_win:
                 if i not in listA_win:
                      return listAB_win.index(i)


免責聲明!

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



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