selenium 02

news2024/11/17 13:21:50

✏️作者:银河罐头
📋系列专栏:JavaEE

🌲“种一棵树最好的时间是十年前,其次是现在”

目录

  • 等待
  • 浏览器的操作
  • 键盘事件
  • 鼠标事件
  • 定位一组元素
  • 多层框架定位
  • 下拉框处理
  • 弹窗处理
  • 上传文件操作
  • 关闭浏览器
  • 切换窗口
  • 截图

等待

sleep

智能等待: 隐式等待,显式等待

  • 显式等待:
private static void test06() {
        //创建驱动
        WebDriver webDriver = new ChromeDriver();
        //打开百度首页
        webDriver.get("https://www.baidu.com/");
        //判断元素是否可以被点击
        WebDriverWait wait = new WebDriverWait(webDriver,1);
//        wait.until(ExpectedConditions.elementToBeClickable(By.cssSelector("#bottom_layer > div > p:nth-child(8)")));
        wait.until(ExpectedConditions.titleIs("百度一下,你就知道"));
    }

wait.until(ExpectedConditions.elementToBeClickable(By.cssSelector())) 属于显式等待。

在隐式等待中,WebDriver 会自动等待一定时间,直到某个条件满足为止。而显式等待则允许我们明确指定等待的时间和条件。在这个示例中,我们使用 WebDriverWait 类创建了一个显式等待对象,并将 ExpectedConditions.elementToBeClickable() 作为参数传递给它。这意味着 WebDriver 将在这个显式等待对象指定的时间内不断检查元素是否可点击,直到满足条件或超时为止。

隐式等待和显式等待都是Selenium WebDriver中常用的等待机制,它们的主要区别在于:

  1. 隐式等待:隐式等待是一种全局性的等待方式,它会在WebDriver启动时立即生效。在隐式等待期间,如果某个条件成立,那么WebDriver就会继续执行后续的操作;否则,WebDriver会一直等待,直到条件满足或超时为止。隐式等待的时间默认为30秒,可以通过设置setImplicitlyWait()方法来修改。
  2. 显式等待:显式等待是一种局部性的等待方式,它只对特定的元素生效。在显式等待期间,如果某个条件成立,那么WebDriver就会继续执行后续的操作;否则,WebDriver会一直等待,直到条件满足或超时为止。显式等待的实现需要使用ExpectedConditions接口中的抽象类或具体类来定义条件。

总之,隐式等待是全局性的,适用于所有操作;而显式等待是局部性的,只适用于特定元素的操作。

浏览器的操作

1.浏览器前进

2.浏览器后退

3.浏览器滚动条

4.浏览器最大化

private static void test07() throws InterruptedException {
        WebDriver webDriver = new ChromeDriver();
        //打开百度首页
        webDriver.get("https://www.baidu.com/");
        //搜索73
        webDriver.findElement(By.cssSelector("#kw")).sendKeys("73");
        webDriver.findElement(By.cssSelector("#su")).click();
        //强制等待 3 秒
        sleep(3000);
        //浏览器后退
        webDriver.navigate().back();
        //强制等待 3 秒
        sleep(3000);
        webDriver.navigate().refresh();
        sleep(3000);
        //浏览器前进
        webDriver.navigate().forward();
        sleep(3000);
        //浏览器滚动条拉到最底端
        ((JavascriptExecutor)webDriver).executeScript("document.documentElement.scrollTop=10000");
        sleep(3000);
        //浏览器窗口最大化
        webDriver.manage().window().maximize();
        sleep(3000);
        //全屏
        webDriver.manage().window().fullscreen();
        sleep(3000);
        //设置像素点
        webDriver.manage().window().setSize(new Dimension(600,1000));
    }

键盘事件

