自学内容网 自学内容网

selenium 安装与API总结

1.配置环境

2.定位页面元素进行操作

3.等待,隐式等待,显示等待

等待

Thread.sleep(3000);

直接让进程等待3秒

隐式等待

webDriver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

这行代码会设置 WebDriver 在查找页面元素时,最多等待10秒钟。

显示等待

WebDriverWait wait = new WebDriverWait(webDriver, 10); // 设置最长等待时间为10秒
WebElement element = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("myElement")));

这段代码会等待直到元素 myElement 可见,最多等待10秒。如果10秒内元素没有出现,则会抛出 TimeoutException

4.浏览器页面操作

public class Main {
    public static void main(String[] args) throws InterruptedException {
//        test01();
        test02();

    }

    private static void test02() throws InterruptedException {
        System.setProperty("webdriver.edge.driver", "C:\\Program Files (x86)\\Microsoft\\Edge\\Application\\msedgedriver.exe");
        WebDriver webDriver = new EdgeDriver();
        //打开百度页面
        webDriver.get("https://www.baidu.com/");
        //输入 翻译 点击搜索
        Thread.sleep(2000);
        webDriver.findElement(By.cssSelector("#kw")).sendKeys("我爱你 YYT");
        Thread.sleep(4000);
        webDriver.findElement(By.cssSelector("#su")).click();
        //等待两秒  刷新页面
        Thread.sleep(2000);
        webDriver.navigate().refresh();
        //等待两秒  后退页面
        Thread.sleep(2000);
        webDriver.navigate().back();
        //等待两秒  前进页面
        Thread.sleep(2000);
        webDriver.navigate().forward();
        //等待两秒  使滚动条按照要求滑动
        Thread.sleep(2000);
        ((JavascriptExecutor)webDriver).executeScript("document.documentElement.scrollTop=10000");
        //等待两秒  页面最大化
        Thread.sleep(2000);
        webDriver.manage().window().maximize();
        //等待两秒  设置页面大小
        Thread.sleep(2000);
        webDriver.manage().window().setSize(new Dimension(600,1000));

    }

4.1页面刷新

4.2页面后退

4.3页面前进

4.4页面滚动条滑动

控制滚动条的是JS代码

因此需要将类型转换为JS,再输入JS命令:

document.documentElement.scrollTop=10000

属性设置为10000像素。这意味着浏览器窗口会滚动到文档的顶部以下10000像素的位置。如果文档的实际高度小于10000像素,这将导致滚动条滚动到文档的最底部。

4.5页面全屏

4.6设置页面固定大小

5.键盘事件

public class Main {
    public static void main(String[] args) throws InterruptedException {
        System.setProperty("webdriver.edge.driver", "C:\\Program Files (x86)\\Microsoft\\Edge\\Application\\msedgedriver.exe");
//        test01();
//        test02();
        //test03();
//        test04(); // 打开b站妍妍酱视频
        test05();   // 练习键盘事件

    }

    private static void test05() throws InterruptedException {
        WebDriver webDriver = new EdgeDriver();

        // 打开百度页面
        webDriver.get("https://www.baidu.com/");
        // 输入框输入 521
        webDriver.findElement(By.cssSelector("#kw")).sendKeys("521");
        // 全选输入框的内容 ctrl a
        Thread.sleep(2000);
        webDriver.findElement(By.cssSelector("#kw")).sendKeys(Keys.CONTROL,"a");
        // 剪切输入框的内容 ctrl x
        Thread.sleep(2000);
        webDriver.findElement(By.cssSelector("#kw")).sendKeys(Keys.CONTROL,"x");
        // 粘贴输入框的内容 ctrl v
        Thread.sleep(2000);
        webDriver.findElement(By.cssSelector("#kw")).sendKeys(Keys.CONTROL,"v");
        
    }

5.1盘输入内容

5.2Ctrl a 全选

5.3Ctrl x 剪切

5.4Ctrl v 粘贴

6.鼠标事件

鼠标事件需要创建一个actions对象 参数是创建的web驱动对象

鼠标事件的操作都需要通过调用actions的方法

6.1移动

6.2拖动

效果如下,图片被拖拽到搜索框后释放,生成了链接

public class Main {
    public static void main(String[] args) throws InterruptedException {
        System.setProperty("webdriver.edge.driver", "C:\\Program Files (x86)\\Microsoft\\Edge\\Application\\msedgedriver.exe");
//        test01();
//        test02();
        //test03();
//        test04(); // 打开b站妍妍酱视频
//        test05();   // 练习键盘事件
        test06(); // 练习鼠标事件
    }

