Selenium+python,在新的頁面(新打開的web頁面)上沒法定位元素問題解決方案。

問題描述

在做web端自動化時,因爲頁面涉及跨域的問題,所以重新打開了頁面,但是在執行代碼時,提示selenium.common.exceptions.NoSuchElementException 這就很奇怪了,明明是用ID的方式定位的,這麼穩的定位方式找不到,肯定是因爲打開了新頁面的問題。

問題分析

在新開的頁面中找不到元素,也就意味着當前操作範圍變化了,也就是句柄可能出了問題,能操作的範圍還在上一個頁面中,所以要想辦法到新開的頁面去操作。

問題解決

既然是句柄有問題,那就首先考慮去看API文檔,查看怎麼操作句柄,最不濟總有個查看句柄的辦法。果然webdriver給我們提供了driver.window_handles 來查看句柄。好那先輸出一波

num = init.d.window_handles # 獲取當前頁句柄
print(num)

輸出的結果爲

['4294967297', '4294967302']

也就意味着,我們當前在num[0]中進行操作,但是頁面打開後,要在num[1]中查找元素,這當然就找不到,
不慌 ,問題不大,再找找API,看看有沒有切換句柄的方式,肯定是有的。

driver.switch_to.window(num[1]) # 在句柄2 上執行下述步驟

好了,你現在就能再繼續操作你的元素了。

第二種思路

既然頁面都跳轉了,那就最好再寫多一個tesecase 保證用例的可複用性,那麼這個時候就可以使用

def_test_2_**(self):
    driver.get('http://****/addbook')
    driver.find_element_by_id('subject21').click()

直接get後,相當於直接就結束了前一個頁面的操作,重新進執行,然後執行新的testcase ,豈不是美滋滋?

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章