自动化测试基础篇--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,才能定位。
写在最后的话:这些都是小编自己一个字一个字敲上去的,原创算不上,可能很多类似的资料,小编写这个的目的是为了激励自己在学习道路上养成良好的习惯,所以转载请注明出处,谢谢!