web自动化测试Java+selenium chrome浏览器案例

1 pom依赖

<dependency>
     <groupId>org.seleniumhq.selenium</groupId>
     <artifactId>selenium-api</artifactId>
     <version>4.9.1</version>
 </dependency>
 <dependency>
     <groupId>org.seleniumhq.selenium</groupId>
     <artifactId>selenium-remote-driver</artifactId>
     <version>4.9.1</version>
 </dependency>
 <dependency>
     <groupId>org.seleniumhq.selenium</groupId>
     <artifactId>selenium-chrome-driver</artifactId>
     <version>4.9.1</version>
 </dependency>

驱动下载地址:
https://registry.npmmirror.com/binary.html?path=chromedriver

2 简单实例运行

根据浏览器版本下载对应的驱动本次chrome 版本115 所以下载115版本的驱动
在这里插入图片描述

package cn.com.ge.apm.test;

import org.openqa.selenium.chrome.ChromeDriver;

public class FirstWebTest {
    public static void main(String[] args) {
        System.setProperty("webdriver.chrome.driver","C:/zk/hj/chromedirver/chromedriver.exe");
        ChromeDriver chromeDriver = new ChromeDriver();
        chromeDriver.get("https://www.baidu.com");
    }

}

2 元素定位

在这里插入图片描述

package cn.com.ge.apm.test;

import org.openqa.selenium.By;
import org.openqa.selenium.chrome.ChromeDriver;

public class ElementLocate {
    private static  ChromeDriver chromeDriver;
    public static void main(String[] args) {
        openChrome();
        //1.定位到baidu的搜索框元素并且输入数据 通过id定位
//        chromeDriver.findElement(By.id("kw")).sendKeys("年龄大不能搬砖了么");

        //2.定位到baidu的搜索框元素并且输入数据 通过Name定位 --可能会重复
//        chromeDriver.findElement(By.name("wd")).sendKeys("年龄大不能搬砖了么");

        //3.定位到百度搜索框元素,并且输入数据(tagName) 会找到多个元素 不推荐
//        chromeDriver.findElement(By.tagName("input")).sendKeys("年龄大不能搬砖了么");

        //4. className定位 到百度的搜索框元素 有多个随便写一个
//        chromeDriver.findElement(By.className("s_ipt")).sendKeys("年龄大不能搬砖了么");
        //Compound class names not permitted -->复合类名问题 解决:找其中一个必须在当前页面是唯一的
//        chromeDriver.findElement(By.className("s_btn")).click();

        //5.根据链接的超文本来获取元素
        //定位新闻元素点击(linkText定位)只能定位超链接完整文本
//        chromeDriver.findElement(By.linkText("新闻")).click();

        //6.定位“新闻”元素,并且点击(partialLinkText定位)可以只包含部分
//        chromeDriver.findElement(By.partialLinkText("闻")).click();

        //7 元素定位 sccSelector
        /**
         * 根据tagName
         * By.cssSelector("input");
         *
         * 根据id
         * By.cssSelector("input#id");
         * By.cssSelector("#id");
         *
         * 根据className(样式名)
         * By.cssSelector("className");
         * By.cssSelector("input.className");
         */

        //cssSelector元素定位
        //(1)tagName定位
//        chromeDriver.findElement(By.cssSelector("input")).click();
        
        //(2) id定位 前面需要加#号
//        chromeDriver.findElement(By.cssSelector("#kw")).sendKeys("年龄大不能搬砖了么");
        
        //(3)className定位 .样式名
//        chromeDriver.findElement(By.cssSelector(".s_ipt")).sendKeys("年龄大不能搬砖了么");
        //(3.1)符合样式名 前面都需要加.号
//        chromeDriver.findElement(By.cssSelector(".bg.s_btn")).click();


        //精确定位 可以定位属性值
//        chromeDriver.findElement(By.cssSelector("input[maxlength='255']")).sendKeys("年龄大不能搬砖了么");

        //多属性  By.cssSelector("标签名[属性1='属性值'][属性2='属性值']")
//        chromeDriver.findElement(By.cssSelector("input[maxlength='255'][autocomplete='off']")).sendKeys("年龄大不能搬砖了么");

    }

