• 0
  • 0
分享
  • 微软开源的浏览器自动化工具-Playwright——软件测试圈
  • 恬恬圈 2021-03-25 14:10:44 字数 3024 阅读 2719 收藏 0

软开源了一个Python项目:Playwright,从此又多了一个浏览器自动化工具。之前一直用selenium或splinter。

Playwright 可通过单个API自动执行Chromium,Firefox和WebKit浏览器,支持无头浏览器(headless),Linux、macOS、Windows下均可以使用,Playwright提供的自动化技术是绿色的,功能强大,稳定且速度快。

Playwright最吸引我的地方在于它可以自己记录你对浏览器的操作,并将这些操作生成可以执行的代码,这简直就是神器,大大提升了浏览器自动化的效率。生成代码只需要执行

python -m playwright codegen

此外,它不像 selenium 需要再单独安装浏览器驱动,它在 pip install 时就会安装浏览器的驱动文件。

pip install playwrightpython -m playwright install

这将会安装 Playwright 和 Chromium,Firefox 和 WebKit 浏览器的二进制文件,非常方便,需要 Python 3.7 及以上版本。

还有几个亮眼的功能:

1、Playwright同时提供同步(阻止)API和异步API。

它们在功能方面是相同的,只是在使用API的方式上有所不同。

同步:

from playwright import sync_playwright
with sync_playwright() as p:    
for browser_type in [p.chromium, p.firefox, p.webkit]:        
browser = browser_type.launch()        
page = browser.newPage()        
page.goto('http://whatsmyuseragent.org/')        
page.screenshot(path=f'example-{browser_type.name}.png')        
browser.close()

异步:

import asynciofrom playwright import async_playwright
async def main():    async with async_playwright() as p:        
for browser_type in [p.chromium, p.firefox, p.webkit]:            
browser = await browser_type.launch()            
page = await browser.newPage()            
await page.goto('http://whatsmyuseragent.org/')            
await page.screenshot(path=f'example-{browser_type.name}.png')            
await browser.close()
asyncio.get_event_loop().run_until_complete(main())

2、集成 pytest 测试:

def test_playwright_is_visible_on_google(page):    
page.goto("https://www.google.com")    
page.type("input[name=q]", "Playwright GitHub")    
page.click("input[type=submit]")    
page.waitForSelector("text=microsoft/Playwright")

3、交互模式运行:

