Selenium常用API详解,从入门到进阶(全套)

这篇具有很好参考价值的文章主要介绍了Selenium常用API详解,从入门到进阶(全套)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

selenium官方api,测开,selenium,测试工具

目录

1、打开页面

2、查找页面元素

3、输入文本

4、点击操作

5、提交操作

6、清除文本

7、获取文本、属性

8、获取页面的标题和URL

9、窗口

9.1、设置窗口大小

9.2、窗口切换

9.2.1、为什么需要窗口切换?

9.2.2、获取句柄的方式

9.2.3、切换句柄

10、屏幕截图

10.1、为什么需要屏幕截图

10.2、屏幕截图应用

11、等待

11.1、强制等待

11.2、隐式等待

11.3、显示等待

12、浏览器导航

12.1、前进、后退、刷新

13.弹窗

13.1、弹窗类型

13.2、处理弹窗的步骤

13.3、示例

14、选择框

14.1、处理步骤

14.2、示例

15、执行脚本

16、文件上传

16.1、使用方式

16.2、示例

17、浏览器参数设置

结语


1、打开页面


在Selenium中,通过在ChromeDriver类中的get方法里输入网址,即可打开一个页面,例如你要打开百度的网址,如下代码:

ChromeDriver driver = new ChromeDriver();
driver.get("https://www.baidu.com/");

Ps:本文讲的所有API都是基于谷歌浏览器驱动,也就是ChromeDriver类下的API~

2、查找页面元素


在Selenium中,在打开页面的情况下,通过indElement方法,输入By类(通过什么方式来定位元素)参数,即可定位页面元素。

例如定位百度页面的“百度一下”按钮,如下代码:

driver.findElement(By.cssSelector("#su"));//#su就是"百度一下"的CSS选择器

上述栗子中使用的是CSS选择器定位,你也可以使用xpath来定位~

详细的,如下:

By类中最常用的两个定位方法:

1. cssSelector(),它可以通过css选择器来定位元素;(推荐使用)

2. className(),它可以通过xpath来定位元素;

xpath如何使用呢?

最常用的是用层级的方式来表示: /子级 //跳级;(@为属性)

例如:谷歌浏览器中的Google标志

selenium官方api,测开,selenium,测试工具

这样你就可以拿到这个标签的xpath://*[@id="logo"] 这便是跳级(前面的路径都不显示,直接表示属性id=“logo”这个标签)

或者是xpath://*[@id="csdn-copyright-footer"]/ul[1]/li[2]/a 这便是一个跳级加子集的方式;

值得注意的是:我们不要一个一个去推这个子集表示的方式,可以直接按照上图的方式进行拷贝xpath路径,配合着className()方法使用即可,但是有时候赋值selector或者xpath元素不一定是唯一的,需要我们进行手动修改到唯一(检查的时候通过 ctrl + f 即可检查是否唯一),这就是为什么我们要对xpath的语法要有一定了解的原因;

3、输入文本


在Selenium中,使用sendKeys方法即可对你选中的元素进行输入文本,但是仅适用于文本文字和内容可以编辑的元素,例如在百度页面的搜索框内输入“你好”,如下代码:

//先使用findElement定位元素(返回一个WebElement类型的元素),再对定位的元素进行输入文本
driver.findElement(By.cssSelector("#kw")).sendKeys("你好");

Ps:即使反向操作,也就是对不可编辑的元素进行操作,也不会报错,但是不会产生任何实际效果。

4、点击操作


在Selenium中,对你定位到的元素使用click方法,即可进行鼠标点击操作,例如点击百度界面的“百度一下”按钮,代码如下:

//先使用findElement定位元素(返回一个WebElement类型的元素),再进行click
driver.findElement(By.cssSelector("#su")).click();

5、提交操作


提交操作是干什么的?实际上就和你按下Enter键的效果是一样的,通过submit方法即可实现,例如在百度页面通过submit方法实现自动按下回车键,如下代码:

//先使用findElement定位元素(返回一个WebElement类型的元素),再进行submit
driver.findElement(By.cssSelector("#su")).submit();

Ps:selenium官方不推荐使用submit,更推荐click,因为可以使用submit的地方click都能代替,并且click使用场景更广(submit仅适用于表单元素)。

6、清除文本


在Selenium中,可以使用clear将你定位的元素的文本内容进行清除,例如清除百度输入框中的文本,如下代码:

