最强自动化测试框架Playwright(30)-JS句柄

在 Playwright 中,JSHandle 是一个表示浏览器中 JavaScript 对象的类。它提供了与网页中的 JavaScript 对象进行交互和操作的方法。

可以通过调用 Playwright中的 evaluateHandle 或 evaluate 方法来获取 JSHandle

from playwright.sync_api import sync_playwrightwith sync_playwright() as playwright:# 启动浏览器browser = playwright.chromium.launch()# 创建一个新的上下文context = browser.new_context()# 在上下文中创建一个新的页面page = context.new_page()# 跳转到页面page.goto('https://www.baidu.com')# 获取网页标题的 JSHandletitle_handle = page.evaluate_handle("document.title")# 获取标题的文本值title_value = title_handle.json_value()print(f"页面标题为:{title_value}")# 关闭浏览器browser.close()

 使用 evaluate_handle 方法在页面上下文中执行 JavaScript 代码,并将结果返回一个 JSHandle 对象。最后,通过 json_value 方法获取 JSHandle 对象的文本值

方法

dispose

使用 JSHandle.dispose() 方法来释放 JSHandle 对象占用的资源。这个方法可以在不再需要 JSHandle 对象时手动调用,以确保资源能够被及时释放。

js_handle.dispose()

 evaluate

JSHandle.evaluate() 方法允许执行一个函数或 JavaScript 表达式,并将结果返回到 Node.js 环境中。这使得可以在 Node.js 端对浏览器中的 JavaScript 对象进行操作和获取信息。

 # 使用 evaluate 方法执行 JavaScript 代码并获取返回值
    value = title_handle.evaluate("element => element.toLowerCase()")
    print(f"页面标题的小写形式为:{value}")

 evaluate_handle

返回JSHandle

js_handle.evaluate_handle(expression)
js_handle.evaluate_handle(expression, **kwargs)

在 Playwright 中,`JSHandle.evaluate_handle()` 方法允许执行一个函数或 JavaScript 表达式,并以 `JSHandle` 对象的形式返回结果。这意味着可以对浏览器中的 JavaScript 对象进行进一步的操作和检索。

以下是一个示例,演示如何使用 `evaluate_handle()` 方法执行 JavaScript 代码并获取返回的 `JSHandle` 对象:

```python
from playwright.sync_api import sync_playwrightwith sync_playwright() as playwright:# 启动浏览器browser = playwright.chromium.launch()# 创建一个新的上下文context = browser.new_context()# 在上下文中创建一个新的页面page = context.new_page()# 跳转到页面page.goto('https://example.com')# 使用 evaluate_handle 方法执行 JavaScript 代码并获取返回的 JSHandle 对象element_handle = page.evaluate_handle("document.querySelector('h1')")# 使用返回的 JSHandle 进一步操作元素text_handle = element_handle.evaluate_handle("element => element.textContent")value = text_handle.json_value()print(f"页面标题为:{value}")# 释放 JSHandle 对象text_handle.dispose()element_handle.dispose()# 关闭浏览器browser.close()
```

在上述示例中,我们首先使用 `evaluate_handle()` 方法执行 JavaScript 代码,并将返回的 `JSHandle` 对象赋给 `element_handle` 变量。然后,我们可以继续使用该 `element_handle` 对象来执行更多的 JavaScript 操作,例如获取元素的文本内容。在本例中,我们使用 `evaluate_handle()` 方法和箭头函数来获取 `h1` 元素的文本内容,并将返回的 `JSHandle` 对象赋给 `text_handle`。最后,我们通过 `json_value()` 方法获取文本内容,并将其输出。

同样要注意,在不需要使用 `JSHandle` 对象时,应该调用 `dispose()` 方法手动释放资源。

get_properties

在 Playwright 中,可以使用 `JSHandle.get_properties()` 方法获取 JavaScript 对象的属性列表。这个方法返回一个字典,其中键是属性名称,值是表示该属性的 `JSHandle` 对象。

以下是一个示例,演示如何使用 `get_properties()` 方法获取并遍历 JavaScript 对象的属性:

```python
from playwright.sync_api import sync_playwrightwith sync_playwright() as playwright:# 启动浏览器browser = playwright.chromium.launch()# 创建一个新的上下文context = browser.new_context()# 在上下文中创建一个新的页面page = context.new_page()# 跳转到页面page.goto('https://example.com')# 使用 evaluate_handle 方法获取 window 对象的 JSHandlewindow_handle = page.evaluate_handle("window")# 获取 window 对象的属性列表properties = window_handle.get_properties()# 遍历属性列表,打印属性名和属性值for name, value_handle in properties.items():value = value_handle.json_value()print(f"{name}: {value}")# 释放 JSHandle 对象window_handle.dispose()# 关闭浏览器browser.close()
```