    public static void openChrome(){
        System.setProperty("webdriver.chrome.driver","C:/zk/hj/chromedirver/chromedriver.exe");
        chromeDriver = new ChromeDriver();
        chromeDriver.get("https://www.baidu.com");
    }
}

By.cssSelector(“标签名[属性1=‘属性值’][属性2=‘属性值’]”) 页面搜索效果
input[maxlength=‘255’][autocomplete=‘off’]
在这里插入图片描述

3 元素定位-xpath

一般不使用
在这里插入图片描述
在这里插入图片描述

3.1 页面搜索元素

//input[@maxlength=‘255’ and @autocomplete=‘off’]
在这里插入图片描述

3.2 页面通过文本定位元素

//a[text()=‘新闻’]
在这里插入图片描述

3.3 匹配部分的文本值

//a[contains(text(),‘闻’)]
在这里插入图片描述

4 元素操作api

4.1 元素操作演示

在这里插入图片描述

package cn.com.ge.apm.test;

import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;

public class ElementOperate {

    private static  ChromeDriver chromeDriver;

    public static void openChrome(){
        System.setProperty("webdriver.chrome.driver","C:/zk/hj/chromedirver/chromedriver.exe");
        chromeDriver = new ChromeDriver();
        chromeDriver.get("https://www.baidu.com");
    }