driver.findElement(By.cssSelector("#kw")).clear();

Ps:用来频繁的测试是否可以重复输入(适用sendKeys输入后,在用clear清除、再输入然后清除......)。

7、获取文本、属性


在Selenium中,通过getText可以获取你定位的元素的文本,例如获取百度页面热搜中的文本,如下代码:

selenium官方api,测开,selenium,测试工具

//获取到的文本返回值是一个String类型
String text = driver.findElement(By.cssSelector("#hotsearch-content-wrapper > li:nth-child(1) > a > span.title-content-title")).getText();
System.out.println(text);

但如果你要获取“百度一下”这个按钮的文本就无法获取(但程序不会报错,只是返回一个空字符串),因为这个元素它不含文本,只有一些属性(id、class、type、value......),如下F12检查可以看到:

selenium官方api,测开,selenium,测试工具

所以我们只能获取它的属性,那么属性该如何获取呢?通过getAttribute方法即可获取到,方式和获取文本一样,先定位元素,再获取;例如你要获取class属性,那么就是getAttribute("class);

8、获取页面的标题和URL


在Selenium中,这个没什么特别要注意的点,基础操作,直接上代码:

System.out.println(driver.getTitle());
System.out.println(driver.getCurrentUrl());

9、窗口


9.1、设置窗口大小

在Selenium中,可以设置窗口的大小:最大化、最小化、全屏窗口、手动设置窗口大小;如下代码:

        //窗口最大化
        driver.manage().window().maximize();
        //窗口最小化
        driver.manage().window().minimize();
        //全屏
        driver.manage().window().fullscreen();
        //手动设置大小(按顺序分别是宽和高)
        driver.manage().window().setSize(new Dimension(1024, 500));

9.2、窗口切换

9.2.1、为什么需要窗口切换?

想象这样一个场景,我们使用Selenium打开一个网页,在从这个网页通过click点击超链接打开另一个网页,那么我们继续使用Selenium操作网页时,是对刚刚这两个网页中的哪一个网页进行操作?实际上还是第一个网页,如果你一意孤行还认为是对第二个网页进行操作,就有可能引发如下异常:(找不到该元素)

selenium官方api,测开,selenium,测试工具

实际上,当浏览器每次打开一个标签页的时候,都会自动给每个标签页进行标识,也叫做“句柄”。

9.2.2、获取句柄的方式

在Selenium中,我们有如下两种方式获得句柄:

        //获取所有标签页的句柄
        Set<String> handles = driver.getWindowHandles();
        //获取当前页面的句柄
        String curHandle = driver.getWindowHandle();

并且哪个页面对应哪个句柄,我们是不可知的,例如我打开了两个页面,获取句柄并打印,如下:

selenium官方api,测开,selenium,测试工具

9.2.3、切换句柄

        //获取当前页面的句柄
        String curHandle = driver.getWindowHandle();
        //切换到curHandle句柄
        driver.switchTo().window(curHandle);

Ps:自动化基本没有需要切换窗口的场景,因为要进行测试,就直接拿到这个网页的地址即可,没必要这样切换!

10、屏幕截图


10.1、为什么需要屏幕截图

        想象一下,程序执行的速度 和 页面渲染的速度 谁快?必然是程序执行快,那么当代码执行到查找结果页的元素时,页面还没有加载完全,程序就会报错,如下代码:

    public void test2() {
        ChromeDriver driver = new ChromeDriver();
        //打开百度页面
        driver.get("https://www.baidu.com");
        //在输入框中输入"你好"
        driver.findElement(By.cssSelector("#kw")).sendKeys("你好");
        //点击“百度一下”按钮
        driver.findElement(By.cssSelector("#su")).click();
        //点击一个搜索结果
        driver.findElement(By.cssSelector("#\\31  > div > div > h3 > a")).click();
        driver.close();
    }

报错,如下图(找不到该元素)

selenium官方api,测开,selenium,测试工具

解决办法:在点击“百度一下”这个按钮以后,休眠几秒即可(等待页面加载出来)。

但是自动化程序执行的速度非常快,我们怎么能知道这个地方出了什么问题呢?接着往下看~

10.2、屏幕截图应用

首先需要在pom.xml中导入依赖,如下:

        <!--   保存屏幕截图文件需要用到的包     -->
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.6</version>
        </dependency>

接着如下代码:

    public void test2() throws IOException {
        ChromeDriver driver = new ChromeDriver();
        //打开百度页面
        driver.get("https://www.baidu.com");
        //在输入框中输入"你好"
        driver.findElement(By.cssSelector("#kw")).sendKeys("你好");
        //点击“百度一下”按钮
        driver.findElement(By.cssSelector("#su")).click();

        //屏幕截图(保存现场)
        File srcfile = driver.getScreenshotAs(OutputType.FILE);//FILE表示以文件的形式保存
        //把截图保存到指定路径下
        String filename = "my.png";//没输入路径,就是当前项目下
        FileUtils.copyFile(srcfile, new File(filename));

        //点击一个搜索结果
        driver.findElement(By.cssSelector("#\\31  > div > div > h3 > a")).click();
        driver.close();
    }

接着就可以观察到截图如下:

selenium官方api,测开,selenium,测试工具

这样我们就可以发现原因,是由于页面没有加载出来的原因~

Ps:

1.保存截图的时候,文件名时固定的格式(已经存在重名文件),程序多次生成的截图都会被同名覆盖,为了避免这个情况,我们可以将文件名设置为动态的,也就是加入时间戳

2.在有弹窗的情况下不要适使用屏幕截图,否则会报错!!!一定要先处理完弹窗以后再使用屏幕截图

11、等待


我们知道,程序执行的速度要比浏览器渲染的速度要快很多,那么就有可能出现这样一种情况,例如当使用自动化打开一个页面后需要选中这个页面中的一个元素,但是由于由于执行的太快,在页面还没有渲染出来的情况下(被选中的元素还没有出现),就选中这个元素,程序就会报错,为了解决这种情况,有四种等待方式来解决,下面我来讲解一下:

11.1、强制等待

强制等待就是通过线程阻塞来进行,也就是我们熟知的 Thread.sleep() ,这种方式在自动化中会用到,但是用的不是很多,为什么呢?每一个自动化方法就是一个测试用例,假设一个用例你设置2s的等待时间,那么100个测试用例就是100s,效率十分低下,而且很大概率,在我们设置的等待时间之内,页面就已经渲染出来了。

11.2、隐式等待

隐式等待作用于driver的整个生命周期,会在你设置的一个时间内,反复判断元素是否存在,直到元素被找到才停止等待(类似于自旋锁的自旋操作),若超出时间,就执行下一步;

例如,通过自动化 打开百度网址->输入"你好"->点击百度一下按钮->点击"你好——百度百科",整个过程隐式等待,如下代码:

    private ChromeDriver driver = new ChromeDriver();
    public void test1() {
        //隐式等待——作用driver的整个生命周期,直到quit(设置时间为3秒)
        driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
        
        //打开百度网页
        driver.get("https://www.baidu.com");
        //在搜索框输入"你好" 
        driver.findElement(By.cssSelector("#kw")).sendKeys("你好");
        //点击百度一下
        driver.findElement(By.cssSelector("#su")).click();
        //点击"你好-百度百科";
        driver.findElement(By.cssSelector("#\\31  > div > div > h3 > a")).click();
        //退出
        driver.quit();
    }

Ps:Duration这个类中的等待单位有很多种,可以是毫秒、秒、小时...如下:

selenium官方api,测开,selenium,测试工具

11.3、显示等待

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

例如,通过自动化 打开百度网址 -> 输入"你好" -> 点击百度一下按钮 -> 显示等待"你好——百度百科"元素出现 -> 点击"你好——百度百科",如下代码:

    private ChromeDriver driver = new ChromeDriver();
    public void test2() {
        //打开百度网页
        driver.get("https://www.baidu.com");
        //在搜索框输入"你好"
        driver.findElement(By.cssSelector("#kw")).sendKeys("你好");
        //点击百度一下
        driver.findElement(By.cssSelector("#su")).click();

        //显示等待 “你好——百度百科”元素出现
        new WebDriverWait(driver, Duration.ofSeconds(3)).until(
                driver->driver.findElement(By.cssSelector("#\\31  > div > div > h3 > a"))
        );

        //退出
        driver.quit();
    }

Ps:until就表示等待的元素,也就是一直等待到xxx元素出现

12、浏览器导航


12.1、前进、后退、刷新

就是通过自动化控制如下三个按钮:

selenium官方api,测开,selenium,测试工具

例如,打开百度 -> 输入"你好" -> 点击百度一下按钮 -> 后退到百度主页 -> 前进到"你好" -> 刷新当前网页 ,如下代码:

    private ChromeDriver driver = new ChromeDriver();
    public void test3() {
        //打开百度
        driver.get("https://www.baidu.com/");
        //输入框输入"你好"
        driver.findElement(By.cssSelector("#kw")).sendKeys("你好");
        //点击“百度一下”按钮
        driver.findElement(By.cssSelector("#su")).click();

        //回退
        driver.navigate().back();
        //前进
        driver.navigate().forward();
        //刷新
        driver.navigate().refresh();

        driver.quit();
    }

13.弹窗


13.1、弹窗类型

共有以下三种弹窗

selenium官方api,测开,selenium,测试工具

13.2、处理弹窗的步骤

a)将driver对象作用到弹窗上(切换到弹窗)

