Selenium自动测试框架

news2024/11/28 22:34:30

selenium3

  • selenium
  • 元素的定位
    • css 选择器
    • Xpath
  • 操作测试对象 API
  • 添加等待
  • 浏览器的操作
    • 键盘操作
    • 鼠标操作
    • 定位一组元素
    • 下拉框
    • 弹窗
    • 上传文件

在这里插入图片描述

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

selenium

是用来做 web自动化测试的框架

特点 : 支持各种 浏览器 , 语言 , 平台 , 有丰富的 API

在这里插入图片描述

	 	ChromeOptions options = new ChromeOptions();
	 	//允许所有请求
        options.addArguments("--remote-allow-origins=*");
        //创建驱动
        WebDriver webDriver = new ChromeDriver(options);
        //打开百度首页
        webDriver.get("https://www.baidu.com");
        //强制等待
         sleep(3000);
         
        // 找到百度搜索输入框,输入“666”
        webDriver.findElement(By.cssSelector("#kw")).sendKeys("666");
        WebElement element = webDriver.findElement(By.xpath("//*[@id=\"kw\"]"));
        // 点击了百度一下按钮
        webDriver.findElement(By.cssSelector("#su")).click();
        
        //隐式等待
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.DAYS);
        
        // 清空百度搜索输入框中的数据
        webDriver.findElement(By.cssSelector("#kw")).clear();
        
        //getAttribute
        String button_value = webDriver.findElement(By.cssSelector("#su")).getAttribute("value");
        
        //得到 url 得到 title
         String url = webDriver.getCurrentUrl();
        String title = webDriver.getTitle();
        if(url.equals("https://www.baidu.com/") && title.equals("百度一下,你就知道")) {
            System.out.println("当前页面url:" + url + ",当前页面title:" + title);
            System.out.println("测试通过");
        } else {
            System.out.println("测试不通过");
        }
        
        //显式等待
        WebDriverWait wait = new WebDriverWait(webDriver, 1);
        wait.until(ExpectedConditions.elementToBeClickable(By.cssSelector("#bottom_layer > div111 ")));

元素的定位

css 选择器

在这里插入图片描述
css选择器效率更高

Xpath

在这里插入图片描述

操作测试对象 API

webdriver 中比较常用的操作对象的方法有下面几个:

  • click 点击对象
  • send_keys 在对象上模拟按键输入
  • clear 清除对象输入的文本内容
  • submit 提交 (点击的元素必须放在form标签中)
  • text 用于获取元素的文本信息
  • getAttribute 获取元素对应的属性值

添加等待

  • sleep 强制等待

sleep(3000);

  • 显式等待(Explicit Wait):显式等待是通过编程方式明确指定等待条件,直到条件满足或超时才继续执行后续操作。
// 创建WebDriverWait实例,设置等待时间为10秒
WebDriverWait wait = new WebDriverWait(driver, 10);

// 使用显式等待等待元素可见
WebElement element = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("elementId")));

在显式等待中,我们需要明确指定等待的条件,例如等待元素可见、可点击、存在等。这种等待方式更加灵活,可以根据具体的等待条件来控制等待时间。

  • 隐式等待(Implicit Wait):隐式等待是在代码中设置一个全局的等待时间,用于等待页面加载和元素查找。
  webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.DAYS);

在隐式等待中,如果在查找元素时没有立即找到,会等待一段时间再进行查找,直到超过设定的等待时间。隐式等待适用于整个测试过程中的多个操作,可以减少代码中的重复等待代码。

显式等待和隐式等待都可以用于处理页面加载缓慢、网络延迟或元素加载时间不确定的情况。选择使用哪种等待方式取决于具体的测试需求和场景。
显式等待更加精确和灵活,适用于需要等待特定条件的情况;
而隐式等待更加简单,适用于整个测试过程中的多个操作。

