我用selenium开发了一个自动创建任务,解放重复性工作
我用selenium开发了一个自动创建任务,大大解放了我做重复性工作带来的疲惫感,收获了更多的乐趣。
我司有100多个服务,运维忙不过来的时候,就会让我们自己创建云负载,你首先需要在云服务上创建负载,再创建容器,配置好CPU、内存,创建镜像跟容器的触发器,创建Jenkins任务,每个服务都需要这些步骤,都是重复性工作枯燥乏味,如果只有一个人弄那格式不可忍受。
为了能够让这件事更有趣点,我使用了selenium来帮我做这些重复性工作。通过写到代码让其运行后,就能自动打开浏览器,填好指定文本,提交表单,下面来看看我是怎么用它来创建自动任务的,关键是获取WEB的唯一的DOM节点。
介绍
先来看看Selenium的介绍,没错它其实是一个自动化测试工具。
Selenium是一个用于Web应用程序测试的工具,它直接运行在浏览器中,可以模拟真正的用户操作。这个工具的主要功能包括测试与浏览器的兼容性(即测试应用程序是否能够很好地工作在不同浏览器和操作系统之上)和测试系统功能(即创建回归测试检验软件功能和用户需求)。Selenium支持自动录制动作和自动生成.Net、Java、Perl等不同语言的测试脚本。
Selenium主要包括三部分:Selenium IDE、Selenium WebDriver和Selenium Grid。Selenium IDE是Firefox浏览器的一个插件,可以进行录制回放,并且可以把录制的操作以多种语言(如JAVA、Python、C#等)的形式导出成测试用例。Selenium WebDriver提供Web自动化所需的API,主要用作浏览器控制、页面元素选择和调试。Selenium Grid则提供了在不同机器的不同浏览器上运行Selenium测试的能力。
Selenium支持跨不同浏览器、平台和编程语言的自动化,它可以轻松部署在Windows、Linux、Solaris和Macintosh等平台上。此外,Selenium通过使用特定于每种语言的驱动程序支持各种编程语言,包括C#、Java、Perl、PHP、Python和Ruby等。测试脚本可以使用任何支持的编程语言进行编码,并且可以直接在大多数现代Web浏览器中运行。
总的来说,Selenium是一个功能强大的Web自动化测试工具,它可以提高测试效率,减少人工测试的工作量,是Web开发人员和测试人员的重要工具之一。
下面是一个华为云创建负载的任务,另外发现华为云的DOM节点ID、class加有随机数,隔段时间就会变化,因此我的例子不能直接拿去用,要根据你自己的节点去修改,你要掌握思路。
创建浏览器驱动
首先你要根据你自己的浏览器,创建浏览器驱动,如下我创建了一个Safari浏览器驱动。
依赖
<dependency><groupId>org.seleniumhq.selenium</groupId><artifactId>selenium-java</artifactId><version>4.1.1</version></dependency>
// 创建Safari浏览器驱动
WebDriver driver = new SafariDriver();
//窗口大小
Dimension dimension = new Dimension(1000, 1000);
driver.manage().window().setSize(dimension);
登录
随后,你要通过代码去登录华为云。
private static void login(WebDriver driver) throws InterruptedException {driver.get("https://auth.huaweicloud.com/authui/login.html?service=https://console.huaweicloud.com/cceold/#/login");Thread.sleep(3000);//切换IAM用户//你要找到,你需要操作的DOM,唯一标识WebElement iamLinkDiv = driver.findElement(By.xpath("//*[@id=\"IAMLinkDiv\"]/span"));((JavascriptExecutor) driver).executeScript("arguments[0].click();", iamLinkDiv);// 查找并填写用户名和密码表单,点击提交按钮WebElement accountInput = driver.findElement(By.id("IAMAccountInputId"));WebElement usernameInput = driver.findElement(By.id("IAMUsernameInputId"));WebElement passwordInput = driver.findElement(By.id("IAMPasswordInputId"));WebElement submitButton = driver.findElement(By.id("btn_submit"));//点击一下,相当于激活该选中框accountInput.click();//把需要填的内容发送到指定的文本accountInput.sendKeys("xxx");usernameInput.sendKeys("xxx");passwordInput.sendKeys("xxx");//执行JS登录,因为有的表单是JS登录的,并不是用的form表单((JavascriptExecutor) driver).executeScript("arguments[0].click();", submitButton);// 等待Jenkins页面加载完成Thread.sleep(5000);}
创建任务
创建任务,也就是负载,你可以自定先声明要有哪些服务,描述是什么等
private static void createJob(WebDriver driver, List<String> services, List<String> failList) {for (String service: services) {String[] serviceAry = service.split(":");String serviceName = serviceAry [0];String serviceDescription = serviceAry [1];String serviceName = "";try {serviceName = serviceAry [2];} catch (Exception ex) {}try {System.out.println(String.format("------->正在创建任务[%s]......", serviceName));driver.get("https://console.huaweicloud.com/cce2.0/?agencyId=09d4dbb7a300f3a61fc5c003d92470f3®ion=cn-east-3&locale=zh-cn#/cce/cluster/fdd6c126-ebc2-11e9-bee9-0255ac1002c2/create/workload?namespace=paas&type=deployment");Thread.sleep(3000);//通过唯一ID获取指定的DOM,你看华为的ID后面都带了数字,会变WebElement nameInput = driver.findElement(By.id("ti_auto_id_13"));WebElement instanceInput = driver.findElement(By.id("ti_auto_id_15_input"));WebElement containerInput = driver.findElement(By.id("ti_auto_id_45"));WebElement imageInput = driver.findElement(By.id("ti_auto_id_46"));WebElement cpuMaxInput = driver.findElement(By.id("ti_auto_id_52"));WebElement memoryMaxInput = driver.findElement(By.id("ti_auto_id_55"));WebElement subButton = driver.findElement(By.id("ti_auto_id_237"));nameInput.sendKeys("service-" + serviceName);instanceInput.clear();instanceInput.sendKeys("1");//时区同步选择//执行JS操作,JS这个很好用,有些不能直接操作的DOM,都可以用JS去解决((JavascriptExecutor) driver).executeScript("document.getElementById(\"ti_auto_id_20_awrapper\").click();");//清空输入框内容containerInput.clear();containerInput.sendKeys("service-" + serviceName);((JavascriptExecutor) driver).executeScript("document.getElementById(\"ti_auto_id_47\").click();");List<WebElement> imageSearchInput = driver.findElements(By.className("ti3-searchbox-input"));imageSearchInput.get(0).sendKeys("service-" + serviceName);//回车imageSearchInput.get(0).sendKeys(Keys.ENTER);ThreadUtil.sleep(3000);//选择镜像List<WebElement> checkImage = driver.findElements(By.className("ti3-radio-skin"));((JavascriptExecutor) driver).executeScript("arguments[0].click();", checkImage.get(2));List<WebElement> checkImageClick = driver.findElements(By.className("ti3-btn-danger"));((JavascriptExecutor) driver).executeScript("arguments[0].click();", checkImageClick.get(1));ThreadUtil.sleep(2000);cpuMaxInput.clear();cpuMaxInput.sendKeys("1");memoryMaxInput.clear();memoryMaxInput.sendKeys("1024");//提交((JavascriptExecutor) driver).executeScript("arguments[0].click();", subButton);// 等待创建任务完成Thread.sleep(5000);} catch (Exception ex) {ex.printStackTrace();System.out.println("失败的任务[]" + serviceName);//这里我将失败的任务保存起来,等所有任务执行结束后,控制台可以输入继续执行//因为由于页面加载时间是不确定的,有时候会因为这个原因操作DOM失败failList.add(phantomService);}}}
退出关闭
最后可以关闭浏览器
// 关闭浏览器
driver.quit();
从我使用selenium的感受来说,非常强大,非常好用,虽然刚开始写代码一遍遍测试有点花时间,但当它自己跑起来,你就可以喝喝茶,看看它,非常的有趣惬意。
官网地址:https://www.selenium.dev/
作者其他文章推荐:
基于Spring Boot 3.1.0 系列文章
- Spring Boot 源码阅读初始化环境搭建
- Spring Boot 框架整体启动流程详解
- Spring Boot 系统初始化器详解
- Spring Boot 监听器详解
- Spring Boot banner详解
- Spring Boot 属性配置解析
- Spring Boot 属性加载原理解析
- Spring Boot 异常报告器解析
- Spring Boot 3.x 自动配置详解
相关文章:
我用selenium开发了一个自动创建任务,解放重复性工作
我用selenium开发了一个自动创建任务,大大解放了我做重复性工作带来的疲惫感,收获了更多的乐趣。 我司有100多个服务,运维忙不过来的时候,就会让我们自己创建云负载,你首先需要在云服务上创建负载,再创建容…...
安卓11修改HDMI自适应分辨率
客户需要hdmi自适应屏幕分辨率,没发现有相关的指令,我发现设置中有个hdmi的Auto选项,于是就试试选中这个选项,试下了可以自适应,于是就找到相关代码,在开机完成后执行这个代码,基本满足需求&…...

Linux实验记录:使用Apache的虚拟主机功能
前言: 本文是一篇关于Linux系统初学者的实验记录。 参考书籍:《Linux就该这么学》 实验环境: VmwareWorkStation 17——虚拟机软件 RedHatEnterpriseLinux[RHEL]8——红帽操作系统 正文: 目录 前言: 正文&…...

分布式空间索引了解与扩展
目录 一、空间索引快速理解 (一)区域编码 (二)区域编码检索 (三)Geohash 编码 (四)RTree及其变体 二、业内方案选取 三、分布式空间索引架构 (一)PG数…...
Set和Map的应用场景
Set: 1.成员不能重复 2.只有键值,没有键名,有点类似数组 3.可以遍历,方法 add,delete,has Map: 1.本质上是键值对的集合,类似集合; 2.可以遍历,方法很多,可以干跟各种数据格式转换 Set和…...

小白级教程,10秒开服《幻兽帕鲁》
在帕鲁的世界,你可以选择与神奇的生物「帕鲁」一同享受悠闲的生活,也可以投身于与偷猎者进行生死搏斗的冒险。帕鲁可以进行战斗、繁殖、协助你做农活,也可以为你在工厂工作。你也可以将它们进行售卖,或肢解后食用。 前言 马上过年…...

IDEA 构建开发环境
本博客主要讲解了如何创建一个Maven构建Java项目。(本文是创建一个用Maven构建项目的方式,所以需要对Maven有一定的了解) IDEA 构建开发环境 一、创建一个空工程二、构建一个普通的Maven模块 一、创建一个空工程 创建一个空的工程 * 设置整…...

归并排序----C语言数据结构
目录 引言 1.归并排序的实现----c2.归并排序的复杂度分析时间复杂度空间复杂度 引言 归并排序(Merge Sort) 是一种基于分治法的排序算法,它的基本思想是将原始数组划分成较小的数组,然后递归地对这些小数组进行排序,最后将排好序…...

【网站项目】065健康综合咨询问诊平台
🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板ÿ…...

Adobe Camera Raw forMac/win:掌控原始之美的秘密武器
Adobe Camera Raw,这款由Adobe开发的插件,已经成为摄影师和设计师们的必备工具。对于那些追求完美、渴望探索更多创意可能性的专业人士来说,它不仅仅是一个插件,更是一个能够释放无尽创造力的平台。 在数字摄影时代,R…...

OpenHarmony—开发及引用静态共享包(API 9)
HAR(Harmony Archive)是静态共享包,可以包含代码、C库、资源和配置文件。通过HAR可以实现多个模块或多个工程共享ArkUI组件、资源等相关代码。HAR不同于HAP,不能独立安装运行在设备上,只能作为应用模块的依赖项被引用。 接下来&a…...
测试面试题常见题
文章目录 功能测试一个完整的测试计划应该包含哪些内容一个完整的测试用例包含哪些内容?什么时候需要发测试报告?一份测试报告应该包含哪些内容?一个完整的缺陷报告应该包含哪些内容?简述等价类划分法并举例针对具体场景的测试用例…...
代码随想录算法训练营第六天 - 哈希表part02
454.四数之和II 核心思想:利用字典的key,value 4个数组两两分组,nums1nums2 的两两元素之和 及 计数 先存入字典中,然后对nums3和nums4的进行元素相加 然后对比字典中是否有对应的key,有就countvalue class Solution…...

【Javaweb程序设计】【C00165】基于SSM的高考志愿辅助填报系统(论文+PPT)
基于SSM的高考志愿辅助填报系统(论文PPT) 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于ssm的高考志愿辅助填报系统 本系统分为前台系统模块、后台管理员模块以及后台学生模块 前台系统模块:当游客打开系统的网址后&…...

海外云手机为什么吸引用户?
近年来,随着全球化的飞速发展,海外云手机逐渐成为各行各业关注的焦点。那么,究竟是什么让海外云手机如此吸引用户呢?本文将深入探讨海外云手机的三大吸引力,揭示海外云手机的优势所在。 1. 高效的社交媒体运营 海外云…...
将`List<String>`转换为`List<Long>`
将List<String>转换为List<Long> 大家好,我是免费搭建查券返利机器人赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!在Java中,将List<String>转换为List<Long>可以…...

【Unity3D小功能】Unity3D中Text使用超链接并绑定点击事件
推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址我的个人博客 大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦。 一、前言 在开发中遇到了要给Text加超链接的需求,研究了实现…...
MyBatis-Plus CRUD 接口
Service CRUD 接口 public String services() {Boolean re false;/**Service CRUD 接口**//**Save 返回boolean **///1、插入一条数据Person person1 new Person();person1.setEmail("123qq.com");person1.setSex("男");//person1.setUser_id(0);//影响…...
在JVM中,Java对象是如何创建、存储和访问的?
在Java虚拟机(JVM)中,Java对象的创建、存储和访问是Java程序运行的核心部分。这个过程涉及到内存管理、对象模型以及运行时数据区域的概念。 1. Java对象的创建: a. 类加载: 在Java程序运行时,类加载器负…...

C++类和对象之进击篇
目录 1.类的6个默认成员函数2.构造函数2.1概念2.2特性 3.析构函数3.1概念3.2特性 4.拷贝构造函数4.1 概念4.2特征 5.赋值运算符重载5.1运算符重载5.2赋值运算符重载5.3前置和后置重载 6.日期类的实现7.const成员8.取地址及const取地址操作符重载 1.类的6个默认成员函数 如果一…...

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式
一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明:假设每台服务器已…...
在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能
下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能,包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...
三维GIS开发cesium智慧地铁教程(5)Cesium相机控制
一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点: 路径验证:确保相对路径.…...

MMaDA: Multimodal Large Diffusion Language Models
CODE : https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA,它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构…...
oracle与MySQL数据库之间数据同步的技术要点
Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异,它们的数据同步要求既要保持数据的准确性和一致性,又要处理好性能问题。以下是一些主要的技术要点: 数据结构差异 数据类型差异ÿ…...
DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”
目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问(基础概念问题) 1. 请解释Spring框架的核心容器是什么?它在Spring中起到什么作用? Spring框架的核心容器是IoC容器&#…...

20个超级好用的 CSS 动画库
分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码,而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库,可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画,可以包含在你的网页或应用项目中。 3.An…...
【JavaSE】多线程基础学习笔记
多线程基础 -线程相关概念 程序(Program) 是为完成特定任务、用某种语言编写的一组指令的集合简单的说:就是我们写的代码 进程 进程是指运行中的程序,比如我们使用QQ,就启动了一个进程,操作系统就会为该进程分配内存…...
GitHub 趋势日报 (2025年06月06日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 590 cognee 551 onlook 399 project-based-learning 348 build-your-own-x 320 ne…...