自动化测试selenium

这篇具有很好参考价值的文章主要介绍了自动化测试selenium。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

自动化测试相关理论

什么是自动化测试

将人工的测试手段进行转换,让代码去执行。

自动化分类:

  • 单元测试
  • 接口测试
  • UI自动化测试

selenium

selenium 是什么

selenium 是web应用中基于UI的自动化测试框架。

selenium 特点

支持多平台、多浏览器、多语言、有丰富的API

工作原理

自动化测试selenium

实操(selenium + Junit)

selenium + Java 环境搭建

public class Main {
    public static void main(String[] args) {
        ChromeOptions options = new ChromeOptions();
        options.addArguments("--remote-allow-origins=*");  //允许所有请求
        WebDriver webDriver = new ChromeDriver(options);
        webDriver.get("https://www.baidu.com");  //打开百度首页

        //找到百度搜索输入框 通过CSS 选择器查找定位元素
//        WebElement element = webDriver.findElement(By.cssSelector(".s_ipt"));

        //通过 xpath 查找定位元素
        WebElement element = webDriver.findElement(By.xpath("//*[@id=\"kw\"]"));
        //输入软件测试
        element.sendKeys("软件测试");
    }
}

selenium 常用api

定位元素

定位元素:findElement
通过CSS 选择器查找定位元素By.cssSelector()

WebElement element = webDriver.findElement(By.cssSelector(".s_ipt"));

自动化测试selenium
通过 xpath 查找定位元素

WebElement element = webDriver.findElement(By.xpath("//*[@id=\"kw\"]"));

自动化测试selenium

CSS选择器语法

  • id选择器:#id
  • 类选择器:.class
  • 标签选择器:标签名
  • 后代选择器:父级选择器 子级选择器

xpath定位元素
绝对路径:/html/head/title 【不常用】
相对路径:双斜杠开头 //

  • 相对路径 + 索引://form/span[1]/input
  • 相对路径 + 属性值://input[@class="s_ipt"]
  • 相对路径 + 通配符://*[@*="su"]
  • 相对路径 + 文本匹配://a[text()="新闻]"

CSS选择器和xpath定位元素哪个更好?
CSS选择器定位元素效率更高

常用的操作测试对象

  • click:点击对象
  • sendKeys:在对象上模拟按键输入
  • clear:清除对象输入的文本内容
  • submit:提交
    • 如果点击的元素放在form标签中,此时使用submit实现的效果和click是一样的
    • 如果点击的元素放在非form标签中,此时使用submit会报错
  • getText:用于获取元素的文本信息.无法获取元素对应的属性值,只能获取文本内容
  • getAttribute:可以获取元素对应的属性值
click、sendKeys
 private 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");  //打开百度首页

    //找到百度搜索输入框 通过CSS 选择器查找定位元素
//   WebElement element = webDriver.findElement(By.cssSelector(".s_ipt"));

    //通过 xpath 查找定位元素
    WebElement element = webDriver.findElement(By.xpath("//*[@id=\"kw\"]"));

    //输入软件测试
    element.sendKeys("软件测试");

    // 找到百度一下按钮 点击
    webDriver.findElement(By.cssSelector("#su")).click();
    sleep(3000);

    // 校验
    // 找到搜索结果
    int flg = 0;
    List<WebElement> elements = webDriver.findElements(By.cssSelector("a em"));
    for (int i = 0; i < elements.size(); i++) {
//       System.out.println(elements.get(i).getText());
        //如果返回的结果有软件测试,就证明测试通过,否则测试不通过
        if (elements.get(i).getText().contains("软件测试")) {
            flg = 1;
            System.out.println("测试通过");
            break;
        }
    }
    if (flg == 0) {
        System.out.println("测试不通过");
    }
}
submit
//test03()会报错,因为这里使用submit点击了百度新闻的超链接,这个超链接没有在form表单中,
private static void test03() {
    ChromeOptions options = new ChromeOptions();
    options.addArguments("--remote-allow-origins=*");
    WebDriver webDriver = new ChromeDriver(options);
    webDriver.get("https://www.baidu.com");
//    webDriver.findElement(By.xpath("//a[text()=\"新闻\"]")).submit();
    webDriver.findElement(By.xpath("//a[text()=\"新闻\"]")).click();
}
clear
//clear 清除对象输入的文本按钮
private static void test02() throws InterruptedException {
    ChromeOptions options = new ChromeOptions();
    options.addArguments("--remote-allow-origins=*");  //允许所有请求
    WebDriver webDriver = new ChromeDriver(options);
    webDriver.get("https://www.baidu.com");  //打开百度首页
    //找到百度搜索输入框,输入Java
    webDriver.findElement(By.cssSelector("#kw")).sendKeys("java");
    //点击了百度一下按钮
    webDriver.findElement(By.cssSelector("#su")).click();
//   webDriver.findElement(By.cssSelector("#su")).submit();

    sleep(2000);
    // 清空百度搜索输入框中的数据
    webDriver.findElement(By.cssSelector("#kw")).clear();

}
getText、getAttribute
private static void test04() {
    ChromeOptions options = new ChromeOptions();
    options.addArguments("--remote-allow-origins=*");
    WebDriver webDriver = new ChromeDriver(options);
    webDriver.get("https://www.baidu.com");
    //getText 无法获取元素对应的属性值,只能获取文本内容
    //getAttribute 可以获取元素对应的属性值
//        String buttomValue = webDriver.findElement(By.cssSelector("#su")).getText();
    String buttomValue = webDriver.findElement(By.cssSelector("#su")).getAttribute("value");
//        System.out.println(buttomValue);
    if (buttomValue.equals("百度一下")) {
        System.out.println("测试通过");;
    } else {
        System.out.println(buttomValue);
        System.out.println("测试不通过");
    }
}