private static void test08() throws InterruptedException {
        WebDriver webDriver = new ChromeDriver();
        //打开百度首页
        webDriver.get("https://www.baidu.com/");
        //搜索73
        webDriver.findElement(By.cssSelector("#kw")).sendKeys("73");
        sleep(3000);
        //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 test09() throws InterruptedException {
    WebDriver webDriver = new ChromeDriver();
    //打开百度首页
    webDriver.get("https://www.baidu.com/");
    //搜索73
    webDriver.findElement(By.cssSelector("#kw")).sendKeys("73");
    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 page01() {
        WebDriver webDriver = new ChromeDriver();
        webDriver.
                get("http://localhost:63342/test_code/src/main/page/test01.html?_ijt=j3v1lh1gnef3lj5apsqqg227fj&_ij_reload=RELOAD_ON_SAVE");
        webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.DAYS);
        List<WebElement> webElements = webDriver.findElements(By.cssSelector("input"));
        for(int i = 0;i < webElements.size();i++){
            //如果元素 type 值 = checkbox, 就进行点击
            if(webElements.get(i).getAttribute("type").equals("checkbox")){
                webElements.get(i).click();
            }
        }
    }

image-20230703163708852

多层框架定位

private static void page02() {
    WebDriver webDriver = new ChromeDriver();
    webDriver.get("http://localhost:63342/test_code/src/main/page/test02.html?_ijt=6u530h3g84ec5pjpvvcptlrmpn&_ij_reload=RELOAD_ON_SAVE");
    webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.DAYS);
    webDriver.switchTo().frame("f1");
    webDriver.findElement(By.cssSelector("body > div > div > a")).click();
}

下拉框处理

image-20230703172929033

private static void page03() {
        WebDriver webDriver = new ChromeDriver();
        webDriver.get("http://localhost:63342/test_code/src/main/page/test03.html?_ijt=gh78jc7lrn98annnu9q1cv9o80&_ij_reload=RELOAD_ON_SAVE");
        WebElement webElement = webDriver.findElement(By.cssSelector("#ShippingMethod"));
        Select select = new Select(webElement);
//        select.selectByIndex(3);
        select.selectByValue("12.51");
    }

弹窗处理

private static void page04() throws InterruptedException {
    WebDriver webDriver = new ChromeDriver();
    webDriver.get("http://localhost:63342/test_code/src/main/page/test04.html?_ijt=22eg2kvgkbuaum43omhbu0aqa&_ij_reload=RELOAD_ON_SAVE");
    webDriver.findElement(By.cssSelector("button")).click();
    sleep(3000);
    //alert 弹窗点击"取消"
    webDriver.switchTo().alert().dismiss();
    sleep(3000);
    //再次点击按钮
    webDriver.findElement(By.cssSelector("button")).click();
    //在 alert 弹窗中输入姓名
    webDriver.switchTo().alert().sendKeys("张三");
    sleep(3000);
    //alert 弹窗点击"确认"
    webDriver.switchTo().alert().accept();
}

上传文件操作

private static void page05() {
    WebDriver webDriver = new ChromeDriver();
    webDriver.get("http://localhost:63342/test_code/src/main/page/test05.html?_ijt=idqelplje7h1rjqj0ushf989c6&_ij_reload=RELOAD_ON_SAVE");
    webDriver.findElement(By.cssSelector("input")).sendKeys("C:\\Users\\86187\\Desktop\\资料\\图片\\1.png");

}

关闭浏览器

private static void test10() 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(4000);
//        webDriver.quit(); 
        webDriver.close();
    }

quit 和 close 的区别:

1)quit 关闭了整个浏览器,close只是关闭了当前的页面。

2)quit 清空缓存,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);
    System.out.println(webDriver.getWindowHandle());//获取 get 打开的页面的窗口句柄
    Set<String> handlers = webDriver.getWindowHandles();//获取所有的窗口句柄
    String target_handler = "";
    for(String handler:handlers){
        target_handler = handler;
    }
    webDriver.switchTo().window(target_handler);//定位最后一个窗口
    sleep(3000);
    //定位"百度新闻"页面
    webDriver.findElement(By.cssSelector("#ww")).sendKeys("新闻联播");
    webDriver.findElement(By.cssSelector("#s_btn_wr")).click();
}

截图

添加 依赖

<!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.11.0</version>
</dependency>
private static void test12() throws InterruptedException, IOException {
    WebDriver webDriver = new ChromeDriver();
    webDriver.get("https://www.baidu.com/");
    webDriver.findElement(By.cssSelector("#kw")).sendKeys("软件测试");
    webDriver.findElement(By.cssSelector("#su")).click();
    sleep(3000);
    File file = ((TakesScreenshot)webDriver).getScreenshotAs(OutputType.FILE);
    FileUtils.copyFile(file,new File("D:\\20230703jietu.png"));
}

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

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

