微软出品自动化神器Playwright(Playwright+Java)系列(四) 之 浏览器操作

写在前面

今天是国庆节的最后一天,明天又要上班了,真的是感觉好像才开始放假一样,还是因为失恋没缓过来吗?

我的国庆七天

第1天,当了近半天的司机,陪家人去各大超市去购物,下午在家躺·····

第2-5天,重感冒,鼻涕不止,浑身酸痛乏力,两卷卫生纸下去,鼻子已经废了,真的是躺平了······

第6天,打嗝不止,干咳、嗓子发炎肿了、鼻子烧了、嗓子基本说不出话了······

综上,真的这个假期过的好累,算是大病一场吗?

该做点什么

早上6点20就醒了,刷了一集《请君》,觉得状态还不错,还是写点东西吧,也算找找状态吧。

不管经历过什么,孰对孰错,生活还是要继续的,和自己和解,要学习的还有很多,充实过好每一天即可。

Playwright之浏览器操作

基础参数

这系列的文章还要继续下去的,那么接下来要进行浏览器部分的操作了。

1、创建浏览器对象

示例代码如下:

java 复制代码
//默认为无头浏览器方式启动
browser = playwright.chromium().launch();
//参数设定方式启动
browser = playwright.chromium().launch(new BrowserType.LaunchOptions().setHeadless(true).setSlowMo(5000));

2、创建浏览器上下文

java 复制代码
context = browser.newContext();

3、创建Page对象

一般来说,一个page对应一个浏览器选项卡,这点和selenium有点像,也可以说是比selenium分的更细致? 示例如下:

java 复制代码
page = context.newPage();

浏览操作

1、浏览器最大化

这里以chrome浏览器为例,示例代码如下:

java 复制代码
 Playwright playwright = Playwright.create();
        //看到某博主写的python版的加--start-maximized这个参数,本人尝试后发现无效(Mac系统)
        //Browser browser = playwright.chromium().launch(new BrowserType.LaunchOptions()
        //        .setArgs(Collections.singletonList("--start-maximized"))
        //        .setHeadless(false));
        Browser browser = playwright.chromium().launch(new BrowserType.LaunchOptions().setHeadless(false));
        browser.newContext(new Browser.NewContextOptions()
                .setIgnoreHTTPSErrors(true)
                .setJavaScriptEnabled(true)
                .setViewportSize(2880, 1800));
        Page page = browser.newPage();
        page.navigate("https://www.cnblogs.com/longronglang");
        System.out.println(page.title());
        browser.close();
        playwright.close();

2、多个浏览器启动

就是个浏览器的封装,没啥技术含量,示例代码如下:

java 复制代码
import com.microsoft.playwright.*;
import org.testng.annotations.Test;

/**
 * @author rongrong
 * @version 1.0
 * @description 浏览器窗口操作
 * @date 2022/10/7 2:21 PM
 */
public class TestBrowser {


    /**
     * 创建浏览器上下文
     *
     * @param browser
     * @return
     */
    public BrowserContext createContext(Browser browser) {
        BrowserContext context = browser.newContext(new Browser.NewContextOptions()
                .setIgnoreHTTPSErrors(true)
                .setJavaScriptEnabled(true)
                //此处可以理解为设定指定窗口启动
                .setViewportSize(1980, 1080));
        return context;
    }


    /**
     * 创建浏览器
     *
     * @param name
     * @param playwright
     * @return
     */
    public Browser createBrowser(String name, Playwright playwright) {
        try {
            switch (name) {
                case "firefox":
                    return playwright.firefox().launch(new BrowserType.LaunchOptions().setHeadless(false).setTimeout(120 * 1000));
                case "chromium":
                    return playwright.chromium().launch(new BrowserType.LaunchOptions().setHeadless(false).setTimeout(120 * 1000));
                case "webkit":
                    return playwright.webkit().launch();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }


    @Test
    public void testBrowser() {
        //火狐浏览器
        startBrowser("firefox");
        //谷歌浏览器
        startBrowser("chromium");
        //这个浏览器不好使
        //startBrowser("webkit");
    }

    /**
     * 根据浏览器类型,启动浏览器
     *
     * @param browserName
     */
    private void startBrowser(String browserName) {
        //创建Playwright
        Playwright playwright = Playwright.create();
        //创建Browser(使用谷歌浏览器)
        Browser browser = createBrowser(browserName, playwright);
        //创建浏览器上下文
        BrowserContext browserContext = createContext(browser);
        Page page = browserContext.newPage();
        page.navigate("https://www.cnblogs.com/longronglang");
        System.out.println("page.title :" + page.title());
        System.out.println(browserName + " 浏览器启动了!");
        browser.close();
        browserContext.close();
        playwright.close();
    }
}

效果如下:

3、前进/后退/刷新操作

示例代码如下:

java 复制代码
        Playwright playwright = Playwright.create();
        Browser browser = playwright.chromium().launch(new BrowserType.LaunchOptions().setHeadless(false));
        browser.newContext(new Browser.NewContextOptions()
                .setIgnoreHTTPSErrors(true)
                .setJavaScriptEnabled(true)
                .setViewportSize(2880, 1800));
        Page page = browser.newPage();
        page.navigate("https://www.cnblogs.com/longronglang");
        //输出:久曲健 - 博客园
        System.out.println("page title:"+page.title());
        //这里是运行时打断点使用,方便调试(适用于喜欢用录制回放生成脚本的同学)
        //page.pause();
        pause(3);
        //打开百度页面
        page.navigate("https://www.baidu.com/");
        //输出:百度一下,你就知道
        System.out.println("page title:"+page.title());
        //后退操作
        page.goBack();
        pause(3);
        //输出:久曲健 - 博客园
        System.out.println("page title:"+page.title());
        //前进操作
        page.goForward();
        pause(3);
        System.out.println("page title:"+page.title());
        //刷新操作
        page.reload();
        pause(3);
        //输出当前url
        System.out.println("page url:"+page.url());
        browser.close();
        playwright.close();

效果如下:

到此,关于浏览器的操作部分已分享完毕,有兴趣的同学可以自行尝试,更多请参考官方文档。

写在最后

这个博客从上午九点多写到现在,表示很惭愧,大部分时间还是在刷手机,懒散坏了,想收收心,怕是真的很难!

整个人还是不太好,因为打嗝不止,震的我脖子都疼,果然病痛确实很折磨人!

看到很好的一句话分享给大家,也送给每个恋爱过程中朋友:

分享如下:

连回音都没有的山谷,不值得纵身一跃。 ------知乎

相关推荐
Two_brushes.13 小时前
自动化测试准备工作:概念篇
测试
人生都在赌2 天前
智能测试工作流实战案例——4个AI Agent协作重塑软件测试流程
agent·ai编程·测试
kaliarch3 天前
迈向云基础设施自动化 - Terraformer 助力腾讯云资源管理转型
后端·云原生·自动化运维
kaliarch3 天前
Terraform 存量资源手动导入IaC管控方案
后端·自动化运维
kaliarch3 天前
使用 Terraform 基于 Excel 表格数据创建资源的解决方案
云计算·自动化运维
kaliarch3 天前
Terraform 导入存量云资源方案
后端·自动化运维
kaliarch3 天前
IaC 管控资源发生属性偏移修正方案
后端·架构·自动化运维
kaliarch3 天前
Terraform 合并多个项目(独立目录)解决方案
后端·自动化运维
数据智能老司机3 天前
DevOps 安全与自动化——理解 DevOps 文化与原则
架构·自动化运维·devops
数据智能老司机3 天前
DevOps 安全与自动化——开发环境搭建
架构·自动化运维·devops