等待

  • 强制等待:sleep()
  • 智能等待
    1. 隐式等待:webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.DAYS);参数1是时间,参数2是单位
    2. 显示等待:
WebDriverWait wait = new WebDriverWait(webDriver, 3000);
wait.until(ExpectedConditions.elementToBeClickable(By.cssSelector("#s-hotsearch-wrapper > div > a.hot-title > div > i:nth-child(1)")));

隐式等待:等待的是所有的元素
显示等待:等待的是一定的条件(程序员自己设定的条件)

假设等待3天时间
强制等待:一直等待 等待的时间为3天
隐式等待:最长等待3天时间,如果在3天之内获取到页面上的元素,此时执行下面的代码;
如果等待3天时间还是没有找到这个元素,此时报错

信息获取

  • getTitle():打印标题
  • getCurrentUrl():打印url
private static void test05() {
    ChromeOptions options = new ChromeOptions();
    options.addArguments("--remote-allow-origins=*");
    WebDriver webDriver = new ChromeDriver(options);
    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("当前页面:" + url);
        System.out.println("当前页面title:" + title);
        System.out.println("测试通过");
    } else {
        System.out.println("测试不通过");
    }
}

浏览器操作

浏览器前进后退
    private static void test07() 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();
        //强制等待3秒
        sleep(3000);

        //浏览器后退
        webDriver.navigate().back();   // 后退
        sleep(3000);
        //强制等待3秒
        webDriver.navigate().refresh();  //刷新
        //浏览器前进
        sleep(3000);
        webDriver.navigate().forward();   // 前进
    }
浏览器滚动条

浏览器滚动条的控制需要依靠js脚本

((JavascriptExecutor)webDriver).executeScript("document.documentElement.scrollTop=10000");
浏览器窗口大小
    private static void test07() 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();
        //强制等待3秒
        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/");
        //搜索521
        webDriver.findElement(By.cssSelector("#kw")).sendKeys("521");
        // ctrl + A
        webDriver.findElement(By.cssSelector("#kw")).sendKeys(Keys.CONTROL, "A");
        sleep(3000);
        // ctrl + X
        webDriver.findElement(By.cssSelector("#kw")).sendKeys(Keys.CONTROL, "X");
        sleep(3000);
        // ctrl + V
        webDriver.findElement(By.cssSelector("#kw")).sendKeys(Keys.CONTROL, "V");
        sleep(3000);


//        webDriver.findElement(By.cssSelector("#su")).click();


    }

鼠标右击

    private static void test09() throws InterruptedException {
        WebDriver webDriver = new ChromeDriver();
        webDriver.get("https://www.baidu.com");
        webDriver.findElement(By.cssSelector("#kw")).sendKeys("521");
        webDriver.findElement(By.cssSelector("#su")).click();
        sleep(3000);
        //找到图片按钮
        WebElement webElement = webDriver.findElement(By.cssSelector("#searchTag > div > div > a.c-color-t.c-line-clamp1.tags_2yHYj.tag-selected_1iG7R > span"));

        //鼠标右击
        Actions actions = new Actions(webDriver);
        sleep(3000);
        actions.moveToElement(webElement).contextClick().perform();
    }

