selenium 元素可以定位,运行找不到。iframe和frame内嵌框架。

小踩一坑:元素在页面可以定位到,运行时找不到该元素。
找到原因:元素在iframe标签内。

一、 iframe

iframe: 元素会创建包含另外一个文档的内联框架(即行内框架)-HTML中镶嵌HTML。
frame: frameset 中的一个特定的窗口-独立窗口。
Frame与Iframe两者可以实现的功能基本相同,Iframe比Frame具有更多的灵活性。 frame是整个页面的框架,iframe是内嵌的网页元素,也可以说是内嵌的框架。

二、广发银行模拟用户窗口

1.开广发银行:http://www.cgbchina.com.cn/
可以自行百度搜索广发银行,请进入官网不要进入广发信用卡申请官网。
2.点击在线演示

image.png

3.登录虚拟账号后选择-我的账户-立即转账
image.png

4.跳转后页在iframe标签内


image.png

5.正常定位该框架里元素,运行后找不到。使用 driver.switch_to_frame()
6.iframe标签属性:里面有 name 元素或 id元素。driver.switch_to_frame(【内就可以直接填入】name 或id)


image.png

image.png

三、定位方法

1.方法一:直接使用。

#进入内嵌框架
self.driver.switch_to_frame(xxx)
#定位下一步元素

然后你会遇到2个情况:1.你直接运行通过了,恭喜。2.运行时还是提示找不到元素!!!
返回查找原因发现ifame ID发生变化再次刷新发现又不一样。嘿嘿嘿!得出结论它是随机的,玩个鸡毛。


image.png

image.png

2.方法二:iframe是唯一的。
由于id,name是随机的,要定位比较困难,此处由于iframe的标签是唯一的,所以可以用tag_name定位

def iframes(self,iframe):
        self.driver.switch_to_frame(iframe)
def find_element(self,by,selector):   # 封装八大方法
        elif by=='tag':
           return self.driver.find_element_by_tag_name(selector)


framename=self.driver.find_element("tag","iframe")
self.driver.iframes(framename)

# 退出内嵌框架
self.driver.switch_to.default_content()

你可能感兴趣的:(selenium 元素可以定位,运行找不到。iframe和frame内嵌框架。)