【自动化测试】---Selenium+Java

1.自动化测试分类

  • 接口自动化测试
  • UI自动化测试(移动端自动化测试、Web端自动化测试)

2.选择Selenium作为web自动化工具原因(面试题)

  • 开源免费
  • 支持多个浏览器
  • 支持多个系统
  • 支持多语言
  • Selenium包提供很多供测试使用的API

3.自动化是什么?为什么要做自动化? 

  • 自动化是测试人员为了提高效率或者保证测试质量,减少人力消耗,让代码辅助测试人员来执行测试的一个过程

 4.自动化脚本打开浏览器的工作原理

  •  编写的自动化脚本----创建http请求发送给浏览器驱动----浏览器驱动包含一个http server请求---操控浏览器----执行测试步骤
  • 驱动作用:驱动接收自动化脚本发送过来的http请求,并解析请求发送给浏览器,当浏览器执行完成后,会把结果返回给脚本

5. 使用Java编写Selenium编写的自动化脚本的步骤

  • 创建maven项目,在pom.xml里将依赖导入

        
            org.seleniumhq.selenium
            selenium-java
            4.0.0
        
  • 开始进行自动化脚本的编写
 public void dilireba(){

        //创建驱动对象
        ChromeOptions options=new ChromeOptions();
        options.addArguments("--remote-allow-origins=*");
        ChromeDriver driver=new ChromeDriver(options);

        //访问网络
        driver.get("http://baidu.com");
        
        //查找元素并且操作元素
        driver.findElement(By.cssSelector("#kw")).sendKeys("迪丽热巴");
        driver.findElement(By.cssSelector("#su")).click();

        //结束会话
        driver.quit();
    }

6.查找元素 

  • findElement()     查找当前的一个元素 ,返回值为WebElement
driver.findElement(By.cssSelector("#kw"))
  • findElenments()      查找当前相同多个元素, 返回值为List
List eles=driver.findElements(By.className("hotsearch-item"));

//打印每个名称
        for (WebElement els: eles ) {
            System.out.println(els.getText());
        }

7.元素定位 (自动化要求元素定位必须唯一)

  • 选择器:Selector ,选择页面指定元素
driver.findElement(By.cssSelector("#kw"))
  • Xpath
