自动化测试2:selenium常用API

news2025/1/18 6:57:14

目录

1.webdirver API

1.1.定位元素

1.2CSS

1.语法

2,使用

1.3XPath定位

1.语法

2.使用

2.操作测试对象

2.1.鼠标点击与键盘输入

2.2submit 提交表单

2.3text 获取元素文本

3.添加等待

3.1.sleep休眠

3.2.智能等待

3.2.1.隐式等待

3.2.2显示等待

4.打印信息

4.1打印url

4.2打印title

5.浏览器的操作

5.1浏览器前进,后退

5.2浏览器滚动条操作

5.3浏览器最大化

5.4设置浏览器宽、高

5.5关闭浏览器

6.键盘事件

7.鼠标事件

8.定位一组元素

9.多层框架/窗口定位

9.1多层框架的定位

9.2多层窗口定位

9.3窗口切换

10.下拉框处理

11.alert弹窗,confifirm、prompt 的处理

12.上传文件操作

13.截图


1.webdirver API

1.1.定位元素

通过定位找到对象

webdriver 提供了一系列的对象定位方法,常用的有以下几种

  • id
  • name
  • class name
  • link text
  • partial link text
  • tag name
  • xpath
  • css selector

1.2CSS

1.语法

  • id选择器:# id
  • 类选择器:.class
  • 标签选择器:标签名
  • 后代选择器:父级选择器,子级选择器
webDriver.findElement(By.cssSelector(""));
CSS的获取可以用chrome的F12开发者模式中Element-右键-copy-copy selector来获取

2,使用

 

//打开百度首页
webDriver.get("https://www.baidu.com");
//找到百度搜索输入框
WebElement element=webDriver.findElement(By.cssSelector(".s_ipt"));
//输入软件测试
element.sendKeys("软件测试");

1.3XPath定位

1.语法

2.使用

XPATH的获取可以用chrome的F12开发者模式中Element-右键-copy-copy xpath来获取

 粘贴到代码中

webDriver.get("https://www.baidu.com/");
       WebElement element= webDriver.findElement(By.xpath("//*[@id=\"kw\"]"));
       element.sendKeys("软件测试");

css选择器定位比xpath效率高

private static void test01() throws InterruptedException {
        WebDriver webDriver=new ChromeDriver();
        webDriver.get("https://www.baidu.com/");
       WebElement element= webDriver.findElement(By.xpath("//*[@id=\"kw\"]"));
       element.sendKeys("软件测试");
       webDriver.findElement(By.cssSelector("#su")).click();
       sleep(3000);
       int flag=0;
       List<WebElement> elements=webDriver.findElements(By.cssSelector("a em"));
        for (int i = 0; i < elements.size(); i++) {
            if(elements.get(i).getText().equals("测试")){
                flag=1;
                System.out.println("测试通过");
                break;
            }
        }
        if(flag==0){
            System.out.println("测试不通过");
        }
    }

2.操作测试对象

  • click 点击对象
  • sendKeys 在对象上模拟按键输入
  • clear 清除对象输入的文本内容
  • submit 提交 (form)
  • text 用于获取元素的文本信息

2.1.鼠标点击与键盘输入

sendKeys() 在对象上模拟按键输入

    element.sendKeys("软件测试");

2.2submit 提交表单

submit()

webDriver.findElement(By.xpath("//a[text()=\"新闻\"]")).submit();

 报错,必须是form表单的元素

 

2.3text 获取元素文本

getText()

    String button_value=webDriver.findElement(By.cssSelector("#su")).getText();
 private static void test02() throws InterruptedException {
        WebDriver webDriver=new ChromeDriver();
        webDriver.get("https://www.baidu.com/");
        sleep(3000);
        //输入框输入java
        webDriver.findElement(By.cssSelector("#kw")).sendKeys("java");
        sleep(3000);
        //点击按钮
        webDriver.findElement(By.cssSelector("#su")).click();
        sleep(3000);
        //清空输入框数据
        webDriver.findElement(By.cssSelector("#kw")).clear();
        sleep(3000);
        //获取元素
        String button_value=webDriver.findElement(By.cssSelector("#s_tab > div > b")).getText();
        if(button_value.equals("网页")){

            System.out.println("测试通过");
        }else{

            System.out.println("测试不通过");
        }
    }

3.添加等待

3.1.sleep休眠

强制休眠

