Selenium中操作iframe,别再说你不会了

这篇具有很好参考价值的文章主要介绍了Selenium中操作iframe,别再说你不会了。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

  • 📢专注于分享软件测试干货内容,欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!
  • 📢交流讨论:欢迎加入我们一起学习!
  • 📢资源分享:耗时200+小时精选的「软件测试」资料包
  • 📢 软件测试学习教程推荐:火遍全网的《软件测试》教程

Selenium中操作iframe,别再说你不会了,selenium,压力测试,python,单元测试,jmeter,测试工具,开发语言


这里是清安,本章一起来了解一下ifame标签,iframe多用于嵌套页面。最常见的就是登录窗口了。例如QQ空间,知乎的登录界面,都有用到。本章主要以QQ空间为例,一起来看看:


Selenium中操作iframe,别再说你不会了,selenium,压力测试,python,单元测试,jmeter,测试工具,开发语言

进入Url:https://i.qq.com/。

方法一:按下F12,鼠标点击登录框,审查元素,就能看到iframe框了。

方法二:按下F12,CTRL+F,在搜索框中输入iframe,也能搜索到。

简单的小脚本
好了, 此处看了iframe标签了。我们如何来定位呢。上述图片中有id,有name属性,所以我们正常进行定位切换就好了。
 

from selenium import webdriver
 
fox = webdriver.Firefox()
fox.get("https://i.qq.com/")
# 定位标签
ifranme = fox.find_element_by_id('login_frame')
# 切换到标签上
fox.switch_to.frame(ifranme)
fox.find_element_by_id('switcher_plogin').click()
fox.find_element_by_id('u').send_keys('清安无别事')
fox.find_element_by_id('p').send_keys('欢迎入坑')
 
fox.quit()

 

此处是一个小例子,我们使用switch_to.frame()可以切入到标签内部,然后进行各种操作。实际上可能会遇见没有任何属性的iframe,所以这时候就要考虑到标签定位了。这里回到了元素定位基础了,就不作多的阐述了。

往后还可能遇到一个HTML中存在多个iframe标签的情况,善于结合Python,Selenium基础来书写代码。原理都是一样的。

封装iframe讲解
那么切入进去之后如何切出呢,或者还有其他的办法切入吗。答案是有的。看封装好的一个小例子。这里就不解释如何封装的了,可以直接看看Python系列,有讲。
 

# -->>>清安<<<---
from selenium import webdriver
from selenium.webdriver.common.by import By
from time import sleep
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait



class Test(object):
    def __init__(self):
        self.fox = webdriver.Firefox()
        self.fox.get('https://i.qq.com/')

    def get_element(self, ele, local):
        return self.fox.find_element(ele, local)

    def click_(self, ele, local):
        self.get_element(ele, local).click()

    def get_text(self, *local):
        sleep(1)
        txt = self.get_element(*local)
        print(txt.text)

    def frame_(self, ele, local):
        """
        :return: 切入frame
        """
        sleep(1)
        self.fox.switch_to.frame(self.get_element(ele, local))

    def parent_frame(self):
        """
        :return: 切出frame
        """
        sleep(1)
        # self.fox.switch_to.default_content()
        self.fox.switch_to.parent_frame()

    def wait_(self):
        """
        :return: 显示等待头部 
        """
        return WebDriverWait(self.fox, 10, 0.5)

    def wait_frame(self, ele, local):
        """
        :return: 显示等待+iframe标签的使用
        """
        self.wait_().until(EC.frame_to_be_available_and_switch_to_it(self.get_element(ele, local)),
                           message='iframe不可跳转')


if __name__ == '__main__':
    t = Test()  # 实例化类,直接打开url
    t.frame_(By.ID, 'login_frame')  # 定位iframe标签
    t.get_text(By.ID, 'switcher_plogin')    # 获取文本信息
    t.click_(By.ID, 'switcher_plogin')  # 点击操作
    t.get_text(By.ID, 'login_button')   # 获取文本信息
    t.parent_frame()    # 切出iframe
    t.get_text(By.XPATH, "//*[text()='空间活动']")  # 获取文本信息
    t.wait_frame(By.ID, 'login_frame')  # 用iframe显示等待
    t.get_text(By.XPATH, '//*[text()="新用户注册"]')     # 获取文本信息

此处举例了如何切出iframe,也就是parent_frame方法,里面介绍了两种方法。

self.fox.switch_to.parent_frame()是切换到父级,如果没有父级的iframe,那么保持默认,也就是说将焦点切出原iframe标签。

self.fox.switch_to.default_content()会直接将焦点切出iframe标签。
切出后我们就可以做其他的操作了。上述代码中,我们定位了“空间活动”,并打印了它的文本值。

上述代码中我们还用到了一个显示等待,也是有关iframe标签的,这也是一种切换方式。一起来看看源码:

class frame_to_be_available_and_switch_to_it(object):
    """ An expectation for checking whether the given frame is available to
    switch to.  If the frame is available it switches the given driver to the
    specified frame.
    """
    def __init__(self, locator):
        self.frame_locator = locator

    def __call__(self, driver):
        try:
            if isinstance(self.frame_locator, tuple):
                driver.switch_to.frame(_find_element(driver,
                                                     self.frame_locator))
            else:
                driver.switch_to.frame(self.frame_locator)
            return True
        except NoSuchFrameException:
            return False

 看源码中,简单点理解:如果self.frame_locator是元组,则进行切换,否则,还是切换,并返回True。都不对,则告诉你错误,返回False。所以啊,用了这个显示等待也就不需要另外写iframe标签切换了。也能不加强制等待、担心时间不够元素没渲染出来,导致脚本报错了。