定位一组元素

webdriver 可以很方便的使用findElement 方法来定位某个特定的对象,不过有时候我们却需要定位一
组对象,这时候就需要使用findElements 方法。
定位一组对象一般用于以下场景:

  • 批量操作对象,比如将页面上所有的checkbox 都勾上
  • 先获取一组对象,再在这组对象中过滤出需要具体定位的一些对象。比如定位出页面上所有的
    checkbox,然后选择最后一个
//对应test01.html
private static void page01() {
    WebDriver webDriver = new ChromeDriver();
    webDriver.get("http://localhost:63342/20230512TestCode/src/main/page/test01.html?_ijt=79ohoqao534c22adm6ri7dfaku&_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 ,进行点击
        // getAttribute 获取页面元素上的属性值
        if (webElements.get(i).getAttribute("type").equals("checkbox")) {
            webElements.get(i).click();
        } else {
            //否则什么也不操作
        }
    }
}

多层窗口定位 (frame切换)

webDriver.switchTo().frame("f1");获取frame中的元素

    // 多层窗口定位
    private static void page02() {
        WebDriver webDriver = new ChromeDriver();
        webDriver.get("http://localhost:63342/20230512TestCode/src/main/page/test02.html?_ijt=rss48aadnhjt4mgv70r81np9u5&_ij_reload=RELOAD_ON_SAVE");
        webDriver.switchTo().frame("f1");  //定位一个frame 值是frame的id
        webDriver.findElement(By.cssSelector("body > div > div > a")).click();
    }

下拉框

    //下拉框
    private static void page03() throws InterruptedException {
        WebDriver webDriver = new ChromeDriver();
        webDriver.get("http://localhost:63342/20230512TestCode/src/main/page/test03.html?_ijt=u5qdt3mv62m6hpml2pun3pkni4&_ij_reload=RELOAD_ON_SAVE");
        WebElement webElement = webDriver.findElement(By.cssSelector("#ShippingMethod"));
        Select select = new Select(webElement);
//        select.selectByIndex(1);  // 通过下标选择
//        sleep(3000);
        select.selectByValue("3.20");  // 通过value值选择
    }

对alert操作

    // 针对alert操作
    private static void page04() throws InterruptedException {
        WebDriver webDriver = new ChromeDriver();
        webDriver.get("http://localhost:63342/20230512TestCode/src/main/page/test04.html?_ijt=puu6ngd14ds8dnofliuvvs3360&_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("sss");
        sleep(3000);
        //alert弹窗确认
        webDriver.switchTo().alert().accept();
    }

文件上传

//文件上传
private static void page05() throws InterruptedException {
    WebDriver webDriver = new ChromeDriver();
    webDriver.get("http://localhost:63342/20230512TestCode/src/main/page/test05.html?_ijt=ole7f30h4kb7q9vgs1pmb1k6j0&_ij_reload=RELOAD_ON_SAVE");
    sleep(3000);
    webDriver.findElement(By.cssSelector("input")).sendKeys("D://log.txt");  //文件路径
}

关闭浏览器

关闭浏览器quit和close的区别:

  • quit关闭了整个浏览器,close只关闭了当前的页面
  • quit会清空缓存;close不会清空缓存
    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)"));
        sleep(4000);
        webDriver.quit();
//        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;   //拿到handles的最后一个元素
        }
        webDriver.switchTo().window(target_handle);  //

        //在新的界面输入框输入
        //之所以找不到元素,是因为元素默认是在get打开的这个页面找元素,需要对页面进行切换
        webDriver.findElement(By.cssSelector("#ww")).sendKeys("新闻联播");
        webDriver.findElement(By.cssSelector("#s_btn_wr")).click();  //点击搜索
    }

截图

添加maven依赖 commons-io

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

QUESTION

在自动化测试的时候,验证码无法获取,如何操作?
可以在自动化测试账号加一个白名单,设置该账号登陆的时候不需要验证码验证文章来源地址https://www.toymoban.com/news/detail-470439.html

