1. 程式人生 > >selenium之頁面跳轉導致元素定位失敗(click)

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