Selenium实践总结
1.使用显示等待而不是隐式等待
隐式等待可能会导致不可预测的测试行为,尤其是在动态 Web 应用程序中。显式等待,它允许您
等待特定条件发生后再继续测试,这种方法提供了更多的控制和可靠性。
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
wait.Until(SeleniumExtras.WaitHelpers.ExpectedConditions.ElementIsVisible(By.Id("elementId")));
2.使用页面对象模型(POM)
页面对象模型是一种设计模式,可增强测试维护并减少代码重复。它涉及为每个网页或组件创建一
个类,封装页面的元素和行为。
public class LoginPage
{private IWebDriver driver;private By usernameField = By.Id("username");private By passwordField = By.Id("password");private By loginButton = By.Id("login");public LoginPage(IWebDriver driver){this.driver = driver;}public void EnterUsername(string username){driver.FindElement(usernameField).SendKeys(username);}public void EnterPassword(string password){driver.FindElement(passwordField).SendKeys(password);}public void ClickLogin(){driver.FindElement(loginButton).Click();}
}
3.优先使用CSS选择器而不是XPath
CSS 选择器通常比 XPath 更快、更易读。使用 CSS 选择器可获得更好的性能和更简洁的代码。
// CSS Selector
driver.FindElement(By.CssSelector(".class-name"));
// XPath
driver.FindElement(By.XPath("//div[@class='class-name']"));
4.避免硬编码测试数据
硬编码测试数据会让你的测试变得难以维护。使用数据驱动的测试技术将测试数据与
测试逻辑分开。
[TestCase("user1", "pass1")]
[TestCase("user2", "pass2")]
public void TestLogin(string username, string password)
{var loginPage = new LoginPage(driver);loginPage.EnterUsername(username);loginPage.EnterPassword(password);loginPage.ClickLogin();
}
5.实现强大的异常处理
try
{// Test logic here
}
catch (NoSuchElementException ex)
{Console.WriteLine("Element not found: " + ex.Message);
}
catch (Exception ex)
{Console.WriteLine("An error occurred: " + ex.Message);
}
自动化测试中不可避免地会出现异常。实施强大的异常处理,以确保测试正常失败并提供
有意义的错误消息。
6.利用浏览器特定选项
不同的浏览器可能有不同的行为。利用特定于浏览器的选项来自定义浏览器的行为并
提高测试稳定性。
var options = new ChromeOptions();
options.AddArgument("--headless");
options.AddArgument("--disable-gpu");
var driver = new ChromeDriver(options);
7.保持Selenium和驱动程序是最新版本
确保您使用的是最新版本的 Selenium WebDriver 和浏览器驱动程序。更新通常包括性能
改进和错误修复,以增强测试可靠性。
8.使用持续集成
将您的 Selenium 测试集成到 CI 管道中,以自动执行测试并立即获得有关代码更改的反馈。
Jenkins、Azure DevOps 和 GitHub Actions 等工具可以帮助您设置 CI 管道。
9.确保跨浏览器兼容性
跨不同浏览器测试您的应用程序,以确保跨浏览器兼容性。使用 Selenium Grid 或基于云的解决方
案(如 BrowserStack 和 Sauce Labs)在多个浏览器和平台上运行测试。
10.定期审查和重构你的测试
定期检查测试代码以确定需要改进的地方。重构测试以消除冗余、提高可读性并确保可维护性。
相关文章:
Selenium实践总结
1.使用显示等待而不是隐式等待 隐式等待可能会导致不可预测的测试行为,尤其是在动态 Web 应用程序中。显式等待,它允许您 等待特定条件发生后再继续测试,这种方法提供了更多的控制和可靠性。 WebDriverWait wait new WebDriverWait(drive…...
Python数据可视化小项目
英雄联盟S14世界赛选手数据可视化 由于本学期有一门数据可视化课程,课程结课作业要求完成一个数据可视化的小Demo,于是便有了这个小项目,课程老师要求比较简单,只要求熟练运用可视化工具展示数据,并不要求数据来源&am…...
Python毕业设计选题:基于python的白酒数据推荐系统_django+hive
开发语言:Python框架:djangoPython版本:python3.7.7数据库:mysql 5.7数据库工具:Navicat11开发软件:PyCharm 系统展示 管理员登录 管理员功能界面 用户管理 白酒管理 系统管理 看板展示 系统首页 白酒详情…...
SQL-leetcode-180. 连续出现的数字
180. 连续出现的数字 表:Logs -------------------- | Column Name | Type | -------------------- | id | int | | num | varchar | -------------------- 在 SQL 中,id 是该表的主键。 id 是一个自增列。 找出所有至少连续出现三次的数字。 返回的…...
Unity中如何修改Sprite的渲染网格
首先打开SpriteEditor 选择Custom OutLine,点击Genrate 则在图片边缘会出现边缘线,调整白色小方块可以调整边缘 调整后,Sprite就会按照调整后的网格渲染了。 如何在UI中使用? 只要在UI的Image组件中选择Use Sprite Mesh 即可 结果࿱…...
跟着 8.6k Star 的开源数据库,搞 RAG!
过去 9 年里,HelloGitHub 月刊累计收录了 3000 多个开源项目。然而,随着项目数量的增加,不少用户反馈:“搜索功能不好用,找不到想要的项目!” 这让我意识到,仅仅收录项目是不够的,还…...
每日一题 345. 反转字符串中的元音字母
345. 反转字符串中的元音字母 简单 class Solution { public:string reverseVowels(string s) {int l 0;int r s.size() - 1;unordered_set<char> st {a,A,E,e,i,I,O,o,U,u};while(l < r){while(l<r && !st.count(s[l]) ){l;}while(l<r &&…...
Stream API 的设计融合了多个经典设计模式
Stream API 的设计融合了多个经典设计模式: 1. 策略模式(Strategy Pattern) 策略模式定义了一个算法的家族,将每个算法封装起来,并使它们可以互换。Stream API 中的每个操作(如 filter(), map()ÿ…...
jmeter混合场景测试,设置多业务并发比例(吞吐量控制器)
jmeter混合场景测试,设置多业务并发比例(吞吐量控制器) 测试目的 为了验证需求提出的性能要求,结合实际可能的高压力场景,较全面的检测系统的性能表现。 测试方法 根据需求调研的业务模型和交易占比,设置不…...
直流有刷电机多环控制(PID闭环死区和积分分离)
直流有刷电机多环控制 提高部分-第8讲 直流有刷电机多环控制实现(1)_哔哩哔哩_bilibili PID模型 外环的输出作为内环的输入,外环是最主要控制的效果,主要控制电机的位置。改变位置可以改变速度,改变速度是受电流控制。 实验环境 【 !】功能简介: 按下KEY1使能电机,按下…...
vue-axios+springboot实现文件流下载
前端vue代码: <template><div class"app-container documentation-container"><div><el-button type"primary" click"downloadFile(test.xlsx)">下载test.xlsx</el-button></div></div> …...
selenium执行js
JS知识 获取元素 document.getElement 移除属性:removeAttribute("xx") 窗口移动:window.scrollTo(0, document.body.scrollHeight)方法 drivier.execute_script(js)场景: 日期选择框,不能输入,只能设置…...
每日算法Day11【左叶子之和、找树左下角的值、路径总和】
404.左叶子之和 算法链接: 404. 左叶子之和 - 力扣(LeetCode) 类型: 二叉树 难度: 简单 思路:要判断一个节点是否为左叶子节点,只能通过其父节点进行判断。 题解: /*** Definition for a binary tree node.* public class Tr…...
分享一下使用 AI 开发个人工具的迭代过程
分享一下使用 AI 开发个人工具的迭代过程:1. 找 gpt/claude 要一个 super shady coder 的人设 prompt;2. 简单介绍项目背景和基础需求给 gemini,生成最初的细化需求;3. 根据细化需求再次分析,完善边界条件,…...
大型语言模型(LLMs)演化树 Large Language Models
大型语言模型(LLMs)演化树 Large Language Models flyfish 下面的图来自论文地址 Transformer 模型(如 BERT 和 GPT-3)已经给自然语言处理(NLP)领域带来了革命性的变化。这得益于它们具备并行化能力&…...
部分背包问题
本节学习解决部分背包问题,部分背包代表物品可以按照一定比例被分割,而后放入背包内.这是十分经典的用贪心算法解决的问题. 问题描述: 给定一些物品,用matrix表示各个物品的属性,第一项表示物品的质量,第二项表示物品的总价值.现有一背包最大承重为M,试求如何让背包中所装物品…...
教师管理系统
大概功能: 1.显示所有教师 2.按姓名查找教师 3.按工号查找教师 4.增加教师 5.删除教师 6.退出 数据会保存到 txt 文件里面 姓名:必须是中文 手机号码:必须是11位,必须是数字 效果展示: 代码展示: Teache…...
Word论文交叉引用一键上标
Word论文交叉引用一键上标 1.进入Microsoft word使用CtrlH快捷键或单击替换按钮 2.在查找内容中输入[^#] 3.鼠标点击,标签为“替换为:”的文本框,注意光标一定要打在图红色方框圈中的文本框中! 4.点击格式选择字体 5.勾选上标…...
集成方案 | Docusign + 蓝凌 EKP,打造一站式合同管理平台,实现无缝协作!
本文将详细介绍 Docusign 与蓝凌 EKP 的集成步骤及其效果,并通过实际应用场景来展示 Docusign 的强大集成能力,以证明 Docusign 集成功能的高效性和实用性。 在当今数字化办公环境中,企业对于提高工作效率和提升用户体验的需求日益迫切。蓝凌…...
Python大数据可视化:基于python大数据的电脑硬件推荐系统_flask+Hadoop+spider
开发语言:Python框架:flaskPython版本:python3.7.7数据库:mysql 5.7数据库工具:Navicat11开发软件:PyCharm 系统展示 管理员登录 管理员功能界面 价格区间界面 用户信息界面 品牌管理 笔记本管理 电脑主机…...
Flutter项目打包未签名ipa的保姆级教程(含Xcode配置与常见错误解决)
Flutter项目打包未签名ipa的保姆级教程(含Xcode配置与常见错误解决) 当你完成了一个Flutter应用的开发,准备将其交付给第三方进行签名或部署到CI/CD流水线时,生成一个未签名的ipa文件是必经之路。对于刚接触iOS打包的Flutter开发者…...
CTF实战:手把手教你用fastcoll工具复现MD5碰撞攻击(附Python验证脚本)
CTF实战:手把手教你用fastcoll工具复现MD5碰撞攻击(附Python验证脚本) 在网络安全竞赛和渗透测试中,MD5碰撞攻击是一个经典且实用的技术点。本文将带你从零开始,完整复现MD5碰撞攻击的全过程,包括工具使用、…...
食品批发厂家口碑推荐榜
在食品批发行业,选择一家口碑良好的厂家至关重要。优质的食品批发厂家不仅能提供高品质的产品,还能保障稳定的供应和良好的售后服务。今天,我们就来为大家推荐一些口碑出众的食品批发厂家,其中惠州市佳德旺食品有限公司表现尤为突…...
终极Enformer基因表达预测指南:如何在10分钟内快速部署深度学习模型
终极Enformer基因表达预测指南:如何在10分钟内快速部署深度学习模型 【免费下载链接】enformer-pytorch Implementation of Enformer, Deepminds attention network for predicting gene expression, in Pytorch 项目地址: https://gitcode.com/gh_mirrors/en/enf…...
电商客服外包怎么选|避坑指南[特殊字符]2026 商家必看
做电商绕不开客服外包,但低价陷阱、转包兼职、大促掉链、响应超时、售后甩锅真的太坑了!今天整理一套不踩雷选型攻略,全是行业干货,新手也能直接抄作业👇 🚫先避坑:这些雷区千万别碰 超低价诱惑…...
Phi-3-mini-4k-instruct-gguf应用落地:律师助理合同风险点识别与提示生成
Phi-3-mini-4k-instruct-gguf应用落地:律师助理合同风险点识别与提示生成 1. 项目背景与价值 在法律服务领域,合同审查是律师日常工作中最耗时且重复性高的任务之一。传统人工审查方式存在效率低下、容易遗漏细节等问题。Phi-3-mini-4k-instruct-gguf作…...
ISO/SAE 21434:2021 逐条审核判定表
A 章节号|B 条款|C 要求内容|D 符合性|E 证据 / 说明|F:不符合整改项符合性选项:符合 / 部分符合 / 不符合 / 不适用章节号条款审核要求内容符合性证据 / 备注整改项44.1建立网络安全生命周…...
基于SpringBoot + Vue的校园论坛交流系统
文章目录前言一、详细操作演示视频二、具体实现截图三、技术栈1.前端-Vue.js2.后端-SpringBoot3.数据库-MySQL4.系统架构-B/S四、系统测试1.系统测试概述2.系统功能测试3.系统测试结论五、项目代码参考六、数据库代码参考七、项目论文示例结语前言 💛博主介绍&#…...
给数学恐惧症患者的DDPM前向扩散公式拆解:从‘图像变糊’到一行代码生成任意噪声图
给数学恐惧症患者的DDPM前向扩散公式拆解:从‘图像变糊’到一行代码生成任意噪声图 想象一下,你正在搅拌一杯咖啡。最初,咖啡是纯黑色的,但随着你不断加入牛奶,颜色逐渐变浅,最终变成一杯乳白色的液体。这…...
Kandinsky-5.0-I2V-Lite-5s开源模型部署:无需代码基础的图形化AI视频工具
Kandinsky-5.0-I2V-Lite-5s开源模型部署:无需代码基础的图形化AI视频工具 1. 产品介绍 Kandinsky-5.0-I2V-Lite-5s是一款革命性的图生视频AI工具,它将复杂的视频制作过程简化为几个简单的点击操作。不同于传统需要专业剪辑软件和技能的视频制作方式&am…...
