自动化测试-selenium

目录

一、什么是自动化测试

二、selenium优点

三、selenium工作原理

四、环境搭建(java+selenium)

1.下载chrome浏览器

2.查看浏览器的版本下载对应版本的驱动)

3.下载驱动

4.配置环境变量

4.1驱动配置

4.2浏览器配置

​编辑​编辑5.测试

5.1启动idea创建Maven项目

5.2引入依赖

5.3编写代码

5.4启动

 五、selenium相关API

1.定位元素方式

1.1CSS选择器定位元素

1.2标签选择器:标签名(form)

1.3Xpath:

​编辑 2.使用示例

3.关闭浏览器

六、selenium定位元素的API

七、鼠标事件

八、多层框架/窗口定位

九、截图

十、下拉框

十一、弹窗

十二、上传文件操作

一、什么是自动化测试

自动化测试指软件测试的自动化,在预设状态下运行应用程序或者系统,预设条件包括正常和异常,最 后评估运行结果。将人为驱动的测试行为转化为机器执行的过程。自动化测试包括UI自动化,接口自动化,单元测试自动化。

单元自动化测试最大的投入应该在单元测试上,单元测试运行的频率也更加高。 java的单元测试框架是Junit
接口自动化测试

接口测试就是API测试,相对于UI自动化API自动化更加容易实现,执行起来也更稳定

常见的接口自动化测试工具有,RobotFramework,JMeter,SoapUI,TestNG+HttpClient,Postman 等

UI自动化测试UI层的自动化测试更加贴近用户的需求和 软件系统的实际业务

什么是selenium?---->做UI自动化测试的工具

二、selenium优点

1.免费查看源码

2.支持各大浏览器

3.跨平台

4.有丰富的API

三、selenium工作原理

驱动:测执行文件,让代码操作浏览器

四、环境搭建(java+selenium)

1.下载chrome浏览器

Google Chrome 网络浏览器

2.查看浏览器的版本下载对应版本的驱动)

3.下载驱动

Chrome for Testing availability (googlechromelabs.github.io)

将下载好的驱动解压并且复制到浏览器的安装位置上

 

4.配置环境变量

4.1驱动配置

4.2浏览器配置

5.测试

5.1启动idea创建Maven项目

5.2引入依赖

<dependencies>
        <!--selenium java web 自动化测试-->
        <!-- 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>

5.3编写代码

public class Main {
    public static void main(String[] args) {
        WebDriver webDriver=new ChromeDriver();
        webDriver.get("https://www.baidu.com/");
    }
}

5.4启动

 五、selenium相关API

以百度首页为例找inpu框

1.定位元素方式

1.1CSS选择器定位元素

类选择器:.class值(.s_ipt)

id选择器:#id值(#kw)

name选择器:name值(wd)

父类选择器:父类选择器表达式  子类选择器表达式(form span)

1.2标签选择器:标签名(form)

1.3Xpath:

绝对路径:通过/开头

相对路径:通过//开头

相对路径加属性值

相对路径加索引

相对路径加通配符

相对路径加文本

 补:css比xpath更加优

快捷: 

 2.使用示例

//创建驱动
        WebDriver webDriver=new ChromeDriver();
        //打开百度首页
        webDriver.get("https://www.baidu.com/");
        //定位元素
        WebElement search_input= webDriver.findElement(By.cssSelector(".s_ipt"));
        //标签定位
        WebElement search_input2= webDriver.findElement(By.tagName("input"));
        //通过xpath定位
        WebElement search_input1=webDriver.findElement(By.xpath("//*[@id=\"kw\"]"));
       

3.关闭浏览器

//关闭浏览器
        webDriver.quit();//关的更彻底cookies都删了
        webDriver.close();//对应的信息都没有删除

六、selenium定位元素的API

1.click点击对象

2.sendKeys在对象上输入文本

3.getTest()获取文本信息

4.clear 清除对象输入的文本内容

5.submit 提交

6等待

sleep强制等待

智能等待

隐式等待

