目录
7.1 窗口的大小设置(manage().window())
1. 什么是自动化
2.自动化测试的分类
3. selenium(web 自动化测试工具)
1)选择 selenium 的原因
2)环境部署
如果想要使用 selenium 实施 web 自动化测试,需要的环境是什么:
edg浏览器、edg驱动(edgedriver)、selenium 工具包
3)什么是驱动?
驱动要接受 selenium 脚本发送过来的 http 请求并解析

4. 一个简单的自动化例子
首先先导入 selenium 包
<dependencies>
    <dependency>
        <groupid>org.seleniumhq.selenium</groupid>
        <artifactid>selenium-java</artifactid>
        <version>3.0.0</version>
    </dependency>
</dependencies>
 
 
package com.autotest0113;
import org.openqa.selenium.by;
import org.openqa.selenium.webelement;
import org.openqa.selenium.chrome.chromedriver;
import java.util.list;
public class firstautotest {
    // 在百度网址搜索关键词 “胡歌”
    public void yifei() throws interruptedexception {
        // 1.打开浏览器
        chromedriver chromedriver = new chromedriver();
        thread.sleep(3000);
        // 2.在浏览器里输入百度网址,访问百度首页
        chromedriver.get("https://www.baidu.com");
        thread.sleep(3000);
        // 3.找到百度首页输入框元素,并输入关键词 “胡歌”
        chromedriver.findelement(by.cssselector("#kw")).sendkeys("刘亦菲");
        thread.sleep(3000);
        // 4.找到百度首页 “百度一下” 按钮,并点击一下
        chromedriver.findelement(by.cssselector("#su")).click();
        thread.sleep(3000);
        // 5.结束会话(关闭浏览器)
        chromedriver.quit();
    }
}
 
package com.autotest0113;
import sun.text.normalizer.chartrie;
public class runautotest {
    public static void main(string[] args) throws interruptedexception {
        firstautotest firstautotest = new firstautotest();
        firstautotest.huge();
    }
}
 
5.selenium 常用方法
5.1 查找页面元素(findelement())



5.2 findelements()方法
public void methodtest() {
    chromedriver driver = new chromedriver();
    driver.get("https://www.baidu.com");
    driver.findelement(by.cssselector("#kw"));
    list<webelement> elements= driver.findelements(by.classname("hotsearch-item"));
    for (webelement element : elements) {
        system.out.println(element.gettext());
    }
    driver.findelement(by.cssselector("#su"));
    driver.quit();
}
 

5.3 元素的定位 by 类

5.4 xpath 路径语言
自动化里要求元素的定位必须要唯一,但是手动在页面复制 selector 或者 path 元素不一定是唯一的,需要我们进行手动修改到唯一


6.常见的元素操作
6.1 输入文本(sendkeys())
sendkeys,仅适用于文本字段和内容可编辑的元素
        driver.get("https://www.baidu.com");
        webelement element = driver.findelement(by.cssselector("#kw"));
        element.sendkeys("豆腐乾净搞方规");
//        driver.findelement(by.cssselector("#kw")).sendkeys("豆腐乾净搞方规");
        driver.quit();
 
6.2 点击 click
        driver.findelement(by.cssselector("#su")).click();
 
6.3 提交 submit(通过回车键提交)
submit 仅适用于表单元素,selenium 官方不推荐使用 submit,更推荐 click
        driver.findelement(by.cssselector("#kw")).sendkeys("豆腐乾净搞方规");
        driver.findelement(by.cssselector("#su")).submit();
        thread.sleep(2000);
        driver.quit(); 
6.4 清除 clear
clear:适用于频繁测试输入是否可以重复输入
// 清除输入框的内容
driver.findelement(by.cssselector("#kw")).clear();
 
6.5 获取文本 (gettext())
// 获取文本
string text = driver.findelement(by.cssselector("#s-top-left > div > a")).gettext();
system.out.println("获取到的文本:" + text);
 


