【测试】Web自动化-selenium

目录

一  了解自动化和selenium

😶‍🌫️什么是自动化?

😶‍🌫️为什么选择selenium作为web自动化工具

😶‍🌫️环境部署

😶‍🌫️什么是驱动?

😶‍🌫️selenium+驱动+浏览器

😶‍🌫️第一个简单的自动化实例

二 掌握selenium的基础语法

😶‍🌫️定位元素的方法

❤️css选择器

❤️xpath

😶‍🌫️元素的操作

❤️ 点击:click    提交:submit

❤️模拟按键输入:sendkeys

❤️清除对象输入的文本内容:clear()

❤️获取文本

❤️添加等待

❤️信息打印

❤️窗口

❤️导航

❤️弹窗

❤️鼠标、键盘操作

❤️选择框

❤️文件上传

❤️屏幕截图


一  了解自动化和selenium

😶‍🌫️什么是自动化?

自动化测试能够代替一部分手工测试并且能够提高测试效率。随着功能的增加,版本越来越多,版本回归的压力越来越大,仅仅通过人工测试来回归所有的版本是不现实的,所以我们需要借助自动化工具来进行回归。

😶‍🌫️为什么选择selenium作为web自动化工具

1.开源免费

2.支持多语言。如Java,python

3.支持多浏览器。如Chrome,Firefox,IE,edge,Safari

4.支持多系统。如Linux,Windows,MacOS

5.selenium包底层有很多可使用的API

😶‍🌫️环境部署

selenium工具包

Chrome浏览器

Chromedriver谷歌驱动

Java版本不低于8

😶‍🌫️什么是驱动?

计算机里的驱动程序,可以驱动计算机和设备工作起来。在人工测试的情况下,是人工手动打开浏览器,而自动化测试中需要借助驱动程序来协助打开浏览器。

😶‍🌫️selenium+驱动+浏览器

😶‍🌫️第一个简单的自动化实例

二 掌握selenium的基础语法

😶‍🌫️定位元素的方法

❤️css选择器

public class autotest1 {
    //创建一个驱动对象
    private ChromeDriver driver = new ChromeDriver();
    public void startDriver(){
        driver.get("https://www.baidu.com");
    }

    public void locate_test(){
        //css选择器
        String xwtest = driver.findElement(By.cssSelector("#su")).getText();
    }
    
    public void closeddriver(){
        driver.quit();
    }

}

public class runAutotest {
    public static void main(String[] args) throws InterruptedException {
        autotest1 test = new autotest1();
        test.startDriver();
        test.locate_test();
        test.closeddriver();
    }
}

❤️xpath

语法:

层级:/子级     //跳级

属性:@

函数:contains()...

public void locate_test() throws InterruptedException {
       
        //xpath
        driver.findElement(By.xpath("//*[@id=\"kw\"]")).sendKeys("亚运会");
        Thread.sleep(3000);
    }

注意:定位元素必须要唯一

😶‍🌫️元素的操作

❤️ 点击:click    提交:submit

click 和 submit都可以操作按钮,submit点击的元素必须都在form表单中,click并没有要求。


    public void control_test() throws InterruptedException {
        //click点击行为
        driver.findElement(By.xpath("//*[@id=\"su\"]")).click();
        driver.findElement(By.cssSelector("#kw")).click();

        //submit提交行为
        driver.findElement(By.cssSelector("#kw")).sendKeys("杭州亚运会");
        Thread.sleep(3000);
        driver.findElement(By.cssSelector("#su")).submit();
        Thread.sleep(3000);
        //submit可不可以提交新闻-->不可以
        driver.findElement(By.cssSelector("#lm-new")).submit();
        Thread.sleep(3000);
    }

❤️模拟按键输入:sendkeys

//模拟按键进行sendkeys
        driver.findElement(By.cssSelector("#kw")).sendKeys("亚运会开幕式");
        Thread.sleep(3000);

❤️清除对象输入的文本内容:clear()

  //clear清除对象输入的文本内容
        driver.findElement(By.cssSelector("#kw")).sendKeys("亚运会开幕式");
        Thread.sleep(3000);
        driver.findElement(By.cssSelector("#kw")).clear();
        Thread.sleep(3000);
        driver.findElement(By.cssSelector("#kw")).sendKeys("亚运会火炬点燃");
        Thread.sleep(3000);

❤️获取文本:gettext

注意:获取文本是getText(),获取属性值是getAttribute()。

type,id,value,class都是属性

