软件测试——Java自动化测试Selenium

news2024/10/4 13:55:15

目录

1.运行环境

2.环境配置

3.第一个浏览器程序

4.浏览器操作

5.元素定位

6.元素操作常用API

7.特殊元素定位与操作

8.元素三大等待

9.iframe操作

10.window操作

11.select选择框

12.js语句执行

13.鼠标操作

14.截图操作


1.运行环境

编译工具:IDEA

系统环境:JDK 1.8,Selenium-4.4.0,Firefox Setup v117.0,geckodriver-v0.33.0-win64,Junit 4.13

2.环境配置

        下载FireFox和对应的驱动:

Firefox Setup v117.0:

链接:https://pan.baidu.com/s/1JcMjgzFW7M5Uf_4p9mCAXw 
提取码:3ujs

geckodriver-v0.33.0-win64:

链接:https://pan.baidu.com/s/1HgdanZ7IYxMY9jdMspGLuQ 
提取码:mp4h

        这里选择IDEA中的maven对项目进行构建:

pom.xml文件里添加依赖

    <dependencies>
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-java</artifactId>
            <version>4.4.0</version>
        </dependency>


        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13</version>
        </dependency>
    </dependencies>

3.第一个浏览器程序

创建MyTest类,打开百度代码如下:

import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;

import java.time.Duration;

public class MyTest {

    private WebDriver driver;

    @Before
    public void initDriver() {
        System.setProperty("webdriver.gecko.driver", "C:\\Users\\Administrator\\Desktop\\untitled1\\src\\main\\java\\driver\\geckodriver.exe");
        driver = new FirefoxDriver();

        //浏览器最大化
        driver.manage().window().maximize();
        //隐式等待
        driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(30));

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

    }

    @Test
    public void test() throws InterruptedException {
        Thread.sleep(1000);
    }

    @After
    public void quitDriver() {
        if (driver != null) {
            driver.quit();
        }
    }

}

        其中,需要自己手动拷贝gecko驱动的路径。@Before执行浏览器初始化操作,包括设置系统环境,创建WebDriver,打开网页等。@After主要用于浏览器销毁退出。

4.浏览器操作

        Selenium WebDriver 的浏览器操作包含两个部分,一个是浏览器的操作,包括了打开、关闭以及退出浏览器操作,还包含了一些获取浏览器信息的方法。另外一个是浏览器导航操作,也就是我们平时在页面中进行的刷新、前进以及后退等浏览器操作。

  • driver.get(): 打开浏览器
  • driver.getTitle(): 获取浏览器标题
  • driver.getCurrentUrl(): 获取当前页面的 URL 地址
  • driver.close(): 关闭浏览器
  • driver.quit(): 退出浏览器
  • driver.navigate().to(): 进入指定页面
  • driver.navigate().back(): 后退到上一个页面
  • driver.navigate().forward(): 前进到下一个页面
  • driver.refresh(): 刷新页面
  • driver.switchTo().window(): 切换窗口
  • driver.window().maximize():最大化
  • driver.window().fullscreen():全凭
  • driver.window().getSize():获取大小
  • driver.window().setSize(Dimension targetSize):设置大小
  • driver.window().getPosition():获取位置
  • driver.window().setPosition(Point targetPosition):设置位置

5.元素定位

        主要有8大定位,id、xpath、name、tagName、cssSelector、className、linkText、partialLinkText。

        // 定位百度的搜索框元素,并且输入数据(ID定位)---唯一
        chromeDriver.findElement(By.id("kw")).sendKeys("v-if和v-show的区别");
        // 定位百度的搜索框元素,并且输入数据(Name定位)---重复
        chromeDriver.findElement(By.name("wd")).sendKeys("通过Name定位");
        // 定位百度的搜索框元素,并且输入数据(TagName定位)---找到元素会有多个不推荐
        chromeDriver.findElement(By.tagName("input")).sendKeys("通过TagName定位");
        // 定位百度的搜索框元素,并且输入数据(Class定位)---重复
        chromeDriver.findElement(By.className("s_ipt")).sendKeys("通过Class定位");
        // 根据超链接的文本值来获取元素(linkText)
        chromeDriver.findElement(By.linkText("新闻")).click();
        // 根据超链接的部分文本值来获取元素(partialLinkText)
        chromeDriver.findElement(By.partialLinkText("新闻")).click();

        // cssSelect元素定位,这里可以直接用F12去copy
        //(1)tagName定位
        chromeDriver.findElement(By.cssSelector("input"));
        //(2)id定位
        chromeDriver.findElement(By.cssSelector("#kw")).sendKeys("cssSelect的id定位");
        //(3)className定位
        chromeDriver.findElement(By.cssSelector(".s_ipt")).sendKeys("cssSelect的className定位");
        //(4)css精确定位,格式:标签名[属性名=属性值],如input[name='xxx'],
        chromeDriver.findElement(By.cssSelector("input[maxlength='255']")).sendKeys("css精确定位");
        //多属性
        chromeDriver.findElement(By.cssSelector("input[maxlength='255'][autocomplete='off']")).sendKeys("css精确定位");

