当前位置: 首页 > article >正文

软件测试 —— Selenium(弹窗)

软件测试 —— Selenium(弹窗)

  • 弹窗的分类
      • 1. JavaScript 弹窗
      • 2. 模态对话框(Modal Dialogs)
      • 3. 浏览器原生弹窗
      • 4. 插件或扩展生成的弹窗
  • Alert类型 switch_to.alert
  • Confrim类型 accept()和dismiss()
  • Prompt send_keys(),accpect(),dismiss()
  • 文件上传 用send_keys传递路径

有时候,我们在访问浏览器时,浏览器会弹窗,如果我们想定位弹窗上的元素,一些弹窗用之前的方法是可以的,但是有一些弹窗不行,因为这部分弹窗不属于页面上的元素(可以看成新打开了一个页面,要切换句柄)。这个时候我们就要用一些其他的方法来进行交互:

在这之前,我们先了解一下弹窗的分类:

弹窗的分类

弹窗(Popup)在网页和应用程序中非常常见,它们用于向用户传达信息、请求确认或输入数据。根据其来源和技术实现方式,弹窗可以分为几种主要类型:

1. JavaScript 弹窗

这些弹窗是由 JavaScript 直接生成的,通常是最简单的形式,并且由浏览器直接管理。Selenium 可以通过内置的方法来处理这类弹窗。

  • Alert
  • 显示一条消息给用户,并有一个“确定”按钮。
  • 使用 driver.switch_to.alert 来访问并处理它。
    在这里插入图片描述
  • Confirm
  • 显示一条消息以及“确定”和“取消”两个按钮。
  • 用户的选择可以通过 alert.accept()alert.dismiss() 来模拟。
    在这里插入图片描述
  • Prompt
  • 请求用户输入文本,并提供“确定”和“取消”选项。
  • 可以使用 alert.send_keys() 输入文本,然后用 alert.accept()alert.dismiss() 处理。
    在这里插入图片描述

2. 模态对话框(Modal Dialogs)

模态对话框是一种阻止用户与页面其他部分交互直到对话框被关闭的弹窗。它们通常是由 HTML 和 CSS 构建,并可能包含表单或其他交互元素。由于它们是网页的一部分,所以 Selenium 可以像操作普通网页元素一样与之交互。

  • Bootstrap Modal
  • 基于流行的 Bootstrap 框架创建的模态窗口。
  • 使用标准的定位器(如 ID、类名、XPath 等)找到并操作这些元素。
  • Custom Modals
  • 开发者自定义的模态对话框,样式和行为各异。
  • 同样可以通过标准的 Selenium 定位技术进行交互。

3. 浏览器原生弹窗

这类弹窗不是由网页内容生成的,而是由浏览器本身或操作系统提供的。Selenium 无法直接与它们交互,因为它们不在 DOM 中。

  • 文件上传/下载对话框
  • 当用户尝试上传或下载文件时出现的对话框。
  • 可以通过设置浏览器配置项或者使用第三方工具(如 AutoIt, pywinauto)来自动化处理。
  • 安全警告或证书错误提示
  • 浏览器遇到不信任的 SSL 证书或其他安全性问题时显示的警告。
  • 这些通常需要手动处理,但有时也可以通过调整浏览器设置来绕过。
  • 打印对话框
  • 当调用打印功能时出现的对话框。
  • 类似地,这也不是网页的一部分,因此不能直接用 Selenium 控制。

4. 插件或扩展生成的弹窗

某些浏览器插件或扩展程序可能会生成自己的弹窗,例如广告拦截器的通知。对于这些弹窗,Selenium 也可能无能为力,因为它们不属于网页的内容。处理这种情况可能需要禁用相关插件或寻找特定的解决方案。

我们今天主要讨论的是Javascript那一类的弹窗,这一类的弹窗一般不能被定位。

Alert类型 switch_to.alert

import time

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.firefox.service import Service
from webdriver_manager.firefox import GeckoDriverManager

FireFoxIns = GeckoDriverManager().install()

driver = webdriver.Firefox(service=Service(FireFoxIns))

# 弹窗
driver.get("file:///C:/Users/luoshui/Desktop/%E5%AD%A6%E4%B9%A0%E6%96%87%E4%BB%B6/%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E8%AF%BE%E4%BB%B6/%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E8%AF%BE%E4%BB%B6/selenium-html/alert.html#")

# 点击
driver.find_element(By.CSS_SELECTOR,"#tooltip").click()
time.sleep(3)

# 点击弹窗(切换句柄)
alter =driver.switch_to.alert
time.sleep(3)

# 点击确定
alter.accept()
time.sleep(3)

在这里插入图片描述

在这里插入图片描述

Confrim类型 accept()和dismiss()

import time

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.firefox.service import Service
from webdriver_manager.firefox import GeckoDriverManager

FireFoxIns = GeckoDriverManager().install()

driver = webdriver.Firefox(service=Service(FireFoxIns))

# 弹窗
#Alert
#driver.get("file:///C:/Users/luoshui/Desktop/%E5%AD%A6%E4%B9%A0%E6%96%87%E4%BB%B6/%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E8%AF%BE%E4%BB%B6/%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E8%AF%BE%E4%BB%B6/selenium-html/alert.html#")

# Confrim
driver.get("file:///C:/Users/luoshui/Desktop/%E5%AD%A6%E4%B9%A0%E6%96%87%E4%BB%B6/%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E8%AF%BE%E4%BB%B6/%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E8%AF%BE%E4%BB%B6/selenium-html/confirm.html")