driver.switchTo.alert()

b)得到弹窗对象后,选择 确认/取消/输入文本(提示弹窗)

确认:accept();

取消:dismiss();

输入(提示弹窗):sendKeys();

注意:

1.提示弹窗输入文本,在页面上是看不到输入文本的执行效果。

2.虽然警告弹窗只有确认按钮,但是accept和dismiss都能处理。

3.虽然警告弹窗和确认弹窗都没有输入文本的地方,凡是如果要执行alert.sendKeys代码,也不会报错。

13.3、示例

a)出现提示弹窗,进行输入文本,并点击确认,如下代码:

        //将driver作用对象切换到弹窗上
        Alert alert = driver.switchTo().alert();
        //输入文本
        alert.sendKeys("hello");
        //点击确认
        alert.accept();

b)出现确认弹窗,点击取消,如下代码:

        //将driver作用对象切换到弹窗上
        Alert alert = driver.switchTo().alert();
        //点击取消
        alert.dismiss();

14、选择框


14.1、处理步骤

在Selenium执行自动化的过程中,我们知道,没法通过F12检查对选择框中的选项进行选择,实际上,可以通过以下三种方式进行选择:

  1. 根据文本来选择;
  2. 根据属性值来选择;
  3. 根据序号来选择(序号是从0开始的);

