• 自动化测试 — selenium + Java


    什么是自动化测试

            将人为驱动的测试行为转化为机器执行的过程。

            自动化测试包括UI 自动化,接口自动化,单元测试自动化。按照这个金字塔模型来进行自动化测试规划,可以产生最佳的自贡话测试产出投入比(ROI ),可以用较少的投入获得很好的收益。

    selenium 

            Selenium 是 W eb  应用中基于  UI  的自动化测试框架,支持跨平台、多浏览器、多语言。

    工作原理

    Selenium + Java 环境搭建 

    一、推荐使用 Chrome 浏览器。先查看浏览器版本:

    二、因为我的版本是 127 的,所以需要去这个地方下载:下载链接

    三、把压缩包解压后把 chromedriver.exe 复制到:

    ① Chrome 浏览器目录下:

    ② Java - jdk 的 bin 目录下:

    四、创建 Java Maven 项目,引入 pom.xml 依赖

    1. <dependencies>
    2. <dependency>
    3. <groupId>org.seleniumhq.seleniumgroupId>
    4. <artifactId>selenium-javaartifactId>
    5. <version>3.141.59version>
    6. dependency>
    7. dependencies>

    五、创建一个 Java 类,验证环境是否配置成功:

    1. import org.openqa.selenium.WebDriver;
    2. import org.openqa.selenium.chrome.ChromeDriver;
    3. import org.openqa.selenium.chrome.ChromeOptions;
    4. public class Test {
    5. public static void main(String[] args) {
    6. ChromeOptions options = new ChromeOptions();
    7. options.addArguments("--remote-allow-origins=*"); // 允许所有的请求
    8. WebDriver webDriver = new ChromeDriver(options);
    9. webDriver.get("https://www.baidu.com"); // 打开百度首页
    10. }
    11. }

    Selenium 常用的 API

    定位元素

    findElement:css 选择

    1. // 选中百度搜索框
    2. WebElement element = webDriver.findElement(By.cssSelector("#kw"));

    xpath 选择

    1. // 选中百度搜索框
    2. WebElement element = webDriver.findElement(By.xpath("//*[@id=\"kw\"]"));

    操作测试对象的 API

    click:  点击对象
    send_keys:  在对象上模拟按键输入
    clear:  清除对象输入的文本内容
    submit:  提交(效果和 click 一样,但是这个元素要在 form 表单中,否则会报错)
    text:  用于获取元素的文本信息
    1. // 往搜索框输入内容
    2. element.sendKeys("奥运会");
    3. // 找到 百度一下 按钮,然后点击
    4. webDriver.findElement(By.cssSelector("#su")).click();
    5. // 清空输入框
    6. webDriver.findElement(By.cssSelector(".s_ipt")).clear();

    添加等待

    1. // 硬等三秒
    2. sleep(3000);
    3. // 隐式等待,如果发现了要找的元素就停止等待,到时间了还没找到就报错
    4. webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.HOURS);

    打印信息(获取信息)

    打印 title / url:

    1. String url = webDriver.getCurrentUrl();
    2. String title = webDriver.getTitle();
    3. if (url.equals("https://www.baidu.com/") && title.equals("百度一下,你就知道")) {
    4. System.out.println("测试成功");
    5. } else {
    6. System.out.println("测试失败");
    7. }

    浏览器的操作

    1. // 浏览器后退
    2. sleep(3000);
    3. webDriver.navigate().back();
    4. // 浏览器刷新
    5. webDriver.navigate().refresh();
    6. // 浏览器前进
    7. sleep(3000);
    8. webDriver.navigate().forward();
    9. // 将浏览器的滚动条滚到最下面
    10. sleep(3000);
    11. ((JavascriptExecutor)webDriver).executeScript("document.documentElement.scrollTop=10000");
    12. // 把浏览器设置全屏
    13. sleep(3000);
    14. webDriver.manage().window().fullscreen();
    15. // 把浏览器设置最大化(还有 X 这些)
    16. sleep(3000);
    17. webDriver.manage().window().maximize();
    18. // 把浏览器设置成自定义大小
    19. sleep(3000);
    20. webDriver.manage().window().setSize(new Dimension(600, 1000));

    操作键盘

    1. // control + A
    2. sleep(3000);
    3. webDriver.findElement(By.cssSelector("#kw")).sendKeys(Keys.CONTROL, "A");
    4. // control + X
    5. sleep(3000);
    6. webDriver.findElement(By.cssSelector("#kw")).sendKeys(Keys.CONTROL, "X");
    7. // control + V
    8. sleep(3000);
    9. webDriver.findElement(By.cssSelector("#kw")).sendKeys(Keys.CONTROL, "V");

    操作鼠标

    1. // 找到图片按钮
    2. sleep(3000);
    3. WebElement webElement = webDriver.findElement(By.cssSelector("#s_tab > div > a.s-tab-item.s-tab-item_1CwH-.s-tab-pic_p4Uej.s-tab-pic"));
    4. // 鼠标右击
    5. Actions actions = new Actions(webDriver);
    6. sleep(3000);
    7. // moveToElement 表示移动到哪个元素上, perform 表示把点击后的效果显示出来
    8. actions.moveToElement(webElement).contextClick().perform();
    9. // 鼠标双击
    10. actions.moveToElement(webElement).doubleClick().perform();
    11. // 鼠标拖动
    12. actions.moveToElement(webElement).dragAndDrop().perform();

    定位一组元素

    假设一个页面上有单选框和复选框,目前只点击所有的复选框:

    1. // findElements 获取的是一组元素
    2. List webElements = webDriver.findElements(By.cssSelector("input"));
    3. for (WebElement webElement : webElements) {
    4. // 通过 getAttribute 获取元素上的 type 值是否为 checkbox,如果是就点击
    5. if (webElement.getAttribute("type").equals("checkbox")) {
    6. webElement.click();
    7. }
    8. }

    有 frame 的时候:

    1. webDriver.switchTo().frame("f1"); // 如果没有这一行直接执行下一行是找不到的,把当前定位的主体切换了frame里。
    2. webDriver.findElement(By.cssSelector("body > div > a")).click();

  • 相关阅读:
    加强堆的应用:topK问题
    重生之我是一名程序员 33
    SpringBoot SpringBoot 基础篇(第一篇) 第1章 SpringBoot 入门 1.3 SpringBoot 快速入门
    Dubbo面试题(一)
    FinClip 支持创建 H5应用类小程序;PC 终端 优化升级
    response.setHeader的各种用法
    进程状态
    三层限流:为高并发系统保驾护航
    SpringCloud-Ribbon负载均衡
    草料二维码表单如何推送至工作群
  • 原文地址:https://blog.csdn.net/weixin_43497876/article/details/140919249