selenium自动化踩坑日记:iframe切换

当iframe嵌套一个iframe时,如果用iframe的下标切换,里面嵌套的iframe又从下标为0开始,而不是相对于整个dom树的下标,举个栗子:

 比如我想点击qq邮箱登录界面的“密码登录”,通过定位查找可以发现密码登录的元素位于页面的ifram中,这时候想要点击就必须切换iframe点击,如果根据iframe的下标来切换,那么我们应该先进入第一个iframe在进入第一个iframe里面的iframe。

第一个iframe位于整个DOM树中的第二个(下标为1),要点击的目标元素所在的iframe位于第一个iframe里面的第一个iframe,这时候这个iframe的下标可不是相对于整个DOM树而言的2了,而是相对于整个DOM树的第二个iframe而言,那么他的下标就是0。

封装好的切换iframe方法:

    #切换iframe
    def switch_into_iframe(self, iframe_loc, page_action ):
        """
        :param iframe_loc: index, id或者name属性的值,元素定位元组。
        :return:
        """
        logger.info(f"切换进入iframe: {iframe_loc}")
        try:
            WebDriverWait(self.driver, self.timeout).until(EC.frame_to_be_available_and_switch_to_it(iframe_loc))
        except BaseException as msg:
            logger.exception('页面操作:{} 失败,报错步骤:{}; 报错原因:{}; 报错文件:{}; 报错行数:{}'
            .format(page_action,inspect.currentframe().f_back.f_code.co_name,msg,inspect.stack()[1][0].f_code.co_filename,inspect.currentframe().f_back.f_lineno))
            self.save_pageshots(page_action)
            raise 

实例化后调用封装好的切换iframe和点击方法

目标实现:

test.switch_into_iframe(1,'切换iframe')
test.switch_into_iframe(0,'切换到内嵌iframe')
test.click_element((By.CSS_SELECTOR,'#switcher_plogin'),'点击密码登录')

或者曲线救国:iframe标签的定位或者他的id,name属性的值来切换

test.switch_into_iframe((By.CSS_SELECTOR,".QQMailSdkTool_login_loginBox_qq_iframe"),'切换iframe')
test.switch_into_iframe('ptlogin_iframe','切换到内嵌iframe')
test.click_element((By.CSS_SELECTOR,'#switcher_plogin'),'点击密码登录')

实现结果:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值