sleep(休眠时间);

3.2.智能等待

3.2.1.隐式等待

在设置的超时时间内不断查找元素,直到找到元素为止

webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.DAYS);

3.2.2显示等待

等待直到找到某个条件满足再执行后面的代码

WebDriverWait driverWait=new WebDriverWait(webDriver,5);
//等待页面元素在页面中存在
driverwait.until(ExpectedConditions.presenceOfElementLocated(by));
//等待页面元素在页面中存在并可见
driverWait.until(ExpectedConditions.visibilityOfElementLocated(by));
//等待页面元素在页面中可被点击
driverWait.until(ExpectedConditions.elementToBeClickable(by));

区别:

隐式等待 (所有的元素)

页面所有的元素都加载后,后面的代码才会执行

例如:设置3s 3s后没有加载出来就会报错

显示等待 (一定的条件)

等待的是后面的条件,只要条件加载出来就不会报错

注:

1.显式等待和隐式等待不可一起使用;

2.显式等待或隐式等待只是等待找到元素,有些元素操作不一定可以执行成功,可能需要加上硬性等待;

3.隐式等待或显式等待一般会结合硬性等待一起使用

4.打印信息

4.1打印url

String url=webDriver.getCurrentUrl();

4.2打印title

String title=webDriver.getTitle();
private static void test03() {
        WebDriver webDriver=new ChromeDriver();
        webDriver.get("https:/www.baidu.com/");
        String url=webDriver.getCurrentUrl();
        String title= webDriver.getTitle();
        if(url.equals("https://www.baidu.com/") && title.equals("百度一下,你就知道")){
            System.out.println("测试通过");
        }else{
            System.out.println("测试不通过");
        }
    }

5.浏览器的操作

5.1浏览器前进,后退

//前进

webDriver.navigate().forward();

//后退

webDriver.navigate().back();

5.2浏览器滚动条操作

//浏览器滚动条到最顶端

document.documentElement.scrollTop=0

//浏览器滚动条到最底端

document.documentElement.scrollTop=0