浏览器的操作

 private static void test() throws InterruptedException {
        WebDriver webDriver = new ChromeDriver();
        // 打开百度首页
        webDriver.get("https://wwww.baidu.com/");
        // 搜索521
        webDriver.findElement(By.cssSelector("#kw")).sendKeys("521");
        // 点击搜索
        webDriver.findElement(By.cssSelector("#su")).click();
        sleep(3000);
        // 浏览器后退
        webDriver.navigate().back();
        sleep(3000);
        // 刷新
        webDriver.navigate().refresh();
        sleep(3000);
        // 浏览器前进
        webDriver.navigate().forward();
        sleep(3000);
        //滚动条滑到最下面
        ((JavascriptExecutor)webDriver).executeScript("document.documentElement.scrollTop=10000");
        //页面最大化
        webDriver.manage().window().maximize();
        sleep(3000);
        //页面全屏
        webDriver.manage().window().fullscreen();
        sleep(3000);
        //指定大小
        webDriver.manage().window().setSize(new Dimension(600, 1000));
        
          webDriver.findElement(By.cssSelector("#s-top-left > a:nth-child(1)")).click();
        sleep(4000);
        //quit关闭整个浏览器 , quit 清空缓存
//        webDriver.quit();
		//close 关闭了页面
        webDriver.close();

    }

 private static void test11() throws InterruptedException {
        WebDriver webDriver = new ChromeDriver();
        webDriver.get("https://www.baidu.com/");
        webDriver.findElement(By.cssSelector("#s-top-left > a:nth-child(1)")).click();
        sleep(3000);
        // 通过getWindowHandles获取所有的窗口句柄
        // 通过getWindowHandle获取的get打开的页面窗口句柄
        System.out.println(webDriver.getWindowHandle());
        Set<String> handles = webDriver.getWindowHandles();
        String target_handle = "";
        for(String handle:handles) {
            target_handle = handle;
        }
        //跳转页面
        webDriver.switchTo().window(target_handle);
        sleep(3000);
        webDriver.findElement(By.cssSelector("#ww")).sendKeys("新闻联播");
        webDriver.findElement(By.cssSelector("#s_btn_wr")).click();

		//截图
		 File file = ((TakesScreenshot)webDriver).getScreenshotAs(OutputType.FILE);
        FileUtils.copyFile(file, new File("D://jietu.png"));

    }

键盘操作

  private static void test08() throws InterruptedException {
        WebDriver webDriver = new ChromeDriver();
        // 打开百度首页
        webDriver.get("https://wwww.baidu.com/");
        // 搜索521
        webDriver.findElement(By.cssSelector("#kw")).sendKeys("521");
        // control+A
        webDriver.findElement(By.cssSelector("#kw")).sendKeys(Keys.CONTROL, "A");
        sleep(3000);
        // control+X
        webDriver.findElement(By.cssSelector("#kw")).sendKeys(Keys.CONTROL, "X");
        sleep(3000);
        // control+V
        webDriver.findElement(By.cssSelector("#kw")).sendKeys(Keys.CONTROL, "V");
        sleep(3000);
    }

鼠标操作

private static void test() throws InterruptedException {
        WebDriver webDriver = new ChromeDriver();
        webDriver.get("https://www.baidu.com/");
        webDriver.findElement(By.cssSelector("#kw")).sendKeys("520");
        webDriver.findElement(By.cssSelector("#su")).click();
        sleep(3000);
        // 找到图片按钮
        WebElement webElement = webDriver.findElement(By.cssSelector("#s_tab > div > a.s-tab-item.s-tab-item_1CwH-.s-tab-pic_p4Uej.s-tab-pic"));
        // 鼠标右击
        Actions actions = new Actions(webDriver);
        sleep(3000);
        actions.moveToElement(webElement).contextClick().perform();
    }

定位一组元素

private static void test09() throws InterruptedException {
        WebDriver webDriver = new ChromeDriver();
        webDriver.get("https://www.baidu.com/");
        webDriver.findElement(By.cssSelector("#kw")).sendKeys("520");
        webDriver.findElement(By.cssSelector("#su")).click();
        sleep(3000);
        // 找到图片按钮
        WebElement webElement = webDriver.findElement(By.cssSelector("#s_tab > div > a.s-tab-item.s-tab-item_1CwH-.s-tab-pic_p4Uej.s-tab-pic"));
        // 鼠标右击
        Actions actions = new Actions(webDriver);
        sleep(3000);
        actions.moveToElement(webElement).contextClick().perform();
    }

