自动化测试(selenium + web driver API 代码实现)

​​​​​

目录

自动化测试

selenium介绍

工作原理

webdriver 

Xpath 定位 CSS定位 

操作测试对象

添加等待

强制等待

隐式等待

显示等待 

浏览器操作

操作浏览器的前进、后退 ;浏览器的滚动条操作;全屏;高和宽设置

键盘组合键用法

鼠标操作,搜索520,鼠标右击图片

针对特殊场景如何通过SeleniumAPI完成

定位一组元素

多框架/窗口定位 

下拉框定位

针对alert弹窗操作

上传文件操作

切换窗口,在新窗口中进行搜索

截图


自动化测试

在预设状态下运行应用程序或系统,预设条件包括正常和异常,最后评估运行结果。将人为驱动的测试转化为机器执行的过程。(将人工测试手段进行转换,让代码去执行)

自动化分类:单元测试 接口测试 UI自动化测试

selenium介绍

        selenium是web应用中基于UI的自动化测试框架,支持多平台、多浏览器、多语言、有丰富的API。

工作原理

webdriver 

Xpath 定位 CSS定位 

 private static void test01() throws InterruptedException {
        int flag = 0;
        //selenium操作
        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 element1 = webDriver.findElement(By.xpath("//*[@id=\"kw\"]"));
        //输入软件测试
        element1.sendKeys("软件测试");
        //找到百度一下的按钮
        //点击
        webDriver.findElement(By.cssSelector("#su")).click();
        sleep(3000);
        //验证
        //找到搜索结果
        List<WebElement> elements = webDriver.findElements(By.cssSelector("a em"));
        for (int i = 0; i < elements.size(); i++) {
            //elements.get(i).getText()
            // System.out.println(elements.get(i).getText());
            //如果返回的结果有软件测试,证明测试通过,否则测试不通过
            //
            if (elements.get(i).getText().equals("测试")) {
                flag = 1;
                System.out.println("测试通过!");
                break;
            }
            if (flag == 0) {
                System.out.println("测试不通过");
            }
        }

    }

操作测试对象

  • click:点击对象
  • send_keys:在对象上模拟按键输入
  • clear:清除对象输入的文本内容
  • submit:提交 (如果点击元素放在form标签中,实现的效果和click一样,如果放在非form标签中,会报错
  • text:用于获取元素的文本信息
 private static void test02() throws InterruptedException {
        //selenium操作
        ChromeOptions options = new ChromeOptions();
        //允许所有的请求
        options.addArguments("--remote-allow-origins=*");
        //创建驱动
        WebDriver webDriver = new ChromeDriver(options);
        webDriver.get("https://www.baidu.com");
        sleep(3000);
        //百度搜索框输入人类
        webDriver.findElement(By.cssSelector("#kw")).sendKeys("人类");
        //搜索框点击按钮的id su 点击百度搜索框按钮
        webDriver.findElement(By.cssSelector("#su")).click();
        //清空百度搜索框中的内容
        webDriver.findElement(By.cssSelector("#kw")).clear();


    }
String url = webDriver.getCurrentUrl();
String title = webDriver.getTitle();
 private static void test03() {
        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("测试通过");
        } else {
            System.out.println(url + " " + title);
            System.out.println("测试不通过");
        }
    }
  • getText拿不到部分属性的值,getAttribute可以拿到属性的值

添加等待

强制等待

        sleep休眠

隐式等待
webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.DAYS);

        有条件的等待,隐式的等待并非一个固定的等待时间,当脚本执行到某个元素定位时,如果元素可以定位,则继续执行;如果元素定位不到,则以它轮询的方式不断的判断元素是否被定位到,直到超出设置的时间。它等待页面上所有元素的加载,如果没有在规定时间加载完页面所有元素,就抛出异常。等到页面元素全部加载完成,执行下一步的代码。

显示等待 

        设置一个超时时间和一个元素查找条件,在这个时间内不断寻找这个元素,超时找不到就会抛出异常。程序会判断在等待时间内条件是否满足,如果满足则返回,如果不满足会继续等待,超过时间就会抛出异常。

private static void test05() {
        WebDriver webDriver = new ChromeDriver();
        webDriver.get("https://www.baidu.com");
        //显示等待
        WebDriverWait wait = new WebDriverWait(webDriver, 10);
        //判断元素是否可以被点击
        wait.until(ExpectedConditions.elementToBeClickable(By.cssSelector("#bottom_layer > div > p:nth-child(8) > span")));
    }

如果是只需等待页面中的一个元素加载就用显示等待,等待整个网页加载就用隐式等待。

:它们都是智能等待

:隐式等待等待所有的元素;显示等待等待一定的条件。

浏览器操作