6.元素操作常用API

  • element.getText(): 获取元素的文本信息,也就是在开始和结束标签之间的内容,该内容可以用于断言我们定位到的元素是不是我们想要的元素
  • element.getTagName(): 获取元素的标签名,该方法也可以用于判断是否定位到了正确的元素
  • element.getAttribute(): 根据元素的属性名获取元素的属性值
  • element.isEnabled(): 判断元素是否可以操作,如 click() 点击 等,返回值为 True 或 False
  • element.isDisplayed(): 判断元素是否在页面上展示
  • element.isSelected(): 选项或者元素是否被选中,在单选或者多选框中常用到
  • element.click(): 适用于任何元素,对其进行点击操作
  • element.send_keys(): 适用于文本区域或者可编辑的元素,可以输入指定内容
  • element.clear(): 适用于文本区域或者可编辑的元素,可以清空文本内容
  • element.submit(): 适用于 Form 表单元素,用于提交数据,Selenium 4 中不再推荐使用此方法,而是推荐直接点检表单的提交按钮
  • element.select: 选择单选或者多选框中的元素

7.特殊元素定位与操作

  • driver.switchTo().alert().getText(): 获取弹出框文本信息
  • driver.switchTo().alert().accept(): 点击弹出框确认按钮
  • driver.switchTo().alert().dismiss(): 点击弹出框取消按钮
  • driver.manage().getCookies():获取全部 Cookie 信息
  • driver.manage().addCookie():添加 Cookie
  • driver.manage().deleteAllCookies():删除所有的 Cookie
  • driver.manage().deleteCookieNamed(): 删除指定的 Cookie
  • driver.manage().getCookieNamed():获取指定的 Cookie

8.元素三大等待

//硬性等待(代码执行太快,元素未刷新)
//线程休眠,强制等待
Thread.sleep(3000);
//隐式等待,在driver实例化完成之后设置,并只需设置一次
//在设置的超时时间范围内不断查找元素,直到找到元素或者超时
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(1000));
//显示等待
//用来等待某个条件发生后再继续执行代码
WebDriverWait webDriverWait  = new WebDriverWait(driver,5000);
webDriverWait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("")));
//或者
webDriverWait.until(driver->driver.findElement(By.xpath("")));

9.iframe操作

iframe切换四种切换方式:
driver.switchTo().frame(index);
driver.switchTo().frame(id);
driver.switchTo().frame(name);
driver.switchTo().frame(WebElement)
//切换之后,回到默认内容页面(否则找不到元素)
driver.switchTo().defaultContent();

10.window操作

当你要操作另外窗口页面的元素时,一定要注意先切换窗口
切换方式:传入要操作窗口的name或者句柄handle
driver.switchTo.window(nameOrHandle);
如何获取到窗口的句柄
driver.getWindowHandle();//获取当前操作窗口的句柄
driver.getWindowHandles();//获取测试时打开的所有窗口句柄

11.select选择框

如果页面元素是一个下拉框,我们可以将此web元素封装为Select对象
Select select=new Select(WebElement element);
Select对象常用api
select.getOptions();//获取所有选项
select.selectByIndex(index);//根据索引选中对应的元素
select.selectByValue(value);//选择指定value值对应的选项
select.selectByVisibleText(text);//选中文本值对应的选项

12.js语句执行

分为两种情况:
控件没有限制手动输入,则直接调用sendKeys方法写入时间数据
控件有限制输入,则可以执行一段js来改变元素的value属性值
JavascriptExecutor jsExecutor=(JavascriptExecutor) driver;
jsExecutor.executeScript("...");

13.鼠标操作

  • clickAndHold(): 点击鼠标左键
  • contextClick(): 点击鼠标右键
  • doubleClick(): 鼠标双击
  • moveToElement(): 鼠标悬停
  • dragAndDrop(): 鼠标拖拽
  • perform(): 执行所有 Actions 中存储的行为
  • sendKeys(): 输入键盘中的按键
  • keysDown(): 按下按键
  • keysUp(): 松开按键
Actions actions = new Actions(driver)
actions.clickAndHold().moveToElement().release().build().perform();
actions.keyDown()
actions.keyUp()

14.截图操作

