当前位置:首页 > 技术知识 > 正文内容

一篇文章高效定位iframe_文章定位功能使用教程

maynowei6个月前 (09-11)技术知识67

今天跟大家分享的是如何高效的定位iframe。我们来看一段最早的代码:

# coding: utf-8from selenium import webdriverfrom 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的定位也就是代码里黑色那句:

driver.switch_to.frame(driver.find_element_by_xpath(".//*[@id='editorContainer']/iframe"))

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

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

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

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

driver.switch_to.default_content()

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

如果对接口、性能、自动化测试、面试经验交流等感兴趣的,可以关注我的头条号,我会不定期的发放免费的资料,这些资料都是从各个技术网站搜集、整理出来的,如果你有好的学习资料可以私聊发我,我会注明出处之后分享给大家。欢迎分享,欢迎评论,欢迎转发。需要资料的同学可以关注小编+转发文章+私信【测试资料】

相关文章

Objective C interface(objective什么意思)

在Objective C里面,interface基本可以理解为其他语言里面的class。当然也有些不同。首先我们可以新建一个Objective-C的file。这里我们添加一个MyClass.m和一个M...

Android TabLayout + ViewPager2使用

1、xml文件<!--明细列表--> <com.google.android.material.tabs.TabLayout android:id="@+id/ty_...

Oracle 不是有效的导出文件,标头验证失败 解决方法

第一种:网上搜索到的大多解决方法是说导出文件时使用的Oracle版本不一致问题,需要修改dmp文件的版本号。如果确定版本号确实不一样,请自行搜索一下解决方法。第二种:备份dmp文件时,备份的语句可能使...

China to work with all member states to complete preparations in final phase for SCO Tianjin summit: spokesperson

BEIJING, July 31 (Xinhua) -- China will work with all the Shanghai Cooperation Organization (SCO) me...

纯干货:node.js入门教程以及中文学习资源大搜罗!

node.js是Javascript的一个运行环境,也就是对Google V8引擎进行封装。node.js优化了特殊用例,还提供替代性强的API。基于此,今天W3Cschool小师妹将为大家带来史上最...

V-Ray反射光泽度渲染元素 - VRayMtlReflectGlossiness

本文提供有关反射光泽度渲染元素以及如何在合成中使用该元素的一些基本详细信息。概述反射光泽度渲染元素将图像的反射光泽度存储为灰度图像,该灰度图像表示为场景中材质设置的反射光泽度。白色区域反射光泽度最高,...