• 自动化测试基础篇--Selenium iframe定位问题


    有时候我们在定位的途中发现一个现象,元素就在那儿,不离不去,但是我们怎么整就是定不了位,这个时候就要具体网页的特殊性。这里介绍如果遇到了iframe的时候我们怎么处理。
    一、frame和iframe区别
      Frame与Iframe两者可以实现的功能基本相同,不过Iframe比Frame具有更多的灵活性。 frame是整个页面的框架,iframe是内嵌的网页元素,也可以说是内嵌的框架
    Iframe标记又叫浮动帧标记,可以用它将一个HTML文档嵌入在一个HTML中显示。它和Frame标记的最大区别是在网页中嵌入 的<Iframe></Iframe>所包含的内容与整个页面是一个整体,而<Frame>< /Frame>所包含的内容是一个独立的个体,是可以独立显示的。另外,应用Iframe还可以在同一个页面中多次显示同一内容,而不必重复这段内 容的代码。
    二、以网易邮箱(163邮箱)登录为例
    使用iframe最多的就是网易的邮箱,恰巧我们经常的会拿网易的邮箱来做登录的练习,结果发现整死都定不了位,下面我们一步一步的解析163邮箱登录。
    第一步:打开登录页面
    这个没什么好说的,每个测试用例的第一步都是打开浏览器,打开需求网页。
    1 #!/usr/bin/env python
    2 # -*- coding: utf-8 -*-
    3 from selenium import webdriver
    4 import time
    5 url = 'http://mail.163.com/'
    6 browser = webdriver.Firefox()
    7 browser.get(url)
    8 time.sleep(3)
    第二步:定位元素
    我们先通过firebug看看这个和我们平常的网页有什么不同,我们以百度为例;
    通过对比发现,百度的搜索框是直接在Top Window上,而163邮箱的输入框在iframe#x-URS-iframe上,这就是iframe。我们怎么定位呢?
    首先,我们要切换到iframe上,这里要用到selenium方法,用switch_to_frame方法切换,此处有id属性,可以直接用id定位切换;
    1 browser.switch_to.frame('x-URS-iframe')
    其次,在定位用户名、密码和登录按钮;
    1 browser.find_element_by_name('email').send_keys('cf563540134')
    2 browser.find_element_by_name('password').send_keys('xxx')
    3 browser.find_element_by_id('dologin').click()

      最后,返回到主界面,释放iframe;

    1 browser.switch_to_default.content()

       第三步:怎样确定iframe的id?

    1.这里iframe的切换是默认支持id和name的方法的,当然实际情况中会遇到没有id属性和name属性为空的情况,这时候就需要先定位iframe;
        2.定位元素还是之前的八种方法同样适用,这里我可以通过tag先定位到,也能达到同样效果。
    1 iframe = browser.find_element_by_tag_name('iframe')
    2 browser.switch_to.frame(iframe)
    第四步:怎样快速确定一个网页是否有iframe
    这里提供一个简单的方法,当然可能不是很准确,但是最快速最简单,就是当我们按F12后出现firebug,看左上角显示的是Top Window还是iframe#xxx。
    如果出现的是Top Window,则表示没有iframe,我们可以正常定位;
    如果出现的是iframe/frame。则表示有iframe/frame,我们需要切换到iframe/frame,才能定位。
     
    写在最后的话:这些都是小编自己一个字一个字敲上去的,原创算不上,可能很多类似的资料,小编写这个的目的是为了激励自己在学习道路上养成良好的习惯,所以转载请注明出处,谢谢!
  • 相关阅读:
    Microsoft Visio 2013 简体中文版
    visio2013产品密钥激活
    WebConfigurationManager和ConfigurationManager区别
    错误 the type "xxxx" is defined in an assembly that is not refernced.You must add a reference to assem
    Windows10安装oracle 19c数据库+PLsql详细安装过程
    js 三个input输入框,组合查询。
    Vue.js组件教程 https://www.jb51.net/Special/926.htm
    LeetCode刷题之路
    涉猎---Java多线程
    深信服翔鹰计划线上笔试考察点总结(路由,虚拟架构,IPV4,Tcp/IP......)
  • 原文地址:https://www.cnblogs.com/sanzangTst/p/7473437.html
Copyright © 2020-2023  润新知