自动化测试常用函数:弹窗、等待、导航、上传与参数设置

news2024/12/23 19:07:57

目录

一、弹窗

1. 警告弹窗+确认弹窗

2. 提示弹窗

二、等待

1. 强制等待

2. 隐式等待

3. 显示等待

三、浏览器导航

1. 打开网站

2. 浏览器的前进、后退、刷新

四、文件上传

五、浏览器参数设置

1. 设置无头模式

2. 页面加载策略


一、弹窗

        弹窗是在页面是找不到任何元素的,这种情况该怎么处理呢?我们可以使用selenium提供的Alert接口。

1. 警告弹窗+确认弹窗

alert = driver.switchTo.alert
//确认
alert.accept()
//取消
alert.dismiss()

2. 提示弹窗

alert = driver.switchTo.alert
alert.send_keys("hello")
alert.accept()
alert.dismiss()

二、等待

        通常代码执行的速度要比页面渲染的速度要快,那该如何避免因为渲染过慢出现的自动化误报的问题呢?可以使用selenium中提供的以下三种等待方法:

1. 强制等待

  • time.sleep()
  • 优点:使用简单,调试的时候比较有效
  • 缺点:影响运行效率,浪费大量的时间

2. 隐式等待

        隐式等待是一种智能等待,他可以规定在查找元素时,在指定时间内不断查找元素。如果找到则代码继续执行,直到超时没找到元素才会报错。

implicitly_wait() 参数:秒

#隐式等待5秒
driver.implicitly_wait(5)

        隐式等待作用域是整个脚本的所有元素。即只要driver对象没有被释放掉( driver.quit() ),隐式等待就⼀直生效。

优点:智能等待,作用于全局

3. 显示等待

        显示等待也是一种智能等待,在指定超时时间范围内只要满足操作的条件就会继续执行后续代码。

  • WebDriverWait(driver,sec).until(functions)
  • functions :涉及到 selenium.support.ui.ExpectedConditions 包下的 ExpectedConditions类
  • ExpectedConditions下涉及到的方法:https://www.selenium.dev/selenium/docs/api/py/webdriver_support/selenium.webdriver.support.expected_conditions.html

示例:

from selenium.webdriver.support import expected_conditions as EC

wait = WebDriverWait(driver,2)
wait.until(EC.invisibility_of_element((By.XPATH,'//[@id="2"]/div/div/div[3]/div[1]/div[1]/div')))
  • 优点:显示等待是智能等待,可以自定义显示等待的条件,操作灵活
  • 缺点:写法复杂

三、浏览器导航

1. 打开网站

driver.get("https://www.baidu.com")

2. 浏览器的前进、后退、刷新

  • 前进:driver.back()
  • 后退:driver.forward()
  • 刷新:driver.refresh()
import time
from datetime import datetime
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.ie.service import Service
from webdriver_manager.chrome import ChromeDriverManager

#打开浏览器---驱动管理
ChromeIns = ChromeDriverManager().install()
#创建谷歌浏览器驱动对象
driver = webdriver.Chrome(service=Service(ChromeIns))

#打开百度标签页
driver.get("https://www.baidu.com")

driver.find_element(By.CSS_SELECTOR, "#kw").send_keys("天水")
driver.find_element(By.CSS_SELECTOR, "#su").click()

#后退
time.sleep(2)
driver.back()
#前进
time.sleep(2)
driver.forward()
#刷新
time.sleep(2)
driver.refresh()

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

四、文件上传

        点击文件上传的场景下会弹出系统窗口,进行文件的选择。

        selenium无法识别非web的控件,上传文件窗口为系统自带,无法识别窗口元素。但是可以使用sendkeys来上传指定路径的文件,达到的效果是⼀样的。

driver.get("file:///D:/file/upload.html")
ele = driver.find_element(By.CSS_SELECTOR,"body > div > div >input[type=file]")
ele.send_keys("D:\\file\\test.txt")

五、浏览器参数设置

1. 设置无头模式

