首页
学习
活动
专区
圈层
工具
发布
20 篇文章
1
船长带你看书——《selenium2 python 自动化测试实战》(1)
2
船长带你看书——《selenium2 python 自动化测试实战》(2)
3
《selenium2 python 自动化测试实战》(3)——操作测试对象
4
《selenium2 python 自动化测试实战》(4)——鼠标事件
5
《selenium2 python 自动化测试实战》(5)——键盘事件
6
《selenium2 python 自动化测试实战》(6)——打印信息和设置等待时间
7
《selenium2 python 自动化测试实战》(7)——定位一组对象
8
《selenium2 python 自动化测试实战》(8)——定位iframe
9
《selenium2 python 自动化测试实战》(9)——切换窗口
10
《selenium2 python 自动化测试实战》(10)——下拉框和alert
11
《selenium2 python 自动化测试实战》(11)——selenium安装版本
12
《selenium2 python 自动化测试实战》(12)——跳过验证码登录add_cookie
13
《selenium2 python 自动化测试实战》(13)——上传文件
14
《selenium2 python 自动化测试实战》(14)——下载文件
15
《selenium2 python 自动化测试实战》(16)——js操作补充
16
《selenium2 python 自动化测试实战》(17)——几个cookies操作
17
《selenium2 python 自动化测试实战》(18)——自动化测试模型(一)
18
《selenium2 python 自动化测试实战》(18)——webdriver错误截图
19
《selenium2 python 自动化测试实战》(19)——Selenium工具介绍
20
《selenium2 python 自动化测试实战》(20)——unittest单元测试框架解析

《selenium2 python 自动化测试实战》(8)——定位iframe

我们来看一段最早的代码:

代码语言:javascript
代码运行次数:0
复制
# coding: utf-8

from selenium import webdriver
from time import sleep

driver = webdriver.Firefox()
driver.get("http://blog.hexun.com/")
driver.find_element_by_id("read_btn").click()
driver.maximize_window()
sleep(3)
driver.find_element_by_id("username").send_keys("账号")
driver.find_element_by_id("password").send_keys("密码")
driver.find_element_by_xpath(".//*[@id='login12']/div/div/div/div[3]/input").click()
sleep(3)
# 点击发送博客
driver.find_element_by_xpath(".//*[@id='login12']/div/div/div[3]/a[1]").click()
sleep(3)
curr = driver.current_window_handle
all_curr = driver.window_handles
for i in all_curr:
    if i != curr:
        driver.switch_to.window(i)
        sleep(2)
        driver.find_element_by_id("hxjy_blog_tit").send_keys(u"我的文章")
        driver.switch_to.frame(driver.find_element_by_xpath(".//*[@id='editorContainer']/iframe"))
        sleep(2)
        driver.find_element_by_xpath("html/body").click()
        driver.find_element_by_xpath("html/body").send_keys(u"童林")
        driver.switch_to.default_content()
        # 页面下拉
        js = "var q=document.documentElement.scrollTop=1000"
        driver.execute_script(js)
        driver.find_element_by_xpath(".//*[@id='hxjy_blog_label']").send_keys(u"测试")
        driver.find_element_by_xpath(".//*[@id='postarticle']").click()

这是我第一篇讲selenium时发给大家看的代码,现在我就就拿这段代码举例子:

1、如何辨别是不是iframe

我们用箭头所指工具点击要查看的元素后,在FirePath选项卡下,方框所示的位置会有"iframe.editor"或者"iframe"的提示,这时候我们就可以确定——这是一个iframe。

2、定位iframe

这个我觉得有点麻烦,不知道各位大神怎么定位,我说一下我的思路,大家可以参考。由于一点编辑框就进入iframe,导致我不知道怎么定位这个iframe的位置,于是我选择定位这个iframe上面的元素,也就是定位下图方框那里,然后看下面的元素,点开div标签,在里面找iframe,方便的是鼠标移动到标签上时页面会有显示对应的位置:

上图我们看到了iframe,然后把鼠标放到iframe上,右键选择copy xpath:

这样我们就定位到了iframe的位置。

定位到了以后,我们要转移到iframe上,pycharm里提示的方法是switch_to_frame(),但是这个方法已经过时了,如果你用这个方法,pycharm会划线提醒你,最新的方法是switch_to.frame(),传的参数就是iframe的定位也就是代码里黑色那句:

代码语言:javascript
代码运行次数:0
复制
driver.switch_to.frame(driver.find_element_by_xpath(".//*[@id='editorContainer']/iframe"))

现在我们进入了iframe,接下来正常进行定位、输入内容就可以了(看代码)

3、怎么跳出iframe

进入了iframe以后就像进入了一个盒子,盒子里面的东西可以找到,可是盒子外面的东西是找不到的。所以当我们操作完成,继续定位发现下图方框处变成Top Window时,证明这已经不是iframe,我们需要跳出盒子了

一句话就能跳出来,就像有的人和你说“我已经放下了”就离开你一样,哈哈,你也可以这么潇洒的对不爱你的人说。

也是一句话,就是最上面代码中的黑色斜体字:

代码语言:javascript
代码运行次数:0
复制
driver.switch_to.default_content()

这样就跳出iframe了。好多登录框、文章输入框都是iframe写的,现在对你来说应该已经不难了,大家快试试吧~~

遇到问题可以留言哦~

下一篇
举报
领券