【Selenium学习】环境搭建 API学习

news2024/11/24 2:25:35

目录

一、java+Selenium的环境搭建?

二、认识Selenium

1、什么是自动化? 

2、什么是Selenium? (重点)

3、selenium的工作原理?(重点)

 三、Selenium操作元素API(重点)     

第一部分:操作测试对象

 1、定位元素

方式1:css selector

方式2:xpath

定位元素:findElement

2、submit提交表单

3、text获取元素文本

 4、clear 清除输入的文本内容

 5、等待(重点)

(1)隐式等待 ——>无条件等待,在一个时间段内等待

(2)显示等待 —> 有条件等待

 (3)强制等待 —>无条件等待

7、getCurrentUrl获取url

 8、getTitle获取标题

 9、浏览器最大化

 10、浏览器的前进和后退

11、键盘相关输入 

​12、鼠标操作

13、浏览器滚动条操作

 14、截图

15、浏览器的关闭

16、窗口的切换

第二部分:关于页面操作的API

1、只勾选复选框,不勾选单选框

2、多层框架iframe页面如何操作

3、下拉选项如何操作

4、针对alert弹窗如何操作

5、完成文件的提交


一、java+Selenium的环境搭建?

Windows电脑环境搭建+Chrome浏览器

前置条件:java最低版本要求为8,推荐使用Chrome浏览器。

(1)保证电脑有Chrome浏览器——>查看浏览器的版本:113

 

(2)下载浏览器驱动

下载链接

 (3)配置环境变量:将下载的chromedriver.exe放在Java的安装路径下(java下的bin目录里):

 同时要在系统中配置环境变量:

 (4)验证环境是否搭建成功

新创建一个项目,引入依赖:将下述代码放在pom.xml文件里,刷新下载。

<dependencies>
        <!-- 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>
<dependencies>

(5)下载好之后,输入一段测试代码(打开百度),观察是否执行成功。

 public static void main(String[] args) throws InterruptedException {
        ChromeOptions options = new ChromeOptions();
        options.addArguments("--remote-allow-origins=*");
        WebDriver webDriver = new ChromeDriver(options);
        webDriver.get("https://www.baidu.com");
    }

成功打开百度页面即安装成功。

二、认识Selenium

1、什么是自动化? 

自动化:所谓的自动化就是将手工测试转化为代码,让代码代替人工执行测试。

好处:可以提高测试效率,可以提高测试质量。

问题1:自动化测试好还是手工测试好?

没有孰好孰坏,只有适合当前业务的测试类型就是一个好的测试方法。

问题2:自动化测试能否完全代替手工测试?

不能完全代替!因为手工测试可以对我们的软件进行发散的测试,更加灵活。


自动化测试金字塔

2、什么是Selenium? (重点)

selenium是自动化测试框架,主要针对web项目进行UI自动化测试。

问题1:selenium的特点?

(1)支持多语言:java,python,JS,Ruby,C#...

(2)支持跨平台;一套代码可以在Linux,Mac,Windows上运行;

(3)有丰富的API;

(4)支持多种浏览器:Edge,Chrome,Firefox...

(5)开源。

3、selenium的工作原理?(重点)

 驱动:就是将浏览器双击打开。

        【首先通过自动化脚本代码运行,创建了一个HTTP请求,因此要有对应的服务器接收,所以webDriver浏览器驱动接收该请求,将该请求解析,获取信息:你是让我打开哪个网页?解析完成之后,通过驱动来让浏览器来执行解析好的命令,此时浏览器就可以执行代码让它做的事情了。因此浏览器并不是直接与代码进行交互,是通过驱动进行的。最后浏览器是否执行成功,将结果发送给驱动,然后驱动再发送给代码,因此可以观察到代码是否执行成功。】


 三、Selenium操作元素API(重点)     

第一部分:操作测试对象

 1、定位元素

方式1:css selector

(1)id选择器

#id值 比如#su

(2)类选择器 

.类名   比如 .s_ipt

(3)标签选择器

父标签 子标签 比如span标签  input标签

(4)后代选择器

子选择器和副选择器空格隔开

方式2:xpath

(1)绝对路径定位

 /html/body/div[1]/div[1]/div[5]/div/div/form/span[1]/input