下拉框

  WebElement webElement = webDriver.findElement(By.cssSelector("#ShippingMethod"));
        Select select = new Select(webElement);
        //第三个
//        select.selectByIndex(3);
		//由值选
        select.selectByValue("12.51");

弹窗

  webDriver.findElement(By.cssSelector("button")).click();
        sleep(3000);
        // alert弹窗取消
        webDriver.switchTo().alert().dismiss();
        sleep(3000);
        // 点击按钮
        webDriver.findElement(By.cssSelector("button")).click();
        // 在alert弹窗中输入666
        webDriver.switchTo().alert().sendKeys("666");
        // alert弹窗确认
        sleep(3000);
        webDriver.switchTo().alert().accept();

上传文件

  webDriver.findElement(By.cssSelector("input")).sendKeys("D:\\untitled");

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

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

相关文章

phar反序列化学习

PHP反序列化常见的是使用unserilize()进行反序列化&#xff0c;除此之外还有其它的反序列化方法&#xff0c;不需要用到unserilize()。就是用到phar反序列化。 Phar phar文件 Phar是将php文件打包而成的一种压缩文档&#xff0c;类似于Java中的jar包。它有一个特性就是phar文…

2024级199管理类联考之写作

小作文(论证有效性分析-600字/30分/20-25分钟) 核心原理 找到明显的论证逻辑错误(找到4个即可得16分),然后分析前提推不出结论(14分)(反驳别人) 论证指的是前提推结论 前提引词&#xff1a;因为结论引词&#xff1a;所以,因此,由此可得等有些论证没有明显的引词,需要自行判断怎…

QT webengine显示HTML简单示例

文章目录 参考示例1TestWebenqine.promainwindow.hmainwindow.cppmain.cpp效果 示例2 (使用setDevToolsPage函数)main.cpp效果 参考 QT webengine显示HTML简单示例 示例1 编译器 : Desktop Qt 5.15.2 MSVC2019 64bit编辑器: QtCreator代码: TestWebenqine.pro # TestWeben…

C语言char的取值范围以及溢出情况

char 的取值范围 有符号&#xff1a; 1111 1111 ~ 1000 0000 — 0000 0000 ~ 0111 1111 -127 ~ -0 0 ~ 127 -128 ~ 127&#xff08;因为不需要两个 0 所以给负值增加了一位&#xff09; char 的溢出情况

C语言其它进制转十进制

权值法介绍 权值法&#xff1a; 主要功能为将 X 进制数据转为十进制的数据&#xff0c;具体流程如下&#xff1a; 将 X 进制中的每一位上的 基数 * 位权&#xff0c;再累加 基数&#xff1a;X 进制中每一位的数码个数 位权&#xff1a;X 进制每一位上对应的权值 二进制转十进…

MyString字符串类

MyString字符串类 包括&#xff1a;有参构造、拷贝构造、移动构造、析构、拷贝赋值和移动赋值。 MyString.h文件 #ifndef MYSTRING_H #define MYSTRING_H#include <iostream> using namespace std;class MyString {private:char* str;unsigned int MaxSize;unsigned i…

C语言 定义一个函数,并调用,该函数中完成百文百鸡问题

#include<stdio.h> int main(int argc, char const *argv[]) {int num 0;for (int i 0; i < 33; i){for (int j 0; j < 50; j){int x 100 - i - j;if(3*i2*jx/3 100 && x%3 0){printf("&#x1f413;有%d只,母鸡有%d只,小鸡有%d只\n",i,j,…

深度学习之基于yolov8的安全帽检测系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、基于yolov8的安全帽检测系统四. 总结 一项目简介 在企业作业和工地施工过程中&#xff0c;安全永远高于一切。众所周知&#xff0c;工人在进入…

【C++】STL容器——list类的使用指南(含代码演示)(13)

前言 大家好吖&#xff0c;欢迎来到 YY 滴C系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过C的老铁 主要内容含&#xff1a; 欢迎订阅 YY滴C专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; 目录 一、list 类——基本介绍二、list 类——…

僵尸网络|让人防不胜防的内部网络安全问题,作为企业IT不得不了解的基础安全

