UI自动化 Selenium frame框架处理
frame框架处理
- frame(iframe)标签作⽤--是什么?
- 在⻚⾯中加载另⼀个⻚⾯
- 为什么处理iframe(frane)?
- 焦点默认在启动⻚⾯,如果不出处理iframe,⽆法操作iframe嵌⼊的⻚⾯元素。
- 如何处理
1、切换到iframe driver.switch_to.frame(iframe元素)
2、操作元素
3、回到默认⻚⾯ driver.switch_to.default_content()
# 获取注册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")
切换多窗口
- 什么是多窗口?
- 为什么要切换? selenium默认启动时,所有的焦点在启动窗⼝,那么意味着⽆法操作其他窗⼝的标签。
- 切换步骤
- 获取窗⼝句柄 driver.window_handles
- 使⽤句柄切换窗⼝ driver.switch_to.widnow(handle) 句柄:窗⼝的唯⼀标识符
- 示例
"""
需求:
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"
- 多窗⼝之间切换⼯具封装
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⽹⻚ ⽤户名
switch_window(title_A)
driver.find_element(By.CSS_SELECTOR, "#userA").send_keys("admin")
switch_window(title_B)
driver.find_element(By.CSS_SELECTOR, "#userB").send_keys("admin")