(2)相对路径定位:通过//开头

相对路径+索引

 相对路径+元素

相对路径+通配符

相对路径+部分元素定位

相对路径+文本

 更推荐使用css定位元素,因为xpath定位元素的方式效率比较低。

定位元素:findElement

实现:打开百度首页并输入“软件测试”并点击“百度一下”按钮。

  public static void main(String[] args) throws InterruptedException {
        test01();
    }

    public static void test01() throws InterruptedException {
        //创建一个驱动
        ChromeOptions options = new ChromeOptions();
        options.addArguments("--remote-allow-origins=*");
        WebDriver webDriver = new ChromeDriver(options);
        //打开百度首页
        webDriver.get("https://www.baidu.com");
        //输入“测试软件” #kw是输入框的id
        webDriver.findElement(By.cssSelector("#kw")).sendKeys("软件测试");
        //点击“百度一下”按钮 这个按钮的id是#su
//        webDriver.findElement(By.cssSelector("#su")).click();
        webDriver.findElement(By.xpath("//*[@id=\"su\"]")).click();
        //找到所有查询出来的“软件测试”文案对应的元素-em标签是一种HTML标签,用于在网页中强调某些文字或者短语
        sleep(1000);
        List<WebElement> result = webDriver.findElements(By.cssSelector("em"));
        //对结果判断:如果搜索结果为0,表明测试不通过;否则测试通过
        if(String.valueOf(result.size()).equals(0)){
            System.out.println("测试不通过");
        }else{
            System.out.println("测试通过");
        }

        //打印所有的查询的值
        System.out.println(result.size());
    }

2、submit提交表单

submit点击的元素必须放在form表单里,但是click没有要求。

        点击“百度一下”按钮(在form表单里,所以submit和click都可以使用);点击“新闻”按钮,因为这个按钮不在form表单里,所以只能使用click。

3、text获取元素文本

通过getAttribute实现打印“百度一下”这几个字。

 

注意:使用getText()

<div>音乐</div>  内容在标签中间这种形式,可以获取到;

如果是<div class="music"> 音乐</div>则有可能获取不到。

 4、clear 清除输入的文本内容

在百度输入框:首先输入“音乐”,然后清除掉,重新输入“天气”。

 5、等待(重点)

selenium的三种等待方式(显示等待,隐式等待,强制等待)简单了解与总结_selenium 等待_Evan.lu的博客-CSDN博客

(1)隐式等待 ——>无条件等待,在一个时间段内等待

        隐式等待是告诉WebDriver去等待一定的时间后去查找元素。默认等待时间是0秒,一旦设置该值,隐式等待是设置该WebDriver的实例的生命周期。implicitlyWait。

(2)显示等待 —> 有条件等待

        当等待的条件满足后(一般用来判断需要等待的元素是否加载出来),就继续下一步操作。等不到就一直等,如果在规定的时间之内都没找到,那么就跳出Exception。

 (3)强制等待 —>无条件等待

使用方法:time.sleep(delay)

        delay的单位为,delay设置多少秒页面就会等待多少秒(死等),这个方法很容易让线程挂掉,使程序抛异常,所以要慎用此方法。

区别:

相同点:显示等待与隐式等待都属于智能等待;

不同点:隐式等待等待的是页面上所有的元素;显示等待是条件满足即可。

click 点击对象

send_keys 在对象上模拟按键输入

clear 清除对象输入的文本内容

submit 提交

text 用于获取元素的文本信息。

7、getCurrentUrl获取url

打印百度首页地址

 8、getTitle获取标题

获取百度标题

 

 9、浏览器最大化

随浏览器窗口的大小进行操作。

 10、浏览器的前进和后退

先输入软件测试,点击按钮;然后回退到百度首页;最后又跳转到 软件测试页面。

浏览器前进:navigate().back()

浏览器后退:navigate().forward()

11、键盘相关输入 

先在输入框输入“软件测试”,然后Ctrl A全选,Ctrl X剪切,最后Ctrl V粘贴。Keys.CONTROL+"A"

 12、鼠标操作

搜索框输入“软件测试”后,鼠标移动到“图片”按钮上,右键。

