【UI自动化测试】10_web自动化测试 _frame切换、多窗口切换

一、frame切换

  • 当前窗口中的元素如果在iframe标签的子网页中,不能直接进行元素定位,需要先进行frame切换才能进行定位和操作。
  • 如何分析所定位的元素是否在iframe标签中:
经验:当定位元素时,界面所看到样式如果是一块独立的区域,而且该区域和周围的样式完全不一样,就可以适当留意是否在一个iframe标签中。

提示:常用的frame表单有两种:frameset形式、iframe标签形式

1.1 frame

frame:HTML页面中的一种框架,主要作用是在当前页面中指定区域显示另一页面元素。

形式一: [了解]
	<frameset cols="25%,75%">
		<frame src="frame_a.htm">
		<frame src="frame_b.htm">
	</frameset>

形式二:
	<iframe name="iframe_a" src="demo_iframe.htm" width="200" height="200"></iframe>

1.2 frame方法

# 说明: 在Selenium中封装了如何切换frame框架的方法
# 步骤:
1、切换到iframe     driver.switch_to.frame(frame_reference) --> 切换到指定frame的方法
2、操作元素				
3、回到默认页面      driver.switch_to.default_content() --> 恢复默认页面方法
	
注:
- frame_reference:可以为frame框架的name、id或者定位到的frame元素
- 在frame中操作其他页面,必须先回到默认页面,才能进一步操作

在这里插入图片描述

1.3 frame切换-案例

# 导包
from selenium import webdriver
from time import sleep
from selenium.webdriver.common.by import By
from selenium.webdriver.support.select import Select

# 获取浏览器驱动对象
driver = webdriver.Chrome()
# 最大化浏览器
driver.maximize_window()
# 隐式等待
# driver.implicitly_wait(30)
# 打开url
url = r"D:\web自动化素材\课堂素材\注册实例.html"
driver.get(url)


"""
    需求:
        1. 打开注册实例.html
        2. 填写注册A 页面信息
        3. 填写注册B 页面信息   
"""

# 获取注册A iframe元素
A = driver.find_element(By.CSS_SELECTOR, "#idframe1")
# 1、切换到A
driver.switch_to.frame(A)
# 2、注册A操作
driver.find_element(By.CSS_SELECTOR,"#userA").send_keys("admin")

# 3、回到默认目录 注册时例.html
driver.switch_to.default_content()

# 4、获取注册B iframe元素
B = driver.find_element(By.CSS_SELECTOR, "#idframe2")
# 5、切换到B
driver.switch_to.frame(B)

# 6、注册B操作
driver.find_element(By.CSS_SELECTOR,"#userB").send_keys("admin")

# 关闭浏览器
sleep(3)
driver.quit()

二、多窗口切换

多窗口:在HTML页面中, 当点击超链接或者按钮时, 有的会在新的窗口打开页面。

为什么要切换窗口?  
- 页面存在多个窗口式,selenium默认焦点只会在主窗口上所有的元素,不切换窗口,无法操作除主窗口以外的窗口内元素

2.1 多窗口切换-方法

  • 窗口切换:selenium需要通过窗口的句柄来实现窗口的切换!
  • 句柄: 英文handle, 窗口的唯一识别码
步骤:
1) handles = driver.window_handles 			 --> 获取所有窗口句柄
2) driver.switch_to.window(handles[n])       --> 切换指定句柄窗口

3) driver.current_window_handle 	         --> 获取当前窗口句柄

- selenium只能定位当前窗口中的元素,要定位新的窗口的元素就必须进行窗口切换!

在这里插入图片描述

2.2 多窗口切换-案例

2.2.1 案例1

from time import sleep

from selenium import webdriver

# 1、获取浏览器
from selenium.webdriver.common.by import By
from selenium.webdriver.support.select import Select

driver = webdriver.Chrome()
driver.implicitly_wait(10)
# 2、打开url
driver.get("file:///Users/lgy/Documents/fodder/web/Register.html")

"""
    为什么要处理多窗口?-- selenium默认焦点在启动窗口,要操作其他窗口必须处理。
    需求:
        1、打开注册示例页面
        2、点击注册A网页链接
        3、填写注册A网页内容
"""
print("操作之前所有窗口的句柄:", driver.window_handles)

driver.find_element(By.LINK_TEXT, "注册A网页").click()
# 获取所有窗口句柄
handles = driver.window_handles
print("操作之后所有窗口的句柄:", handles)

# 重点:切换窗口
driver.switch_to.window(handles[1])

# 填写注册A网页 用户名
driver.find_element(By.CSS_SELECTOR, "#userA").send_keys("admin")


# 4、关闭浏览器
sleep(3)
driver.quit()

2.2.2 多窗口工具封装

from time import sleep

from selenium import webdriver

# 1、获取浏览器
from selenium.webdriver.common.by import By
from selenium.webdriver.support.select import Select

driver = webdriver.Chrome()
driver.implicitly_wait(10)
# 2、打开url
driver.get("file:///Users/lgy/Documents/fodder/web/Register.html")

"""
   需求:
        如何随心所欲切换窗口?
    思路:
        1、获取所有窗口句柄
        2、切换窗口
        3、获取当前所在窗口title
        4、判断title是否为需要的窗口
        5、执行代码
    需求:
        1、打开注册示例页面
        2、点击 注册A网页 注册B网页
        3、在A网页和B网页中输入 对用户名输入 admin 
"""


def switch_window(title):
    # 1、获取所有窗口句柄
    handels = driver.window_handles
    # 2、遍历句柄进行切换
    for handel in handels:
        # 操作
        driver.switch_to.window(handel)
        # 获取当前窗口title 并且 判断是否自己需要的窗口
        if driver.title == title:
            # 操作代码
            return "已找到{}窗口,并且已切换成功".format(title)

title_A = "注册A"
title_B = "注册B"

# 打开注册A和注册B网页
driver.find_element(By.LINK_TEXT, "注册A网页").click()
driver.find_element(By.LINK_TEXT, "注册B网页").click()


# 填写注册A网页 用户名
print(switch_window(title_A))
driver.find_element(By.CSS_SELECTOR, "#userA").send_keys("admin")

print(switch_window(title_B))
driver.find_element(By.CSS_SELECTOR, "#userB").send_keys("admin")

# 4、关闭浏览器
sleep(3)
driver.quit()

三、小结

面试题:如果定位不到元素怎么办?  

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

少云清

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值