首页 > 其他分享 >playwright 使用日常知识点积累--不定期补充

playwright 使用日常知识点积累--不定期补充

时间:2023-03-31 11:47:08浏览次数:36  
标签:知识点 playwright 浏览器 -- await Playwright var playPage

简介:

Playwright是由微软公司2020年初发布的新一代自动化测试工具,相较于目前最常用的Selenium,它仅用一个API即可自动执行Chromium、Firefox、WebKit等主流浏览器自动化操作,并同时支持以无头模式、有头模式运行。
官网地址:Playwright | Playwright .NET

一:Playwright安装及介绍

Playwright安装及介绍 - 简书 (jianshu.com)

1.手动安装 python https://www.python.org/

  安装之后  按需升级为最新    python.exe -m pip install --upgrade pip

2.安装 playwright-python 依赖库   pip install playwright

3.安装Chromium、Firefox、WebKit等浏览器的驱动文件(内置浏览器)  python -m playwright install

4.发布之后 在发布文件夹下会自动生成 .playwright 文件夹 需要一起发布并安装驱动后才能执行
  在 .playwright\node\win32_x64\playwright.cmd install

 

 

二:微软官方接口

Page | Playwright .NET

 

三:常用操作积累

/// <summary>
/// 无头浏览器全局变量
/// </summary>
private static IPlaywright playWright = null;
private static Microsoft.Playwright.IBrowser playBrowser = null;
private static Microsoft.Playwright.IPage playPage = null;
//https://github.com/microsoft/playwright/issues/4046
if (playPage?.IsClosed ?? true)
{
    playWright = await Playwright.CreateAsync();//创建playwright对象 
                                                //创建一个浏览器对象 以谷歌为例,其它浏览器创建方式相同
    //Firefox  Chromium
    playBrowser = await playWright.Chromium.LaunchAsync(new BrowserTypeLaunchOptions()
    {
        Headless = false,
        Channel = "chrome",//chrome  firefox msedge
                           //Devtools = true,
        ChromiumSandbox = true,
        ExecutablePath = string.Empty, // 不指定浏览器可执行文件位置,会自动寻找 ms-playwright 下载的浏览器
        Args = new[] { "--enable-automation=true", "--disable-blink-features=AutomationControlled", "--start-maximized" }, // 防止selenium被检测
    });

    var content = await playBrowser.NewContextAsync(new BrowserNewContextOptions()
       {
           ViewportSize = ViewportSize.NoViewport,//这个对应上面的 --start-maximized 最大化生效
       }
    );
    playPage = await content.NewPageAsync();
}

//为页面指定一个链接
await playPage.GotoAsync("https://www.baidu.com/");
//页面存在当前元素 个数 用于判断是否出现了某个元素
var isHas = await playPage.Locator("#J-userName").CountAsync();
填充内容的几种方式 根据Id class xpath等
await playPage.FillAsync("#J-userName", "填充文本");
await playPage.FillAsync("input[id='J-password']", "填充文本");
await playPage.ClickAsync("a[id='J-login']");//点击某个标签
await page.WaitForSelectorAsync("xpath=//tr[datatran=\"G1939\"]");
//输入 当有下拉的输入不生效,可以再次输入一个 空格,然后删除空格即可
await playPage.TypeAsync("#fromStationText", reqTickets.Fs);
await playPage.TypeAsync("#fromStationText", " ");
await playPage.Keyboard.PressAsync("Backspace");
//获取某个标签的 相对定位,可以点下鼠标并移动,实现滑块操作
var nodeslid = await playPage.Locator("#" + slidId).BoundingBoxAsync();
var x = nodeslid.X + nodeslid.Width / 2;
var y = nodeslid.Y + nodeslid.Height / 2;

await playPage.Mouse.MoveAsync(x, y);//移动鼠标
await playPage.Mouse.DownAsync();//按下鼠标
await playPage.Mouse.MoveAsync(x + 340, y, new MouseMoveOptions() { Steps = new Random().Next(100, 200) });//steps 完成此操作的步数,数值越大,速度越慢
await playPage.Mouse.UpAsync();//放开鼠标
//获取浏览器打开的新页签,操作同当前页签一致 var paypage = playBrowser.Contexts[0].Pages[1]; 【***重点***】 //拦截获取网络请求回应 //当请求的url包含某个url的时候,可以获取完整的请求
 var payUrl = await paypage.RunAndWaitForRequestAsync(async () =>
 {
     await paypage.ClickAsync("img[title='提交']");
 }, request => request.Url.Contains("abc.baidu.com/updateord.htm"));
 
