在 Playwright 中执行 JavaScript

Playwright 是一个强大的自动化测试库,支持在浏览器上下文中执行 JavaScript 脚本。

常见使用方法

通过使用 page.evaluate()locator.evaluate() 方法,可以在页面中执行各种 JavaScript 操作。

使用 page.evaluate() 方法

page.evaluate() 方法允许在页面上下文中执行 JavaScript 代码,并返回执行结果。它的基本语法如下:

result = await page.evaluate(script, *args)

其中,script 是一个 JavaScript 字符串,表示要在页面上下文中执行的代码,args 是可选参数,可以传递给 JavaScript 代码的参数列表。

示例代码

以下是一个使用 page.evaluate() 方法的示例,展示了如何在页面中执行 JavaScript 代码:

python 复制代码
from playwright.sync_api import sync_playwright

class TestJs:

def setup(self):

playwright = sync_playwright().start()

self.browser = playwright.chromium.launch(headless=False)

self.context = self.browser.new_context()

self.page = self.context.new_page()

def teardown(self):

self.browser.close()

def test_case1(self):

self.page.goto("https://www.baidu.com/")

# 获取浏览器语言

lan = self.page.evaluate("window.navigator.language;")

assert lan == "zh-CN"

# 获取当前浏览器标题

title = self.page.evaluate("document.title;")

assert title == self.page.title()

self.page.evaluate('document.getElementById("kw").value = "test"') # 搜索框输入"test"

text = self.page.evaluate("document.getElementById('kw').value") # 读取输入的值

assert text == "test"

self.page.evaluate('document.getElementById("su").click()') # 点击【百度一下】

self.page.click("#page >> text=2")

使用 locator.evaluate() 方法

locator.evaluate() 方法允许在定位到元素后执行 JavaScript 操作。以下是一个示例,展示了如何使用 locator.evaluate() 方法:

python 复制代码
def test\_case2(self):

self.page.goto("<https://www.baidu.com/>")

# 搜索框输入"test"

input\_handle = self.page.query\_selector("id=kw")

input\_handle.evaluate('node => node.value = "test"')

text = input\_handle.evaluate('node => node.value') # 读取输入的值

assert text == "test"

# 点击【百度一下】

submit\_handle = self.page.query\_selector("id=su")

submit\_handle.evaluate('node => node.click()')

time.sleep(10)

通过这些方法,您可以在 Playwright 中轻松地执行各种 JavaScript 操作,如操作 DOM 元素、获取页面数据、执行复杂的计算等,从而实现自动化测试和页面操作

相关推荐
漂流瓶jz3 小时前
Webpack中各种devtool配置的含义与SourceMap生成逻辑
前端·javascript·webpack
前端架构师-老李4 小时前
React 中 useCallback 的基本使用和原理解析
前端·react.js·前端框架
木易 士心4 小时前
CSS 中 `data-status` 的使用详解
前端·css
明月与玄武4 小时前
前端缓存战争:回车与刷新按钮的终极对决!
前端·缓存·回车 vs 点击刷新
牧马少女4 小时前
css 画一个圆角渐变色边框
前端·css
zy happy5 小时前
RuoyiApp 在vuex,state存储nickname vue2
前端·javascript·小程序·uni-app·vue·ruoyi
小雨青年5 小时前
Cursor 项目实战:AI播客策划助手(二)—— 多轮交互打磨播客文案的技术实现与实践
前端·人工智能·状态模式·交互
小光学长5 小时前
基于Vue的儿童手工创意店管理系统as8celp7(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
前端·数据库·vue.js
meichaoWen5 小时前
【Vue】Vue框架的基础知识强化
前端·javascript·vue.js
jingling5555 小时前
Flutter | 基础环境配置和创建flutter项目
前端·flutter