13、浏览器滚动条操作

浏览器输入框输入“软件测试”,并滑动滚动条到底部。

 14、截图

15、浏览器的关闭

16、窗口的切换

第二部分:关于页面操作的API

解决办法

1、只勾选复选框,不勾选单选框

public static void main(String[] args) {
        ChromeOptions options = new ChromeOptions();
        options.addArguments("--remote-allow-origins=*");
        WebDriver webDriver = new ChromeDriver(options);
        webDriver.get("http://localhost:63342/TestClass/src/main/Page/test01.html?_ijt=vujpnrbp5grsge6km2ttcgt162&_ij_reload=RELOAD_ON_SAVE");
        //获取input标签下的所有元素
        List<WebElement> webElements = webDriver.findElements(By.cssSelector("input"));
        //遍历
        //如果是checkBox复选框,就点击,;如果是radio就不执行
        for (int i = 0; i < webElements.size(); i++) {
            if(webElements.get(i).getAttribute("type").equals("radio")){

            }else{
                webElements.get(i).click();
            }
        }
    }

2、多层框架iframe页面如何操作

private static void a02(){
        //1、创建浏览器驱动
        WebDriver webDriver = new ChromeDriver();
        //2、找到网页打开
        webDriver.get("http://localhost:63342/TestClass/src/main/Page/test02.html?_ijt=id3t0m69rupdc57qf2ab70ssl5&_ij_reload=RELOAD_ON_SAVE");
        //3、找到click按钮点击
        //目标在iFrame标签下,直接用findElement会报错
//        webDriver.findElement(By.cssSelector("body > div > div > a")).click(); //报错
        //但是目标元素不在iFrame标签下可以直接获取
//        String s3 = webDriver.findElement(By.cssSelector("body > div > div > h3")).getText();
//        System.out.println(s3);//可以打印出 frame
        //当目标在IFrame下的正确写法
        webDriver.switchTo().frame("f1");//因为查找的click在iFrame的f1下,所以写的f1
        webDriver.findElement(By.cssSelector("body > div > div > a")).click(); 
    }

3、下拉选项如何操作

通过值或者索引定位到下拉框。

private static void Page03() {
        //1、打开浏览器驱动
        WebDriver webDriver = new ChromeDriver();
        //2、打开网页
        webDriver.get("http://localhost:63342/TestClass/src/main/Page/test03.html?_ijt=5vi46n1ldrqlkan442l34uil5o&_ij_reload=RELOAD_ON_SAVE");
        //3、选择
        Select select = new Select(webDriver.findElement(By.cssSelector("#ShippingMethod")));
//        select.selectByValue("12.51");
        select.selectByIndex(2);// 10.69
    }

4、针对alert弹窗如何操作

private static void Page04() throws InterruptedException {
        //1、创建驱动
        WebDriver webDriver = new ChromeDriver();
        //2、打开页面
        webDriver.get("http://localhost:63342/TestClass/src/main/Page/test04.html?_ijt=29v295e0m1hh0h158v5hjd1k13&_ij_reload=RELOAD_ON_SAVE");
        webDriver.findElement(By.cssSelector("body > button")).click();
        sleep(1000);
        //3、对alter弹窗进行确定
//        webDriver.switchTo().alert().accept();
        // 对alter窗口进行取消
//        webDriver.switchTo().alert().dismiss();
        //对alter弹窗 输入文字并确定
        webDriver.switchTo().alert().sendKeys("美好的一天");
        webDriver.switchTo().alert().accept();

    }

5、完成文件的提交

private static void Page05() {
        //1、创建驱动
        WebDriver webDriver = new ChromeDriver();
        //2、打开网址
        webDriver.get("http://localhost:63342/TestClass/src/main/Page/test05.html?_ijt=r3ll4mtge8ank0o856jktnofnb&_ij_reload=RELOAD_ON_SAVE");
        //3、找到 “选择文件”的按钮  //4、输入字符串 :字符串表示文件的路径
        webDriver.findElement(By.cssSelector("body > input[type=file]")).sendKeys("D:\\链接.txt");
    }


 

 

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

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

相关文章

【数据结构OJ题】合并两个有序链表