6.6 获取属性对应的值 getattribute
// 获取属性的值
        string buttontext = driver.findelement(by.cssselector("#su")).getattribute("type");
        system.out.println("获取到的属性名:" + buttontext);
        string buttontext1 = driver.findelement(by.cssselector("#su")).getattribute("id");
        system.out.println("获取到的属性名:" + buttontext1);
        string buttontext2 = driver.findelement(by.cssselector("#su")).getattribute("value");
        system.out.println("获取到的属性名:" + buttontext2); 

6.7 获取页面的标题和 url
system.out.println(driver.gettitle());
system.out.println(driver.getcurrenturl());
driver.findelement(by.cssselector("#kw")).sendkeys("你好");
driver.findelement(by.cssselector("#su")).click();
system.out.println(driver.gettitle());
system.out.println(driver.getcurrenturl());
 

7.窗口
7.1 窗口的大小设置(manage().window())
最大化,最小化,全屏窗口,手动设置窗口大小
public void windowcontrol() throws interruptedexception {
    thread.sleep(3000);
    // 窗口最大化
    driver.manage().window().maximize();
    thread.sleep(3000);
    // 窗口最小化
    driver.manage().window().minimize();
    thread.sleep(3000);
    // 全屏
    driver.manage().window().fullscreen();
    thread.sleep(3000);
    // 手动设置窗口大小
    driver.manage().window().setsize(new dimension(1024,768));
    thread.sleep(2000);
    
    driver.quit();
}
 
7.2 窗口的切换
 // 窗口切换
        driver.get("https://www.baidu.com");
        driver.findelement(by.cssselector("#s-top-left > a:nth-child(6)")).click();
        thread.sleep(3000);
        driver.findelement(by.cssselector("#homesearchform > span.s_btn_wr > input"));
        driver.quit(); 

    public void windowcontrol() throws interruptedexception, ioexception {
        driver.get("https://www.baidu.com");
        driver.findelement(by.cssselector("#s-top-left > a:nth-child(6)")).click();
        thread.sleep(3000);
        // 获取当前页面的句柄
        string curhandle = driver.getwindowhandle();
        system.out.println("当前页面的句柄:" + curhandle);
        // 获取所有标签的句柄
        set<string> handles =  driver.getwindowhandles();
        for (string handle : handles) {
            if(handle != curhandle) {
                driver.switchto().window(handle);
            }
        }
        driver.findelement(by.cssselector("#homesearchform > span.s_btn_wr > input"));
        thread.sleep(3000);
        driver.quit();
    }
 
 
8. 屏幕截图 getscreenshotas
添加 maven
    <!-- 保存屏幕截图文件需要用到的包-->
    <dependency>
        <groupid>commons-io</groupid>
        <artifactid>commons-io</artifactid>
        <version>2.6</version>
    </dependency>
 
 
        driver.get("https://www.baidu.com");
        driver.findelement(by.cssselector("#kw")).sendkeys("刘亦菲");
        driver.findelement(by.cssselector("#su")).click();
        thread.sleep(3000);
        // 屏幕截图(保存现场)
        file srcfile = driver.getscreenshotas(outputtype.file);
        // 把屏幕截图好的文件放到指定当前项目的路径下
        string filename = "cur.png";
        fileutils.copyfile(srcfile,new file(filename));
        driver.findelement(by.cssselector("#\\31  > div > div > div > div > div > div.cos-row.row-text_johh7.row_5y9az > div > div.title-wrapper_xlsik > a > div > p > span > span"));
        driver.quit(); 
9.等待
9.1 强制等待
9.2 隐式等待
public class autotest {
   
    public void waitcontro() {
        chromeoptions options = new chromeoptions();
        // 添加隐式等待
        driver.manage().timeouts().implicitlywait(duration.ofseconds(3));
        driver.get("https://www.baidu.com");
        driver.findelement(by.cssselector("#kw")).sendkeys("刘亦菲");
        driver.findelement(by.cssselector("#su")).click();
        driver.findelement(by.cssselector("#content_left"));
        driver.quit();
    }
}
 

9.3 显示等待
显示等待会等到设置的命令再进行等待
public class autotest {
   