在上述示例中,我们使用 `evaluate_handle()` 方法获取了 `window` 对象的 `JSHandle`。然后,我们使用 `get_properties()` 方法获取了 `window` 对象的属性列表,存储在 `properties` 字典中。最后,我们遍历该字典,并使用 `json_value()` 方法获取属性值,并将其打印输出。

请注意,`get_properties()` 方法只返回直接在 JavaScript 对象上定义的属性,不包含继承的属性。而且,只有可枚举属性才会被返回。

同样要注意,在不需要使用 `JSHandle` 对象时,应该调用 `dispose()` 方法手动释放资源。

get_property

返回单个属性值

js_handle.get_property(property_name)

 json_value

js_handle.json_value()

属性

as_element 

js_handle.as_element()

作用

在 UI 自动化中,`JSHandle` 在 Playwright 中起着重要的作用。它代表了浏览器中执行的 JavaScript 对象,并提供了访问和操作这些对象的方法。

以下是 `JSHandle` 在 UI 自动化中的几个常见用途:

1. **执行和评估 JavaScript 代码**:通过 `JSHandle.evaluate()` 或 `JSHandle.evaluate_handle()` 方法,可以在浏览器环境中执行 JavaScript 代码,并获得执行结果。

2. **操作和检索 DOM 元素**:使用 `JSHandle`,可以获取页面中的元素并对其进行操作,例如修改元素属性、调用元素方法、获取元素的文本内容等。

3. **处理页面中的 JavaScript 对象**:通过 `JSHandle`,可以直接访问和操作页面中的 JavaScript 对象,例如全局对象、变量、函数等。

4. **获取页面中的属性值和属性列表**:通过 `JSHandle.get_property()` 或 `JSHandle.get_properties()` 方法,可以获取 JavaScript 对象的属性值或属性列表。

5. **释放资源**:在长时间运行的自动化脚本中,为了避免内存泄漏和资源浪费,应该及时调用 `JSHandle.dispose()` 方法释放 `JSHandle` 对象占用的资源。

总的来说,`JSHandle` 提供了与浏览器中的 JavaScript 对象进行交互的能力,为 UI 自动化提供了更大的灵活性和控制能力。可以使用 `JSHandle` 来执行自定义的 JavaScript 逻辑,获取和操作页面元素,以及与页面的 JavaScript 环境进行交互。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/43096.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微服务中间件-分布式缓存Redis

分布式缓存 a.Redis持久化1) RDB持久化1.a) RDB持久化-原理 2) AOF持久化3) 两者对比 b.Redis主从1) 搭建主从架构2) 数据同步原理(全量同步)3) 数据同步原理(增量同步) c.Redis哨兵1) 哨兵的作用2) 搭建Redis哨兵集群3) RedisTem…

金融语言模型:FinGPT

项目简介 FinGPT是一个开源的金融语言模型(LLMs),由FinNLP项目提供。这个项目让对金融领域的自然语言处理(NLP)感兴趣的人们有了一个可以自由尝试的平台,并提供了一个与专有模型相比更容易获取的金融数据。…

Java根据List集合中的一个字段对集合进行去重

利用HashSet 创建了一个HashSet用于存储唯一的字段值&#xff0c;并创建了一个新的列表uniqueList用于存储去重后的对象。遍历原始列表时&#xff0c;如果字段值未在HashSet中出现过&#xff0c;则将其添加到HashSet和uniqueList中。 List<Person> originalList new Ar…

VS2015项目中,MFC内存中调用DLL函数(VC6生成的示例DLL)

本例主要讲一下&#xff0c;用VC6如何生成DLL&#xff0c;用工具WinHex取得DLL全部内容&#xff0c;VC2015项目加载内存中的DLL函数&#xff0c;并调用函数的示例。 本例中的示例代码下载&#xff0c;点击可以下载 一、VC6.0生成示例DLL项目 1.新建项目&#xff0c;…

mysql中的is null和空字符串

相比于oracle&#xff0c;mysql中的is null 和空坑就没那么多&#xff0c;直接写就行。 不为空 and (username is not null and username !)注&#xff1a; 不为空中间用的是and。 为空 and (username is null or username !)注&#xff1a; 为空中间用的是or。

java应用运行在docker,并且其他组件也在docker

docker启动redis容器 # create redis docker run -d --name redis-container -p 6379:6379 redis:latest创建java 应用 dockerfile FROM openjdk:17##Pre-create related directories RUN mkdir -p /data/etax/ms-app WORKDIR /data/etax/ms-appEXPOSE 10133 COPY ./target…

SQL Server Express 自动备份方案

文章目录 SQL Server Express 自动备份方案前言方案原理SQL Server Express 自动备份1.创建存储过程2.设定计划任务3.结果检查sqlcmd 参数说明SQL Server Express 自动备份方案 前言 对于许多小型企业和个人开发者来说,SQL Server Express是一个经济实惠且强大的数据库解决方…

