selenium自动化测试

1、Java+selenium环境搭建

下载chromedriver,版本要与Chrome浏览器版本一致。
在这里插入图片描述
在这里插入图片描述

下载之后将chromedriver.exe复制到jdkbin目录下。
在这里插入图片描述
在这里插入图片描述
新建一个项目,在pom文件中引入selenium的依赖:

<dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-java</artifactId>
            <version>4.7.2</version>
 </dependency>

2、测试,打开任意网页

public class Main {
    public static void main(String[] args) {
        ChromeOptions options = new ChromeOptions();
        options.addArguments("--remote-allow-origins=*");
        WebDriver webDriver = new ChromeDriver(options);
        webDriver.get("https://www.baidu.com/");//打开百度
    }
}

3、selenium 常见的Api

3.1元素定位findElement

3.1.1 css 选择语法

 - id选择器    #id
 - 类选择器    .class
 - 标签选择器   标签名
 - 后代选择器   父级选择器 子级选择器

3.1.2 xpath 选择语法

  • 绝对路径:/html 不常用
    在这里插入图片描述

  • 相对路径: 双斜杠//开头
    相对路径+索引 ,索引下标1开始
    //form/span[1]/input
    在这里插入图片描述

//form/span[2]/input
在这里插入图片描述

相对路径+属性值
//input[@class="s_ipt"]
在这里插入图片描述
//input[@id="su"]
在这里插入图片描述

相对路径+通配符
//*[@*="su"] 表示路径下所有属性等于“su”
在这里插入图片描述

相对路径+文本匹配
//a[text()="新闻"]
在这里插入图片描述

3.1.3 春招面试题

1)、定位一个元素有哪几种方式?(通过什么方式定位元素)
css选择器xpath选择器
2)、css选择器xpath选择器哪个更好?
css选择器更好,定位元素效率更高。

3.2 webDriver 中常用操作对象的方法

  • click 点击对象
  • sendKeys 在对象上模拟按键输入
  • clear 清除对象输入框的文本内容
  • submit 提交
  • text 用于获取元素的文本信息
  • getAttribute
private static void test03() throws InterruptedException {
        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("Java107");
        //点击百度一下按钮
        webDriver.findElement(By.cssSelector("#su")).click();
        //webDriver.findElement(By.cssSelector("#su")).submit();
        sleep(3000);
        //清空百度输入框
        webDriver.findElement(By.cssSelector("#kw")).clear();
    }

注意:如果点击的元素放在 form 标签中,此时使用 submit 实现的效果和 click 是一样的;但是,如果点击的元素放在非 form标签中使用 submit 会报错

private static void test04() throws InterruptedException {
        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.xpath("//a[text()=\"新闻\"]")).submit();//会报错
        //webDriver.findElement(By.xpath("//a[text()=\"新闻\"]")).click();//正常执行  不会报错
    }

在这里插入图片描述

使用getAttribute 获取百度一下按钮的value属性值

在这里插入图片描述

private static void test05() {
        ChromeOptions options = new ChromeOptions();
        options.addArguments("--remote-allow-origins=*");
        WebDriver webDriver = new ChromeDriver(options);
        webDriver.get("https://www.baidu.com/");//打开百度

        String button_value = webDriver.findElement(By.cssSelector("#su")).getAttribute("value");
        //System.out.println(button_value);
        if (button_value.equals("百度一下")){
            System.out.println("测试通过");
        }else {
            System.out.println("测试不通过 "+ button_value);
        }
    }

3.3 webDriver 中获取页面的url 和title

private static void test06() {
        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("测试不通过");
        }
    }

4、等待

  • sleep 强制等待
  • 隐式等待
  • 显示等待

假设等待3天时间:
如果等待时间为3天,那么强制等待会一直等待,等待的时间是3天;但是,隐式等待最长等待3天,如果3天内获取到页面上的元素,此时可执行下面的代码,若等待3天时间还是没获取到元素,直接报错。

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

//显示等待
WebDriverWait wait = new WebDriverWait(webDriver, Duration.ofSeconds(3000));//显示等待
private static void test07() {
        //创建驱动
        ChromeOptions options = new ChromeOptions();
        options.addArguments("--remote-allow-origins=*");
        WebDriver webDriver = new ChromeDriver(options);
        webDriver.get("https://www.baidu.com/");//打开百度

        //显示等待
        WebDriverWait wait = new WebDriverWait(webDriver, Duration.ofSeconds(3000));//显示等待
        wait.until(ExpectedConditions.elementToBeClickable(By.cssSelector("#hotsearch-content-wrapper > li:nth-child(4) > a > span.title-content-title")));

        wait.until(ExpectedConditions.titleIs("百度一下,你就知道"));
    }

隐式等待和显示等待的区别:
隐式等待: 是等待页面所有元素都加载出来之后才执行下面的代码,如果设置等待时间为 3 s,超过 3 s 还没加载出来就报错了。不能针对某个确定的条件进行等待

显示等待:他是有一个后续的等待条件,如果满足了这个条件,不管页面元素加没加载完。

5、浏览器操作

  • 浏览器前进
 webDriver.navigate().forward();
  • 浏览器后退
webDriver.navigate().back();
  • 浏览器滚动条操作
private static void test01() throws InterruptedException {
        ChromeOptions options = new ChromeOptions();
        options.addArguments("--remote-allow-origins=*");
        WebDriver webDriver = new ChromeDriver(options);
        webDriver.get("https://www.baidu.com/");//打开百度

        //搜索329
        webDriver.findElement(By.cssSelector("#kw")).sendKeys("329");
        //强制等待3 s
        sleep(3000);
        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");
        //浏览器最大化
        webDriver.manage().window().maximize();
        sleep(3000);
        
        //全屏
        webDriver.manage().window().fullscreen();
        sleep(3000);

        //设置宽、高
        webDriver.manage().window().setSize(new Dimension(600,1000));
    }
  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值