文本、属性值、序号又是什么呢?如下图:

selenium官方api,测开,selenium,测试工具

注意:序号是从上往下,从0开始数。

14.2、示例

对一个选择框分别进行文本、属性、序号的选择,如下代码:

        //得到选择框对象
        WebElement ele = driver.findElement(By.cssSelector("#ShippingMethod"));
        //创建选择框对象
        Select select = new Select(ele);
        //根据文本来进行选择
        select.selectByVisibleText("UPS Next Day Air ==> $12.51");
        //根据属性来进行选择
        select.selectByValue("12.51");
        //根据序号来进行选择
        select.selectByIndex(0);

15、执行脚本


实际上就是执行js代码

使用方法如下代码:

driver.executeScript();//参数是js代码

16、文件上传


16.1、使用方式

使用方式很简单,如下代码:

sendKeys("文件的绝对路径");

16.2、示例

如下场景:

selenium官方api,测开,selenium,测试工具

 例如我要上传D盘下的test.txt文件,代码如下:

        //选择“上传文件按钮”
        WebElement ele = driver.findElement(By.cssSelector("body > div > div > input[type=file]"));
        //上传文件
        ele.sendKeys("D:\\test.txt");

执行效果如下:

selenium官方api,测开,selenium,测试工具

Ps:注意上图中的test.txt文件,并不是直接上传到服务器了,而是把要上传的文件的绝对路径放在了这里;

17、浏览器参数设置


实际的工作中,测试人员将自动化部署在机器上自动执行,测试人员不会每次都一直盯着自动化执行的过程,而是直接查看自动化执行的结果。

ChromeDriver类提供了一个构造参数,可以实现以上场景,也叫做“无头模式”。

如下代码:

        ChromeOptions options = new ChromeOptions();
        options.addArguments("-headless");
        ChromeDriver driver = new ChromeDriver(options);

Ps:浏览器的参数设置需要在创建浏览器对象之前。

结语


如果文章对你有帮助,

selenium官方api,测开,selenium,测试工具文章来源地址https://www.toymoban.com/news/detail-518858.html

