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

猜你喜欢

转载自blog.csdn.net/u013155359/article/details/84063014