//获取文本:gettext
        String txt = driver.findElement(By.cssSelector("#hotsearch-content-wrapper > li:nth-child(2) > a > span.title-content-title")).getText();
        System.out.println("期望的文本:丰收里的中国色  实际的文本:"+txt);

注意:

 //百度一下按钮上的"百度一下"文字不是文本,而是value的属性值,所以这里打印出来的文本为空
        String txt = driver.findElement(By.cssSelector("#su")).getText();
        System.out.println("期望的文本:百度一下  实际的文本:"+txt);

        //如何获取属性值
        String text = driver.findElement(By.cssSelector("#su")).getAttribute("value");
        System.out.println("期望的属性值:百度一下  实际的属性值:"+txt);
    }

❤️添加等待

当代码执行速度比较快,前端页面还没有渲染的速度相对慢一点,这就导致代码已经执行到下一步了,页面还没有渲染出来,元素找不到。这时候就需要添加等待。

等待分为三个:强制等待、隐式等待、显式等待

强制等待:让程序暂停一会,等待指定时间之后继续执行下一步。

优点:语法简单,适合调试的时候用

缺点:需要等待固定的时间,造成测试时间大量消耗,大大减少自动化测试效率

隐式等待:在固定的时间范围内频繁的轮询元素是否存在,作用于webdriver的整个生命周期。

优点:节省了大量等待的时间,元素展示之后就执行下一步,执行效率高

缺点:需要等待所有元素都展现才会执行下一步,仍然会有额外的时间浪费

显式等待:针对某一个元素来进行等待,在固定的时间范围内频繁的轮询元素是否存在。

优点:针对某一个元素进行等待,极大的降低了自动化的等待时间

缺点:写法复杂

 public void wait_test() throws InterruptedException {
        //不添加等待页面没有渲染完成,导致最后一步的查找页面元素失败
        //1.添加强制等待3s再进行页面查找,结果成功
        driver.findElement(By.cssSelector("#kw")).sendKeys("我的天才女友");
        driver.findElement(By.cssSelector("#su")).click();
        Thread.sleep(3000);
        driver.findElement(By.cssSelector("#\\31  > div > h3 > a > div > div > p > span > span > em"));
        //隐式等待
        driver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        driver.findElement(By.cssSelector("#kw")).sendKeys("我的天才女友");
        driver.findElement(By.cssSelector("#su")).click();
        driver.findElement(By.cssSelector("#\\31  > div > h3 > a > div > div > p > span > span > em"));

        //显式等待
        WebDriverWait wait = new WebDriverWait(driver,5);
        wait.until(ExpectedConditions.elementToBeClickable(By.cssSelector("#kw")));
    }

❤️信息打印

1.打印标题:getTitle()

2.打印当前Url:getCurrentUrl()

    //信息打印
    public void printtest(){
        
        //打印标题
        String title = driver.getTitle();
        System.out.println("title:"+title);
        //打印Url
        String curUrl = driver.getCurrentUrl();
        System.out.println("curUrl:"+curUrl);

    }

❤️窗口

句柄:selenium对每一个标签页都给了唯一标识,成为句柄。

1.获取当前页面的句柄:getWindowHandle()-->返回值String类型的字符

2.获取所有页面的句柄:getWindowHandles()-->返回值String类型的集合

3.窗口大小变换:

driver.manage().window().maximize()

driver.manage().window().setSize(new Dimension(宽度,高度))

4.置顶置底:driver.executeScript()

❤️导航

1.前进:driver.navigate().forward();

2.后退:driver.navigate().back();

❤️弹窗

普通弹窗:可以在前端代码里定位到的-->driver.findElement();

警告弹窗+确认:不可以在前端代码里定位到的

-->切换到弹窗上Alert alert = driver.switchTo().alert();

-->点击确认按钮alert.accept();

-->或点击取消按钮alert.dismiss();

提示弹窗+输入:

Alert alert = driver.switchTo().alert();
alert.sendKeys("xxx");

❤️鼠标、键盘操作

   selenium提供了Actions接口

❤️选择框

selenium提供了select接口

❤️文件上传

页面中点击文件上传会弹出来系统窗口,selenium不能操作系统窗口。这时候通过sendKeys()方法输入要上传的文件路径以及文件名。

❤️屏幕截图

代码的执行速度比页面渲染速度快,通过截图来留证

driver.getScreenshotAs(OutputType.x)-->x可以选择File,Base64,bytes


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值