0


自动化测试 selenium 篇

✏️作者:银河罐头
📋系列专栏:JavaEE

🌲“种一棵树最好的时间是十年前,其次是现在”

目录

什么是自动化测试?

自动化测试就是将人工测试手段进行转换,让代码去执行。

自动化测试分类:

单元测试,接口自动化,UI自动化。

Selenium 介绍

Selenium 是什么

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

Selenium 特点

支持多平台、多浏览器、多语言(如java,C#,Python,Ruby), 有丰富的 API。

工作原理

image-20230530170408859

selenium+Java环境搭建

Chrome+Java

windows电脑环境搭建-chrome浏览器

1.下载chrome浏览器

2.查看chrome浏览器版本

image-20230530171215541

3.下载chrome浏览器驱动

https://chromedriver.chromium.org/downloads

image-20230530171321924

image-20230530171403826

配置环境变量

解压下载好的驱动压缩包,将下载好的chromedriver.exe放到java系统环境变量下.

image-20230530171944575

验证环境是否搭建成功

1.创建java项目,添加pom文件中添加依赖

image-20230530172543800

<dependencies><!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java --><dependency><groupId>org.seleniumhq.selenium</groupId><artifactId>selenium-java</artifactId><version>3.141.59</version></dependency></dependencies>

image-20230530172828587

2.编写代码运行

importorg.openqa.selenium.chrome.ChromeDriver;importorg.openqa.selenium.chrome.ChromeOptions;publicclassMain{publicstaticvoidmain(String[] args){ChromeOptions options =newChromeOptions();
        options.addArguments("--remote-allow-origins=*");WebDriver webDriver =newChromeDriver(options);
        webDriver.get("https://www.baidu.com");}}

image-20230530173310940

image-20230530173402220

如果打开了浏览器,此时说明安装成功。

image-20230530190554290

selenium 常用 API

元素的定位

css 定位

image-20230530192759946

publicclassMain{publicstaticvoidmain(String[] args){ChromeOptions options =newChromeOptions();//允许所有请求
        options.addArguments("--remote-allow-origins=*");WebDriver webDriver =newChromeDriver(options);//打开百度首页
        webDriver.get("https://www.baidu.com");//找到百度搜索输入框WebElement element = webDriver.findElement(By.cssSelector(".s_ipt"));//输入软件测试
        element.sendKeys("软件测试");}}

运行:

image-20230530193257445

xpath 定位

image-20230530193601898

publicclassMain{publicstaticvoidmain(String[] args){ChromeOptions options =newChromeOptions();//允许所有请求
        options.addArguments("--remote-allow-origins=*");WebDriver webDriver =newChromeDriver(options);//打开百度首页
        webDriver.get("https://www.baidu.com");//找到百度搜索输入框//xpath 定位元素WebElement element = webDriver.findElement(By.xpath("//*[@id=\"kw\"]"));//输入软件测试
        element.sendKeys("软件测试");}}

image-20230530194022506

  • 绝对路径:/html/head/title (不常用)
  • 相对路径:

相对路径 + 索引://form/span[1]/input

image-20230530200722930

相对路径 + 属性值://input[@class=“s_ipt”]

image-20230530200959284

相对路径 + 通配符:// * [@ * =“su”]

image-20230530201203485

相对路径 + 文本匹配://a[text()=“新闻”]

image-20230530201403929

publicclassMain{publicstaticvoidmain(String[] args)throwsInterruptedException{test01();}privatestaticvoidtest01()throwsInterruptedException{ChromeOptions options =newChromeOptions();//允许所有请求
        options.addArguments("--remote-allow-origins=*");WebDriver webDriver =newChromeDriver(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);//校验List<WebElement> elements = webDriver.findElements(By.cssSelector("a em"));int flag =0;for(int i =0;i < elements.size();i++){if(elements.get(i).getText().contains("测试")){
                flag =1;System.out.println("测试通过");break;}}if(flag ==0){System.out.println("测试不通过");}}}

image-20230530203738769

css 选择器定位元素效率更高。

操作测试对象

  • click 点击对象
  • send_keys 在对象上模拟按键输入
  • clear 清除对象输入的文本内容