    private static void test06() throws InterruptedException {
        WebDriver webDriver = new EdgeDriver();

        // 打开百度页面
        webDriver.get("https://www.baidu.com/");
        // 输入框输入 521 点击搜索
        webDriver.findElement(By.cssSelector("#kw")).sendKeys("521");
        webDriver.findElement(By.cssSelector("#su")).click();
        Thread.sleep(2000);
        //-------------------------------------------------------
        //  找到图片位置
        WebElement webElement01 = webDriver.findElement(By.cssSelector("#s_tab > div > a.s-tab-item.s-tab-item_1CwH-.s-tab-pic_p4Uej.s-tab-pic"));
        //  百度搜索框的位置
        WebElement webElement02 = webDriver.findElement(By.cssSelector("#kw"));
        //  创建action对象
        Actions actions = new Actions(webDriver);
        //  拖动图片到搜索框里释放
        //  第一个参数 被拖拽的元素  第二个参数 释放拖拽元素的位置
        actions.dragAndDrop(webElement01,webElement02).perform();


    }

6.3右击

public class Main {
    public static void main(String[] args) throws InterruptedException {
        System.setProperty("webdriver.edge.driver", "C:\\Program Files (x86)\\Microsoft\\Edge\\Application\\msedgedriver.exe");
//        test01();
//        test02();
        //test03();
//        test04(); // 打开b站妍妍酱视频
//        test05();   // 练习键盘事件
        test06(); // 练习鼠标事件
    }

    private static void test06() throws InterruptedException {
        WebDriver webDriver = new EdgeDriver();

        // 打开百度页面
        webDriver.get("https://www.baidu.com/");
        // 输入框输入 521 点击搜索
        webDriver.findElement(By.cssSelector("#kw")).sendKeys("521");
        webDriver.findElement(By.cssSelector("#su")).click();
        Thread.sleep(2000);
        //-------------------------------------------------------
        //  找到图片位置
        WebElement webElement = webDriver.findElement(By.cssSelector("#s_tab > div > a.s-tab-item.s-tab-item_1CwH-.s-tab-pic_p4Uej.s-tab-pic"));
        //  创建action对象
        Actions actions = new Actions(webDriver);
        //  移动鼠标 到 图片 位置 右击操作
        actions.moveToElement(webElement).contextClick().perform();

    }

6.4双击

7.特殊场景下的操作

7.1  选择框的勾选

因为有多个框需要选择,因此使用了 List 页面元素表来存储


public class Main {
    public static void main(String[] args) throws InterruptedException {
        System.setProperty("webdriver.edge.driver", "C:\\Program Files (x86)\\Microsoft\\Edge\\Application\\msedgedriver.exe");
//        test01();
//        test02();
        //test03();
//        test04(); // 打开b站妍妍酱视频
//        test05();   // 练习键盘事件
//        test06(); // 练习鼠标事件
        page01();// 选择框的勾选


    }

    private static void page01() {
        WebDriver webDriver = new EdgeDriver();
        webDriver.get("file:\\D:\\软件\\idea\\自动化测试\\selenium脚本\\selenium01\\selenium01\\src\\main\\Page\\test01.html");
        //  等待页面元素都渲染出来   等待3秒
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        List<WebElement> webElementList = webDriver.findElements(By.cssSelector("input"));
        for (int i = 0; i < webElementList.size(); i++) {
            //  通过getAttribute获取元素对应属性的值,type就是一个属性
            if (webElementList.get(i).getAttribute("type").equals("radio")){
                webElementList.get(i).click();
            }
        }

    }

7.2  多重框架或窗口重叠下的操作


public class Main {
    public static void main(String[] args) throws InterruptedException {
        System.setProperty("webdriver.edge.driver", "C:\\Program Files (x86)\\Microsoft\\Edge\\Application\\msedgedriver.exe");
//        test01();
//        test02();
        //test03();
//        test04(); // 打开b站妍妍酱视频
//        test05();   // 练习键盘事件
//        test06(); // 练习鼠标事件
//        page01();// 选择框的勾选
        page02();   // 多重框架或窗口重叠下的操作  实现点击到click按钮

    }