driver.findElement(By.xpath(//*[@id="kw"]))

 8.常见元素操作 

  • 输入文本 sendkeys,仅使用于文字字段
driver.findElement(By.cssSelector("#kw")).sendKeys("小嘉");
  • 点击 click
 driver.findElement(By.cssSelector("#su")).click();
  • 提交  submit,仅适用于表单元素
driver.findElement(By.cssSelector("#su")).submit();
  • 获取文本  getText(),打印这个属性的值
String ret=driver.findElement(By.className("title-content-title")).getText();
        System.out.println(ret);
  • 清除 clear ,测试是否可以频繁输入
driver.findElement(By.cssSelector("#su")).clear();
  • 获取标题 getTitle()
 System.out.println(driver.getTitle());
  • 获取url  geturl()
 System.out.println(driver.getCurrentUrl());
  •    获取属性的值  getAttribute()
System.out.println(driver.findElement(By.cssSelector("#su")).getAttribute("value"));

9.窗口设置

  • 窗口最大化
//窗口最大化
  driver.manage().window().maximize();
       
  • 窗口最小化
 //窗口最小
        driver.manage().window().minimize();
      
  • 窗口全屏
  driver.manage().window().fullscreen();
      
  • 手动设置窗口大小

        //手动设置
        driver.manage().window().setSize(new Dimension(1024,4444));
  • 窗口切换(浏览器每次打开一个标签页,就会自动给每个标签页有一个标识,叫做句柄)10
 //输入网址
        driver.get("http://baidu.com");
        //点击更多标签页
        driver.findElement(By.cssSelector("#s-top-left > div > a")).click();
        //先获取所有标签的句柄
        Sethandles =driver.getWindowHandles();
        //获取当前页面句柄
        String curhandle=driver.getWindowHandle();
        System.out.println("当前页面句柄:"+curhandle);
        //获取所有的句柄
        for (String handle: handles) {
            if (handle!=curhandle){
                //进行页面切换
                driver.switchTo().window(handle);
            }
        }
        //查找更多页面的某个元素
        Thread.sleep(2000);
        driver.findElement(By.cssSelector("#content > div:nth-child(2) > div:nth-child(2) > a"));
        Thread.sleep(2000);
        driver.quit();

10.屏幕截图 

  • 在pom.xml里面导入依赖

            commons-io
            commons-io
            2.6
 
  • 进行截图
public void test1() throws IOException {
        //启动驱动
        ChromeOptions options=new ChromeOptions();
        options.addArguments("--remote-allow-origins=*");
        ChromeDriver driver=new ChromeDriver(options);
        //输入网址
        driver.get("http:baidu.com");
        //找到输入框去输入元素
        driver.findElement(By.cssSelector("#kw")).sendKeys("迪丽热巴");
        //屏幕截图以文件形式
        File srcfile=driver.getScreenshotAs(OutputType.FILE);
        //把它放在指定路径
        String filename="my.png";
        FileUtils.copyFile(srcfile,new File(filename));
        driver.quit();
    }

11.等待 

  • 强制等待:Thread.sleep(时间)
  • 隐式等待:作用于driver的整个生命周期,会一直轮寻判断元素是否存在,如果不存在就等待设置好的时间里不断进行轮询,等到元素全被访问
public void test2(){
        //启动驱动
        ChromeOptions options=new ChromeOptions();
        options.addArguments("--remote-allow-origins=*");
        ChromeDriver driver=new ChromeDriver(options);
        //开始隐式等待
        driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
        //输入网址
        driver.get("http:baidu.com");
        //找到输入框去输入元素
        driver.findElement(By.cssSelector("#kw")).sendKeys("迪丽热巴");
        driver.quit();
    }
  • 显示等待: 针对代码一条去设置

new WebDriverWait(driver,Duration.ofSeconds(间)).until(driver.findElement(By.cssSelector("")));

12.浏览器导航 

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

13.弹窗 

  • 将driver对象作用到弹窗上(切换弹窗) driver.switchTo.alert()
  • 确认--accept    取消---dismiss    输入文本----sendkeys
  • 警告弹窗--只有1个按钮     确认弹窗--可以选择确定和取消    提示弹窗--可以输入文本

14.选择框 (可以根据文本选择、根据属性值选择、根据文本选择)

void selectControll() throws InterruptedException {
//        driver.get("file:///D:/file/%E6%AF%94%E7%89%B9%E6%95%99%E5%8A%A1/%E6%B5%8B%E8%AF%95/selenium4html/selenium-html/select.html");
//        Thread.sleep(3000);
//         WebElement ele = driver.findElement(By.cssSelector("#ShippingMethod"));
//        //先创建选择框对象
//        Select select = new Select(ele);
//        Thread.sleep(3000);
//        //根据文本来选择
        select.selectByVisibleText("UPS Next Day Air ==> $12.51");
//        //根据属性值来选择
        select.selectByValue("12.51");
//        //根据序号来选择
//        select.selectByIndex(1);   序号从0开始
//        Thread.sleep(3000);
//        driver.quit();
//    }

15.执行脚本 executeScript(js代码)

void scriptControll() throws InterruptedException {
       driver.get("https://baidu.com/");
       Thread.sleep(3000);
       //执行js命令:让页面置顶/置底
       //如果想要滑到最小面,值设置的大一些就行         
       driver.executeScript("document.documentElement.scrollTop=500");
       Thread.sleep(3000);

        //0就是顶部
       driver.executeScript("document.documentElement.scrollTop=0");
       driver.get("https://www.baidu.com");
       Thread.sleep(3000);

       driver.executeScript("var texts = 
       document.querySelector('#kw');texts.value='1111'");
       Thread.sleep(3000);
       driver.quit();
   }

16.文件上传

void fileUploadControll() throws InterruptedException {      
 driver.get("url的路径");
Thread.sleep(3000);

driver.findElement(By.cssSelector("body > div > div > input[type=file]")).sendKeys("D:\\file\\比特教务\\测试\\selenium4html\\selenium-html\\upload.html");
//写入上传文件的文件夹路径和文件名
 Thread.sleep(3000);
 driver.quit();

17.浏览器参数的设置(需要在创建对象之前设置)

测试人员只会查看结果,不关注过程,所以需要设置无头模式(自动执行,我们在界面上看不到的),我们只可以在终端看见效果

      void paramsControll(){
        //百度搜索迪丽热巴
        //先创建选项对象,然后再设置浏览器参数
        ChromeOptions options = new ChromeOptions();
        options.addArguments("-headless");
        ChromeDriver driver = new ChromeDriver(options);
        driver.get("https://www.baidu.com");
        driver.findElement(By.cssSelector("#kw")).sendKeys("迪丽热巴");
        driver.findElement(By.cssSelector("#su")).click();
        driver.quit();

你可能感兴趣的:(测试,selenium,测试工具)