webDriver.manage().timeouts().implicitlyWait(5,HOURS);
隐式地等待并非一个固定的等待时间,当脚本执行到某个元素定位时,如果元素可以定位,则继续执 行;如果元素定位不到,则它以轮询的方式不断的判断元素是否被定位到。直到超出设置的时长。
显示等待(等待某一个元素)
WebDriverWait webDriverWait=new WebDriverWait(webDriver,3); webDriverWait.until(ExpectedConditions.elementToBeClickable(By.cssSelector("#s-top-left > a:nth-child(1)")));

 //创建驱动
        WebDriver webDriver = new ChromeDriver();
        //打开百度首页
        webDriver.get("https://www.baidu.com/");
        //知道对应的元素
        WebElement search_input = webDriver.findElement(By.cssSelector("#kw"));
        //输入框输入“软件按测试”
        search_input.sendKeys("软件测试");
        sleep(1000);
        //知道百度一下
        WebElement button = webDriver.findElement(By.cssSelector("#su"));
        webDriver.manage().timeouts().implicitlyWait(5,HOURS);
        //点击
        button.click();
        //button.submit();打开百度搜索页面,按钮“百度一下”元素的类型type=“submit”,与click效果相同click相当于鼠标点击
//如果类型不是submit就无法使用
        //等待页面渲染

        sleep(5000);
        //校验,搜索结果没有软件测试,则测试不通过
        List<WebElement> elements = webDriver.findElements(By.cssSelector("a em"));
        for (WebElement element : elements) {
            if (element.getText().equals("软件测试")) {
                System.out.println("测试通过");
            } else {
                System.out.println("测试不通过");
            }

        }
        webDriver.quit();
        //关闭页面

注意:submit需要放在form标签中,click没有限制,所以建议使用click

7.获取title和url

private static void Test06() {
        //创建驱动
        WebDriver webDriver=new ChromeDriver();
        //打开百度
        webDriver.get("https://www.baidu.com/");
        String title=webDriver.getTitle();
        System.out.println(title);
        //拿到url
        String url=webDriver.getCurrentUrl();
        System.out.println(url);
        if(url.equals("https://www.baidu.com/"))
        {
            System.out.println("测试通过");
        }
        else {
            System.out.println("测试不通过");
        }
        webDriver.manage().timeouts().implicitlyWait(3,HOURS);
        webDriver.quit();


    }

9.浏览器

9.1浏览器大小设置

 private static void Test07() throws InterruptedException {
        //创建驱动
        WebDriver webDriver=new ChromeDriver();
        //打开百度
        webDriver.get("https://www.baidu.com/");
        //浏览器最大化
        webDriver.manage().window().maximize();
        sleep(3000);
        //设置浏览器的大小
        webDriver.manage().window().setSize(new Dimension(200,200));
        sleep(3000);
        //定位设置元素
        WebElement element=webDriver.findElement(By.cssSelector("#s-usersetting-top"));
        //校验存不存在
        webDriver.quit();

    }

9.2浏览器的前进后退

private static void Test08() throws InterruptedException {
        //创建驱动
        WebDriver webDriver=new ChromeDriver();
        //打开百度首页
        webDriver.get("https://www.baidu.com/");
        //找到搜索框
        WebElement webElement=webDriver.findElement(By.cssSelector("#kw"));
        //输入张三
        webElement.sendKeys("张三");
        //点击百度一下的按钮
        webDriver.findElement(By.cssSelector("#su")).submit();
        //浏览器回退到上一个
        webDriver.navigate().back();
        webDriver.navigate().to("https://www.baidu.com/");
        //浏览器前进
        webDriver.navigate().forward();
        String url=webDriver.getCurrentUrl();
        //检查url
        if("https://www.baidu.com/".equals(url))
        {
            System.out.println("浏览器前进成功");
        }
        else
        {
            System.out.println("前进失败");
            System.out.println(url);
        }
        sleep(3000);
        webDriver.quit();


    }

9.3浏览器滚动条

 private static void Test09() throws InterruptedException {
        //创建驱动
        WebDriver webDriver=new ChromeDriver();
        //打开百度首页
        webDriver.get("https://www.baidu.com/");
        //找到输入框
        WebElement element=webDriver.findElement(By.cssSelector("#kw"));
        //输入鲜花
        element.sendKeys("鲜花");
        //点击百度一下
        webDriver.findElement(By.cssSelector("#su")).click();
        //等待三秒
        sleep(3000);
        //将滚动条滑倒最下面,s->滚动条的js
        //先强后后使用
        ((JavascriptExecutor)webDriver).executeScript("document.documentElement.scrollTop=10000");
        sleep(3000);
        webDriver.quit();
    }

