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

  • 5
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值