>>> from playwright import sync_playwright
>>> playwright = sync_playwright().start()
# Use playwright.chromium, playwright.firefox or playwright.webkit
# Pass headless=False to see the browser UI
>>> browser = playwright.chromium.launch()
>>> page = browser.newPage()
>>> page.goto(" 
>>> page.screenshot(path="example.png")>>> browser.close()>>> playwright.stop(

4、执行 JS 代码:

from playwright import sync_playwright
with sync_playwright() as p:    
browser = p.firefox.launch()    
page = browser.newPage()    
page.goto('https://www.example.com/')    
dimensions = page.evaluate('''() => 
{      
return {        
width: document.documentElement.clientWidth,        
height: document.documentElement.clientHeight,        
deviceScaleFactor: window.devicePixelRatio      
}    
}''')    
print(dimensions)    
browser.close()

5、中断网络请求:

from playwright import sync_playwright
with sync_playwright() as p:
    browser = p.chromium.launch()
    page = browser.newPage()
    def log_and_continue_request(route, request):
      print(request.url)
      route.continue_()
    # Log and continue all network requests
    page.route('**', lambda route, request: log_and_continue_request(route, request))
    page.goto('http://todomvc.com')
    browser.close()

官方文档暂时还是 Node.js 版本,不过正在转换成 Python 版本,API的调用方式相当一致,现在看 Node.js 版本的文档来编码也是无障碍的。


作者:somenzz

原文链接:https://blog.csdn.net/somenzz/article/details/109396506


  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          • 选择题一、数量关系1、甲乙2人比赛爬楼梯,已知每层楼梯相同,速度不变,当甲到3层时,乙到2层,照这样计算,当甲到9层时,乙到( D )层A.5 B.6C.7 D.82、有一份选择题试卷共6个小题,其得分标准是:一道小题答对得8分,答错得0分,不答得2分,某位同学得了20分,则他( D )A.至多答对一道题 B.至少有三个小题没答 C.至少答对三个小题 D.答错两小题3、有只蜗牛要从一口井底爬出来。井深20尺。蜗牛每天白天向上爬3尺,晚上向下滑2尺。请问该蜗牛几天才能爬出井口? (A)A.20B.19C.18D.154、下列哪一个计算结...
            0 0 1297
            分享
          • 测试用例示例笔试题:你用到的测试方法/测试策略有哪些?等价类划分边界值因果图场景法正交表确定边界值的方法()确定边界情况(输入或输出等价类的边界)选取正好等于、刚刚大于或刚刚小于边界值作为测试数据概念:因果图法比较适合输入条件比较多的情况,测试所有的输入条件的排列组合。所谓的原因就是输入,所谓的结果就是输出。因果图基本图形符号恒等:若原因出现,则结果出现;若原因不出现,则结果不出现。非(~):若原因出现,则结果不出现;若原因不出现,则结果出现。或(∨):若几个原因中有一个出现,则结果出现;若几个原因都不出现,则结果不出现。与(∧):若几个原因都出现,结果才出现;若其中有一个原因不出现,则结果不...
            16 15 2635
            分享
          •   作为一个已经有多年工程师面试经验,并在国内的大企业,小企业,国外的大企业,小企业混迹过的面试官(注意,我是技术人员,不是HR),我面过很多形形色色的求职者,也有自己的思考。这篇文章希望能帮助到正在面试中的人们。  每年的校园招聘季,阅读和筛选简历都是我重要的工作之一。在一上午时间内怀着生怕错误优秀人才的心态伏案阅读了接近40份简历的我来说,在简历中看到让自己“情何以堪”的内容吐个槽,似乎也合情合理。  不过,简历中是否应该包含“精通”并非是我吐槽的重点,目前完全由于应届毕业生在简历中写了过多精通而被直接挂掉的事情在我身上还未发生过,过多的“精通”表述最多只是我看不惯的一个点而已。  看到回...
            0 0 1361
            分享
          • 相信很多小伙伴想要自学性能测试,但网上的资料查阅出来的都比较干燥,对实际的性能测试经验并没有什么提升,本文从测试前的准备带你了解如何成为一名性能测试工程师。在开始性能测试前,我们需要跟项目组确认的几点内容:性能测试环境与生产环境服务器资源差异,并做差异分析,如测试环境的服务器资源与生产环境的服务器资源差距较大,需反馈给项目组,不然测出来的结果没有太大的参考意义;开始测试前,确认日志级别,日志级别需要与生产保持一致。如生产的日志是Info级别,则在测试环境的日志也应该是Info级别;确认数据库铺底数据(采用的方式为:让运维取生产上的每日成交量的数据库数据量),如数据库都是空表在测试查询交易的时候...
            0 0 1529
            分享
          •   作为产品经理,你会接到来自用户、市场、运营、老板等各个方面的需求,虽然产品在不断的更新迭代,但是需求还是会源源不断的增加,你会感觉怎么需求越做越多,好像没有减少。如果你有这种感觉,这时候就需要用需求池这个工具,来管理这些源源不断的需求了。  所以,我们在工作中要建立自己的“需求池”,让需求宽进严出,以保证开发的需求都是有助于产品发展的。而如何有效利用需求池进行需求管理是产品经理需要认真思考的地方。  本文主要讲以下几点:  1、什么是需求池  需求池是产品经理个人或产品团队为确保产品需求被及时/完整/有序地接收/描述/排序/跟进的需求管理机制,需求池的构成,通常包含需求池 和需求模板。  ...
            0 0 1355
            分享
      • 51testing软件测试圈微信