10.键盘组合

通过sendKeys()调用按键:

sendKeys(Keys.TAB) # TAB

sendeKys(Keys.ENTER) # 回车

sendKeys(Keys.SPACE) #空格键

sendKkeys(Keys.ESCAPE) #回退键(Esc)

private static void Test010() throws InterruptedException {
    //创建驱动
    WebDriver webDriver = new ChromeDriver();
    //打开百度首页
    webDriver.get("https://www.baidu.com/");
    //找到输入框
    WebElement element = webDriver.findElement(By.cssSelector("#kw"));
    //输入鲜花并回车
    //element.sendKeys("鲜花",Keys.ENTER);
    //输入鲜花
    element.sendKeys("鲜花");
    //回车
    element.sendKeys(Keys.ENTER);
    sleep(3000);
    //校验
    List<WebElement> elements = webDriver.findElements(By.xpath("//font[text()=\"鲜花\"]"));
    for (WebElement webElement : elements) {
        System.out.println(webElement.getText());
        if ("鲜花".equals(webElement.getText())) {
            System.out.println("测试通过");
        } else {
            System.out.println("测试不通过");
        }
    }
    webDriver.quit();


}

sendKeys(Keys.CONTROL,'a') #全选(Ctrl+A)

sendKeys(Keys.CONTROL,'c') #复制(Ctrl+C)

sendKeys(Keys.CONTROL,'x') #剪切(Ctrl+X)

sendKeys(Keys.CONTROL,'v') #粘贴(Ctrl+V)

 private static void Test011() throws InterruptedException {
        //创建驱动
        WebDriver webDriver = new ChromeDriver();
        //打开百度首页
        webDriver.get("https://www.baidu.com/");
        //找到输入框
        WebElement element = webDriver.findElement(By.cssSelector("#kw"));
        //输入鲜花
        element.sendKeys("鲜花");
        //sendKeys(Keys.CONTROL,'a') #全选(Ctrl+A)
        //
        //sendKeys(Keys.CONTROL,'c') #复制(Ctrl+C)
        //
        //sendKeys(Keys.CONTROL,'x') #剪切(Ctrl+X)
        //
        //sendKeys(Keys.CONTROL,'v') #粘贴(Ctrl+V)
        //全选
        element.sendKeys(Keys.CONTROL, "A");
        sleep(3000);
        System.out.println(element.getText());
        //剪贴
        element.sendKeys(Keys.CONTROL, "X");
        sleep(3000);
        System.out.println(element.getText());
        //粘贴
        element.sendKeys(Keys.CONTROL, "V");
        sleep(3000);
        System.out.println(element.getText());
        //回车
        element.sendKeys(Keys.ENTER);
        sleep(3000);
        //校验
        List<WebElement> elements = webDriver.findElements(By.xpath("//font[text()=\"鲜花\"]"));
        for (WebElement webElement : elements) {
            System.out.println(webElement.getText());
            if ("鲜花".equals(webElement.getText())) {
                System.out.println("测试通过");
            } else {
                System.out.println("测试不通过");
            }
        }
        webDriver.quit();
    }

七、鼠标事件

ActionChains 类

contextClick() 右击

doubleClick() 双击

dragAndDrop() 拖动

moveToElement() 移动

private static void Test012() throws InterruptedException {
        //创建驱动
        WebDriver webDriver = new ChromeDriver();
        //打开百度首页
        webDriver.get("https://www.baidu.com/");
        //找到输入框
        WebElement element = webDriver.findElement(By.cssSelector("#kw"));
        //输入鲜花并回车
        element.sendKeys("鲜花",Keys.ENTER);
        //鼠标操作
        Actions actions=new Actions(webDriver);
        sleep(3000);
        //鼠标移动到资讯
        //perform();显示效果
        actions.moveToElement(webDriver.findElement(By.xpath("//*[@id=\"s_tab\"]/div/a[2]"))).perform();
        actions.doubleClick().perform();
        webDriver.manage().timeouts().implicitlyWait(5,HOURS);
        webDriver.quit();


    }

