《刚刚问世》系列初窥篇-Java+Playwright自动化测试-12- iframe操作-上篇(详细教程)

news/2025/2/11 13:27:35/文章来源:https://www.cnblogs.com/du-hong/p/18349296

1.简介

原估计宏哥这里就不对iframe这个知识点做介绍和讲解了,因为前边的窗口切换就为这种网页处理提供了思路,另一个原因就是虽然iframe很强大,但是现在很少有网站用它了。但是还是有小伙伴或者童鞋们私下问这个问题,那么宏哥就单独写一篇关于iframe网页处理的文章。iframe 是web自动化里面一个比较头疼的测试场景,在Selenium中处理 iframe 需要切换来切换去非常麻烦。但是在playwright中,让其变得非常简单,我们在使用中无需切换iframe,直接定位元素即可。

2.iframe是什么

iframe就是我们常用的iframe标签:<iframe>。iframe标签是框架的一种形式,也比较常用到,iframe一般用来包含别的页面,例如我们可以在我们自己的网站页面加载别人网站或者本站其他页面的内容。iframe标签的最大作用就是让页面变得美观。iframe标签的用法有很多,主要区别在于对iframe标签定义的形式不同,例如定义iframe的长宽高。简单的一句话概括就是:iframe 就是HTML 中,用于网页嵌套网页的。 一个网页可以嵌套到另一个网页中,可以嵌套很多层。和俄罗斯套娃差不多吧。

3.iframe语法

page.frame_locator()

locator = page.frame_locator("frame").get_by_text("登录");

说明:使用frame_locator() 定位到iframe上,再在上面使用locator方法定位元素。

可以使用page.frame_locator()或locator.frame_locator()方法创建 FrameLocator 捕获足该 iframe 中检索和定位元素。

使用示例一:

Locator locator = page.frameLocator("#my-frame").getByText("Submit");
locator.click();

使用frame_locator() 定位到iframe上,然后继续在上面使用locator方法定位元素

iframe 定位器是严格的。这意味着如果有多个元素与给定的选择器匹配,则对 iframe 定位器的所有操作都会抛出异常。

// Throws if there are several frames in DOM:
page.frame_locator(".result-frame").getByRole(AriaRole.BUTTON).click();// Works because we explicitly tell locator to pick the first frame:
page.frame_locator(".result-frame").first().getByRole(AriaRole.BUTTON).click();

将 Locator 转换为 FrameLocator

如果你有一个指向 的 Locator 对象,则可以使用 Locator.contentFrame() 将其转换为 FrameLocator。iframe

将 FrameLocator 转换为 Locator

如果你有一个 FrameLocator 对象,则可以使用 FrameLocator.owner() 将其转换为指向同一对象的 Locator。

4.FrameLocator定位

匹配第一个,将 locator 返回到第一个匹配的frame。

FrameLocator.first();

匹配最后一个

FrameLocator.last();

使用index索引

FrameLocator.nth(index);

获取全部iframes

page.frames

5.frame() 定位

一个页面可以附加一个或多个Frame对象。每个页面都有一个主框架,并且假设页面级交互(如单击)在主框架中操作。
页面可以附加带有iframe HTML标签的额外框架。可以访问这些帧以在帧内进行交互。

// Locate element inside frame
Locator username = page.frameLocator(".frame-class").getByLabel("User Name");
username.fill("John");

5.1frame对象

可以使用Page.frame()API访问框架对象:

根据name属性和url属性匹配

// Get frame using the frame"s name attribute
Frame frame = page.frame("frame-login");// Get frame using frame"s URL
Frame frame = page.frameByUrl(Pattern.compile(".*domain.*"));// Interact with the frame
frame.fill("#username-input", "John");

6.page.frame 和 page.frameLocator 区别

page.frameLocator() 返回的对象需要用locator() 方法定位元素,再操作元素
page.frame() 返回的对象可直接使用fill() 、 click() 方法。

7.项目实战

网上找了半天也没有找到这样的例子,以前百度、163的邮箱是这种。最近几年技术升级了,已经不是这种了。不找了索性宏哥自己在本地做一个这样的小demo给小伙伴或者童鞋们来演示一下。