#打开浏览器---驱动管理
ChromeIns = ChromeDriverManager().install()
#浏览器参数配置
options = webdriver.ChromeOptions()
#添加无头模式
options.add_argument("-headless")
#创建谷歌浏览器驱动对象
driver = webdriver.Chrome(service=Service(ChromeIns), options=options)

2. 页面加载策略

  • options.page_load_strategy = '加载方式'

页面加载方式主要有三种类型:

策略说明
normal默认值, 等待所有资源下载
eagerDOM 访问已准备就绪, 但诸如图像的其他资源可能仍在加载
none完全不会阻塞WebDriver
#打开浏览器---驱动管理
ChromeIns = ChromeDriverManager().install()
#浏览器参数配置
options = webdriver.ChromeOptions()
#添加页面加载策略
options.page_load_strategy = 'normal' #等待所有的资源加载完成
options.page_load_strategy = 'eager'  #DOM访问就绪
options.page_load_strategy = 'none'   #完全不阻塞,直接继续往下执行脚本
#创建谷歌浏览器驱动对象
driver = webdriver.Chrome(service=Service(ChromeIns), options=options)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2164575.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

震撼!最强开源模型通义千问2.5 72B竟在4GB老显卡上成功运行!

炸裂!最强开源模型一夜之间易主。阿里发布千问2.5模型,72B版本在MMLU、MATH、MBPP等大部分评测指标上都超过了Llama3 405B,甚至一些指标也超过了GPT4o。正式加冕最强开源模型新王! 今天要挑战用我的4GB老显卡不做量化、不做压缩&…

光伏仿真:排布设计如何优化用户体验?

1、屋顶绘制精准 光伏系统的性能直接受到屋顶结构的影响,因此,屋顶绘制的精准性是光伏仿真设计的首要任务。现代光伏仿真软件通过直观的界面和强大的图形编辑功能,使得用户能够轻松导入或绘制出待安装光伏系统的屋顶形状。无论是平面屋顶、斜…

LLM - 使用 XTuner 指令微调 多模态大语言模型(InternVL2) 教程

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/142528967 免责声明:本文来源于个人知识与公开资料,仅用于学术交流,欢迎讨论,不支持转载。 XTuner…

国庆节到了,扣子智能体coze画板功能实现贺卡编辑智能体自动添加logo和二维码,让海报品牌化

大家好,我是Shelly,一个专注于输出AI工具和科技前沿内容的AI应用教练,体验过300+款以上的AI应用工具。关注科技及大模型领域对社会的影响10年+。关注我一起驾驭AI工具,拥抱AI时代的到来。 自媒体时代,不管是一个人、一个团队还是一家公司,都是一个IP。那么添加品牌的标志…

JavaWeb校园二手交易平台

目录 1 项目介绍2 项目截图3 核心代码3.1 Controller3.2 Service3.3 Dao3.4 spring-mybatis.xml3.5 spring-mvc.xml3.5 login.jsp 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍:CSDN认证博客专家,CSDN平台Java领域优…

AI大模型助力数据消费,构建数据飞轮科学、高效的体系

随着互联网的技术高速发展,越来越多的应用层出不穷,伴随着数据应用的需求变多,为快速响应业务需求,很多企业在初期没有很好的规划的情况下,存在不同程度的烟囱式的开发模式,这样会导致企业不同业务线的数据…

Java Map类

欢迎来到Cefler的博客😁 🕌博客主页:折纸花满衣 🏠个人专栏:Java 目录 👉🏻map1. 常见的实现2. 主要方法2.1. put(K key, V value)2.2. get(Object key)2.3. remove(Object key)2.4. containsKe…

西部移动硬盘怎么恢复数据?4种详细且实用的方法

面对西部移动硬盘数据丢失的问题,用户往往感到焦虑和无助。本文将为您提供一系列详细且实用的数据恢复方法,帮助您轻松应对数据丢失的挑战,重拾宝贵信息。 图片来源于网络,如有侵权请告知 一、西部移动硬盘数据丢失原因 西部移动…

生成式AI在电商场景的应用、前景与挑战,零基础入门到精通,收藏这一篇就够了