八、多层框架/窗口定位

 private static void Test013() throws InterruptedException {
        //创建驱动
        WebDriver webDriver = new ChromeDriver();
        //打开百度首页
        webDriver.get("https://www.baidu.com/");
        //点击新闻按钮
        webDriver.findElement(By.cssSelector("#s-top-left > a:nth-child(1)")).click();
        webDriver.manage().timeouts().implicitlyWait(5,SECONDS);
        //校验跳转页面
        if("https://news.baidu.com/".equals(webDriver.getCurrentUrl()))
        {
            System.out.println("跳转成功");
        }
        else {
            System.out.println("跳转失败");
        }
        //找到当前句柄
        String cur=webDriver.getWindowHandle();
        //获取窗口句柄
        Set<String> all=webDriver.getWindowHandles();
        //找到最新的
        String tar="";
        for(String tmp:all)
        {
            tar=tmp;
        }
        //切换窗口
        webDriver.switchTo().window(tar);
        //找到输入框输入经济新闻,并回车
        webDriver.findElement(By.cssSelector("#ww")).sendKeys("经济新闻",Keys.ENTER);
        sleep(3000);
        //校验
        List<WebElement> elements = webDriver.findElements(By.xpath("//em[text()=\"经济\"]"));
        for (WebElement webElement : elements) {
            System.out.println(webElement.getText());
            if ("经济".equals(webElement.getText())) {
                System.out.println("测试通过");
            } else {
                System.out.println("测试不通过");
            }
        }
        webDriver.quit();

    }

九、截图

下载依赖包

<!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.11.0</version>
</dependency>
private static void Test014() throws InterruptedException, IOException {
        //创建驱动
        WebDriver webDriver = new ChromeDriver();
        //打开百度首页
        webDriver.get("https://www.baidu.com/");
        //找到输入框元素
        WebElement search_input = webDriver.findElement(By.cssSelector("#kw"));
        //输入框输入“软件按测试”
        search_input.sendKeys("软件测试");
        sleep(1000);
        //知道百度一下
        WebElement button = webDriver.findElement(By.cssSelector("#su"));
        sleep(1000);
        //点击
        button.click();
        //截图

        File file=((TakesScreenshot)webDriver).getScreenshotAs(OutputType.FILE);
        //保存
        FileUtils.copyFile(file,new File("D://jietu.png"));
        sleep(1000);
        webDriver.quit();

    }

十、下拉框

借助select

 private static void Test017() {
        //创建驱动
        WebDriver webDriver = new ChromeDriver();
        //打开百度首页
        webDriver.get("");
        //找到输入框元素
        WebElement search_input = webDriver.findElement(By.cssSelector("#kw"));
        //输入框输入“软件按测试”
        search_input.sendKeys("软件测试");
        //借助select
        Select select=new Select(search_input);
        //根据索引从0开始
        select.selectByIndex(1);
        //根据值
        select.selectByValue("111");
    }

十一、弹窗

private static void Test018() throws InterruptedException {
        WebDriver webDriver = new ChromeDriver();
        webDriver.get("file:///D:/Users/18212/selenium/AutoTestSelenium/src/main/java/page/test04.html");
        //点击弹窗
        webDriver.findElement(By.cssSelector("body > button")).click();
        sleep(1000);
        //切换到弹窗并在弹窗了输入内容
        webDriver.switchTo().alert().sendKeys("圆");
        sleep(3000);
        //确认
        webDriver.switchTo().alert().accept();
        WebElement element = webDriver.findElement(By.cssSelector("body > div"));
        if ("圆".equals(element.getText())) {
            System.out.println("测试通过");
        } else {

            System.out.println("测试不通过");
        }
        sleep(1000);
        webDriver.quit();

    }

十二、上传文件操作

 //上传文件
    private static void Test019() {
        WebDriver webDriver=new ChromeDriver();
        webDriver.get("file:///D:/Users/18212/selenium/AutoTestSelenium/src/main/java/page/test05.html");
        //上传文件
        webDriver.findElement(By.cssSelector("body > input[type=file]")).sendKeys("C:\\Users\\18212\\Downloads\\chromedriver-win64 (1).zip");


    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

圆圆无敌

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值