相关文章

SOLIDWORKS小问题解答 硕迪科技

众所周知&#xff0c;SOLIDWORKS的使用者非常多&#xff0c;在使用过程中呢也会有一些小问题&#xff0c;前几天就有朋友来咨询了两个问题&#xff0c;可能其他使用者也有这样的问题&#xff0c;所以今天硕迪科技统一为大家解答 问题一&#xff1a;SOLIDWORKS装配图中的颜色怎么…

csv文件如何在单元格内保留换行 \r\n

csv文件如何在单元格内保留换行 \r\n 一、问题描述 我们都知道 csv 文件内是通过 , 来切分单元格的。 但如果某个单元格内的内容有换行&#xff1a; 34, KyleBing, 你好 # 这里换行了 我的名字是 kyebing 35, Tina, hello 36, Lucy, nice to meet you当用 Excel 打开的时候…

如何使Revit导出带有标准材质的FBX模型?

如何使Revit导出带有标准材质的FBX模型&#xff1f; 初次使用Revit导出fbx格式模型&#xff0c;在导出模型后发现模型材质丢失了&#xff0c;上网查询之后也没到具体原因是什么&#xff0c;不过倒是找到了解决方式&#xff1a;在Revit中安装naviswork插件&#xff0c;然后从re…

Vue之router和vuex

Vue之router和vuex 在学习之前&#xff0c;我们可以先安装一个插件&#xff0c;是一个浏览器插件&#xff0c;这个插件的作用是可以让我们更好的观察到数据的变化和状态的变更 他是一个github的链接&#xff0c;如果你没办法科学上网的话&#xff0c;也可以在 插件下载 上面这…

CodeQL在代码审计中的应用

一、CodeQL简介 CodeQL是一种基于静态分析的程序分析工具&#xff0c;由GitHub开发和维护。截止到此刻&#xff0c;CodeQL在Github上已经有超过6100个Star。它可以用于发现代码中的漏洞、代码质量问题和安全问题。CodeQL使用了一种特殊的编程语言QL&#xff08;查询语言&#…

【Unity项目】Unity实现 双屏显示效果

需求&#xff1a;两个屏显示项目&#xff0c;一个屏显示列表&#xff0c;一个屏显示列表按钮点击后的效果。 最近在修改一个项目&#xff0c;是要求分屏显示项目&#xff0c;一个一体机&#xff0c;一个大屏&#xff0c;一体机当作目录界面&#xff0c;大屏当作模型显示界面&am…

NC140 排序

