• 微软出品自动化神器【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();

    效果如下:

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

    写在最后

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

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

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

    分享如下:

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


    __EOF__

  • 本文作者: 久曲健的测试窝
  • 本文链接: https://www.cnblogs.com/longronglang/p/16760234.html
  • 关于博主: 评论和私信会在第一时间回复。或者直接私信我。
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
  • 声援博主: 如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。
  • 相关阅读:
    mybatis中的og表达式都支持哪些 支持or and 传值是数字无所谓加不加‘ ‘ 传值为字符串必须加 ‘ ‘
    Red Hat 6安装Oracle Linux内核头文件
    基于python flask的疾病数据采集与可视化大屏,实现关联规则算法的治疗方法分析
    龙讯旷腾并行科技签署战略合作协议,将PWmat加入以北京超级云计算中心算力资源为“基座”的超算云平台
    DJ12-2-4 串操作指令
    正则表达式相关概念
    西安交大转子数据集故障诊断(Python代码,MSCNN结合LSTM结合注意力机制模型)
    python -【十】单例模式与工厂模式
    appium操作微信小程序
    GD32学习笔记(3)NAND Flash管理
  • 原文地址:https://www.cnblogs.com/longronglang/p/16760234.html