元素截图:这里的FileUtils来自commons,也可以自己用io的输入流和输出流进行操作

WebElement input = driver.findElement(By.tagName("input"));
        input.sendKeys("selenium");

        Thread.sleep(2000);

        // 获取元素截屏
        File eleShot = input.getScreenshotAs(OutputType.FILE);
        FileUtils.copyFile(eleShot, new File("./input.png"));

整个窗口截图:

// 获取整个窗口的截屏
        File screenShot = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
        FileUtils.copyFile(screenShot, new File("./screen.png"));

        Thread.sleep(1000);

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

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

相关文章

智能工单系统(IT运维工单系统),为企业IT运维跨部门协作量身定制!

当企业规模扩大、业务日益复杂时&#xff0c;普通的it运维工单管理方法已无法满足企业的需求&#xff0c;可能变得难以胜任。正因如此&#xff0c;智能工单系统&#xff08;IT运维工单系统&#xff09;进入人们的视野中。因其可以大幅提高企业跨部门协作的效率和满意度&#xf…

java版MES系统全套源码,支持 SaaS 多租户,管理后台的 Vue3 版本采用 :vue-element-plus-admin

MES生产制造执行系统源码&#xff0c;有演示&#xff0c;自主研发&#xff0c;多个项目应用案例&#xff0c;成熟稳定。支持二次开发&#xff0c;商业授权后可商用。 MES系统是面向制造企业车间执行层的生产信息化管理系统&#xff0c;能实时监控生产过程、管理制造数据、优化生…

深度学习入门-第3章-神经网络

前面的待补充 3.6 手写数字识别 3.6.1 MNIST 数据集 本书提供了便利的 Python 脚本 mnist.py &#xff0c;该脚本支持从下载 MNIST 数据集到将这些数据转换成 NumPy 数组等处理&#xff08;mnist.py 在 dataset 目录下&#xff09;。 使用 mnist.py 时&#xff0c;当前目录必须…

2米量级高速风洞测量系统,智能装备与通信技术产业展览会(2024中国军民两用)

"2米量级高速风洞测量系统&#xff1a;规范化改进与未来展望" 在航空航天领域&#xff0c;风洞试验是评估飞行器设计性能的关键手段。为了满足日益增长的科研需求&#xff0c;对2米量级高速风洞测量系统的规范化改进变得尤为重要。本文将探讨该系统的改进措施及其在…

打开C# 大门:Hallo, World!

C# 介绍 C#&#xff08;C Sharp&#xff09;是一种面向对象的编程语言&#xff0c;由微软公司开发。它是 .NET Framework 的一部分&#xff0c;用于构建 Windows 应用程序、Web 应用程序、移动应用程序等。C# 语言的设计目标是简单、现代化、易于学习和使用。在本文中&#xf…

【数据结构】排序(直接插入、折半插入、希尔排序、快排、冒泡、选择、堆排序、归并排序、基数排序)

目录 排序一、插入排序1.直接插入排序2.折半插入排序3.希尔排序 二、交换排序1.快速排序2.冒泡排序 三、选择排序1. 简单选择排序2. 堆排序3. 树排序 四、归并排序(2-路归并排序)五、基数排序1. 桶排序&#xff08;适合元素关键字值集合并不大&#xff09;2. 基数排序基数排序的…

JAVA-学习

一、垃圾回收机制 1、为什么要进行垃圾回收机制 如果不进行垃圾回收&#xff0c;内存迟早都会被消耗空&#xff0c;因为我们在不断的分配内存空间而不进行回收。除非内存无限大&#xff0c;我们可以任性的分配而不回收&#xff0c;但是事实并非如此。所以&#xff0c;垃圾回收…

DS:数与二叉树的相关概念

欢迎来到Harper.Lee的学习世界&#xff01;博主主页传送门&#xff1a;Harper.Lee的博客主页想要一起进步的uu可以来后台找我哦&#xff01; 一、树的概念及其结构 1.1 树的概念亲缘关系 树是一种非线性的数据结构&#xff0c;它是由n&#xff08;n>0&#xff09;个有限节点…

阿里云镜像加速配置(工作中经常用到,写在此方便)

原因 由于运营商网络原因&#xff0c;会导致您拉取Docker Hub镜像变慢&#xff0c;甚至下载失败。为此&#xff0c;阿里云容器镜像服务ACR提供了官方的镜像加速器&#xff0c;从而加速官方镜像的下载。 获取镜像加速器地址 ACR会为每一个账号&#xff08;阿里云账号或RAM用户…

地球科学SCI期刊,中科院2区,IF=14.6,自引率低,无预警风险!