原题链接&#xff1a;https://leetcode.cn/problems/merge-two-sorted-lists/description/ 目录 1. 题目描述 2. 思路分析 3. 代码实现 1. 题目描述 2. 思路分析 可以先创建一个空链表&#xff0c;然后依次从两个有序链表中选取最小的进行尾插操作。&#xff08;有点类似双…

【数据结构OJ题】环形链表

原题链接&#xff1a;https://leetcode.cn/problems/linked-list-cycle/description/ 1. 题目描述 2. 思路分析 整体思路&#xff1a;定义快慢指针fast&#xff0c;slow&#xff0c;如果链表确实有环&#xff0c;fast指针一定会在环内追上slow指针。 即慢指针一次走一步&…

分布式 | 如何搭建 DBLE 的 JVM 指标监控系统

本篇文章采用 Docker 方式搭建 Grafana Prometheus 实现对 DBLE 的 JVM 相关指标的监控系统。 作者&#xff1a;文韵涵 爱可生 DBLE 团队开发成员&#xff0c;主要负责 DBLE 需求开发&#xff0c;故障排查和社区问题解答。 本文来源&#xff1a;原创投稿 爱可生开源社区出品&a…

“开发和运维”只是一个开始,最终目标是构建高质量的软件工程

随着技术的飞速发展&#xff0c;软件行业不断寻求改进和创新的方法来提供更高质量的产品。在这方面&#xff0c;DevOps已经展现出了巨大的潜力。通过打破开发和运维之间的壁垒&#xff0c;DevOps将持续集成、持续交付和自动化流程引入到软件开发中&#xff0c;使团队能够更快地…

PSP - 开源可训练的蛋白质结构预测框架 OpenFold 的环境配置

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/132334671 Paper: OpenFold: Retraining AlphaFold2 yields new insights into its learning mechanisms and capacity for generalization Open…

循环队列的实现(c语言)

前言 循环队列是队列的一种特殊的结构&#xff0c;在生产者——消费者模型中常常使用它&#xff0c; 它在逻辑上是一个环形的连续的结构。在物理可以使用数组来实现。 目录 1.循环队列的逻辑结构 2.空的循环队列和满的循环队列 3.循环队列插入和删除 4.代码实现 …

关于小程序收集用户手机号行为的规范

手机号在日常生活中被广泛使用&#xff0c;是重要的用户个人信息&#xff0c;小程序开发者应在用户明确同意的前提下&#xff0c;依法合规地处理用户的手机号信息。 而部分开发者在处理用户手机号过程中&#xff0c;存在不规范收集行为&#xff0c;影响了用户的正常使用体验&a…

如何使用ChatGPT创建个性化的健身锻炼计划

ChatGPT广泛应用于各个行业&#xff0c;健身也不例外。 ChatGPT 在健身领域的一个常用案例是创建个性化的锻炼计划。 在要求 ChatGPT 创建锻炼计划时&#xff0c;简单地输入自己的目标和当前的健身水平是一个很好的开始。完成此操作后&#xff0c;你还可以使用其他提示和措施来…

视频汇聚集中存储EasyCVR平台调用iframe地址视频无法播放,该如何解决?

安防监控视频汇聚平台EasyCVR基于云边端一体化架构&#xff0c;具有强大的数据接入、处理及分发能力&#xff0c;可提供视频监控直播、云端录像、视频云存储、视频集中存储、视频存储磁盘阵列、录像检索与回看、智能告警、平台级联、云台控制、语音对讲、AI算法中台智能分析无缝…

Git 删除 GitHub仓库的文件

新建文件夹 git bash here 在新建的文件夹里右键git bash here打开终端&#xff0c;并执行git init初始化仓库 git clone <你的地址> 找到github上要删除的仓库地址&#xff0c;并复制&#xff0c;在终端里输入git clone <你的地址> 要删除文件的库里右键git b…

使用 Apache Kafka 和 Go 将数据引入 OpenSearch

需要编写自定义集成层来满足数据管道中的特定要求&#xff1f;了解如何使用 Go 通过 Kafka 和 OpenSearch 实现此目的。 可扩展的数据摄取是OpenSearch等大规模分布式搜索和分析引擎的一个关键方面。构建实时数据摄取管道的方法之一是使用Apache Kafka。它是一个开源事件流平台…