((JavascriptExecutor)webDriver).executeScript("document.documentElement.scrollTop=10000"

5.3浏览器最大化

webDriver.manage().window().maximize();

5.4设置浏览器宽、高

webDriver.manage().window().setSize(new Dimension(600,1000));

5.5关闭浏览器

webDriver.quit(); 关闭了整个浏览器 清空缓存

webDriver.close(); 关闭了当前页面 不会清空缓存

private static void test04() throws InterruptedException {
        WebDriver webDriver=new ChromeDriver();
        webDriver.get("https://www.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().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));
        sleep(3000);
        //浏览器关闭
        webDriver.quit();
    }

6.键盘事件

要使用键盘按键,必须引入keys 包:

from selenium.webdriver.common.keys import Keys

通过sendKeys()调用按键:

sendKeys(Keys.TAB) # TAB

sendKeys(Keys.ENTER) # 回车

sendKeys(Keys.SPACE) #空格键

sendKeys(Keys.ESCAPE) #回退键(Esc)

sendKeys(Keys.CONTROL,"A");//全选

sendKeys(Keys.CONTROL,"C");//复制

sendKeys(Keys.CONTROL,"X");//剪贴

sendKeys(Keys.CONTROL,"V");//粘贴

private static void test05() throws InterruptedException {
        WebDriver webDriver=new ChromeDriver();
        webDriver.get("https://www.baidu.com/");
        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);
    }

7.鼠标事件

要使用鼠标事件需要导入工具包:

from selenium.webdriver.common.action_chains import ActionChains

语法示例如下:

actions.moveToElement(webElement).doubleClick().perform();

ActionChains(driver):生成用户的行为。所有的行动都存储在actionchains 对象。通过perform()存储的行为。

moveToElement(element):移动鼠标到一个元素中,menu 上面已经定义了他所指向的哪一个元素

perform():执行所有存储的行为

ActionChains 类

  • contextClick() 右击
  • doubleClick() 双击
  • dragAndDrop() 拖动
  • moveToElement() 移动
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-pic"));
       sleep(3000);
        //鼠标右击
        Actions actions=new Actions(webDriver);
        sleep(3000);
        //移动         点击          执行(执行才有效果)
        actions.moveToElement(webElement).contextClick().perform();
        //双击
        actions.moveToElement(webElement).doubleClick().perform();

8.定位一组元素

定位一组元素

findElements 方法定位一组元素

定位一组对象一般用于以下场景:

  • 批量操作对象,比如将页面上所有的checkbox 都勾上
  • 先获取一组对象,再在这组对象中过滤出需要具体定位的一些对象。比如定位出页面上所有的checkbox,然后选择最后一个

get_attribute:获得属性值。

将页面上所有的checkbox 都勾上

    private static void page01() {
        WebDriver webDriver=new ChromeDriver();
        webDriver.get("http://localhost:63342/testcode/src/main/Page/test01.html?_ijt=n3vfl49h0creotpah99agp5an1&_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++) {
            if(webElements.get(i).getAttribute("type").equals("checkbox")){
                webElements.get(i).click();
            }else{
                
            }
        }
    }

9.多层框架/窗口定位

对于一个web 应用,经常会出现框架(frame) 或窗口(window)的应用,这也就给我们的定位带来了一定的困难。

  • 定位一个frame :switchTo().frame(name_or_id_or_frame_element)
  • 定位一个窗口window:switchTo().Window(name_or_id_or_frame_element)

9.1多层框架的定位

switchTo().frame(name_or_id_or_frame_element):通过frame的id或者name或者frame自带的其它属性来定位框架,这里switch_to.frame()把当前定位的主体切换了frame里。

switchTo().defaultContent:从frame中嵌入的页面里跳出,跳回到最外面的默认页面中

 

private static void page02() {
    WebDriver webDriver=new ChromeDriver();
    webDriver.get("http://localhost:63342/testcode/src/main/Page/test02.html?_ijt=j75ebdth230d15j0qvnaoo4n1l&_ij_reload=RELOAD_ON_SAVE");
    webDriver.switchTo().frame("f1");
    webDriver.findElement(By.cssSelector("body > div > div > a")).click();

}

9.2多层窗口定位

定位一个窗口window:switchTo().Window(name_or_id_or_frame_element)

9.3窗口切换

webDriver.getWindowHandles()-->handles得到所有句柄

通过for语句得到最后一个句柄

定位到最后一个句柄的位置

找元素-->点击

  WebDriver webDriver=new ChromeDriver();
        webDriver.get("https://www.baidu.com/");
        webDriver.findElement(By.cssSelector("#s-top-left > a:nth-child(1)")).click();
        sleep(4000);
        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);
        //在get的页面找元素-->直接找找不到
        webDriver.findElement(By.cssSelector("#ww")).sendKeys("新闻联播");
        webDriver.findElement(By.cssSelector("#s_btn_wr")).click();

10.下拉框处理

Select select=new Select(webElement);
    select.selectByIndex(i);//对应第i个-->0开始
    select.selectByValue("对应的值");

 

private static void page03() {
    WebDriver webDriver=new ChromeDriver();
    webDriver.get("http://localhost:63342/testcode/src/main/Page/test03.html?_ijt=pmiabij44bq124bvmtsv40pr07&_ij_reload=RELOAD_ON_SAVE");
    WebElement webElement= webDriver.findElement(By.cssSelector("#ShippingMethod"));
    Select select=new Select(webElement);
    //select.selectByIndex(3);//对应第四个-->0开始
    select.selectByValue("12.51");
}

11.alert弹窗,confifirm、prompt 的处理

text 返回alert/confirm/prompt 中的文字信息

webDriver.switchTo().alert().accept 点击确认按钮

webDriver.switchTo().alert().dismiss 点击取消按钮,如果有的话

webDriver.switchTo().alert().sendKeys 输入值,如果alert 没有对话框就不能用了,不然会报错

注意:switchTo().alert()只能处理原生的alert

private static void page04() throws InterruptedException {
    WebDriver webDriver=new ChromeDriver();
    webDriver.get("http://localhost:63342/testcode/src/main/Page/test04.html?_ijt=mlrmi5odqr1g0io83gg78rkth2&_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("KYF");
    sleep(3000);
    //确认
    webDriver.switchTo().alert().accept();
}

12.上传文件操作

 input标签,sendKeys选择要上传文件的路径

private static void page05() {
    WebDriver webDriver=new ChromeDriver();
    webDriver.get("http://localhost:63342/testcode/src/main/Page/test05.html?_ijt=49bp7ac1l8m2m51ub5j1l21gkq&_ij_reload=RELOAD_ON_SAVE");
    webDriver.findElement(By.cssSelector("input")).sendKeys("D:\\D桌面\\gitee\\test");

}

13.截图

中央仓库--common-io 得到依赖

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://1.png"));
}

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

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