    public static void main(String[] args) {
        try {
            openChrome();
            //1 clear
            /*chromeDriver.findElement(By.id("kw")).sendKeys("123456");
            Thread.sleep(3000);
            chromeDriver.findElement(By.id("kw")).clear();*/


            WebElement webElement1 = chromeDriver.findElement(By.id("kw"));
            System.out.println("得到元素的标签名:"+webElement1.getTagName());
            System.out.println("得到元素的maxlength属性:"+webElement1.getAttribute("maxlength"));
            WebElement webElement2 = chromeDriver.findElement(By.xpath("//a[text()='hao123']"));
            System.out.println("得到元素的文本值"+webElement2.getText());
            System.out.println("元素是否显示"+webElement2.isDisplayed());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

4.2 WebDriver相关API

在这里插入图片描述

package cn.com.ge.apm.test;

import org.openqa.selenium.By;
import org.openqa.selenium.chrome.ChromeDriver;

public class WebDriverOperate {
    private static ChromeDriver chromeDriver;

    public static void openChrome(){
        System.setProperty("webdriver.chrome.driver","C:/zk/hj/chromedirver/chromedriver.exe");
        chromeDriver = new ChromeDriver();
        chromeDriver.get("https://www.baidu.com");
    }

    public static void main(String[] args) {
        try {
            openChrome();
            // 1
            /*System.out.println("当前的URL:"+chromeDriver.getCurrentUrl());
            System.out.println("当前的标题:"+chromeDriver.getTitle());
            System.out.println("当前的源代码:"+chromeDriver.getPageSource());
            //关闭所有页面
            chromeDriver.quit();*/

            // 2关闭当前窗口
            chromeDriver.findElement(By.id("kw")).sendKeys("腾讯课堂");
            chromeDriver.findElement(By.id("su")).click();
            Thread.sleep(10000);
            chromeDriver.findElement(By.xpath("//span[@class='c-img-border c-img-radius-large']")).click();
            Thread.sleep(2000);
            //默认关掉的是第一个 需要关闭其他窗口需要窗口切换
            chromeDriver.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

package cn.com.ge.apm.test;

import org.openqa.selenium.By;
import org.openqa.selenium.Dimension;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

public class WebDriverOperate {
    private static ChromeDriver chromeDriver;

    public static void openChrome(){
        System.setProperty("webdriver.chrome.driver","C:/zk/hj/chromedirver/chromedriver.exe");
        chromeDriver = new ChromeDriver();
        chromeDriver.get("https://www.baidu.com");
    }

    public static void main(String[] args) {
        try {
            openChrome();
            // 1
            /*System.out.println("当前的URL:"+chromeDriver.getCurrentUrl());
            System.out.println("当前的标题:"+chromeDriver.getTitle());
            System.out.println("当前的源代码:"+chromeDriver.getPageSource());
            //关闭所有页面
            chromeDriver.quit();*/

            // 2关闭当前窗口
            /*chromeDriver.findElement(By.id("kw")).sendKeys("腾讯课堂");
            chromeDriver.findElement(By.id("su")).click();
            System.out.println("打开新窗口前句柄:"+chromeDriver.getWindowHandle());
            System.out.println("新窗口打开前所有句柄:"+chromeDriver.getWindowHandles());
            Thread.sleep(10000);
            chromeDriver.findElement(By.xpath("//span[@class='c-img-border c-img-radius-large']")).click();
            Thread.sleep(2000);
            System.out.println("打开后的句柄:"+chromeDriver.getWindowHandle());
            System.out.println("新窗口打开后所有句柄:"+chromeDriver.getWindowHandles());
            //默认关掉的是第一个 需要关闭其他窗口需要窗口切换
            chromeDriver.close();*/

            WebDriver.Options options = chromeDriver.manage();
            //管理当前窗口的接口->当前窗口全屏
            options.window().fullscreen();
            //获取当前窗口宽和高
//            Dimension dimension = manage.window().getSize();
//            System.out.println("height={}"+dimension.getHeight()+" width="+"dimension.getWidth()");

            //获取当前窗口的x轴和y轴
            System.out.println(options.window().getPosition().x);
            System.out.println(options.window().getPosition().y);

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

navigate对象

            //navigate对象
            WebDriver.Navigation navigation = chromeDriver.navigate();
            Thread.sleep(2000);
            //访问京东
            navigation.to("https://www.jd.com");
            Thread.sleep(2000);
            //刷新网页
            navigation.refresh();
            Thread.sleep(2000);
            //回退
            navigation.back();
            Thread.sleep(2000);
            //前进
            navigation.forward();

4.3 隐式等待

在这里插入图片描述
在这里插入图片描述

4.4 显示等待

在这里插入图片描述
在这里插入图片描述

4.5 特殊元素定位于操作-模态框

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.6 特殊元素定位于操作 iframe

在这里插入图片描述
在这里插入图片描述

4.7 特殊元素定位于操作 window

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.8 特殊元素定位于操作 select 下拉框

在这里插入图片描述

            chromeDriver.get("http://www.baidu.com");
            chromeDriver.findElement(By.id("s-usersetting-top")).click();
            //and: a[@name='tj_settingicon' and @class='pf']
            //先找父元素再找子元素://div[@id='u1']/a[text()='设置']
            chromeDriver.findElement(By.xpath("//span[text()='高级搜索']")).click();
            Thread.sleep(2000);
            chromeDriver.findElement(By.xpath("//span[text()='时间不限']")).click();
            Thread.sleep(2000);
            chromeDriver.findElement(By.xpath("//p[text()='一年内']")).click();

            //定位时间下拉框
            WebElement webElement = chromeDriver.findElement(By.name("gpc"));
            //把webElement封装成Select对象
            Select select = new Select(webElement);
            select.selectByIndex(1);
            Thread.sleep(2000);
            select.selectByVisibleText("一月内");

4.9 特殊元素定位于操作-时间日期空间

在这里插入图片描述

4.9.1 可以输入数据的类型

在这里插入图片描述

4.9.2 日期控件去除redorly的限制

在这里插入图片描述

4.9.3 先在控制台实现

在这里插入图片描述

4.9.4 特殊日期控件通过执行javascript实现

在这里插入图片描述
在这里插入图片描述

4.10 特殊元素定位于操作-鼠标操作

在这里插入图片描述
目标2拖拽至目标3
在这里插入图片描述

4.11 特殊元素定位于操作-文件上传

在这里插入图片描述

4.11.1 写入路径实现

在这里插入图片描述

4.11.2 第三方控件实现

第三方工具autoit

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值