首页 > 其他分享 >软件测试|web自动化测试神器playwright教程(二十三)

软件测试|web自动化测试神器playwright教程(二十三)

时间:2023-06-18 18:37:34浏览次数:39  
标签:web playwright evaluate sync js context page 软件测试

前言

我们在进行web自动化时,经常遇到一些不好操作的元素,普通的元素定位和操作容易报错,如果我们使用的selenium的话,就可以使用selenium调用js脚本进行操作。在playwright 中也有类似的方法,使用page.evaluate()执行JavaScript脚本。 page.evaluate()和page.evaluate_handle()之间的唯一区别是page.evaluate_handle()返回JSHandle。

  • page.evaluate() 返回调用执行的结果
  • page.evaluate_handle()返回JSHandle

page.evaluate()

返回evaluate() 返回执行JavaScript脚本的结果,使用示例如下:

from playwright.sync_api import sync_playwright

def run_js_script():
    with sync_playwright() as playwright:
        browser = playwright.chromium.launch(headless=False)
        context = browser.new_context()
        page = context.new_page()
        page.goto('https://www.baidu.com')

        print(page.evaluate("1 + 2"))

        # 关闭浏览器
        context.close()
        browser.close()

run_js_script()

也可以执行一个函数,如下:

from playwright.sync_api import sync_playwright

def run_js_script():
    with sync_playwright() as playwright:
        browser = playwright.chromium.launch(headless=False)
        context = browser.new_context()
        page = context.new_page()
        page.goto('https://www.baidu.com')

        print(page.evaluate("() => '拜仁慕尼黑'"))

        # 关闭浏览器
        context.close()
        browser.close()

run_js_script()

注:如果传递给page.evaluate()的函数返回一个不可序列化的值,则page.evaluate()解析为undefined

示例

  1. 打印网页标题

执行document.title 获取页面的title,代码如下:

from playwright.sync_api import sync_playwright

def run_js_script():
    with sync_playwright() as playwright:
        browser = playwright.chromium.launch(headless=False)
        context = browser.new_context()
        page = context.new_page()
        page.goto("https://www.baidu.com/")
        title = page.evaluate('document.title')
        print(title)
        page.pause()
        # 关闭浏览器
        context.close()
        browser.close()

run_js_script()
  1. 操作元素示例
from playwright.sync_api import sync_playwright

def run_js_script():
    with sync_playwright() as playwright:
        browser = playwright.chromium.launch(headless=False)
        context = browser.new_context()
        page = context.new_page()
        page.goto("https://www.baidu.com/")
        js = """
            document.getElementById('kw').value='playwright';
            document.getElementById('su').click();
            """
        page.evaluate(js)
        page.pause()
        # 关闭浏览器
        context.close()
        browser.close()

run_js_script()

页面如下:

软件测试|web自动化测试神器playwright教程(二十三)_Python

page.evaluate_handle()

page.evaluate_handle()的返回值是JSHandle。

from playwright.sync_api import sync_playwright

def run_js_script():
    with sync_playwright() as playwright:
        browser = playwright.chromium.launch(headless=False)
        context = browser.new_context()
        page = context.new_page()
        page.goto("https://www.baidu.com/")
        a_handle = page.evaluate_handle("document.body")
        result_handle = page.evaluate_handle("body => body.innerHTML", a_handle)
        print(result_handle.json_value())
        result_handle.dispose()
        page.pause()
        # 关闭浏览器
        context.close()
        browser.close()

run_js_script()

总结

本文主要介绍了playwright执行js脚本的操作,与selenium一样,playwright同样可以执行js脚本来完成一些不便操作的元素。

标签:web,playwright,evaluate,sync,js,context,page,软件测试
From: https://blog.51cto.com/u_15649298/6509115

相关文章

  • 软件测试|web自动化测试神器playwright教程(二十五)
    前言鼠标为我们使用电脑提供了很多方便,我们看到的东西就可以将鼠标移动过去进行点击就可以打开或者访问内容,当页面内容过长时,我们也可以使用鼠标滚轮来实现对整个页面内容的查看,其实playwright也有鼠标操作的方法,本文我们就来介绍playwright的鼠标操作。鼠标操作Mouse鼠标操作是基......
  • 初见PlayWright
    PlayWright特色跨浏览器:PlayWright支持所有现代的浏览器渲染引擎,包括Chromium、WebKit、Firefox,这意味着它可以驱动像Chrome、Edge、Firefox、Safari等主流浏览器跨平台:基于浏览器的特性,可以在Windows、Linux和Mac上,以headless或者headed模式运行,并且支持在安卓或者安卓模拟器上原......
  • [Web] Cache Directives
     no-cache:validatecacheasthelatestonebeforeusingit.Thismeansthatacacheshouldnotserveastoredcopyoftheresponsewithoutvalidatingitsfreshnesswiththeserver.Theresponsecanbestoredinacache,butitmustcheckwiththeserver......
  • [Web] PerformanceNavigationTiming
     https://developer.mozilla.org/en-US/docs/Web/API/PerformanceNavigationTiming DNSdomainLookupStartdomainLookupEndTCP/TLSconnectStartsecureConnectionStartconnectEndHTTPRequestrequestStartHTTPResponseresponseStartresponseEndP......
  • SpringBoot:SpringWeb项目+Vue项目dist包整合成jar包
    接到需求做一个小功能项目,其中还要配备前端页面,并且将前端打包进后端jar包内,由jar包运行。项目结构将Vue打包之后的dist文件放到resouces资源路径下修改pom文件将下面的build配置替换掉pom中的build<build><finalName>自定义项目jar名称(可以用${project.artifatId})</finalNam......
  • Hive扩展之web界面:hwi接口
    HWI是HiveWebInterface的简称,是hivecli的一个web替换方案,以开发的网页形式查看数据切换用户启动集群[root@master~]#su-hadoopLastlogin:TueMay213:18:34CST2023onpts/0[hadoop@master~]$start-all.shThisscriptisDeprecated.Insteadusestart-dfs.......
  • java web模板学习+1
    今天找到一个模板很厉害,代码开源的,拔下来就能跑。下面是他的博客地址和他的源代码地址。博客地址:开源一套简单通用的后台管理系统-huanzi-qch-博客园(cnblogs.com)开源地址:https://gitee.com/huanzi-qch/base-admin......
  • IT软件测试中各种环境【杭州多测师_王sir】
    软件开发环境(Software Development Environment,SDE)是指在基本硬件和宿主软件的基础上,为支持系统软件和应用软件的工程化开发和维护而使用的一组软件,简称SDE。它由软件工具和环境集成机制构成,前者用以支持软件开发的相关过程、活动和任务,后者为工具集成和软件的开发、维护及管......
  • UniGui web客户端与本地exe通讯
     原文地址......
  • java web模板学习
    经过建民老师几次测验我发现我是真写不完那个web系统项目,然后如果真的打分的话,不会很高。所以接下来时间我要学习一些javaweb模板。这个模板吧主要是基于springboot的系统模板。我学习一下,等下次测验就可以快点。......