在当今数字化世界中&#xff0c;僵尸网络是一种令人不安的存在。它不是一种具体的物理实体&#xff0c;而是一种由恶意软件控制的虚拟网络。这个网络由成百上千&#xff0c;甚至数百万台计算机组成&#xff0c;这些计算机往往被感染&#xff0c;成为攻击者的"僵尸"&a…

基于深度学习的水果识别系统

收藏和点赞&#xff0c;您的关注是我创作的动力 文章目录 概要 一、 水果识别的实验结果分析3.1 实验环境3.2 水果数据集 二、水果识别的界面展示结 论目录 概要 本文详细地介绍了深度学习算法卷积神经网络&#xff08;CNN&#xff09;的发展状况。主要介绍了卷积神经网络的几…

用示例和应用程序了解必要的Golang库

Golang&#xff0c;也被称为Go&#xff0c;因其简单性、性能和并发性支持而在开发人员中迅速流行起来。导致Go成功的关键因素之一是其丰富的库生态系统&#xff0c;可以简化开发并提供解决常见问题的解决方案。在本文中&#xff0c;我们将更仔细地查看一些必要的Golang库&#…

若依框架的使用+代码生成功能

文章目录 导入数据表数据创建一个菜单项生成模块代码导入需要生成的数据表修改需要生成的字段 生成代码使用放行接口接口测试 导入数据表数据 可以使用sql工具等等,导入数据表的数据(安全性考虑,导入图片不贴了) 创建一个菜单项 在系统管理下的菜单管理中创建一个新的菜单项…

【Java 进阶篇】Java Request 请求转发详解

在Java Web开发中&#xff0c;请求转发&#xff08;Request Forwarding&#xff09;是一种常见的技术&#xff0c;用于将请求从一个Servlet转发到另一个Servlet或JSP页面。这种技术在Web应用程序中起着非常重要的作用&#xff0c;可以用于实现模块化、重用代码以及构建更加灵活…

类和对象【上】

目录 面向过程和面向对象 C语言 C 类的定义 类的两种定义方式 成员变量命名规则 类的访问限定符和封装 面试题 封装 类的作用域 类的实例化 类对象模型 内存分配 内存对齐 this指针 特性 面试题 this指针存储在哪里&#xff1f; this指针可以为空么&#xff1…

力扣刷题 day58:10-28

1.奇偶位数 给你一个 正 整数 n 。 用 even 表示在 n 的二进制形式&#xff08;下标从 0 开始&#xff09;中值为 1 的偶数下标的个数。 用 odd 表示在 n 的二进制形式&#xff08;下标从 0 开始&#xff09;中值为 1 的奇数下标的个数。 返回整数数组 answer &#xff0c;…

Linux对网络通信的实现

一、NIO为什么很少注册OP_WRITE事件 1、OP_WRITE触发条件&#xff1a;当操作系统写缓冲区有空闲时就绪。一般情况下写缓冲区都有空闲空间&#xff0c;小块数据直接写入即可&#xff0c;没必要注册该操作类型&#xff0c;否则该条件不断就绪浪费cpu&#xff1b;但如果是写密集型…

200smart 物料分拣案例

[TOC]物料分拣 控制系统动作流程 物料为空时&#xff0c;第三个气缸推出 物料为黑色时&#xff0c;第二个气缸推出 物料为白色时&#xff0c;第一个气缸推出 原理 光电传感器起 到位传感器作用 物料为空时&#xff0c;第三个气缸推出 物料为黑色时&#xff0c;第二个气缸…

正则表达式包含数字和字符匹配

至少6位。 pattern : (?.[0-9])(?.[A-Za-z])[0-9A-Za-z]{6,} 正则表达式中的“?”是一个正向预查字符&#xff0c;它的意思是匹配前一个字符出现的最少一次。具体来说&#xff0c;当一个匹配出现时&#xff0c;它会检查前一个字符是否符合要求&#xff0c;如果符合&#xf…

自学爬虫—作业1—requests模块

视频&#xff1a; 要求&#xff1a; 肯德基地址查询&#xff0c;爬某个关键字&#xff0c;获取下面的所有page的信息&#xff0c;存到一个json或者txt。 代码&#xff1a; 关键点&#xff0c;&#xff08;1&#xff09;每一个ajax的请求第一个键值对就是所有获得的地址的总数…