自动化测试入门(上)

个人主页♡喜欢做梦

欢迎 👍点赞 ➕关注 ❤️收藏 💬评论


目录

🍋一、自动化测试的定义

🍏定义

🍏添加依赖

🍏自动化编写

🍋二、CssSelector和Xpath

🍎准备操作

🍎cssSelector

🍎Xpath

🍋三、等待

🍊强制等待

🍊隐式等待

🍊显示等待

🍊三种等待的区别

🍋四、操作测试对象

🍑模拟按键输入(sendKeys)

🍑点击/提交对象(click)

🍑清空内容(clear)

🍑获取元素文本(getText)

🍑获取元素属性(getAttribute)

🍑获取当前页面标题(getTitle)

🍑获取当前页面(getCurrentUrl)


🍋一、自动化测试的定义

🍏定义

自动化测试是通过代码/工具自动执行测试用例、验证软件功能的过程,核心是用"程序替代人工"完成重复、机械工作,是软件测试的重要技术手段之一。

  • 自动化测试类型:接口自动化测试、UI自动化测试、单元自动化测试。
  • web自动化测试工具:selenium

🍏添加依赖

驱动管理

XML 复制代码
        <dependency>
         <groupId>io.github.bonigarcia</groupId>
         <artifactId>webdrivermanager</artifactId>
         <version>5.8.0</version>
         <scope>test</scope>
        </dependency>

安装selenium库

XML 复制代码
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-java</artifactId>
            <version>4.21.0</version>
        </dependency>

🍏自动化编写

java 复制代码
 public  void  test() throws InterruptedException,IOException{
        //驱动下载程序
        WebDriverManager.chromedriver().setup();
        ChromeOptions options=new ChromeOptions();
        //允许访问所有连接
        options.addArguments("--remote-allow-origins=*");
        //打开浏览器
        ChromeDriver chromeDriver=new ChromeDriver();
}


🍋二、CssSelector和Xpath

🍎准备操作

1.打开浏览器,点击快捷键F12 ,或者在鼠标键右击 点击**检查,**打开开发者工具。

2.点击Ctrl+f,出现html搜索框


web自动化测试的核心操作 就是在页面中找到对应的元素然后对元素进行操 作,常见的对元素进行操作的方式有cssSelector和Xpath

🍎cssSelector

原理:基于html元素的标签、id、类名、属性以及层级关系匹配。

元素定位步骤

1.在html页面中选中想要的元素,右击选择copy,点击Copy selector

2.得到相对应的id,示例:#header

在搜索框输入相对应的id,会对应到相应的位置

使用

java 复制代码
chromeDriver.findElement(By.cssSelector("#search-kw"))
  • findElement:查找一个符合条件的元素,其中页面符合条件的元素必须是唯一的,否则可能查找到的结果不一定符合预期;
  • findElements:查找全部符合条件的元素;

语法

ID匹配(#):示例#header;

类匹配(.):.btn;

  • 属性匹配([]):input[name="phone"]

input[name="phone"]:表示选中所有input标签中,name为"phone"的元素。

  • 子节点(">"表示层级):body > script:nth-child(14)
  1. body > script:表示嵌套在<body>中的<script>标签
  2. nth-child(14):这是伪类,表示在<body>下的第14个元素,且这个元素是<script>标签

🍎Xpath

原理:基于XML/HTML树形结构的路径遍历。

步骤:与Css selector同理,不同的是,选择Copy Xpath


写法

java 复制代码
 chromeDriver.findElement(By.xpath("//*[@id=\"search-kw\"]"))

语法

  • 获取html页面的所有节点://*

  • 获取html的指定节点://

示例://div:获取所有div的节点

  • 获取一个节点中的直接子节点:/
  • 获取一个节点的父节点:..

示例://div/..:获取div的父节点

  • 实现节点的属性匹配:[@...]

示例://*[@id="search-frame"]:表示html页面中id属性为"search-frame"的节点



🍋三、等待

原因 :通常代码执行会比页面渲染更快,页面加载未完成时,可能会导致元素定位错误,所以我们有时候需要进行等待。

🍊强制等待

定义

强制等待:直接让程序暂停执行指定时长,不管页面加载,到时间才继续。

语法

java 复制代码
Thread.sleep();

🍊隐式等待

定义

隐式等待:driver在查找元素时,若元素未立即出现,会循环查询直到元素出现,或超时后抛出NoSuchElementException。

语法

java 复制代码
chromeDriver.manage().timeouts().implicitlyWait(Duration.ofMillis(1000));
  • driver.mange():获取webDriver的"管理接口";
  • timeouts:获取"超时配置接口",专门设置各类等待超时时间;
  • implicitlyWait(Duration.ofMillis()):设置"隐式等待超时时间"。

🍊显示等待

定义

显示等待:针对单个元素/条件设置等待,指定"超时时间+等待条件",driver会循环查询条件是否满足,满足则继续,否则抛出TimeoutException。

语法

java 复制代码
    WebDriverWait webDriverWait=new WebDriverWait(chromeDriver,Duration.ofSeconds(3));
    //设置等待条件并执行
    webDriverWait.until(ExpectedConditions.elementToBeClickable(
                By.cssSelector("#Famous > table > tbody > tr:nth-child(2) > td:nth-child(7) > a")));
    }
  • util():一直等待直到满足条件或者超时。
  • ExpectedConditions:Selenium 内置的 "等待条件工具类",封装几乎所有常见的等待场景。
  • elementToBeClickable():等待目标元素"可以被点击",用于避免"元素存在但不可点击"的报错;
  • 当显示等待和隐式等待同时出现,时间会出现叠加现象。