    private static void page02() {
        WebDriver webDriver = new EdgeDriver();
        webDriver.get("file://D:\\软件\\idea\\自动化测试\\selenium脚本\\selenium01\\selenium01\\src\\main\\Page\\test02.html");
        //  找到 f1 框架中的 click 按钮
        webDriver.switchTo().frame("f1");
        webDriver.findElement(By.cssSelector("body > div > div > a")).click();

    }

如果没有这行定位框架代码的话,会报错: 无法定位到该元素


7.3  下拉框的选择

需要创建select对象,有两种选择方式

实现选择第三个选项

public class Main {
    public static void main(String[] args) throws InterruptedException {
        System.setProperty("webdriver.edge.driver", "C:\\Program Files (x86)\\Microsoft\\Edge\\Application\\msedgedriver.exe");
//        test01();
//        test02();
        //test03();
//        test04(); // 打开b站妍妍酱视频
//        test05();   // 练习键盘事件
//        test06(); // 练习鼠标事件
//        page01();// 选择框的勾选
//        page02();   // 多重框架或窗口重叠下的操作  实现点击到click按钮
        page03();   // 下拉框选项的选择操作


    }

    private static void page03() {
        WebDriver webDriver = new EdgeDriver();
        webDriver.get("file:\\D:\\软件\\idea\\自动化测试\\selenium脚本\\selenium01\\selenium01\\src\\main\\Page\\test03.html");
        //  定位到下拉框 元素
        WebElement element = webDriver.findElement(By.cssSelector("#ShippingMethod"));
        //  创建select对象 将下拉框元素放进去
        Select select = new Select(element);
        //  通过下标选择选项 ( 下标从0开始 )
        select.selectByIndex(2);
        //  通过选项的 value 来选择
//        select.selectByValue("7.45");
    }

7.4弹窗alert的操作

需要用到switchTo切换到弹窗框架

public class Main {
    public static void main(String[] args) throws InterruptedException {
        System.setProperty("webdriver.edge.driver", "C:\\Program Files (x86)\\Microsoft\\Edge\\Application\\msedgedriver.exe");
//        test01();
//        test02();
        //test03();
//        test04(); // 打开b站妍妍酱视频
//        test05();   // 练习键盘事件
//        test06(); // 练习鼠标事件
//        page01();// 选择框的勾选
//        page02();   // 多重框架或窗口重叠下的操作  实现点击到click按钮
//        page03();   // 下拉框选项的选择操作
        page04();   //

    }

    private static void page04() throws InterruptedException {
        WebDriver webDriver = new EdgeDriver();
        webDriver.get("file:\\D:\\软件\\idea\\自动化测试\\selenium脚本\\selenium01\\selenium01\\src\\main\\Page\\test04.html");
        Thread.sleep(2000);
        webDriver.findElement(By.cssSelector("button")).click();
        Thread.sleep(2000);
        //  取消弹窗
        webDriver.switchTo().alert().dismiss();
        Thread.sleep(2000);
        webDriver.findElement(By.cssSelector("button")).click();
        Thread.sleep(2000);
        //  在弹窗输入内容
        webDriver.switchTo().alert().sendKeys("520yyt");
        Thread.sleep(2000);
        //  提交弹窗
        webDriver.switchTo().alert().accept();

    }

7.5文件上传的操作


public class Main {
    public static void main(String[] args) throws InterruptedException {
        System.setProperty("webdriver.edge.driver", "C:\\Program Files (x86)\\Microsoft\\Edge\\Application\\msedgedriver.exe");
//        test01();
//        test02();
        //test03();
//        test04(); // 打开b站妍妍酱视频
//        test05();   // 练习键盘事件
//        test06(); // 练习鼠标事件
//        page01();// 选择框的勾选
//        page02();   // 多重框架或窗口重叠下的操作  实现点击到click按钮
//        page03();   // 下拉框选项的选择操作
//        page04();   //  弹窗操作
        page05();  //   上传文件操作

    }

    private static void page05() {
        WebDriver webDriver = new EdgeDriver();
        webDriver.get("file:\\D:\\软件\\idea\\自动化测试\\selenium脚本\\selenium01\\selenium01\\src\\main\\Page\\test05.html");
        webDriver.findElement(By.cssSelector("input")).sendKeys("D:\\临时垃圾\\实验报告\\软件测试\\直方图.png");

    }

7.6 页面退出 关闭

  1. quit() 方法