privatestaticvoidtest02()throwsInterruptedException{ChromeOptions options =newChromeOptions();//允许所有请求
    options.addArguments("--remote-allow-origins=*");WebDriver webDriver =newChromeDriver(options);//打开百度首页
    webDriver.get("https://www.baidu.com");//找到百度搜索输入框,输入"软件测试"
    webDriver.findElement(By.cssSelector("#kw")).sendKeys("软件测试");//点击"百度一下"按钮
    webDriver.findElement(By.cssSelector("#su")).click();sleep(3000);//清空百度搜索输入框中的数据
    webDriver.findElement(By.cssSelector("#kw")).clear();}
  • submit 提交

如果点击的元素放在 form 标签中,使用 submit 和 click 效果一样。

如果点击的元素不在 form 标签中,此时使用 submit 会报错。

//会报错,因为点击的是"新闻"超链接,它没有放在 form 标签中privatestaticvoidtest03(){ChromeOptions options =newChromeOptions();//允许所有请求
    options.addArguments("--remote-allow-origins=*");WebDriver webDriver =newChromeDriver(options);//打开百度首页
    webDriver.get("https://www.baidu.com");
    webDriver.findElement(By.xpath("//a[text()=\"新闻\"]")).submit();}

image-20230530211417064

  • text 用于获取元素的文本信息
  • getAttribute: 获取元素属性的值。

image-20230530212002471

像"软件测试"这样的可以通过.getText()来获取文字内容。

image-20230530212119641

而"百度一下"这个按钮不能通过 .getText() 来获取文字内容。

privatestaticvoidtest04(){ChromeOptions options =newChromeOptions();//允许所有请求
    options.addArguments("--remote-allow-origins=*");WebDriver webDriver =newChromeDriver(options);//打开百度首页
    webDriver.get("https://www.baidu.com");String button_value = webDriver.findElement(By.cssSelector("#su")).getText();System.out.println(button_value);}

image-20230530212220681

没有打印 “百度一下” 这个按钮的文本内容。

如果要想打印"百度一下" 这个按钮的文本内容,可以通过 getAttribute()

privatestaticvoidtest04(){ChromeOptions options =newChromeOptions();//允许所有请求
    options.addArguments("--remote-allow-origins=*");WebDriver webDriver =newChromeDriver(options);//打开百度首页
    webDriver.get("https://www.baidu.com");String button_value = webDriver.findElement(By.cssSelector("#su")).getAttribute("value");System.out.println(button_value);}

image-20230530212434999

添加等待

强制等待

sleep();

隐式等待

隐式等待和显式等待都是智能等待。

如果等待时间 3 天时间,强制等待会一直等待,等待的时间 3 天。

隐式等待,最多等 3 天,如果在 这 3 天之内获取到了页面上的元素,就会往下执行代码;如果等待 3 天还没有找到这个元素就会报错。

privatestaticvoidtest02()throwsInterruptedException{ChromeOptions options =newChromeOptions();//允许所有请求
    options.addArguments("--remote-allow-origins=*");WebDriver webDriver =newChromeDriver(options);//打开百度首页
    webDriver.get("https://www.baidu.com");//找到百度搜索输入框,输入"软件测试"
    webDriver.findElement(By.cssSelector("#kw")).sendKeys("软件测试");//点击"百度一下"按钮
    webDriver.findElement(By.cssSelector("#su")).submit();//        sleep(30000000);
    webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.DAYS);//清空百度搜索输入框中的数据
    webDriver.findElement(By.cssSelector("#kw")).clear();}

sleep(30000000); 效果是 输入框输入 软件测试后 一直死等 30000000 ms.

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

效果是只要输入框一输入完软件测试,就执行下面的代码,clear(). 没有等待。

显式等待可以让他指定去等待某一个元素。

打印信息

打印 title

打印 url

privatestaticvoidtest05(){ChromeOptions options =newChromeOptions();//允许所有请求
    options.addArguments("--remote-allow-origins=*");WebDriver webDriver =newChromeDriver(options);//打开百度首页
    webDriver.get("https://www.baidu.com");String url = webDriver.getCurrentUrl();String title = webDriver.getTitle();System.out.println("title: "+ title +" url: "+ url);}

image-20230530215417488


本文转载自: https://blog.csdn.net/qq_63983125/article/details/131605238
版权归原作者 银河罐头 所有, 如有侵权,请联系我们删除。

“自动化测试 selenium 篇”的评论:

还没有评论