冒泡排序 public int[] BubbleSort(int[] arr) {// write code herefor (int i 0; i < arr.length - 1; i) {for (int j 0; j < arr.length - 1 - i; j) {if (arr[j] > arr[j 1]) {int temp arr[j];arr[j] arr[j 1];arr[j 1] temp;}}}return arr;}插入排序 p…

HTTP1.0、HTTP1.1、HTTP2.0、HTTP3.0的关系和区别

文章目录 一、对比二、HTTP1.0三、HTTP1.1四、HTTP2.0四、HTTP/3.0五、总结 一、对比 二、HTTP1.0 浏览器的每次请求都需要与服务器建立一个TCP连接&#xff0c;服务器处理完成后立即断开TCP连接&#xff08;无连接&#xff09;&#xff0c;服务器不跟踪每个客户端也不记录过去…

如何使用js对图像进行压缩

JavaScript 可以使用类似于 canvas 和 web workers 来实现图像压缩。 使用 canvas&#xff0c;可以将图像绘制到 canvas 上&#xff0c;然后使用 canvas 提供的 toBlob() 或 toDataURL() 方法将其转换为不同格式的图像。在这些方法中指定图像质量参数即可实现压缩。 使用 web…

python接口自动化(二十)--token登录(详解)

简介 为了验证用户登录情况以及减轻服务器的压力&#xff0c;减少频繁的查询数据库&#xff0c;使服务器更加健壮。有些登录不是用 cookie 来验证的&#xff0c;是用 token 参数来判断是否登录。token 传参有两种一种是放在请求头里&#xff0c;本质上是跟 cookie 是一样的&…

【JS】自调用函数(自执行函数)

文章目录 自调用函数&#xff1a;只能自己在定义的同时调用自己一次&#xff0c;对外界不可见。 语法 // 函数名加与不加都可以 (function 函数名(形参){console.log(11); })(实参)使用&#xff1a; // 用法一 const str 流星; (function (params){console.log(params); // …

33.RocketMQ之Broker启动源码

highlight: arduino-light Broker启动流程:BrokerStartup#main java public static void main(String[] args) { //手动指定了 nameServer start(createBrokerController(args)); } java public static BrokerController start(BrokerController controller)…

Docker开启远程端口访问2375

开启方法&#xff1a; 1、修改/etc/default/docker下的配置 cat >> /etc/default/docker <<EOF DOCKER_OPTS"-H tcp://0.0.0.0:2375" EOF systemctl restart docker 2、修改/usr/lib/systemd/system/docker.service配置 cat >> /usr/lib/systemd/s…

第四章 网络层【计算机网络】

第四章 网络层【计算机网络】 前言推荐第四章 网络层4.1 网络层的几个重要概念4.1.1 网络层提供的两种服务4.1.2 网络层的两个层面 4.2网际协议IP4.2.1 虚拟互连网络4.2.2 IP地址4.2.3IP地址与硬件地址4.2.4地址解析协议ARP4.2.5IP数据报的格式 4.3 IP层转发分组的过程4.3.1 基…

个人域名邮箱无法给gmail发邮件

问题描述 我注册了一个域名 mydomain.com, 并在此域名下创建了 mailbox&#xff0c;从该邮箱向外发送邮件和接收邮件会失败。 主要是一些配置工作没有做好。 接收邮件 当创建邮箱 xxxmydomain.com&#xff0c;尝试向该邮箱发送邮件时&#xff0c;邮件会被拒收&#xff0c;并…

选择正确的负载均衡器:LVS还是Nginx?

选择正确的负载均衡器&#xff1a;LVS还是Nginx&#xff1f; 博主简介一、前言二、什么是LVS&#xff1f;2.1、LVS的架构 三、什么是Nginx&#xff1f;3.1、Nginx 特性3.2、Nginx 架构 四、LVS和Nginx的区别五、总结 博主简介 &#x1f4a1;一个热爱分享高性能服务器后台开发知…

windows环境下根据端口号查询进程编号并杀掉此进程

说在前面 当端口号备占用时&#xff0c;我们需要找到占用端口的进程&#xff0c;然后杀掉该进程&#xff0c;即可 开干 1、找占用端口的进程&#xff0c;比如现在是3306端口备占用了 netstat -nao|findstr 3306运行如下&#xff1a; 2、杀掉进程&#xff0c;比如进程号为…

【InnoDB 存储引擎】15.4 InnoDB Architecture

文章目录 1 InnoDB 存储引擎结构2 参考资料 1 InnoDB 存储引擎结构 下面的图显示了内存和磁盘结构组成InnoDB存储引擎架构 内存结构&#xff1a;Section 15.5, “InnoDB In-Memory Structures” Buffer Pool&#xff08;缓冲池&#xff09;Change Buffer&#xff08;修改缓冲&…

JavaScript笔记——快速了解 ES6 新增字符串方法,开箱即用(含案例)

文章目录 &#x1f4cb;前言&#x1f3af;includes() 方法&#x1f3af;startsWith() 方法&#x1f3af;endsWith() 方法&#x1f3af;repeat() 方法&#x1f3af;padStart() 方法&#x1f3af;padEnd() 方法&#x1f3af;trim() 方法&#x1f3af;trimStart() 或 trimLeft() 方…

Atlassian Jira敏感信息获取

我是一个平凡的人&#xff0c;但一个平凡的人&#xff0c;也可以过得不平凡。 漏洞复现 构造payload /secure/ViewUserHover.jspa?usernameadmin用户名存在会返回&#xff0c;且版本在影响范围之内 用户名不存在会返回&#xff0c;且版本在影响范围之内 文笔生疏&#xff…