    • 调用 quit() 会关闭所有的浏览器窗口,并结束 WebDriver 会话。
    • 这个方法通常用于彻底结束测试,释放所有资源,包括关闭浏览器窗口和结束浏览器进程。
    • quit() 还会确保 WebDriver 的资源被释放,比如网络连接和文件句柄。
    • 一旦调用了 quit(),相关的 WebDriver 实例就不能再被使用了。
WebDriver driver = new ChromeDriver();
try {
    driver.get("http://www.example.com");
    // 进行一些操作
} finally {
    driver.quit(); // 关闭所有窗口,结束会话
}
  1. close() 方法

    • 调用 close() 会关闭当前的浏览器窗口,但不会结束 WebDriver 会话。
    • 如果你打开了多个标签页或窗口,close() 只会关闭当前活动的窗口或标签页。
    • 这个方法不会关闭其他打开的窗口或标签页,也不会结束 WebDriver 会话。
    • 你可以在调用 close() 后继续使用同一个 WebDriver 实例来打开新的窗口或标签页。
    WebDriver driver = new ChromeDriver();
    try {
        driver.get("http://www.example.com");
        // 打开新的窗口
        driver.switchTo().newWindow(WindowType.TAB);
        driver.get("http://www.example.com");
        driver.close(); // 关闭当前窗口,但不会结束会话
        driver.get("http://www.google.com"); // 继续使用同一个实例
    } finally {
        driver.quit(); // 最后结束会话
    }

总结

  • quit():彻底结束测试,关闭所有窗口,释放所有资源。
  • close():关闭当前窗口,但可以继续使用 WebDriver 实例进行其他操作。

在实际使用中,通常在测试结束时调用 quit() 来确保所有资源被释放,而在测试过程中需要关闭当前窗口时使用 close()

7.7切换窗口

每当有跳转打开一个新页面时,就应该用到这行代码,不然会报错:  无法定位到该元素

public class Main {
    public static void main(String[] args) throws InterruptedException {
        System.setProperty("webdriver.edge.driver", "C:\\Program Files (x86)\\Microsoft\\Edge\\Application\\msedgedriver.exe");
//        test01();
//        test02();
        //test03();
//        test04(); // 打开b站妍妍酱视频
//        test05();   // 练习键盘事件
//        test06(); // 练习鼠标事件
//        page01();// 选择框的勾选
//        page02();   // 多重框架或窗口重叠下的操作  实现点击到click按钮
//        page03();   // 下拉框选项的选择操作
//        page04();   //  弹窗操作
//        page05();  //   上传文件操作
        page06();   //  切换窗口操作

    }

    private static void page06() throws InterruptedException {
        WebDriver webDriver = new EdgeDriver();
        webDriver.get("https://www.baidu.com/");
        webDriver.findElement(By.cssSelector("#s-top-left > a:nth-child(1)")).click();
        Thread.sleep(2000);
        //  获取所有的窗口句柄
        Set<String> handles = webDriver.getWindowHandles();
        String target_handle = "";
        //  获取最新的窗口句柄
        for(String handle : handles){
            target_handle = handle;
        }
        //  切换到当前窗口
        webDriver.switchTo().window(target_handle);

        webDriver.findElement(By.cssSelector("#ww")).sendKeys("翻译");
        webDriver.findElement(By.cssSelector("s_btn_wr")).click();

    }

7.8截图

实现截图功能需要添加maven依赖

<!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.11.0</version>
</dependency>

文件地址的最后不要忘了给文件命名,不然会报错如下


public class Main {
    public static void main(String[] args) throws InterruptedException, IOException {
        System.setProperty("webdriver.edge.driver", "C:\\Program Files (x86)\\Microsoft\\Edge\\Application\\msedgedriver.exe");
//        test01();
//        test02();
        //test03();
//        test04(); // 打开b站妍妍酱视频
//        test05();   // 练习键盘事件
//        test06(); // 练习鼠标事件
//        page01();// 选择框的勾选
//        page02();   // 多重框架或窗口重叠下的操作  实现点击到click按钮
//        page03();   // 下拉框选项的选择操作
//        page04();   //  弹窗操作
//        page05();  //   上传文件操作
//        page06();   //  切换窗口操作
        page07();   //  截图 操作
    }

    private static void page07() throws IOException {
        WebDriver webDriver = new EdgeDriver();
        webDriver.get("https://www.baidu.com/");

        File file = ((TakesScreenshot) webDriver).getScreenshotAs(OutputType.FILE);
        FileUtils.copyFile(file,new File("D:\\临时垃圾\\作业临时照片\\测试截图\\截图.png"));
    }


原文地址:https://blog.csdn.net/weixin_60257917/article/details/140464379

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!