Sparkle CodesSparkle
项目 / web测试 / Day06

控件实战:下拉框、多选框与 Iframe 嵌套处理

x
xpx
Jun 17, 2024
Editorial Insight
#Automation#Locators#Selenium

复杂控件交互:处理 UI 自动化中的各类「特殊需求」

在 Web UI 自动化中,不仅需要点击按钮、输入文字,还经常需要处理下拉选择、单/复选框以及繁琐的 Iframe 嵌套结构。


1. 下拉框选择 (Select)

Selenium 提供了 Select 类,专门用于处理标准的 HTML <select> 标签。

PYTHON
from selenium.webdriver.support.select import Select
# 1. 定位元素并初始化对象
select_ele = driver.find_element(By.ID, 's1Id')
s_obj = Select(select_ele)
# 2. 选择方法
s_obj.select_by_visible_text('Option 3')   # 最贴近人类行为(推荐)
s_obj.select_by_value('v3')               # 效率最高(适合后端数据驱动)

2. 单选框 (Radio) 与 复选框 (Checkbox)

本质上,这些控件仍然是 <input> 标签,操作核心是:检查状态 -> 点击。

幂等性操作

使用 .is_selected() 来确保你的操作是幂等的(即重复执行结果一致)。

PYTHON
checkbox = driver.find_element(By.ID, 'checkbox1')
if not checkbox.is_selected():
    checkbox.click() 

3. Iframe 窗口切换

Iframe(内联框架)是自动化中的「隐形门」。直接定位报错通常是因为你还没从主 HTML 「跨进」框架。

  • 进入框架: driver.switch_to.frame(id/name/element)
  • 退出到顶层: driver.switch_to.default_content()

如何验证切换成功?(Evidence Chain)

  • 进入验证: 切换后,尝试定位框架内特有的元素(如 ID 为 frame_header 的文本)。如果定位成功,说明已进入。
  • 退出验证: 退出后,尝试定位主页面特有的元素。

4. 多窗口处理:Handle 机制

当点击链接打开新标签页时,WebDriver 的焦点仍然留在原窗口。

PYTHON
# 获取当前所有窗口的句柄
all_handles = driver.window_handles
# 切换到最新的窗口
driver.switch_to.window(all_handles[-1])

验证证据:

检查 driver.title 或 driver.current_url 是否符合新页面的预期,作为切换成功的断言依据。


5. 自动化「黑科技」:JS 注入

应对只读属性 (readonly) 或复杂的日期控件,JS 是最后的杀手锏。

PYTHON
# 去除只读属性
js_code = "document.getElementById('date_picker').removeAttribute('readonly');"
driver.execute_script(js_code)

综合实战建议

  1. 切换后遗症: 进入 Iframe 后,如果代码需要操作主页面元素,必须先执行 switch_to.default_content()。
  2. 等待窗口加载: 切换新窗口前,建议使用显式等待 EC.number_of_windows_to_be(2),确保新窗口已完全弹出。

继续阅读: Web自动化-鼠标键盘模拟与滚动机制

BACK TO BLOG
The End of Interaction