selenium之頁面跳轉導致元素定位失敗(click)

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()

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