Selenium 自动化 —— 入门和 Hello World 实例

Selenium 是什么

Selenium 是一个用于自动化网页浏览器操作的工具,它支持多种浏览器和多种操作系统。主要用于测试 web 应用程序的功能,也可用于执行一些基本的浏览器操作任务,例如自动化表单填写、网页导航等。

Selenium 是一个开源项目,支持多种编程语言,如Java、Python、JavaScript等。通过这些语言的绑定库,你可以在不同的语言环境下编写 Selenium 测试脚本。

Selenium 可以做什么

Selenium 是一个功能强大的工具,用于自动化网页浏览器操作,所以我们可以用它完成很多工作。

  1. 自动化测试:这是 Selenium 最常用的用途。通过编写测试脚本,可以模拟用户在网页上的交互操作,例如点击按钮、填写表单、验证页面内容等。这样可以自动执行测试,并快速发现网站应用程序中的 bug 和问题。
  2. 跨浏览器测试:由于Selenium支持多种浏览器,包括 Chrome、Firefox、Safari、Edge 等,因此它可以用于执行跨浏览器测试,确保网站在不同浏览器上的一致性和兼容性。如果我们的网站要手动的把主流浏览器都跑一遍测试用例,那估计得崩溃。
  3. 爬虫:一般爬虫会用模拟 HTTP 请求,但是某些情况下服务端返回的是渲染后的静态页面,这时候我们就可以用 Selenium 模拟用户的点击,或者解析网页的元素得到想要的数据。
Selenium 快速入门

实践是检验真理的唯一标准,所以接下来会用百度搜索的例子展示 Selenium 的基本使用。

下载WebDriver

我们需要操作浏览器模拟用户的点击等操作,但是我们不会直接操作浏览器,而是通过间接的方式,这就是WebDriver,类似于我们各种驱动程序,如网卡驱动、磁盘驱动等等。
在这里插入图片描述

可以看到,雪人在旁边看戏

WebDriver是Selenium的一个子项目,它是Selenium中用于控制浏览器的接口。WebDriver提供了一组API,可以直接操作浏览器,模拟用户在浏览器中的各种操作。

Windows系统中,我们需要下载对应浏览器对应版本的驱动。
比如我用的是Chrome,所以在这里可以下载。

下载解压后,是一个chromedriver.exe的可执行文件,我们把它放到某个目录下,后面Java代码中会指定。

引入 Selenium 依赖

如果用的是maven管理依赖,我们可以在pom.xml中引入 Selenium 依赖:

    <dependency><groupId>org.seleniumhq.selenium</groupId><artifactId>selenium-java</artifactId><version>3.141.59</version></dependency>
编写测试代码

