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

目录

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);

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

教师自费出书的注意事项有哪些?

备案主编专著的优势&#xff1a;&#xff08;qkfb88688&#xff09; 1、副高、正高职称最高学术成果 2、专著可以代替核心 3、周期短、出书快、可重复使用 4、双号齐全&#xff1a;ISBN&#xff5e;CIP 5、版权长期有效 教师自费出书有以下一些注意事项&#xff1a; 关于书稿&…

python---正则表达式

本章目标: 1:能够知道在Python中使用正则要导入的模块; [了解] re模块 2:能够使用re模块匹配单个字符; [重点] \d \w 正则表达式的概述: 基本介绍 正则表达式,也叫做规则表达式,通常会说成[正则] 实际上正则表达式就是指符合一定规则的字符串,同时他能用于检查一段…

MyBatis拦截器使用方法

前言 MyBatis拦截器可以做的工作&#xff1a;SQL修改&#xff0c;分页操作&#xff0c;数据过滤&#xff0c;SQL执行时间性能监控等。 1. 基础介绍 1.1. 核心对象 从MyBatis代码实现的角度来看&#xff0c;MyBatis的主要的核心部件有以下几个&#xff1a; Configuration&am…

OpenStack所支持的虚拟化技术和KVM、Xen、Hyer-V、QEMU、Libvirt说明

OpenStack所支持的虚拟化技术主要包括以下几种&#xff1a; KVM (Kernel-based Virtual Machine): 基于Linux内核的虚拟化技术。在Linux内核中添加一个虚拟化模块来实现虚拟机的运行。是OpenStack用户使用较多的虚拟化技术&#xff0c;支持OpenStack的所有特性。通过QEMU模拟器…

【NoSQL数据库】Redis——哨兵模式

Redis——哨兵模式 Redis哨兵 Redis——哨兵模式1.什么是哨兵机制&#xff08;Redis Sentinel&#xff09;1.1 哨兵的作用 2.哨兵的运行机制3.故障处理redis常见问题汇总1、redis缓存击穿是什么&#xff1f;如何解决&#xff1f;2、redis缓存穿透是什么&#xff1f;如何解决&am…

详解!Python怎么配置环境变量

详解&#xff01;Python怎么配置环境变量 许多刚开始学习编程的初学者在 python的安装上会抱有一定的疑惑&#xff0c;为什么明明已经安装好了 python 环境&#xff0c;但并不能运行python 代码&#xff0c;这是因为 python 的安装过程中还有一步环境变量的配置&#xff0c;接…

微信“对方正在输入”背后的小心思:保持隐秘感,享受宁静的交流

微信&#xff0c;这个伴随我们起居、工作的超级应用&#xff0c;不仅仅是一款聊天软件&#xff0c;它几乎成为了我们社交生活的一部分。它的便捷&#xff0c;让我们的日常沟通如鱼得水。然而&#xff0c;在这个几乎完美的社交工具中&#xff0c;有一个功能&#xff0c;让不少人…

CSS真题合集(二)

CSS真题合集&#xff08;二&#xff09; 11. css3新增特性12. css3动画12.1 关键帧动画 (keyframes)12.2 animation12.3 transition12.4 transform 13. grid网格布局13.1 使用display: grid或display: inline-grid的HTML元素。13.2 定义网格13.3 13.4 自动填充和自动放置13.4 对…

信号发生器如何将频率调大,步尽值改成10

&#x1f3c6;本文收录于「Bug调优」专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收藏&&…

PPT文件损坏且无法读取怎样修复?文档损坏修复方法推荐

PPT文件已经成为工作汇报、商务演示、学术交流以及教学培训中最常用到的文件&#xff0c;随着文件数量的增多和存储设备的频繁使用&#xff0c;我们有时会遇到PPT文件损坏无法打开的情况&#xff0c;这无疑给工作和学习带来了极大的困扰。 PPT文件损坏的原因可能多种多样&#…

FreeRTOS手表项目多级菜单的实现

一、首先介绍一下智能手表项目的背景&#xff1a; 如图&#xff0c;关注焦点是任务&#xff1a; 1、在一个确定时刻&#xff0c;在那一圈任务中&#xff08;写有只有一个任务解挂&#xff09;只有一个任务处在运行&#xff0c;界面显示的是该任务应该显示的内容&#xff1b; …

韩国Neowine推出第三代强加密芯片ALPU-CV

推出第三代加密芯片&#xff1b;是ALPU系列中的高端IC&#xff1b;是一款高性能车规级加密芯片&#xff1b;其加密性更强、低耗电、体积小&#xff1b;使得防复制、防抄袭板子的加密性能大大提升&#xff0c;该芯片通过《AEC-Q100》认证&#xff0c;目前已经在国产前装车辆配件…

代理记账公司哪家好,深度剖析与选择指南

代理记账&#xff0c;作为企业会计管理和运营的重要环节&#xff0c;已经逐渐被越来越多的企业所重视&#xff0c;在众多的代理记账公司中&#xff0c;如何选择一家专业、高效且值得信赖的代理记账机构呢&#xff1f;以下是一些深度解析和推荐。 公司的规模 规模较大的代理记账…

docker实战命令大全

文章目录 1 环境准备1.1 移除旧版本Docker1.2安装工具包1.3配置docker yum源 2 安装最新docker2.1 设置开机自启docker2.2配置加速器 3 实操-镜像3.1搜索镜像3.2下载镜像3.3查看镜像3.4 删除镜像 4 实操-容器4.1运行nginx容器4.2 查看容器4.3启动容器4.5关闭容器4.6查看容器日志…

Linux中Apache网站基于Http服务的访问限制(基于地址/用户)

&#x1f3e1;作者主页&#xff1a;点击&#xff01; &#x1f468;‍&#x1f4bb;Linux高级管理专栏&#xff1a;点击&#xff01; ⏰️创作时间&#xff1a;2024年6月3日11点44分 &#x1f004;️文章质量&#xff1a;95分 为了更好地控制对网站资源的访问&#xff0c;可…

基于SSM+Jsp的高校二手交易平台

开发语言&#xff1a;Java框架&#xff1a;ssm技术&#xff1a;JSPJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包…

前端怎么预览pdf

1.背景 后台返回了一个在线的pdf地址&#xff0c;需要我这边去做一个pdf的预览&#xff08;需求1&#xff09;&#xff0c;并且支持配置是否可以下载&#xff08;需求2&#xff09;&#xff0c;需要在当前页就能预览&#xff08;需求3&#xff09;。之前我写过一篇预览pdf的文…

ant design的upload组件踩坑记录

antd版本 v4.17.0 1.自定义了onpreview和onchange事件&#xff0c;上传文件后&#xff0c;文件显示有preview的icon但是被禁用&#xff0c;无法调用onpreview事件。 问题展现&#xff1a; 苦苦查找原因&#xff0c;问题出在了这里&#xff0c;当文件没有url的时候&#xff0c…

基于FPGA的图像一维FFT变换IFFT逆变换verilog实现,包含tb测试文件和MATLAB辅助验证

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 fpga仿真结果 matlab调用FPGA的仿真结果进行图像显示 2.算法运行软件版本 vivado2019.2 matlab2022a 3.部分核心程序 ......................…

mac系统内存占用过高怎么办 优化电脑内存的方法系统加速

不少Mac用户都对mac系统内存占用过高非常头痛&#xff0c;不过这是mac在使用过程中一个很常见的问题&#xff0c;它会影响用户的操作体验&#xff0c;导致系统运行速度缓慢&#xff0c;甚至出现明显的卡顿现象。面对mac系统内存占用过高怎么办这个问题&#xff0c;其实很好解决…