一、期刊名称 IEEE Geoscience and Remote Sensing Magazine 二、期刊简介概况 期刊类型&#xff1a;SCI 学科领域&#xff1a;地球科学 影响因子&#xff1a;14.6 中科院分区&#xff1a;2区 三、期刊征稿范围 IEEE地球科学和遥感杂志向读者介绍IEEE GRS协会及其技术委员…

Unity打包Webgl端进行 全屏幕自适应

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一&#xff1a;修改 index.html二&#xff1a;将非移动端设备&#xff0c;canvas元素的宽度和高度会设置为100%。三&#xff1a;修改style.css总结 下载地址&#x…

SBOM是如何帮助医疗器械制造商提高产品透明度的?

SBOM&#xff08;软件物料清单&#xff09;通过以下方式帮助医疗器械制造商提高产品透明度&#xff1a; 1. 详细记录软件组成 SBOM详细列出了医疗器械所使用的所有软件组件、版本、作者、许可证信息等。这使得制造商能够清晰地了解产品的软件组成&#xff0c;包括每个组件的来…

蓝牙AOA定位专用温补晶振TG5032CFN

随着物联网&#xff08;IoT&#xff09;技术的迅猛发展&#xff0c;蓝牙AOA&#xff08;Angle of Arrival&#xff09;定位技术在智能家居、工业自动化、资产跟踪和健康监测等领域中得到了广泛应用。为了确保蓝牙AOA定位系统的高精度和稳定性&#xff0c;选择合适的时钟源至关重…

【智能AI相机】基于AI的新型成像和照明技术

缩短检测时间 降低废品率和成本 更快捕捉更多缺陷 ” Trevista CI Dome将康耐视专利的计算成像算法与结构化漫射圆顶照明相结合&#xff0c;提供无与伦比的地形图像质量&#xff0c;为光泽和哑光表面检测提供创新解决方案。有助于&#xff1a;缩短检测时间、降低废品率和成本…

6月6号直播预告 | 认识PCIE464控制卡及其EtherCAT驱动器与控制卡常用回零模式介绍

在智能装备领域&#xff0c;精度、效率和产能是关键的竞争力指标&#xff0c;大多数都面临备货排产要求高、需要调度协同生产和更高的加工精度等问题&#xff0c;特别是在3C电子、半导体设备、锂电光伏等高速高精制造领域。 运动控制系统的性能直接影响生产质量和效率&#xf…

磷酸二氢锂电池水中除硼、盐湖氯化镁卤水中除硼深度处理

Tulsimer CH-99 硼选择吸附树脂 Tulsimer CH-99 是一款去除水溶液中硼及其盐的选择性离子交换树脂。在一些化工工业以及农业用水中&#xff0c;微量的硼或者硼盐都可能是严重的问题。此种树脂可以在较大的PH 范围内甚至有其他离子存在的溶液中有效的去除硼以及硼盐&#xff0c…

HCIP-Datacom-ARST自选题库__多种协议简答【11道题】

1.BGP/MPLSIP VPN的典型组网场景如图所示&#xff0c;PE1和PE2通过LoopbackO建立MP-IBGP&#xff0c;PE1和PE2之间只传递VPN路由&#xff0c;其中PE1BGP进程的部分配置已在图中标出&#xff0c;则编号为0的命令不是必须的。(填写阿拉伯数字) 3 2.在如图所示的Hub&amp;Spok…

FANUC机器人SRVO-348 DCS MCC关闭报警处理方法总结

FANUC机器人SRVO-348 DCS MCC关闭报警处理方法总结 如下图所示,由于操作人员在操机时误打开了安全门,导致机器人紧急制动停止,示教器上显示: SRV0-348 DCS MCC关闭报警0,1, 如下图所示,查看手册中关于SRVO-348报警的具体内容: 原因分析:给机器人主电源上电的接触器在紧…

arm cortex-m架构 SVC指令详解以及SVC异常在freertos的应用

1. 前置知识 本文基于arm cortex-m架构描述&#xff0c; 关于arm cortex-m的一些基础知识可以参考我另外几篇文章&#xff1a; arm cortex-m 架构简述arm异常处理分析c语言函数调用规范-基于arm 分析 2 SVC指令 2.1 SVC指令位域表示 bit15 - bit12&#xff1a;条件码&#…

JVM-JAVA-类加载过程

JVM源码 类加载到 JVM 的过程通过 java 命令执行代码的流程 类加载到 JVM 的过程 在运行一个 main 函数启动程序是&#xff0c;首先需要类加载起把主类加载到 JVM 中 通过 java 命令执行代码的流程 loadClass的类加载过程有如下几步&#xff1a; 类被加载到方法区中后主要包…