相关文章

web前端 --- CSS(04) -- 盒子模型、div+css网页布局、css3新特性

盒子模型 &#xff08;1&#xff09;网页标签分类&#xff1a; 行内元素&#xff1a;块级元素&#xff1a;有宽高&#xff0c;可以设置大小&#xff0c;同时不会让其他块元素默认占据当前行 &#xff08;2&#xff09;内边距&#xff1a; 内容和边线之间存在空白区域&#x…

路径规划算法:基于猫群优化的路径规划算法- 附代码

路径规划算法&#xff1a;基于猫群优化的路径规划算法- 附代码 文章目录 路径规划算法&#xff1a;基于猫群优化的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要&#xff1a;本文主要介绍利用智能优化算法猫群…

数据库基础——3.SQL概述及规范

这篇文章我们来讲一下SQL概述和使用规范 目录 1.SQL概述 1.1SQL背景 1.2 SQL语言排行榜 1.3 SQL分类 2.SQL规则与规范 2.1基本规则 2.2 SQL大小写规范 &#xff08;建议遵守&#xff09; 2.3 注 释 2.4 命名规则&#xff08;暂时了解&#xff09; 2.5 数据导入指令 1…

【硬件】嵌入式电子设计基础之数字电路

数字电路与模拟电路的设计思想和应用方法有许多不同之处。 计算器是一个典型的由数字电路实现的电子设备&#xff0c;用户通过数字或符号摁键输入运算式&#xff0c;计算器经过运算之后把结果显示在屏幕上。现代数学电子学始于1946年&#xff0c;其标志是一台以电子管为核心器件…

奥地利博士联培申请签证经验(奥地利签证)

记录一下奥地利申请签证经验&#xff0c;供有需要的小伙伴借鉴&#xff1a; 我申请的是去克拉根福大学联合培养一年&#xff0c;正常的居留签证需要半年之久&#xff0c;但是如果有托管协议&#xff08;Hosting Agreement&#xff09;可以先申请D类签证&#xff0c;抵达奥地利再…

Shell脚本攻略:循环语句for

目录 一、理论 1.for循环 二、实验 1.实验一 2.实验二 3.实验三 4.实验四 5.实验五 6.实验六 7.实验七 一、理论 1.for循环 &#xff08;1&#xff09;for循环的常见三种用法 Ubuntu系统在6.10版本后默认使用dash环境&#xff1b; 而CentOS系统常见默认使用的是ba…

00后是真卷不过,工作没两年,跳槽到我们公司起薪22K都快接近我了

在程序员职场上&#xff0c;什么样的人最让人反感呢? 是技术不好的人吗?并不是。技术不好的同事&#xff0c;我们可以帮他。 是技术太强的人吗?也不是。技术很强的同事&#xff0c;可遇不可求&#xff0c;向他学习还来不及呢。 真正让人反感的&#xff0c;是技术平平&…

C++搜索二叉树

一、搜索二叉树概念 搜索二叉树是一种树形结构&#xff0c;常用于map当中。搜索二叉树严格遵守左小右大的规则 C语言中实现搜索二叉树有一些困难&#xff0c;并且在面对一些特定题目实现较困难。因此采用C的方式再次实现搜索二叉树 二、搜索二叉树的实现 插入 搜索二叉树在…

ASEMI代理长电可控硅BT136参数,BT136规格,BT136说明

编辑-Z 长电可控硅BT136参数&#xff1a; 型号&#xff1a;BT136 RMS通态电流IT(RMS)&#xff1a;6A 非重复浪涌峰值导通电流ITSM&#xff1a;25A 峰值栅极电流IGM&#xff1a;2A 平均栅极功耗PG(AV)&#xff1a;0.5W 存储接点温度范围Tstg&#xff1a;-40 to 150℃ 工…

Linux -- 进阶 Web服务器 搭建基于 https 协议的静态网站 ( 预备知识 )

概念引入 &#xff1a; 什么是 HTTPS ? HTTPS 协议背景 &#xff1f; >>> HTTP 协议 即 超文本传输协议 &#xff0c; 它出生的很早&#xff0c;在早期&#xff0c;网络服务的相关攻击呢&#xff0c;或者病毒啥的几乎没有&#xff0c;安全类的问 题也是少之又…