到了这里,关于Selenium常用API详解,从入门到进阶(全套)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Selenium WebDriver API 中涉及的一些常用方法和类

    Selenium WebDriver API 是 Selenium 提供的一组方法和类,用于控制浏览器和操作 Web 元素。这些 API 提供了丰富的功能,包括但不限于: 1. **查找元素**:通过不同的定位方式(如ID、Class Name、XPath等)在页面中查找元素。 2. **模拟用户操作**:包括点击、输入文本、清除文本、提交表

    2024年03月15日
    浏览(41)
  • 【Python从入门到进阶】35、selenium基本语法学习

    接上篇《34、selenium基本概念及安装流程》 上一篇我们介绍了selenium技术的基础概念以及安装和调用的流程,本篇我们来学习selenium的基本语法,包括元素定位以及访问元素信息的操作。 Selenium元素定位是指通过特定的方法在网页中准确定位到需要操作的元素,例如按钮、文本

    2024年02月09日
    浏览(47)
  • python爬虫教程:selenium常用API用法和浏览器控制

    selenium api selenium 新版本( 4.8.2 )很多函数,包括元素定位、很多 API 方法均发生变化,本文记录以 selenium4.8.2 为准。 webdriver 常用 API 方法 描述 get(String url) 访问目标url地址,打开网页 current_url 获取当前页面url地址 title 获取页面标题 page_source 获取页面源代码 close() 关闭浏览器当

    2024年02月05日
    浏览(55)
  • 【Python从入门到进阶】34、selenium基本概念及安装流程

    接上篇《33、使用bs4获取星巴克产品信息》 上一篇我们介绍了如何使用bs4来解析星巴克网站,获取其产品信息。本篇我们来了解selenium技术的基础。 Selenium是一种用于自动化Web浏览器操作的开源工具。它提供了一组API(应用程序接口),使开发人员能够使用多种编程语言(如

    2024年02月10日
    浏览(36)
  • 【Python从入门到进阶】39、使用Selenium自动验证滑块登录

    接上篇《38、selenium关于Chrome handless的基本使用》 上一篇我们介绍了selenium中有关Chrome的无头版浏览器Chrome Handless的使用。本篇我们使用selenium做一些常见的复杂验证功能,首先我们来讲解如何进行滑块自动验证的操作。 我们要通过selenium来实现目前常见的滑块验证码的验证,

    2024年02月08日
    浏览(58)
  • 深入理解Selenium:常用方法和操作详解

    大家好,我是chowley,今天来复习一下Selenium的常用方法,并结合实战演练来加深记忆。 Selenium 是软件测试领域中最受欢迎的自动化测试工具之一,它提供了丰富的方法和操作来模拟用户在 Web 应用程序中的交互行为。本篇博客将深入介绍 Selenium 中常用的方法和操作,帮助软件

    2024年02月21日
    浏览(41)
  • 【Python从入门到进阶】38、selenium关于Chrome handless的基本使用

    接上篇《37、selenium关于phantomjs的基本使用》 上一篇我们介绍了有关phantomjs的相关知识,但由于selenium已经放弃PhantomJS,本篇我们来学习Chrome的无头版浏览器Chrome Handless的使用。 一、Chrome Headless简介 Chrome Headless是一个无界面的浏览器环境,它是Google Chrome浏览器在59版本之后新

    2024年02月06日
    浏览(49)
  • Selenium Grid入门详解

    目录 前言: 一、简介 二、使用场景 三、使用前提 四、使用方式

    2024年02月12日
    浏览(35)
  • 爬虫入门指南(4): 使用Selenium和API爬取动态网页的最佳方法

    随着互联网的发展,许多网站开始采用动态网页来呈现内容。与传统的静态网页不同,动态网页使用JavaScript等脚本技术来实现内容的动态加载和更新。这给网页爬取带来了一定的挑战,因为传统的爬虫工具往往只能获取静态网页的内容。本文将介绍如何使用Selenium和API来实现

    2024年02月11日
    浏览(62)
  • Selenium入门用法详解【Java爬虫】

    概述 Selenium 是一个有很多工具和库,可以用来支持浏览器自动化的项目 它能模拟用户与浏览器进行交互,实现 了W3C WebDriver 规范的基础架构 。 Selenium 的核心是WebDriver,可以理解为一个驱动包。 搭建项目 1.先安装Selenium类库(java) 打开你的IDEA,新建一个空的Maven项目, 在项

    2023年04月11日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包