java中使用selenium自动化测试

news2024/11/19 0:50:28

一、查看你Chrome浏览器的版本

在浏览器的地址栏,输入chrome://version/,回车后即可查看到对应版本

二、找到对应的chromedriver版本

2.1 114及之前的版本可以通过点击下载chromedriver,根据版本号(只看大版本)下载对应文件
2.2 116版本通过点击下载chromedriver,便可直接下载压缩包。
2.3 127/128/128版本通过点击进入到 Chrome for Testing availability ,可以看到127 Stable 稳定版本以及更高版本的测试版。
点击Stable,选择对应的驱动下载即可。
在这里插入图片描述

在这里插入图片描述

三、导入jar包

<!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java -->
<dependency>
   <groupId>org.seleniumhq.selenium</groupId>
   <artifactId>selenium-java</artifactId>
   <version>3.141.59</version>
</dependency>

四、编写测试类

import org.openqa.selenium.*;
import org.openqa.selenium.Dimension;
import org.openqa.selenium.chrome.ChromeDriver;
import java.io.File;
import java.util.List;

public class Test {

    public static void main(String[] args) throws Exception {
        System.setProperty("webdriver.chrome.driver", "C:\\Users\\chromedriver.exe");
        //打开浏览器
        ChromeDriver driver = new ChromeDriver();
        // 设置浏览器窗口大小为屏幕大小(模拟全屏)
        driver.manage().window().setSize(new Dimension(1920, 1080));

        driver.get("https://test.com");
        driver.findElement(By.id("username")).sendKeys("");
        driver.findElement(By.id("password")).sendKeys("");
        JavascriptExecutor js = (JavascriptExecutor) driver;
        js.executeScript("localStorage.setItem('loginDate', '2024-9-29');");
        driver.findElement(By.className("logindo")).click();
        Thread.sleep(1000);
        driver.get("https://test.com/html");
        // 定位到ul元素(通过ID)
        WebElement ul = driver.findElement(By.id("myTab"));
        // 从ul中获取所有的li元素
        List<WebElement> liElements = ul.findElements(By.tagName("li"));
        liElements.get(1).findElement(By.tagName("a")).click();

        driver.findElement(By.id("qy_name")).sendKeys("");
        driver.findElement(By.id("searchDetail")).click();
        Thread.sleep(500);
        WebElement bodyListElement = driver.findElement(By.id("bodyList"));
        WebElement firstTr = bodyListElement.findElement(By.cssSelector("tr:first-child"));
        WebElement thirdTd = firstTr.findElement(By.cssSelector("td:nth-child(3)"));
        thirdTd.click();
        Thread.sleep(500);

        // 截取当前窗口的截图
        File screenshot = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);
        // 指定截图保存的路径和文件名
        File targetFile = new File("screenshot.png");
        // 将截图保存到文件系统中
        org.apache.commons.io.FileUtils.copyFile(screenshot, targetFile);
        System.out.println("Screenshot saved as " + targetFile.getAbsolutePath());
        // 关闭浏览器
        driver.quit();
    }
}

五、八大元素定位

Selenium 中,精确地定位页面元素是进行各种交互操作的基础。以下是一些常见的元素定位方法(Java 示例):

By.id():通过元素的 ID 属性进行定位。
WebElement element = driver.findElement(By.id("elementId"));

By.name():通过元素的 name 属性进行定位。
WebElement element = driver.findElement(By.name("elementName"));

By.className():通过元素的 class 属性进行定位。
WebElement element = driver.findElement(By.className("elementClass"));

By.tagName():通过元素的标签名进行定位。
List<WebElement> elements = driver.findElements(By.tagName("div"));

By.linkText():通过链接的完整文本进行定位。
WebElement element = driver.findElement(By.linkText("链接文本"));

By.partialLinkText():通过链接的部分文本进行定位。
WebElement element = driver.findElement(By.partialLinkText("部分链接文本"));

By.xpath():使用 XPath 表达式进行定位,XPath 是一种强大且灵活的定位方式。
WebElement element = driver.findElement(By.xpath("//div[@class='exampleClass']/input[@name='exampleName']"));

By.cssSelector():通过 CSS 选择器进行定位。
WebElement element = driver.findElement(By.cssSelector("#elementId.exampleClass"));

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

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

相关文章

运维监控平台:监控易如何实现运维高效管理与大规模监控

在快速变化的数字时代&#xff0c;运维团队正面临着前所未有的挑战。随着企业规模的扩大和IT架构的复杂化&#xff0c;运维团队需要管理的设备数量激增&#xff0c;对系统的稳定性和扩展性提出了更高要求。在这样的背景下&#xff0c;如何高效地进行设备监控&#xff0c;确保系…

pdf分割成多个文件怎么弄?这6个技巧教您学会pdf分割,一看就会!

pdf分割成多个文件怎么弄pdf文件分割成多个文件的需求在办公场景中非常常见。您是否也曾为处理含有多个页面的pdf文件而感到烦恼&#xff1f;不用担心&#xff01;在这篇文章中&#xff0c;小编将和大家分享六个简单易懂的技巧&#xff0c;教您如何轻松将pdf拆分成一页一页的单…

本省第一所!新大学,揭牌!

9月26日&#xff0c;海南艺术职业学院举行揭牌仪式&#xff0c;标志着海南省第一所公办艺术类高等职业院校正式揭牌成立。海南省旅文厅党组成员、副厅长刘成出席揭牌仪式&#xff0c;省教育厅党组成员、副厅长邢孔政在揭牌仪式上宣读省人民政府同意设立海南艺术职业学院的批复。…