//获取回应
 var payResData = await paypage.RunAndWaitForResponseAsync(async () =>
 {
     await paypage.ClickAsync("img[title='支付宝']");
 }, request => request.Url.Contains("mrmoaprod.alipay.com/exterfaceAssign.htm"));
//针对数据已经填充好了的 下拉列表可以直接赋值
await playPage.SelectOptionAsync("#select-merch", "下拉的key值");

常见问题积累:

1、ClickAsync 没反应:

     需要考虑是不是有多个元素,部分元素是隐藏不可见的,结合Locator 可以判断是否有多个,针对可视的点击 加上 :visible  如  await playPage.ClickAsync("a[id=‘1A’]:visible");

 

声明:收集来源于网络,技术仅用于学习交流,作者对读者使用当前技术产生的后果不负责任。

标签:知识点,playwright,浏览器,--,await,Playwright,var,playPage
From: https://www.cnblogs.com/flish/p/17275791.html

相关文章

  • 曼孚科技获ISO45001职业健康安全管理体系认证,标准化管理进入新阶段
    近日,经第三方专业认证机构全面、严苛审核,曼孚科技正式通过ISO45001职业健康安全管理体系认证,认证范围包括人工智能行业数据处理服务等领域。ISO45001职业健康安全管理体系是上世纪80年代后期,于国际上兴起的一种现代安全生产管理模式,它与ISO9001和ISO14001等管理体系一并称为后工......
  • 千万级数据量表如何快速添加索引/字段
    添加字段语句ALTERTABLEid_tADDtitle(255)DEFAULT''COMMENT'标题'AFTERid;问题线上的一张表如果数据量很大千万级,执行加字段加索隐操作就会锁表,这个过程可能需要很长时间甚至导致服务崩溃,那么这样操作就很有风险了。解决一1.创建一个临时的新表,首先复制旧表的结......
  • 如何方便的给你的python函数进行参数类型检查
    python有时候很麻烦的一点,为了运算速度,不给你做类型检查。这个特性被各路大佬当成重载的秘宝,但是有时候对工程性的项目来说并不安全。这里介绍一个notice工具,会对函数形参标注类型和实参类型不一样时进行输出提醒(不报错,不影响运行)1fromtypingimportget_type_hints2from......
  • LR、FM对比
    %%timefromutils.utilsimportcreate_dataset,Trainerfromlayer.layerimportEmbedding,FeaturesEmbedding,EmbeddingsInteraction,MultiLayerPerceptronimporttorchimporttorch.nnasnnimporttorch.optimasoptimdevice=torch.device('cuda:0&#......
  • Python: utilities
     decimal_to_binarydefdecimal_to_binary(v:float,precison:int=6)->str:ifv==0:return'0b0'binary=''integral=int(v)#integralpartmantissa=v-integral#fractionalpart#conver......
  • Unity客户端开发工程师的进阶之路
    UWA技能成长系统是UWA根据学员的职业发展目标,提供技能学习的推荐路径,再将所需学习内容按难易等多维度,设计分成多个学习阶段,可以循序渐进地进行学习。每个阶段学员完成学习任务后不但可以获得技能的提升,还将获得UWA社区相应的积分奖励(积分可兑换礼品和优惠券哦)。 进入技能成长......
  • Linux操作--8
    日志日志文件常存放在/var/log/文件下系统常用日志文件配置日志管理文件日志轮替内存日志......
  • SQL-根据已有表结构创建表、修改表名
    stringsql_Rename_MainTable=string.Empty;//改表名(主表->历史表)的sqlstringsql_Create_MainTable=string.Empty;//通过历史表的表结构创建主表的sqlswitch(dbType){caseDbType.MySql:sql_Rename_MainTable="altertable'{0}'renameto'......
  • 过亿云资源运维管控难?华为云CloudMap带你喝着咖啡做运维
    摘要:华为云站点数字化平台CloudMap携手华为云图引擎GES打造云服务全栈拓扑,网络流量路径和云服务动态依赖等空间关系数据,支撑现网运行态风险识别和分钟级定位定界,构建业界领先的数字化能力。本文分享自华为云社区《构建站点数字孪生,支撑确定性运维:华为云九洲云图CloudMap》,作者:HWC......
  • 202031607130-杨国周 实验一 软件工程准备—初识软件工程
    实验一软件工程准备项目内容班级博客链接https://edu.cnblogs.com/campus/xbsf/2020CSSE本次作业要求链接https://edu.cnblogs.com/campus/xbsf/2020CSSE/homework/12938我的课程学习目标学习软件工程的基本概念、方法和工具,提高软件开发的质量和效率。本......