操作浏览器的前进、后退 ;浏览器的滚动条操作;全屏;高和宽设置
private static void test07() throws InterruptedException {
        WebDriver webDriver = new ChromeDriver();
        //打开百度首页
        webDriver.get("https://www.baidu.com");
        //搜索521
        webDriver.findElement(By.cssSelector("#kw")).sendKeys("521");
        //强制等待3秒
        webDriver.findElement(By.cssSelector("#su")).click();
        sleep(3000);
        //浏览器后退
        webDriver.navigate().back();
        sleep(3000);
        //
        webDriver.navigate().refresh();
        sleep(3000);
        webDriver.navigate().forward();
        sleep(3000);
        //浏览器的滚动条操作
        ((JavascriptExecutor) webDriver).executeScript("document.documentElement.scrollTop=10000");
        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");
        //control+A 全选
        webDriver.findElement(By.cssSelector("#kw")).sendKeys(Keys.CONTROL, "A");
        sleep(3000);
        //control+X 剪切
        webDriver.findElement(By.cssSelector("#kw")).sendKeys(Keys.CONTROL, "X");
        sleep(5000);
        //control+V 粘贴
        webDriver.findElement(By.cssSelector("#kw")).sendKeys(Keys.CONTROL, "V");
        sleep(3000);

    }
鼠标操作,搜索520,鼠标右击图片
private static void test09() throws InterruptedException {
        WebDriver webDriver = new ChromeDriver();
        //打开百度首页
        webDriver.get("https://www.baidu.com");
        webDriver.findElement(By.cssSelector("#kw")).sendKeys("520");
        webDriver.findElement(By.cssSelector("#su")).click();
        sleep(3000);
        //找到图片按钮
        WebElement webElement = webDriver.findElement(By.cssSelector("#s_tab > div > a.s-tab-item.s-tab-item_1CwH-.s-tab-pic_p4Uej.s-tab-pic"));
        //鼠标右击
        Actions actions = new Actions(webDriver);
        sleep(3000);
        actions.moveToElement(webElement).contextClick().perform();
    }

针对特殊场景如何通过SeleniumAPI完成

定位一组元素
 //批量操作对象,比如将页面上所有的checkbox都勾上
    private static void page01() {
        WebDriver webDriver = new ChromeDriver();
        webDriver.get("网址");
        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获取页面上的元素属性值,里面的type是当前元素的属性
            if(webElements.get(i).getAttribute("type").equals("checkbox")){
                webElements.get(i).click();
            }else {
                ;
            }
        }
    }

多框架/窗口定位 
 private static void page02() {
        WebDriver webDriver = new ChromeDriver();
        webDriver.get("网址");
        //定位一个fram:把当前定位的主体切换到fram中
        webDriver.switchTo().frame("f1");
        webDriver.findElement(By.cssSelector("")).click();
    }
下拉框定位
private static void page03() {
        WebDriver webDriver = new ChromeDriver();
        webDriver.get("网址");
        WebElement webElement = webDriver.findElement(By.cssSelector(""));
        Select select = new Select(webElement);
        //通过下标查找
        select.selectByIndex(0);
        //通过value属性对应的值查找
        select.selectByValue("");
    }

针对alert弹窗操作
private static void page04() throws InterruptedException {
        WebDriver webDriver = new ChromeDriver();
        webDriver.get("网址");
        webDriver.findElement(By.cssSelector("")).click();
        sleep(3000);
        //alert弹窗取消
        webDriver.switchTo().alert().dismiss();
        //点击按钮
        webDriver.findElement(By.cssSelector("")).click();
        //alert弹窗中输入姓名
        webDriver.switchTo().alert().sendKeys("姓名");
        //alert弹窗确定
        webDriver.switchTo().alert().accept();
    }
上传文件操作
private static void page05() {
        WebDriver webDriver = new ChromeDriver();
        webDriver.get("网址");
        webDriver.findElement(By.cssSelector("input")).sendKeys("文件路径");
        //关闭浏览器
        webDriver.quit();
        webDriver.close();

    }

 

webDriver.quit(); 关闭了整个浏览器,并清空缓存
webDriver.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)")).click();
        sleep(3000);
        //通过getWindowHandles获取所有的窗口句柄
        //通过getWindowHandle获取get打开页面窗口句柄
        Set<String> handles = webDriver.getWindowHandles();
        String target_handle="";
        //获取最后一个窗口句柄(最新打开的)
        for(String handle : handles){
            target_handle=handle;
        }
      
        webDriver.switchTo().window(target_handle);
        webDriver.findElement(By.cssSelector("#ww")).sendKeys("新闻联播");
        sleep(3000);
        webDriver.findElement(By.cssSelector("#s_btn_wr")).click();
    }
截图
 private static void test11() 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)).getScreenshortsAs(OutputType.FILE);
        FileUtils.copyFile(file,new File("D://jeitu.png"));
    }

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值