到了这里,关于自动化测试selenium的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 【自动化测试】Java+Selenium自动化测试环境搭建

    本主要介绍以Java为基础,搭建Selenium自动化测试环境,并且实现代码编写的过程。 1.Selenium介绍 Selenium 1.0 包含 core、IDE、RC、grid 四部分,selenium 2.0 则是在两位大牛偶遇相互沟通决定把面向对象结构化(OOPP)和便于编写代码的各自思想予以整合后形成的新工具,也就是我们所

    2024年02月11日
    浏览(53)
  • JavaScript+Selenium自动化测试_selenium和js能一起做自动化测试

    var webdriver = require(‘selenium-webdriver’), By = webdriver.By, until = webdriver.until; var driver = new webdriver.Builder() .forBrowser(‘chrome’) .build(); driver.get(‘https://www.baidu.com’); driver.findElement(By.id(‘kw’)).sendKeys(‘webdriver’); driver.findElement(By.id(‘su’)).click(); driver.wait(until.titleIs(‘webdriver_百度

    2024年04月25日
    浏览(46)
  • 自动化测试介绍、selenium用法(自动化测试框架+爬虫可用)

    1、什么是自动化测试? 程序测试程序、代码代替思维、脚本代替人工 核心:质量和效率 作用:降低成本、节省人力时间、推动CI和DevOps、准确性和可靠性、模拟人工难以实现的手段、快速持续迭代发布能力、衡量产品的质量、提升测试效率、提高测试覆盖率 2、手工测试

    2024年03月08日
    浏览(81)
  • 自动化测试之web自动化(Selenium)

     🔥 交流讨论: 欢迎加入我们一起学习! 🔥 资源分享 : 耗时200+小时精选的「软件测试」资料包 🔥  教程推荐: 火遍全网的《软件测试》教程   📢 欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! yycnblog 自动化测试概念:让程序代替人为去验证程序功能的过程,本

    2024年03月15日
    浏览(72)
  • 测开 - 自动化测试 selenium - 自动化概念 && 测试环境配置 - 细节狂魔

    自动化测试指 软件测试的自动化 ,在 预设状态下 运行应用程序或者系统. 预设条件 包括正常和异常 ,最后评估运行结果。   自动化测试,就是 将人为驱动的测试行为转化为机器执行的过程。 【机器 代替 人工】 自动化测试 包括UI自动化,接口自动化,单元测试自动化。

    2024年02月02日
    浏览(105)
  • Selenium+python怎么搭建自动化测试框架、执行自动化测试用例、生成自动化测试报告、发送测试报告邮件

    本人在网上查找了很多做自动化的教程和实例,偶然的一个机会接触到了selenium,觉得非常好用。后来就在网上查阅各种selenium的教程,但是网上的东西真的是太多了,以至于很多东西参考完后无法系统的学习和应用。 以下整理的只是书中自动化项目的知识内容,介绍怎么搭

    2024年02月05日
    浏览(67)
  • 【软件测试/自动化测试】WebDriver+Selenium实现浏览器自动化

    前言 使用场景 原理 环境准备  开发 First Script WebDriver API 浏览器 元素 总结 Selenium是一款可以自动化操作浏览器的开源项目,最初的目的是浏览器功能的自动化测试,但是随着项目的发展,人们根据它的特性也用来做一些更多的有意思的功能而不仅仅是UI的自动化测试工具。

    2024年02月08日
    浏览(82)
  • 自动化测试:5分钟了解Selenium以及如何提升自动化测试的效果

    在快节奏的技术世界里,自动化测试已经成为确保 Web 应用程序质量和性能的重要手段。自动化测试不仅加快了测试过程,还提高了测试的重复性和准确性。Selenium,作为领先的自动化测试工具之一,为测试人员提供了强大的功能来模拟用户在 Web 浏览器中的行为。在本文中

    2024年01月20日
    浏览(45)
  • 自动化测试-Selenium

    目录 什么是自动化测试 Selenium介绍 Selenium是什么 Selenium特点 Selenium工作原理 Selenium+Java环境搭建 1.下载chrome浏览器,查看版本号. 2.下载chrome浏览器驱动 3.配置环境变量 4.创建java项目,在pom文件中添加依赖 5. 验证环境是否搭建成功 Selenium常用API的使用 定位元素findElement css定位

    2024年02月16日
    浏览(39)
  • 自动化测试selenium

    将人工的测试手段进行转换,让代码去执行。 自动化分类: 单元测试 接口测试 UI自动化测试 selenium 是什么 selenium 是web应用中基于UI的自动化测试框架。 selenium 特点 支持多平台、多浏览器、多语言、有丰富的API 工作原理 定位元素 定位元素: findElement 通过CSS 选择器查找定

    2024年02月07日
    浏览(41)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包