编者按 百舸争流的AI时代,“AI”行动在千行百业迅速开展。电商是一个重要场景,**据阿里调研,在电商平台,约30%受访商家已经使用生成式AI,成为生成式AI技术普惠的最佳试验场之一。**目前,已使用生成式AI的商…

828华为云征文|华为云Flexus云服务器X实例之openEuler系统下部署经典扫雷小游戏

828华为云征文|华为云Flexus云服务器X实例之openEuler系统下部署经典扫雷小游戏 前言一、Flexus云服务器X实例介绍1.1 Flexus云服务器X实例简介1.2 Flexus云服务器X实例特点1.3 Flexus云服务器X实例使用场景 二、本次实践介绍2.1 本次实践简介2.2 扫雷小游戏简介2.3…

KPaaS平台用户权限管理系统方案之表单设计统一单据制作与授权

不同的业务系统各自独立运行,需要分别进行授权操作,这不仅繁琐耗时,还容易出现错误和不一致的情况,导致企业在多系统用户权限角色管理中常常陷入困境,那么,有没有一种高效、便捷的解决方案呢? …

关于预处理详解,#define,宏的使用以及命名 函数与宏的区别详细对比

预定义符号 C语⾔设置了⼀些预定义符号,可以直接使⽤,预定义符号也是在预处理期间处理的 __FILE__ //进⾏编译的源⽂件 __LINE__ //⽂件当前的⾏号 __DATE__ //⽂件被编译的⽇期 __TIME__ //⽂件被编译的时间 __STDC__ //如果编译器遵循ANSI C&#xff…

汉诺塔的理解

数学思想——归纳推理(不是反证法) 为了方便,我把塔叫做牌,最左边的是从大到小(底部开始)放置的的牌堆。 数字的那一列是递归调用,右边长度不一的箭头是,数字阶段向下调用方法的情况…

稀土抗菌剂在涂料中应用的神奇表现

稀土抗菌剂的抗菌抑菌机理有四个层面:一是稀土化合物与细菌表面静电结合,造成直接的杀灭二是基于稀土的光催化半导体特性,通过光生氧自由基ROS机理杀灭细菌;三是稀土化合物破坏细胞膜通透性,造成破损导致细胞质流出杀灭细菌;四是稀土离子跨膜…

C标准库<string.h>-str、strn开头的函数

char *strcat(char *dest, const char *src) 函数功能 strcat 函数用于将一个字符串追加到另一个字符串的尾部。 参数解释 dest:指向目标字符串的指针,这个字符串的尾部将被追加 src 字符串的内容。src:指向源字符串的指针,其…

最精简的VScode Verilog RTL开发环境搭建教程

【2024-9月更新】最精简的VScode Verilog RTL开发环境搭建教程 文章目录 【2024-9月更新】最精简的VScode Verilog RTL开发环境搭建教程一、官网下载VScode二、登录账号同步三、安装配置拓展插件1.Verilog-HDL/systemVerilog拓展2.安装Universal Ctags● Windows系统安装univer…

(附源码) Springboot 飞速物流管理平台78584

摘要 受疫情的影响,很多城市处于静默的状态,导致店铺很多店铺都处于关闭的状态,给商家带来了极大的损失,很多商家为了减少损失都通过线上进行销售,比如直播、微商等;同时对于消费者来说,网上购买…

【Redis】分布式锁之 Redission

一、基于setnx实现的分布式锁问题 重入问题:获得锁的线程应能再次进入相同锁的代码块,可重入锁能防止死锁。例如在HashTable中,方法用synchronized修饰,若在一个方法内调用另一个方法,不可重入会导致死锁。而synchroni…

mysql练习题使用的表

dept(部门表):部门编号,部门名字,部门地点 salgrode工资等级表:等级,最高工资,最低工资 emp表:员工编号,员工名字,工作,领导编号MGR,入职时间,工…

Spring Boot 整合MyBatis-Plus 实现多层次树结构的异步加载功能

文章目录 1,前言2,什么是多层次树结构?3,异步加载的意义4,技术选型与实现思路5,具体案例5.1,项目结构5.2,项目配置(pom.xml)5.3,配置文件&#xf…