总结

1、上述的封装中,并未用到较多的显示等待,而是简单的使用了强制等待,这是不值得提倡的。

2、封装的套路可以模仿,自己写一写。

3、大家记得写好注释

4、上述代码中,切换iframe还有很大的优化空间,可以自己试试如何优化


最后我邀请你进入我们的软件测试学习交流群:785128166, 大家可以一起探讨交流软件测试,共同学习软件测试技术、面试等软件测试方方面面,还会有免费直播课,收获更多测试技巧,我们一起进阶Python自动化测试/测试开发,走向高薪之路

感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

Selenium中操作iframe,别再说你不会了,selenium,压力测试,python,单元测试,jmeter,测试工具,开发语言

这些资料,对于从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!

Selenium中操作iframe,别再说你不会了,selenium,压力测试,python,单元测试,jmeter,测试工具,开发语言文章来源地址https://www.toymoban.com/news/detail-773773.html

到了这里,关于Selenium中操作iframe,别再说你不会了的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Selenium4+Python3 - Iframe、Select控件、交互式弹出框、执行JS、Cookie操作

    iframe识别: 语法: driver.switch_to.frame(‘方式’) 1、常见处理方法三种 index:下标 name:id或name属性的值 webelement:元素 2、通过下标进入 进入第一个iframe: 3、通过id或name属性的值进入 通过id或name属性的值进入指定的iframe: 4、通过iframe元素进入iframe 通过iframe元素进入指定i

    2024年02月04日
    浏览(61)
  • Python爬虫(7)selenium3种弹窗定位后点击操作,解决点击登录被隐藏iframe无法点击的登陆问题

    之前的文章有关于更多操作方式详细解答,本篇基于前面的知识点进行操作,如果不了解可以先看之前的文章 Python爬虫(1)一次性搞定Selenium(新版)8种find_element元素定位方式 Python爬虫(2)-Selenium控制浏览器 Python爬虫(3)-Selenium结合pywin32模拟键盘操作 Python爬虫(4)-Seleni

    2024年02月04日
    浏览(59)
  • Selenium+Pytest自动化测试框架实战,还不会点这里一清二楚,全网最细教程!

    在华为工作了10年的大佬出的Web自动化测试教程,华为现用技术教程!_哔哩哔哩_bilibili 在华为工作了10年的大佬出的Web自动化测试教程,华为现用技术教程!共计16条视频,包括:1. 【web自动化】主流Web自动化测试技术对比、2. 【web自动化】Selenium自动化测试环境一键搭建、

    2024年02月02日
    浏览(75)
  • selenium iframe框架处理

    对于子嵌套的页面,我们直接标签定位会报错,如下面代码 所以我们要切换作用域,根据iframe标签的id转入iframe框架,再进行后续操作。 操作完成后返回主框架 源码语法请看下图  我们来模拟登录进行简单案例加以巩固,比如qq空间登录界面。 现在一般来说,进入qq空间官网

    2024年02月04日
    浏览(35)
  • selenium中,切换iframe的方法

    最近在学基于python+selenium的web自动化,在此记录下学习的东西,也希望可以跟学习这技能的小伙伴们分享、交流。 iframe也称作嵌入式框架,嵌入式框架和框架网页类似,它可以把一个网页的框架和内容嵌入在现有的网页中。在selenium进行定位时,如果需要定位某个iframe内的元

    2024年02月16日
    浏览(40)
  • selenium+python处理iframe切换

    selenium+python处理iframe切换有3种方法: 1、如果iframe有id或name,则可根据iframe的id或name切换。 2、把iframe当作页面元素,通过元素定位表达式进行切换。 3、将iframe存储到list中,然后根据ifrane的索引定位 (适合页面有多个iframe,且前两种方法无法使用)。 如果页面有多层ifram

    2024年02月11日
    浏览(46)
  • 【测试】Selenium操作Cookie

    1.操作Cookie 操作Cookie无非就是读取和删除Cookie,下面这些是主要方法 2.设置单个Cookie 通过add_cookie()方法添加Cookie,参数是一个字典,一个Cookie字典的键有name、value、domain、httpOnly、path、sameSite、secure等,但是至少,必须要有name和value这两个键,比如说我们设置一下百度的Coo

    2024年02月12日
    浏览(43)
  • Java测试——selenium常见操作

    selenium的前置准备工作可以参考我之前的博客:Java测试——selenium的安装与使用教程 这篇博客讲解一下selenium的常见操作 先创建driver 输入网址 我们可以通过下面这个方法查找页面的一个元素 该方法返回一个WebElement元素 例如,我们查找百度的搜索框 也可以通过下面这个方法

    2024年01月25日
    浏览(30)
  • selenium-java中切换iframe

    1、当iframe中有固定的name或者id时可以通过name和id进行切换,代码如下 2、当iframe中没有固定的name或者id时可以通过iframe角标进行切换,在浏览器通过ctrl+f快捷键,搜索标签框输入//iframe;来查看当前iframe是第几个来定位,代码如下 注意:通过下标来定位时需要是同级别的,如果

    2024年01月18日
    浏览(43)
  • selenium多窗口、多iframe切换、alert切换

    场景: 在页面操作过程中有时候点击某个链接会弹出新的窗口,这时就需要切换到新打开的窗口上进行操作。这种情况下,需要识别多标签或窗口的情况。 操作方法: switch_to.window()方法:切换窗口。可以实现在不同的窗口之间切换。current_window_handle:获得当前窗口句柄。

    2024年02月07日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包