7.1被测的HTML代码

1.准备测试练习index.html,如下:

<!DOCTYPE html>
<html>
<head><title>北京-宏哥|iframeTestDemo</title><style type="text/css">.button1 {background-color: #f44336; border: none;color: white;padding: 15px 32px;text-align: center;text-decoration: none;display: inline-block;font-size: 28px;margin-bottom: 100px;text-decoration:none;color: white;}#myAnchor{text-decoration:none;color: white;}</style>
</head>
<body style="text-align:center">
<div id="wrapper" style="position: relative;top: 100px;left:0px;"><button class="button1"><a id="myAnchor" href="https://www.cnblogs.com/du-hong/">北京-宏哥</a></button></br><div id="id1">I am a index page's div!</div><input type="text" id="maininput" /><br/><iframe id="frameA" frameborder="0" scrolling="no" style="left:857px;position:absolute;" src="iframe.html"></iframe>
</div>
</body>
</html> 

2.准备测试练习iframe.html,如下:

<!DOCTYPE html>
<html>
<head><title>I am a iframe!</title>
</head>
<body><div id="div1">I am iframes div!</div><input id="iframeinput"></input>
</body>
</html> 

3.页面效果,如下图所示:

8.牛刀小试

8.1代码设计

8.2参考代码

package com.bjhg.playwright;import com.microsoft.playwright.Browser;
import com.microsoft.playwright.BrowserContext;
import com.microsoft.playwright.BrowserType;
import com.microsoft.playwright.Locator;
import com.microsoft.playwright.Page;
import com.microsoft.playwright.Playwright;/*** @author 北京-宏哥* * @公众号:北京宏哥(微信搜索,关注宏哥,提前解锁更多测试干货)* * 《刚刚问世》系列初窥篇-Java+Playwright自动化测试-12- iframe操作-上篇(详细教程)** 2024年8月31日*/
public class Test_frame {public static void main(String[] args) {try (Playwright playwright = Playwright.create()) {//1.使用chromium浏览器,# 浏览器配置,设置以GUI模式启动Chrome浏览器(要查看浏览器UI,在启动浏览器时传递 headless=false 标志。您还可以使用 slowMo 来减慢执行速度。Browser browser = playwright.chromium().launch(new BrowserType.LaunchOptions().setHeadless(false).setSlowMo(3000));//2.创建contextBrowserContext context = browser.newContext();//创建pagePage page = context.newPage();//3.浏览器打开百度page.navigate("file:///E:/Desktop/test/iframe/index.html");System.out.println(page.title());// 操作非 iframe上的元素page.locator("[id='maininput']").fill("I am a index page's div!");// 操作 iframe 上的元素Locator locator = page.frameLocator("#frameA").locator("[id='iframeinput']");// xpath 匹配locator.fill("This is a iframe input!");System.out.println("Test Pass");//关闭page
          page.close();//关闭browser
          browser.close();}}
}

8.3运行代码

1.运行代码,右键Run As->Java Application,就可以看到控制台输出,如下图所示:

2.运行代码后电脑端的浏览器的动作(将对应文字输入输入框)。如下图所示:

9.小结

好了,时间不早了,今天就分享到这里,下一篇宏哥找一个还有iframe的在线网页给小伙伴或者童鞋们实战演示一下。

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

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

相关文章

CH585 CH584 CH592 BLE设备的VID和PID

在 BLE(蓝牙低功耗)设备中,PID(Product ID,产品标识符)和 VID(Vendor ID,厂商标识符)有着重要作用,以下为你详细介绍: 区分不同设备与厂商VID 的作用:VID 是由相关管理机构分配给设备制造商的唯一标识符,用于明确设备的生产厂商。例如,像苹果、三星、英特尔等众多…

streamlit入门笔记【1】环境搭建

1. 背景 24年底交代了一个产品排行榜的工作,其实就是把开发测试等各项指标排序,指标获取和存储部分可以用requests和selenium以及xlsx、json分析等完成,展示部分使用了streamlit框架,可以把数据直接运行成简单的web app。本系列笔记将streamlit应用部分做个总结。 2. 环境搭…

012 Promise对象

1、基本概念Promise是异步编程的一种解决方案,比传统的解决方案一一回调函数和事件一一更合理和更强大。它由社区最早提出和实现,ES6将其写进了语言便准,统一了用法,原生提供Promise对象所谓Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步…

CoAT: 基于蒙特卡洛树搜索和关联记忆的大模型推理能力优化框架

研究者提出了一种新的关联思维链(Chain-of-Associated-Thoughts, CoAT)方法,该方法通过整合蒙特卡洛树搜索(Monte Carlo Tree Search, MCTS)和关联记忆机制来提升大语言模型(LLMs)的推理能力。区别于传统的单步推理方法,CoAT致力于增强LLM的结构化推理能力和自适应优化能力,…

DM SQL关联列 like 优化案例

1.1、sql优化背景达梦一哥们找我优化条SQL,反馈在DM8数据库执行时间很慢出不来结果, 监控工具显示这条SQL的执行时间需要20多万毫秒,安排。1.2、慢sql和执行时间 select a.col1 as d_id, a.col2 as s_id, a.col3 as bm, a.col4, a.col5, (select b.col1 from table2 b where…

rust学习笔记(7)

crate 中文是货箱,这是我们编写自己的库或者程序的方式 库 使用rustc可以把一个文件编译为lib rustc --crate-type=lib rary.rs构建的方式选择lib编译出来的文件rlib,并且文件的开头会加上lib前缀使用库 rustc main.rs --extern rary=library.rlib --edition=2018在编译使用的时…

mysql 系统变量

前言 简单介绍一下mysql的系统变量 正文 当我们之间查看mysql的系统变量的时候呢? 我们使用show variables,这样我们就可以查看到系统变量。 但是这样显然是没有意义的。可以看到很多很多的系统变量,如果想查具体的,那么就是: SHOW VARIABLES LIKE default_storage_engine又…

批量PDF文件转Word,免费!

今天推荐一款免费的PDF文件转换工具,它包括了PDF压缩、PDF转Word、PDF转Excel、提取PDF中图片等功能,下载地址在文末。 操作步骤 1、打开PDF转换工具,点击菜单PDF转Word,如下图2、添加需要转换的PDF文件,支持批量添加多个文件一起进行转换,如果一个目录下面的所有文件都需…

【博主亲测可用】科学计算软件:Wolfram Mathematica 14.2.0(附软件包及安装教程)

软件介绍 Wolfram Mathematica 14.2.0是一款功能全面且强大的数学计算与分析软件,它在大数据处理、人工智能集成、符号数组功能扩展、图形和可视化改进以及性能提升方面都有显著的增强。这些改进不仅使用户能够更高效地进行数据分析和科学计算,还极大地提升了用户体验。无论是…

硅基流动

使用硅基流动+Cherry ai部署 硅基流动网站:https://cloud.siliconflow.cn/i/OIItglHJ 邀请码:OIItglHJ 首次注册免费2000万Tokens Cherry ai网站:https://cherry-ai.com/download第一步,登入硅基流动网站,注册后 在左边选择api密钥,右上角选择新建api密钥新建后点击密钥…

Windows系统安装Ollama超简教程(附DeepSeek R1实战)

一、Ollama下载指引 官网地址:https://ollama.com/download选择Windows版本直接下载(推荐64位系统),安装包745MB左右,支持Win10/11系统。点击"Download for Windows"按钮即可开始下载。 二、安装过程详解双击下载的OllamaSetup.exe点击install之后,一路下一步就…

部署milvus2.5.3(standalone模式)

环境:os:Centos 7milvus:2.5.31.创建部署目录mkdir -p /home/middle/milvus2.准备docker-compose.yml配置文件内如如下: 我这里使用的是自己的镜像,需要根据自己环境情况进行修改[root@host135 milvus]# more docker-compose.yml version: 3.5services:etcd:container_name: m…