代码做的事非常简单:

  1. 打开百度首页
  2. 文本框输入"Hello World"
  3. 点击搜索按钮
  4. 进入结果页面,打印输出html的title
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;public class BaiduSearchTest {public static void main(String[] args) {WebDriver driver = null;try {// 设置Chrome驱动的路径System.setProperty("webdriver.chrome.driver", "C:\\Softwares\\webdriver\\chromedriver-122\\chromedriver.exe");// 创建WebDriver对象driver = new ChromeDriver();// 打开百度网站driver.get("https://www.baidu.com");// 找到搜索输入框WebElement searchBox = driver.findElement(By.name("wd"));// 在搜索输入框中输入关键字searchBox.sendKeys("Hello World");// 提交搜索表单searchBox.submit();// 等待搜索结果加载try {Thread.sleep(10000); // 等待3秒} catch (InterruptedException e) {e.printStackTrace();}// 输出页面标题System.out.println("Page title is: " + driver.getTitle());} finally {// 关闭浏览器if(driver != null){driver.quit();}}}
}

运行Java代码,会弹出一个新的Chrome浏览器窗口。
在这里插入图片描述
到这里,我们可以通过这个例子,感受 Selenium 的强大。Selenium 还提供很多功能,后面的文章 postnull 会进一步介绍。利用这些特性,我们可以很做更多有意思的事。

注意点
  • 注意 WebDriver 和 浏览器的版本需要对应。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

天地图全国幼儿园数据下载与处理分析

概述 在看天地图服务资源的时候看到有个“幼儿园”的数据&#xff0c;好奇点开看了下&#xff0c;下载下来数据差看了下&#xff0c;数据质量还不错。本篇文章给大家分享一下这个数据的处理以及一些简单的统计分析结果。 数据下载 通过地址https://service.tianditu.gov.cn/…

WPF —— Grid网格布局

1 &#xff1a;Grid网格布局简介 Grid为WPF中最常用的布局容器, 作为View中的主要组成部分, 负责框架中整体的页面布局。 2&#xff1a;网格标签Grid.ColumnDef Grid.ColumnDefinitions自定义列 只能设置宽度 不能设置高度ColumnDefinition 每一个列可以设置宽度&#xff0c;…

机试:蛇形矩阵

问题描述: 代码示例: //蛇形矩阵 #include <bits/stdc.h> using namespace std;int main(){int n;cout << "输入样例" << endl; cin >> n;int k 1; for(int i 0; i < n; i){if( i %2 0){//单数行for(int j 0; j < n; j){ cout &…

Apache Paimon 的 CDC Ingestion 概述

CDC Ingestion 1&#xff09;概述 Paimon支持schema evolution将数据插入到Paimon表中&#xff0c;添加的列将实时同步到Paimon表&#xff0c;并且无需重启同步作业。 目前支持的同步方式如下&#xff1a; MySQL Synchronizing Table: 将MySQL中的一个或多个表同步到一个Pa…

网络原理(网络协议初识)

目录 1.网络通信基础 1.1IP地址 1.2端口号 1.3认识协议 1.4五元组 1.5 协议分层 2.TCP/IP五层&#xff08;或四层&#xff09;模型 2.1网络设备所在分层 2.2网络分层对应 3.封装和分用 1.网络通信基础 网络互连的目的是进行网络通信&#xff0c;也即是网络数据传输&#…

数据仓库为什么要分层建设?每一层的作用是什么?

在数字化时代&#xff0c;数据已成为企业最宝贵的资产之一。为了更好地管理和利用这些数据&#xff0c;许多企业都建立了数据仓库。然而&#xff0c;数据仓库并非简单的数据存储工具&#xff0c;而是一个复杂的数据处理和分析系统。其中&#xff0c;分层建设是数据仓库设计的重…

【OpenCV实战】基于OpenCV中DNN(深度神经网络)使用OpenPose模型实现手势识别详解

一、手部关键点检测 如图所示,为我们的手部关键点所在位置。第一步,我们需要检测手部21个关键点。我们使用深度神经网络DNN模块来完成这件事。通过使用DNN模块可以检测出手部21个关键点作为结果输出,具体请看源码。 二,openpose手势识别模型 OpenPose的原理基于卷积神经网…

【计算机图形学】End-to-End Affordance Learning for Robotic Manipulation

对RLAfford&#xff1a;End-to-End Affordance Learning for Robotic Manipulation的简单理解 1. 为什么要做这件事 在交互环境中学习如何操纵3D物体是RL中的挑战性问题。很难去训练出一个能够泛化到具有不同语义类别、不同几何形状和不同功能物体上的策略。 Visual Afforda…

粒子群算法对pi控制器进行参数优化,随时优化pi参数以控制直流无刷电机转速。

粒子群算法对pi控制器进行参数优化&#xff0c;随时优化pi参数以取得设定直流无刷电机转速。 PSO优化PID&#xff0c;用于BLDC速度控制 仿真平台为&#xff1a;MATLAB 采用的是Simulinkm程序相配合 仿真结果以及程序示例&#xff1a;

Armv8状态寄存器

Processor state AArch64没有与ARMv7当前程序状态寄存器直接对应的寄存器(CPSR)。在AArch64中&#xff0c;传统CPSR的组件以字段的形式提供可独立访问。这些统称为处理器状态(PSTATE)。 在AArch64中&#xff0c;通过执行ERET指令从异常中返回&#xff0c;这会导致要拷贝到PSTAT…

IEEE802.11v协议介绍

IEEE802.11v协议简介 协议全称:无线网络管理(Wireless Network Management) 批准日期:2011年2月 协议状态:并入802.11-2012 协议别名:BSS过渡管理 主要功能 支持AP和STA间交换:关于RF环境和拓扑状态的信息,以协助STA进行漫游决策支持STA之间交换:关于RF环境状态的信…

嵌入式单片机学习思路感想分享

今天看到了一个提问,原话如下: 曾经干了8年单片机工程师,对工程师从入门,到入行,再到普通,再到高级,整个路径还算清晰,比如什么阶段,会碰到什么瓶颈,怎么突破,我都经历过。 这个同学,有个典型的问题,就是学得太多且杂了,估计稍微复杂点的项目,做不出来。 现在…

superset连接Apache Spark SQL(hive)过程中的各种报错解决

superset连接数据库官方文档&#xff1a;Installing Database Drivers | Superset 我们用的是Apache Spark SQL&#xff0c;所以首先需要安装下pyhive #命令既下载了pyhive也下载了它所依赖的其他安装包 pip install pyhive#多个命令也可下载 pip install sasl pip install th…

npm yarn 一起使用报错

项目记录&#xff0c;具有独特性&#xff0c;仅供参考 项目好好的运行&#xff0c;前一天装个测试工具包&#xff0c; 突然就不行了&#xff0c;卸载重装也不行&#xff0c;所有的项目都安装失败&#xff0c;新起一个项目也不行&#xff0c;有时候某个单独安装一个包可以&…

回归预测 | Matlab实现GSWOA-KELM混合策略改进的鲸鱼优化算法优化核极限学习机的数据回归预测

回归预测 | Matlab实现GSWOA-KELM混合策略改进的鲸鱼优化算法优化核极限学习机的数据回归预测 目录 回归预测 | Matlab实现GSWOA-KELM混合策略改进的鲸鱼优化算法优化核极限学习机的数据回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 GSWOA-KELM多变量回归预测…

信号处理--卷积残差网络实现单通道脑电的睡眠分期监测

目录 背景 亮点 环境配置 数据 方法 结果 代码获取 参考文献 背景 人类大约花三分之一的时间睡觉&#xff0c;这使得监视睡眠成为幸福感的组成部分。 在本文中&#xff0c;提出了用于端到端睡眠阶段的34层深残留的Convnet架构 亮点 使用深度1D CNN残差架构&#xff0…

微信小程序云开发教程——墨刀原型工具入门(素材面板)

引言 作为一个小白&#xff0c;小北要怎么在短时间内快速学会微信小程序原型设计&#xff1f; “时间紧&#xff0c;任务重”&#xff0c;这意味着学习时必须把握微信小程序原型设计中的重点、难点&#xff0c;而非面面俱到。 要在短时间内理解、掌握一个工具的使用&#xf…

微信小程序购物/超市/餐饮/酒店商城开发搭建过程和需求

1. 商城开发的基本框架 a. 用户界面&#xff08;Frontend&#xff09; 页面设计&#xff1a;包括首页、商品列表、商品详情、购物车、下单界面、用户中心等。交云设计&#xff1a;如何让用户操作更加流畅&#xff0c;包括搜索、筛选、排序等功能的实现。响应式设计&#xff1…

web项目的搭建

使用Webstorm并创建Next.js文件 1、配置nodejs环境、安装webstorm【配置node.js可以使用nvm去管理nodejs的版本】 2、需要破解webstorm&#xff0c;可能会导致原本的idea失效&#xff0c;注册码过期 3、taobao的npm过期&#xff0c;导致npm is sass执行不成功&#xff0c;需…

C++面试题和笔试题(四)

一、intx[6][4],(*p)[4];px;则*(p2)指向哪里&#xff1f; A X[0][1]B X[0][2]C X[1][0]D X[2][0] 官方解释&#xff1a; D int x[6][4], (*p)[4]; p x; 在这里&#xff0c;x 是一个二维数组&#xff0c;它有6行和4列。p 是一个指向具有4个整数的数组的指针。 当你执行…