selenium之頁面跳轉導致元素定位失敗(click)
阿新 • • 發佈:2018-11-16
1.產生場景,執行下述語句,click之後,頁面發生變化,原頁面被覆蓋重新開啟新頁面,導致元素定位不到。
報錯1:stale element reference: element is not attached to the page document
報錯2:NoSuchFrameException: Message: no such frame
報錯2:查詢不到元素
driver.find_element_by_xpath('//*[@id="create_business"]').click()
2.排查思路:肯定是由於頁面發生變化導致的元素定位不到,所以需要開啟查詢元素的頁面。
方法1.執行完click後,重新繫結頁面,失敗。
currentWin = driver.current_window_handle
handles = driver.window_handles
print(handles)
for i in handles:
if currentWin == i:
continue
else:
#將driver與新的頁面繫結起來
driver = driver.switch_to.window(i)
方法2.執行完click後,重新繫結頁面,成功。
driver.switch_to.frame("right")
原因:selenium做自動化的過程中,經常會遇到alert、frame和新的window,本次跳轉實際上是frame進行了跳轉,因此需要用到switch_to.frame
擴充套件:
同一個windows頁面下,不同的frame
1.
driver = webdriver.Firefox() driver.switch_to.frame(0) # 1.用frame的index來定位,第一個是0 # driver.switch_to.frame("frame1") # 2.用id來定位 # driver.switch_to.frame("myframe") # 3.用name來定位 # driver.switch_to.frame(driver.find_element_by_tag_name("iframe")) # 4.用WebElement物件來定位
2.並列的iframe,可以使用switch_to.frame(0)、switch_to.frame(1)表示;巢狀的iframe需要通過id、name來切換。
3.從子iframe切到父iframe使用driver.switch_to.parent_frame()
4.從frame中切回主文件使用switch_to.default_content()
不同的window下
1.switch_to.window
switch_to.window(driver.window_handles[0])表示第一個window視窗
switch_to.window(driver.window_handles[1])表示第二個window視窗
彈窗alert/confirm/prompt
1.switch_to.alert.accept()