【SpringCloud】Gateway网关

文章目录 1、网关的作用2、搭建网关服务3、路由断言4、GatewayFilter5、全局过滤器6、过滤器的执行顺序7、限流过滤器8、跨域问题处理 1、网关的作用 服务就像一个景点&#xff0c;如果人人可以访问&#xff0c;不管是游客还是搞破坏的人都放进来&#xff0c;那一定出事。由此…

零基础去学习渗透,很难吗?

前言&#xff1a; 很多朋友问我&#xff0c;想搞网络安全&#xff0c;编程重要吗&#xff0c;选什么语言呢&#xff1f; 国内其实正经开设网络安全专业的学校很少&#xff0c;大部分同学是来自计算机科学、网络工程、软件工程专业的&#xff0c;甚至很多非计算机专业自学的。…

抖音seo源码开发|矩阵号排名|账号矩阵系统开发搭建

源码展示 抖音seo又叫抖音搜索引擎&#xff0c;只要能做到布词&#xff0c;和过去的百度seo优化一样&#xff0c;布词&#xff0c;布关键词&#xff0c;当搜索栏搜索时可以搜索到该短视频。优化视频关键词&#xff0c;做好关键词的优化&#xff0c;就能在别人抖音搜索栏搜索的时…

C++数据结构:Python风格双向链表Pylist的实现

文章目录 前言一、目的二、代码详解1、Node类模板2、Pylist类构造3、内嵌迭代器4、Python风格insert方法5、Python风格append方法6、Python风格[]下标操作方法7、Python风格、 方法8、Python风格pop方法9、Python风格remove方法10、length、get方法 三、使用示例总结原创文章&a…

算法基础学习笔记——⑨C++STL使用技巧

✨博主&#xff1a;命运之光 ✨专栏&#xff1a;算法基础学习 目录 ✨CSTL简介 ✨CSTL使用技巧 前言&#xff1a;算法学习笔记记录日常分享&#xff0c;需要的看哈O(∩_∩)O&#xff0c;感谢大家的支持&#xff01; ✨CSTL简介 vector变长数组&#xff0c;倍增的思想//系统为…

六级备考24天|CET-6|翻译技巧4-1|翻译红楼梦|22:40~23:40

目录 1 ANSWER 2 PRACTICE ANSWER ​ 3​ PRACTICE ANSWER 合并 ​ 全文翻译​ 1 ANSWER depict / dɪˈpɪkt / v.描述&#xff0c;描绘 第三人称单数 depicts 现在分词 depicting 过去式 depicted 过去分词 …

【C++】STL——反向迭代器的模拟实现:迭代器适配器

文章目录 前言1. list 的反向迭代器模拟实现2. 思考3. 库里面反向迭代器的实现——迭代器适配器4. 反向迭代器模拟实现的改进——适配器模式5. 适配器模式的实现——一劳永逸 前言 反向迭代器的使用相信大家都已经比较熟悉了&#xff0c;那我们这篇文章具体讲什么呢&#xff1f…

LAMP平台搭建

文章目录 LAMP概述安装apache安装mysql安装php LAMP概述 LAMP架构是目前成熟的企业网站应用模式之一&#xff0c;指的是协同工作的一整套系统和相关软件&#xff0c;能够提供动态Web站点服务及其应用开发环境。LAMP是一个缩写词&#xff0c;具体包括Linux操作系统、Apache网站…

HCIA-单点故障-Smart Link

目录 单点故障&#xff1a; 单设备”链路备份“方案 —— Smart Link Smart Link端口状态&#xff1a; Smart Link基础命令配置&#xff1a; 单设备”链路备份“方案 —— Smart Link案列实现 单设备”链路备份“方案 —— Monitor Link Monitor link组 Monitor link 的使用…

Zookeeper快速入门(Zookeeper概述、安装、集群安装、选举机制、命令行操作、节点类型、监听器原理)

1、Zookeeper入门 1.1 概述 Zookeeper是一个开源的分布式的&#xff0c;为分布式框架提供协调服务的Apache项目。 1、Zookeeper工作机制 Zookeeper从设置模式角度来理解&#xff1a;是一个基于观察者模式设计的分布式服务管理框架&#xff0c;它负责储存和管理大家都关心的数…