【操作系统】三、内存管理:1.存储器管理(程序装入与链接;逻辑地址与物理地址空间;内存保护;交换与覆盖;分页管理方式;分段管理方式;段页式管理方式)

三、内存管理 文章目录 三、内存管理内存基础知识1.分类1.1按在计算机中的作用&#xff08;层次&#xff09;1.2按存储介质1.3按存取方式1.4按信息的可更改性1.5按信息的可保存性 2.存储器的性能指标 六、存储器管理&#xff08;内存管理基础&#xff09;0.内存保护1.程序到程序…

4--苍穹外码-SpringBoot项目中分类管理 详解

前言 1--苍穹外卖-SpringBoot项目介绍及环境搭建 详解-CSDN博客 2--苍穹外卖-SpringBoot项目中员工管理 详解&#xff08;一&#xff09;-CSDN博客 3--苍穹外卖-SpringBoot项目中员工管理 详解&#xff08;二&#xff09;-CSDN博客 4--苍穹外码-SpringBoot项目中分类管理 详…

webGL入门(四)绘制一个三角形

代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><scri…

DBMS-2.3 数据库设计(3)——数据库规范化设计实现(3NF、BCNF模式分解)

本文章的素材与知识来自李国良老师和王珊珊老师。 关系模式分解的定义 一.关系模式分解的定义 1.定义 2.理解 &#xff08;1&#xff09;关系不丢失&#xff1a;所有子关系的属性集加起来 原关系的属性集。即分解中不能把某个属性给丢了。 &#xff08;2&#xff09;模式…

8.6K Star,一键将 Markdown 可视化为思维导图

Hi&#xff0c;骚年&#xff0c;我是大 G&#xff0c;公众号「GitHub 指北」会推荐 GitHub 上有趣有用的项目&#xff0c;一分钟 get 一个优秀的开源项目&#xff0c;挖掘开源的价值&#xff0c;欢迎关注。 在知识管理和项目规划中&#xff0c;思维导图是非常有效的工具&#…

【Flume Kafaka实战】Using Kafka with Flume

一 目标 在Cloudera Manager中创建两个Flume的Agent&#xff0c;Agent1从local file中获取内容&#xff0c;写入到kafka的队列中。Agent2以Agent1的sink作为source&#xff0c;将数据从kafka中读取出来&#xff0c;写入到HDFS中。 二 实战 2.1 Kafka Sink 第一步&#xff0…

Java-数据类型与变量

一、字面常量 在我们使用Java进行数据的打印时&#xff0c;经常会用到这个语句&#xff1a; System.out.println("Hello world!"); 而当这个语句运行时&#xff0c;不论如何都会输出"Hello world!"&#xff0c;所以"Hello world!"就是字面常量…

哪款宠物空气净化器能有效去除浮毛?希喂、352实测分享

你是否曾经站在家电卖场里&#xff0c;面对琳琅满目的宠物空气净化器产品而感到无所适从&#xff1f;或者在浏览网上商城时&#xff0c;被海量的参数和功能描述搞得头晕眼花&#xff1f;别担心&#xff0c;你不是一个人。在这个科技飞速发展的时代&#xff0c;选择一台既能满足…

Grafana指标汉化

1、Grafana解压 目录 conf 2、找到&#xff1a;defaults.ini 3、打开defaults.ini &#xff0c;搜索&#xff1a;en-US 4.重新运行 &#xff1a;grafana-server.exe

开放词汇全景分割

开放词汇全景分割是一种先进的计算机视觉任务&#xff0c;它旨在将图像中的每个像素分割并分类到预先定义或未定义的类别中。这与传统的图像分割不同&#xff0c;后者通常仅限于识别有限的、预先定义的对象类别。开放词汇全景分割的目标是识别和处理图像中的任何可能的对象&…

基于Hadoop的微博舆情监测分析系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…

大模型,互联网玩家们的「角斗场」

文/孟永辉 布局大模型&#xff0c;似乎正在成为每一个互联网玩家必然都要去做的事情。无论是以BAT为代表的综合性的大型平台来讲&#xff0c;还是以WPS、携程为代表的专业性的平台们而言&#xff0c;几乎都是如此。一时间&#xff0c;大模型&#xff0c;成为了一个全新的风口。…

9.5K Star,开源在线网盘

Hi&#xff0c;骚年&#xff0c;我是大 G&#xff0c;公众号「GitHub 指北」会推荐 GitHub 上有趣有用的项目&#xff0c;一分钟 get 一个优秀的开源项目&#xff0c;挖掘开源的价值&#xff0c;欢迎关注。 随着云存储的广泛应用&#xff0c;越来越多的人和企业需要一个简单、…

android SELinux权限适配

抓log方法&#xff0c; setenforce 0, 如果不先将selinux设置为permission mode&#xff0c;会导致一个问题。 程序运行的时候遇到权限策略限制&#xff08;假设 sepolicy 1&#xff09;&#xff0c;程序运行失败。添加权限&#xff08;sepolicy 1&#xff09;&#xff0c;然后…

Java Web —— 第十天(SpringBoot原理)

SpringBoot框架之所以使用起来更简单更快捷&#xff0c;是因为SpringBoot框架底层提供了两个非常重要的 功能&#xff1a;一个是起步依赖&#xff0c;一个是自动配置。 通过SpringBoot所提供的起步依赖&#xff0c;就可以大大的简化pom文件当中依赖的配置&#xff0c;从而解决…

Python 知识宝库 —— 数据可视化:matplotlib 与 seaborn 的使用技巧

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 博主简介 博主致力于嵌入式、Python、人工智能、C/C领域和各种前沿技术的优质博客分享&#xff0c;用最优质的内容带来最舒适的…