# 点击
driver.find_element(By.CSS_SELECTOR,"body > input:nth-child(1)").click()
time.sleep(3)

# 点击弹窗(切换句柄)
alter =driver.switch_to.alert
time.sleep(3)

# 点击确定
alter.accept()
time.sleep(3)

driver.quit()

在这里插入图片描述
在这里插入图片描述大家可以换成dismiss来试试看

Prompt send_keys(),accpect(),dismiss()

import time

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.firefox.service import Service
from webdriver_manager.firefox import GeckoDriverManager

FireFoxIns = GeckoDriverManager().install()

driver = webdriver.Firefox(service=Service(FireFoxIns))

# 弹窗
#Alert
#driver.get("file:///C:/Users/luoshui/Desktop/%E5%AD%A6%E4%B9%A0%E6%96%87%E4%BB%B6/%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E8%AF%BE%E4%BB%B6/%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E8%AF%BE%E4%BB%B6/selenium-html/alert.html#")

# Confrim
#driver.get("file:///C:/Users/luoshui/Desktop/%E5%AD%A6%E4%B9%A0%E6%96%87%E4%BB%B6/%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E8%AF%BE%E4%BB%B6/%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E8%AF%BE%E4%BB%B6/selenium-html/confirm.html")

# Prompt
driver.get("file:///C:/Users/luoshui/Desktop/%E5%AD%A6%E4%B9%A0%E6%96%87%E4%BB%B6/%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E8%AF%BE%E4%BB%B6/%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E8%AF%BE%E4%BB%B6/selenium-html/Prompt.html")

# 点击
driver.find_element(By.CSS_SELECTOR,"body > input:nth-child(1)").click()
time.sleep(3)

# 点击弹窗(切换句柄)
alter =driver.switch_to.alert
time.sleep(3)

#输入信息
alter.send_keys("admin")
time.sleep(3)

# 点击确定
alter.accept()
time.sleep(3)

driver.quit()


在这里插入图片描述
在这里插入图片描述

文件上传 用send_keys传递路径

点击文件上传的场景下会弹窗系统窗口,进行文件的选择。
selenium无法识别非web的控件,上传文件窗口为系统自带,无法识别窗口元素
在这里插入图片描述

但是可以使用sendkeys来上传指定路径的文件,达到的效果是一样的

import time

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.firefox.service import Service
from webdriver_manager.firefox import GeckoDriverManager

FireFoxIns = GeckoDriverManager().install()

driver = webdriver.Firefox(service=Service(FireFoxIns))

# 弹窗
#Alert
#driver.get("file:///C:/Users/luoshui/Desktop/%E5%AD%A6%E4%B9%A0%E6%96%87%E4%BB%B6/%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E8%AF%BE%E4%BB%B6/%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E8%AF%BE%E4%BB%B6/selenium-html/alert.html#")

# Confrim
#driver.get("file:///C:/Users/luoshui/Desktop/%E5%AD%A6%E4%B9%A0%E6%96%87%E4%BB%B6/%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E8%AF%BE%E4%BB%B6/%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E8%AF%BE%E4%BB%B6/selenium-html/confirm.html")

# Prompt
#driver.get("file:///C:/Users/luoshui/Desktop/%E5%AD%A6%E4%B9%A0%E6%96%87%E4%BB%B6/%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E8%AF%BE%E4%BB%B6/%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E8%AF%BE%E4%BB%B6/selenium-html/Prompt.html")

# 文件上传
driver.get("file:///C:/Users/luoshui/Desktop/%E5%AD%A6%E4%B9%A0%E6%96%87%E4%BB%B6/%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E8%AF%BE%E4%BB%B6/%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E8%AF%BE%E4%BB%B6/selenium-html/upload.html")

# 点击
ele = driver.find_element(By.CSS_SELECTOR,".span6 > input:nth-child(2)")
time.sleep(3)

#输入信息
ele.send_keys("C:\\Users\\luoshui\\Desktop\\新建 文本文档.txt")
time.sleep(3)

driver.quit()

在这里插入图片描述


http://www.kler.cn/a/506123.html

相关文章:

  • C# 并发和并行的区别--16
  • Cosmos:英伟达发布世界基础模型,为机器人及自动驾驶开发加速!
  • jupyter notebook练手项目:线性回归——学习时间与成绩的关系
  • Vue2+OpenLayers给标点Feature添加信息窗体(提供Gitee源码)
  • 查看APK的公钥,MD5信息
  • 【C++】PP5015 [NOIP2018 普及组] 标题统计
  • Dart语言的文件操作
  • 疾病防控综合系统设计与实现(代码+数据库+LW)
  • 构建高效安全的数据库异地备份方案
  • 计算机三级网络技术 大题(学习笔记)
  • 使用el-tree根据切割规则切割数据生成树形结构
  • Python猜数小游戏
  • idea上git log面板的使用
  • openharmony标准系统方案之瑞芯微RK3568移植案例
  • 用ChatGPT进行酒店评论情感分析
  • HTTP:TIME_WAIT累积与端口耗尽
  • delphi 调用 c++Dll 函数获取纯真ip地址
  • 浅谈云计算15 | 存储可靠性技术(RAID)
  • 如何在谷歌浏览器中设置自定义安全警告
  • k8s 集群组件
  • android 主题都表示什么意思
  • 怎么防止SQL注入攻击
  • Uniapp-运行到手机安卓基座报错
  • 穷举vs暴搜vs深搜vs回溯vs剪枝系列一>优美的排列
  • 【力扣Hot 100】普通数组1
  • Oracle FLOOR函数的用法