ExpectedConditions其他预定义方法:

  • textToBe():等待目标元素的"文本内容"等于指定的str,用于验证元素文本是否符合预期。
  • presenceOfElementLocated():等待目标元素"存在于dom中"(不关系元素是否可见/可点击,只要存在html页面中即可),用于确认元素已经加载;
  • urlToBe:等待当前页面的url完全等于指定的url,用于验证跳转是否正确。

🍊三种等待的区别

|------|-------------------------|-----------------------------|-----------------------|
| | 强制等待 | 隐式等待 | 显示等待 |
| 作用范围 | 全局 | 全局 | 局部 |
| 等待逻辑 | 无条件(指定固定时长) | 等待,循环直到超时 | 等待自定义添加,循环直到超时 |
| 异常 | 抛InterruptedException | 超时抛NoSuchElementException | 超时抛TimeoutException |
| 使用场景 | 临时调试 | 仅需要元素存在 | 元素状态/页面变化 |


🍋四、操作测试对象

🍑模拟按键输入(sendKeys)

  • sendKeys:向输入框、文本域输入内容

语法

java 复制代码
element.sendKeys("百度");

示例

java 复制代码
    WebElement element= chromeDriver.findElement(By.cssSelector("#search-kw"));
        //通过selector选择器定位输入框,输入"百度"
        Thread.sleep(3000);
        element.sendKeys("百度");
  • Thread.sleep(时间):当前线程休眠时间;

🍑点击/提交对象(click)

  • click:点击按钮、链接、复选框

语法

java 复制代码
element.click();

示例

java 复制代码
chromeDriver.findElement(By.xpath("//*[@id=\"Famous\"]/table/tbody/tr[1]/td[1]/a[1]/span")).click();

🍑清空内容(clear)

  • clear:清空输入框已有内容。

语法

java 复制代码
element.clear();

示例

java 复制代码
        element.sendKeys("百度");
        Thread.sleep(5000);
        element.clear();
        Thread.sleep(5000);
        element.sendKeys("百度111");
  • 如果没有清空,那么输入框内容将会是"百度百度111"

🍑获取元素文本(getText)

  • getText:获取元素可见文本(如按钮文字,标签内容)

语法

java 复制代码
element.getText();

示例

java 复制代码
 //获取文本信息
        Thread.sleep(3000);
        String text1=chromeDriver.findElement(By.cssSelector("#dongdong > div > div:nth-child(1) > a:nth-child(4")).getText();
        Thread.sleep(3000);
        System.out.println("文本信息:"+text1);

🍑获取元素属性(getAttribute)

  • getAttribute:获取元素的属性值,例如input的value。

语法

java 复制代码
element.getAttribute("value");

示例

java 复制代码
 //获取属性值
        Thread.sleep(3000);
        WebElement btn=chromeDriver.findElement(By.cssSelector("#search-form > div > input[type=hidden]:nth-child(1)"));
        Thread.sleep(3000);
        //尝试使用getText获取(结果无法获取)
        System.out.println("text2:"+btn.getText());
        //获取属性值(获取成功)
        System.out.println(btn.getAttribute("value"));

结果:

🍑获取当前页面标题(getTitle)

语法

java 复制代码
driver.getTitle();

示例

java 复制代码
//获取页面标题
        String title=chromeDriver.getTitle();
        System.out.println("页面标题:"+title);

🍑获取当前页面(getCurrentUrl)

语法

java 复制代码
driver.getCurrentUrl();

示例

java 复制代码
//获取页面url
        String url=chromeDriver.getCurrentUrl();
        System.out.println(url);

结果

相关推荐
刘一说2 分钟前
JDK、Maven、Spring Boot 各版本兼容性问题
java·spring boot·maven
雪忆·HL3 分钟前
CSS3知道这些就足够了
前端·css·css3
竺星瑜4 分钟前
CSS基础-CSS3
css·css3
2401_836413144 分钟前
CSS2与CSS3布局方式比较
前端·css·css3
canjun_wen5 分钟前
CSS3 Flex 布局完全指南:从入门到精通,搞定现代网页布局
前端·css·css3
xun_li_7 分钟前
2024---2025年前端开发的就业现状及前景
css·html·css3·html5
IT、木易7 分钟前
css3 @media (prefers-holographic)查询的折叠屏自适应布局算法
前端·css·css3
打工人小夏25 分钟前
前端面试题
前端·css·前端框架·vue·html·es6·html5
夏幻灵29 分钟前
JAVA基础-就近原则和this关键字
java·开发语言
蜀中孤鹰30 分钟前
使用gson定制化序列化/反序列化
java·json