Python中frame,selenium frameset
Python对selenium tools中框架/iframe/框架集切换问题的处理_技术博客of _mb62abf3afb54fb _博客
前言框架标签有三种:frame、Frame、iframeFrameset和其他普通标签没什么区别,不会影响元素的正常定位;对于selenium定位,frame和iframe是相同的。selenium工具中有一组操作frame/iframe框架的方法。
iframe元素将创建包含另一个文档的内嵌框架(即内嵌框架)。【说明:它就像我们的一个主页。里面有很多小模块。每个小模块都用这个叫iframe的东西隔开,方便维护和开发。也方便开发自己的部分,互不相干]
通常不在同一个iframe分为两种情况:一种是包含(嵌套),一种是层次。
我们为什么要定位iframe?由于iframe是独立的小模块,就像机舱的特点,所以iframe就是机舱门。如果你想进入船舱找东西,你必须先进入舱门。因此,当元素位于不同的iframe中时,必须首先输入元素所在的iframe,然后才能定位元素。
iframe的定位有几种方法:1。使用iframe中的ID来定位它;2.使用iframe中的名称来定位;3.使用xpath定位;4.使用css进行定位
1.输入iframe
首先我们使用self.driver.switch_to.frame()的方法进入iframe框架。如果iframe是包含关系,我们需要从最外面的iframe开始一层一层的输入。
self.driver.switch_to.frame()
1.使用iframe中的ID来定位。
self . driver . switch _ to . frame( noticeCheckWin )
2.使用iframe中的名称来定位。
self . driver . switch _ to . frame( noticeCheckWin )
3.使用xpath定位
self . frame 2=self . driver . find _ element _ by _ XPath(/html/body/div[2]/div[2]/div[2]/iframe[3])
自我。driver.switch _ to。框架(自我。frame2) #定位动态iframe。您可以删除动态部分,然后用xpath找到它。
4.使用css进行定位
self . frame 3=self . driver . find _ element _ by _ CSS _ selector( body div . h-main div . h-screen . layout div . h-screen-coni fram )#你还可以发现所有路径都是用下标截出来的。
self.driver.switch_to .帧(self.frame3)
2.退出iframe
退出iframes有两种形式:1。退出所有iframes并切换到主文档;2.返回到父iframes。
1.退出所有iframe并切换到主文档。
self . driver . switch _ to . default _ content(),
2.返回父iframe
敬。parent _ frame () #回到想要的层次方法iframe框架有name或id属性的值。
driver . switch _ to . frame( iframe-id )driver . switch _ to . frame( iframe-name )【注意】不得不提一下switch_to_frame()方法。很多人这样写的时候会发现这句话被划掉了,因为最新版本的selenium库已经进行了相关的方法
frame/iframe框架没有name或id属性的值:采用xpath元素定位(使用iframe的其他属性)。
例如:
代码如下:
xf=self . driver . find _ element _ by _ XPath(//iframe[@ allow transparency= true ])
Driver.switch_to.frame(xf)跳出当前帧/iframe(返回上一帧/iframe)
self . driver . switch _ to . parent _ frame()返回最外层框架/iframe框架。
驱动程序示例。切换到。default _ content()示例:切入框架selenium工具提供了switch_to.frame()方法切入框架;
切换到。frame (reference) # reference是传入的参数,用于定位框架。可以传入selenium的id、名称、索引和WebElement对象;Html代码:
超文本标记语言
标题iframe测试/标题/标题
身体
iframe id= frame 1 src= name= name 1 /iframe
英国铁路公司
iframe id= frame 2 src= name= name 2 /iframe
/body
/html python脚本代码:
从selenium导入web驱动程序
driver=webdriver。铬合金()
Driver.switch_to.frame(0) # 1。用帧的索引来定位,第一个是0
# driver . switch _ to . frame( frame 1 )# 2。使用id定位
# driver . switch _ to . frame( name 1 )# 3。使用名称定位
#司机。切换到。框架(驱动程序。find _ element _ by _ id( frame 1 )# 4。使用WebElement对象定位元素通常使用ID和name定位元素,可以解决大部分问题。但是有时frame标签没有这两个属性,所以可以使用index和WebElement来定位它:
(1)index从0开始,传入的integer参数由index确定定位,传入的str参数由id/name确定定位。
(2)WebElement对象,即find_element系列方法获得的对象。我们可以使用tag_name、xpath等。定位框架对象。
例:裁剪掉框架frame,剪成框架frame后,就不能继续操作主文档的元素了。这时候如果要操作主文档的内容,就需要切回主文档。
Selenium工具提供了switch_to.default_content()方法来裁剪框架frame;
driver . switch _ to . default _ content()示例:嵌套框架的操作html代码:
超文本标记语言
标题iframe测试/标题/标题
身体
iframe id= frame 1 src= name= name 1
iframe id= frame 2 src= name= name 2 /iframe
/iframe
/body
/html 1。从主文档剪切到frame2框架,一层一层地剪切进去。
driver.switch_to.frame(frame1 )
driver . switch _ to . frame( frame 2 )2。从第2帧切回到第1帧。在这里,selenium tool为我们提供了一种从子框架切回到父框架的方法,而不需要切回到主文档然后再切入。
driver . switch _ to . parent_frame()#如果当前文档为主文档,没有有效的解释:用parent _ frame()的方法,相当于后退,我们可以随意切换不同的框架帧,在不同层次的框架帧中随意跳转。
期待陌生,拥抱惊喜。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。