web自动化测试,如果要定位的元素在iframe内,无法避免iframe窗口切换的问题。
1、iframe
页面内嵌窗口(html内嵌套html。多窗口就是有多个html文件,所以iframe也要窗口切换)
2、 切到 iframe 页面的常用方法
方法1:索引,适用于只有一个iframe的情况
driver.switch_to.frame(0)
方法2:name属性
driver.switch_to.frame("iframe的name属性")
方法3:webElement对象
即:先找到要切换的 iframe 元素,
再通过 driver.switch_to.frame(iframe_el) 切换窗体
3、如何判断当前页面有几个iframe
我自己踩过的坑,偷懒直接看层级以为只有一个iframe,然后用了索引来切换窗口,结果一直定位“帐号密码登录”元素失败。
后面搜索了下,发现原来有4个。所以,不确定有几个iframe时,还是建议直接搜索比较可靠。
4、实战练习
以上图为例,不能使用索引,又没有name属性,只能使用方法3切换窗体
from selenium import webdriver
driver = webdriver.Chrome() # 初始化一个浏览器
driver.implicitly_wait(10) # 设置隐性等待
driver.maximize_window() # 浏览器窗口最大化
# 1、进入网页
url = 'https://ke.qq.com/'
driver.get(url) # 打开一个网页
# 2、主页面,点击“登录”按钮
el = driver.find_element('xpath', '//div/a[@id="js_login"]')
el.click()
# 3、切换到 iframe
iframe = driver.find_element('xpath', '//div/div/iframe')
driver.switch_to.frame(iframe)
# 4、点击“账号密码登录”
el = driver.find_element('xpath', '//a[text()="帐号密码登录"]')
el.click()