selenium切换frame

Frame标签框架区别

  • Frameset:可以直接按照正常元素定位
  • Frame:需要把驱动切换到Frame内再进行操作
  • IFrame:需要把驱动切换到Frame内再进行操作

切换总结

frame切换原理总结:

  • 针对同一层级的frame,如果要进行切换的话,需要切回到默认的首页,不能同级子页之间切换

  • 针对所要进入的frame,有多少个层级,就需要切换几次

  • 不管当前在哪个层级,如果要回到默认首页,只需要调用一次回到默认首页的方法 driver.switch_to.default_content()

frame切换原理方法:

driver.switch_to.frame(reference)
driver.switch_to.parent_frame()    # 切换到上一级frame
driver.switch_to.default_content()   # 切换到默认frame

在这里插入图片描述

selenium定位当前处于那个iframe(frame)中

#获取当前iframe的tag name,确定有几个iframe,你所在的元素和获取到页面的iframe之间的关系,来进行iframe的切换。

for child_frame in driver.find_elements_by_tag_name("iframe"):
    child_frame_id = child_frame.get_attribute("src")
    print(child_frame_id)

frame封装

def list_frame(self, locator):
    for child_frame in self.driver.find_elements(*locator):
        child_frame_id = child_frame.get_attribute("src")
        print(child_frame_id)


# 切换到主frame
def switch_body(self, locator, doc=''):
    logger.info('{0},body_frame切换到'.format(doc, locator))
    try:
        self.driver.switch_to.parent_frame()
    except:
        logger.info('{0},body_frame切换到失败!!!'.format(doc, locator))
        raise

# 切换到不同的frame
def switch_iframe(self, locator, doc=''):
    logger.info('{0},frame切换到'.format(doc, locator))
    try:
        to_frame = self.get_element(locator)
        self.driver.switch_to.frame(to_frame)
    except:
        logger.info('{0},frame切换到失败!!!'.format(doc, locator))
            raise

#根据实际需求进行切换
    # 切换到不同的frame
def switch_iframe(self, locator='', doc='', relation="child"):
    logger.info('{0},frame切换到'.format(doc, locator))
    try:
        if relation == "parent":
            self.driver.switch_to.default_content()
        else:
            to_frame = self.get_element(locator)
            self.driver.switch_to.frame(to_frame)
    except:
        logger.info('{0},frame切换到失败!!!'.format(doc, locator))
        raise
  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值