Spring Framework中的Bean生命周期

目录 一.Bean生命周期的简介 1.基本概念 2.Spring生命周期的几大阶段 3.注意点及小结 4.生活案例 5.Spring容器管理JavaBean的初始化过程 二. Bean的单例选择与多例选择 1.单例选择与多例选择的优缺点 1.1单例模式的优点&#xff1a; 1.2单例模式的缺点&#xff1a; 1…

JDK 8 升级 JDK 17 全流程教学指南

JDK 8 升级 JDK 17 首先已有项目升级是会经历一个较长的调试和自测过程来保证允许和兼容没有问题。先说几个重要的点 遇到问题别放弃仔细阅读报错&#xff0c;精确到每个单词每一行&#xff0c;不是自己项目的代码也要点进去看看源码到底是为啥报错明确你项目引入的包&#x…

第三届“赣政杯”网络安全大赛 | 赛宁筑牢安全应急防线

​​为持续强化江西省党政机关网络安全风险防范意识&#xff0c;提高信息化岗位从业人员基础技能&#xff0c;提升应对网络安全风险处置能力。由江西省委网信办、江西省发展改革委主办&#xff0c;江西省大数据中心、国家计算机网络与信息安全管理中心江西分中心承办&#xff0…

Qt扫盲-QTableView理论总结

QTableView理论总结 一、概述二、导航三、视觉外观四、坐标系统五、示例代码1. 性别代理2. 学生信息模型3. 对应视图 一、概述 QTableView实现了一个tableview 来显示model 中的元素。这个类用于提供之前由QTable类提供的标准表&#xff0c;但这个是使用Qt的model/view架构提供…

MySQL 存储过程

create procedure 存储过程名 &#xff08;in | out | INPUT 参数名 参数类型&#xff0c;。。。&#xff09; 【characteristics 。。。】begin存储过程体end存储过程的参数类型 IN 、OUT、INPUT 都可以在一个存储过程带多个 没有参数&#xff08;无参数无返回&#xff09;仅…

ProGuard + SpringBoot3 + JDK17

1、pom依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.…

android平台的语音聊天助手源码

目录 1 android平台的语音聊天助手源码 1.1 Setting 1.1.1 onChildClick 1.1.2 if (groupPosition == 0) {// 语音识别设置 android平台的语音聊天助手源码 Setting onChildClick

神经网络基础-神经网络补充概念-11-向量化逻辑回归

概念 通过使用 NumPy 数组来进行矩阵运算&#xff0c;将循环操作向量化。 向量化的好处在于它可以同时处理多个样本&#xff0c;从而加速计算过程。在实际应用中&#xff0c;尤其是处理大规模数据集时&#xff0c;向量化可以显著提高代码的效率。 代码实现-以逻辑回归为例 i…

边缘网络的作用及管理工具

自从引入软件即服务 &#xff08;SaaS&#xff09; 以来&#xff0c;它一直引领着全球按需软件部署创新的竞赛&#xff0c;它提供的灵活性以及其云计算架构带来的易于集成使其成为交付业务应用程序的标准。 在 SaaS 模型中&#xff0c;最佳用户体验的三重奏涉及无缝设置、低延…

JMeter 特殊组件-逻辑控制器与BeanShell PreProcessor 使用示例

文章目录 前言JMeter 特殊组件-逻辑控制器与BeanShell PreProcessor 使用示例1. 逻辑控制器使用1.1. While Controller 使用示例1.2. 如果&#xff08;If&#xff09;控制器 使用示例 2. BeanShell PreProcessor 使用示例 前言 如果您觉得有用的话&#xff0c;记得给博主点个赞…

Java课题笔记~ SpringBoot简介

1. 入门案例 问题导入 SpringMVC的HelloWord程序大家还记得吗&#xff1f; SpringBoot是由Pivotal团队提供的全新框架&#xff0c;其设计目的是用来简化Spring应用的初始搭建以及开发过程 原生开发SpringMVC程序过程 1.1 入门案例开发步骤 ①&#xff1a;创建新模块&#…

设计模式-过滤器模式(使用案例)

过滤器模式&#xff08;Filter Pattern&#xff09;或标准模式&#xff08;Criteria Pattern&#xff09;是一种设计模式&#xff0c;这种模式允许开发人员使用不同的标准来过滤一组对象&#xff0c;通过逻辑运算以解耦的方式把它们连接起来。这种类型的设计模式属于结构型模式…

服务器安装centos7踩坑

1、制作启动工具 下载iso https://developer.aliyun.com/mirror/?spma2c6h.25603864.0.0.20387abbo2RFbn http://mirrors.aliyun.com/centos/7.9.2009/isos/x86_64/?spma2c6h.25603864.0.0.1995f5ad4AhJaW下载 UltraISO https://cn.ultraiso.net/插入u盘启动 到了如图所示页面…