問題描述
在做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 ,豈不是美滋滋?