Ceph如何操作底层对象数据

1.基本原理介绍 1.1 ceph中的对象(object) 在Ceph存储中&#xff0c;一切数据最终都会以对象(Object)的形式存储在硬盘&#xff08;OSD&#xff09;上&#xff0c;每个的Object默认大小为4M。 通过rados命令&#xff0c;可以查看一个存储池中的所有object信息&#xff0c;例如…

配资平台app(正规股票配资软件)架构是怎么搭建的?

随着股票市场的发展&#xff0c;越来越多的投资者开始尝试使用股票配资平台进行杠杆炒股&#xff0c;因此&#xff0c;搭建一套稳定、可靠的配资平台app架构显得尤为重要。本文将介绍配资平台app架构设计的关键要素&#xff0c;以及建立一个正规的配资平台app所需考虑的问题。 …

独立站站群模式是什么意思?站群模式的定义?自建站站群策略含义是什么?

什么是独立站站群模式&#xff1f; 在当今数字化时代&#xff0c;互联网已经成为了人们生活中不可或缺的一部分。随着互联网的发展&#xff0c;独立站站群模式逐渐引起了人们的关注。那么&#xff0c;究竟什么是独立站站群模式呢&#xff1f;让我们一起深入了解一下。 独立站…

85-基于stm32单片机厨房MQ4天然气泄露浓度DHT11温湿度监测报警系统Proteus仿真+源码...

资料编号&#xff1a;085 一&#xff1a;功能介绍&#xff1a; 1、采用stm32单片机OLED显示屏MQ4可燃气体浓度检测DHT11温湿度电机按键蜂鸣器&#xff0c;制作一个温湿度采集、MQ4可燃气体浓度采集&#xff0c;OLED显示相关数据&#xff0c; 2、通过按键设置温度上限、可燃气体…

高性能本地缓存Ristretto(四)—— NumCounters 与 MaxCost参数的设置

ristretto 参数 我在使用ristretto时&#xff0c;对于参数的设置有些疑问。主要是 NumCounters &#xff0c;MaxCost 分别表示什么含义&#xff0c;以及如何确定其数值的问题。 在此记录并分享一下&#xff0c;欢迎各位批评指正&#xff0c;谢谢 官方的指导 先看一下官方的…

模糊测试面面观 | 模糊测试工具知多少

自1988年威斯康星大学的Barton Miller首次提出模糊测试这一概念以来&#xff0c;模糊测试领域经历了持续长久发展。模糊测试作为一种软件测试方法&#xff0c;旨在通过向程序输入模糊、随机、异常的数据&#xff0c;探测和发现潜在的漏洞和错误。这种方法备受安全研究人员的青睐…

“SRP模型+”多技术融合在生态环境脆弱性评价模型构建、时空格局演变分析与RSEI 指数的生态质量评价

近年来&#xff0c;国内外学者在生态系统的敏感性、适应能力和潜在影响等方面开展了大量的生态脆弱性研究&#xff0c;他们普遍将生态脆弱性概念与农牧交错带、喀斯特地区、黄土高原区、流域、城市等相结合&#xff0c;评价不同类型研究区的生态脆弱特征&#xff0c;其研究内容…

win下qwidget全屏弹窗后其他窗口鼠标样式无法更新的问题

在win平台下&#xff0c;实现截取选桌面执行推理功能&#xff0c;用一个qwidget(j对象名为m_selectWidget)来显示选取范围的边框&#xff0c;但这个qwidget显示后&#xff0c;其他窗口在他下面可以接受鼠标相应的事件&#xff0c;但原来的鼠标形状功能失效&#xff08;mac正常&…

构建去中心化微服务集群,满足高可用性和高并发需求的实践指南!

随着互联网技术的不断发展&#xff0c;微服务架构已经成为了开发和部署应用程序的一种主流方式。然而&#xff0c;当应用程序需要满足高可用性和高并发需求时&#xff0c;单一中心化的微服务架构可能无法满足性能和可靠性的要求。因此&#xff0c;构建一个去中心化的微服务集群…