    public void webdriverwait(){
        chromeoptions options = new chromeoptions();
        driver.get("https://www.baidu.com");
        driver.findelement(by.cssselector("#kw")).sendkeys("刘亦菲");
        driver.findelement(by.cssselector("#su")).click();
        // 添加显示等待
        new webdriverwait(driver,duration.ofseconds(5)).until(driver->driver.findelement(by.cssselector("#content_left")));
        driver.quit();
    }
}
 
10.2 浏览器导航
浏览器的前进(forward)、后退(back)、刷新(refresh)
public void navigatecontrol() throws interruptedexception {
        chromeoptions options = new chromeoptions();
//        driver.get("https:///www.baidu.com");
        driver.navigate().to("https://www.baidu.com");
        thread.sleep(3000);
        // 想要回退到访问百度网址之前的状态
        driver.navigate().back();
        thread.sleep(3000);
        // 前进,再次进入到百度首页
        driver.navigate().forward();
        thread.sleep(3000);
        // 刷新一下页面
        driver.navigate().refresh();
        thread.sleep(3000);
        driver.quit();
    } 
11. 弹窗
 
    public void alertcontrol() throws interruptedexception {
        driver.get("file:///d:/%e6%8f%90%e7%a4%ba%e5%bc%b9%e7%aa%97.html");
        thread.sleep(3000);
        driver.findelement(by.cssselector("body > input[type=button]")).click();//找到选择框元素
        thread.sleep(3000);
        // 切换到弹窗进行弹窗处理
        alert alert = driver.switchto().alert();//创建选择框对象
        thread.sleep(3000);
        // 1. 输入
        alert.sendkeys("666");
        thread.sleep(3000);
        // 2. 点击确认
        alert.accept();
        thread.sleep(3000);
        // 取消
        alert.dismiss();
        driver .quit();
    } 
12.选择框 select
    public void selectcontrol() throws interruptedexception {
        driver.get("file:///d:/%e9%80%89%e6%8b%a9%e6%a1%86.html");
        webelement element = driver.findelement(by.cssselector("mathnumber"));
        thread.sleep(3000);
        // 1.创建选择框对象
        select select = new select(element);
        thread.sleep(3000);
        //1)根据文本来选择
//        select.selectbyvisibletext("123");
//        //2)根据属性值来选择
//        select.selectbyvalue("234");
//        //3)根据序号来选择
//        select.selectbyindex(2);
        thread.sleep(3000);
        driver.quit();
    } 
13.执行脚本 executescript()
executescript(参数:js)
    void scriptcontrol() throws interruptedexception {
        driver.get("https://image.baidu.com/");
        thread.sleep(3000);
        // 执行js命令,让页面置底
//        driver.executescript("document.documentelement.scrolltop=500");
//        thread.sleep(3000);
//        // 执行js命令,让页面置顶,0 就是顶部
//        driver.executescript("document.documentelement.scrolltop=0");
//        thread.sleep(3000);
        driver.executescript("var ss = document.queryselector(\"#kw\");ss.value = '刘亦菲';");//通过js代码来实现搜索
        thread.sleep(3000);
        driver.quit();
    } 
14.文件上传
sendkeys("文件路径+文件")
    void fileuploadcontroll() throws interruptedexception {
        driver.get("file:///d:/%e6%96%87%e4%bb%b6%e4%b8%8a%e4%bc%a0.html");
        driver.findelement(by.cssselector("#avatar")).sendkeys("d:\\desktop\\csdn封面图片\\u=1008366999,1348072899&fm=253&fmt=auto&app=120&f=jpeg.webp");
        thread.sleep(3000);
        driver.quit();
    } 

15. 浏览器的参数设置 chromeoptions
浏览器的参数设置需要在创建浏览器对象之前
    void paramscontrol(){
        // 百度搜索刘亦菲
        // 先创建选项对象,然后再设置浏览器参数
        chromeoptions options = new chromeoptions();
        options.addarguments("-headless");
//        options.addarguments("--remote-allow-origins=*");
        chromedriver driver = new chromedriver(options);
        driver.get("https://image.baidu.com/");
        driver.executescript("var ss = document.queryselector(\"#kw\");ss.value = '刘亦菲';");
    } 
            
                                            
                                            
发表评论