首页 > 编程语言 >《最新出炉》系列初窥篇-Python+Playwright自动化测试-14-playwright操作iframe-番外篇

《最新出炉》系列初窥篇-Python+Playwright自动化测试-14-playwright操作iframe-番外篇

时间:2023-08-29 13:23:01浏览次数:37  
标签:代码 Playwright 宏哥 Python frame 初窥篇 playwright iframe page

1.简介

通过前边三篇的学习,想必大家已经对iframe有了一定的认识和了解,今天这一篇主要是对iframe的一些特殊情况的介绍和讲解,主要从iframe的定位、监听事件和执行js脚本三个方面进行展开介绍。

2.iframe定位

2.1动态id属性如何定位

有时候,我们可能看到的iframe 的id不是固定的,是动态的一个id, 每次刷新,它的值都不一样(一般前面一部分是固定的),而且它的刚好又没有name属性。例如:宏哥前边讲解的163邮箱的iframe的id就是动态的。如下图所示:

像上图所示的这种动态的id,如何定位了,宏哥在这里讲解两种比较常用的方法,当然了可能有比宏哥更好的方法,欢迎留言讨论。

2.2.1第一种方法

可以用css的正则匹配元素属性

语法

描述

$('[name^="value"]')

匹配 name 以 value 开头的元素

$('[name$="end"]')

匹配 name 以 end 结尾的元素

$('[class*="text"]')

匹配class属性包含text的元素

 参考代码:

# css 正则匹配属性
frame = page.frame_locator('[id^="x-URS-iframe"]')
print(frame)
frame.locator('#username').fill('北京-宏哥')
2.2.2第二种方法

使用xpath的contains 包含属性。参考代码:

# xpath的contains 包含属性
frame = page.frame_locator('//*[contains(@id, "x-URS-iframe")]')
print(frame)
frame.locator('#username').fill('北京-宏哥')

2.2两层iframe如何定位

两层iframe,顾名思义是:iframe下嵌套另外一个iframe。解决办法没什么技巧,一层一层定位即可。多层也是类似的方法。例如:宏哥前边讲解的QQ邮箱的iframe就有个2层的iframe。如下图所示:

#一层一层定位定位frame
frame = page.frame_locator('[class="QQMailSdkTool_login_loginBox_qq_iframe"]').frame_locator("#ptlogin_iframe")
#点击密码登录
frame.locator("#switcher_plogin").click()
frame.locator('#u').fill('北京-宏哥')
frame.locator('#p').fill("123456")
frame.locator('#login_button').click()

3.监听事件

iframe的事件可以通过page对象直接监听到。如下图所示:

3.1代码设计

其它的下载事件,文件上传监听方法都类似一样。

3.2参考代码

# coding=utf-8

标签:代码,Playwright,宏哥,Python,frame,初窥篇,playwright,iframe,page
From: https://www.cnblogs.com/du-hong/p/17616504.html

相关文章

  • Python连接Neo4j工具比较 Neo4j Driver、py2neo
    Python有许多可以连接Neo4j的库和工具,以下是一些常用的:Neo4jDriverforPython这是官方提供的Python驱动程序,它使用Cypher查询语言与Neo4j数据库进行交互。您可以使用此驱动程序与Neo4j数据库建立连接,执行查询和管理事务。优点:官方提供的驱动程序,支持最新的Neo4j版本,提供完整......
  • Python学习 -- 枚举类
    当谈到在Python中管理一组常量或者枚举类型的时候,Enum(枚举)类是一个非常有用的工具。Python的Enum类允许你创建具有有意义的、可读性高的常量集合,而不必使用硬编码的数字或字符串。在本篇博客中,我们将深入探讨Python中的Enum类,包括如何定义、使用和高级技巧,同时提供详细的代码案例。......
  • 安装python3.5并在QT中配置使用
    一、安装32位的python3.5及各种库链接:https://pan.baidu.com/s/1q94_Vo3XDhfZ_hmssPjz6w提取码:zotf先在dos环境下输入python,如果显示版本则表示python安装成功,安装库文件的时候,在dos环境下进入whl文件所在的目录,然后使用pipinstall***-whl。如果提示pip版本过低,则按照提示更新pip......
  • python工程打包可执行exe
    1、打包配置文件HuiMergeDemo_x64.spec#-*-mode:python;coding:utf-8-*-block_cipher=Nonea=Analysis(['HuiMergeDemo.py','D:\\HuiMerge\\__init__.py'],pathex=['D:\\HuiMerge'],binaries=[]......
  • Python中什么时候会用到生成器?
    示例:我:帮我写一个Python的生成器的示例:AI:当然可以!以下是一个简单的示例,生成器函数用于生成一个范围内的偶数:defeven_numbers(start,end):  current=start  whilecurrent<=end:    ifcurrent%2==0:      yieldcurrent    ......
  • 软件测试|Python中的变量与关键字详解
    简介在Python编程中,变量和关键字是非常重要的概念。它们是构建和控制程序的基本要素。本文将深入介绍Python中的变量和关键字,包括它们的定义、使用方法以及一些常见注意事项。变量变量的定义变量是用于存储数据值的名称。在Python中,变量无需声明,可以直接赋值使用。变量可以存储不同......
  • 关于Python的学习记录(二十五_yield 关键字和生成器)
    Python中,生成器(Generator)是一种特殊的迭代器,它可以通过函数来创建。生成器函数使用 yield 关键字来产生一个值,并且在每次调用 yield 时暂停执行,保留函数的状态,以便下次调用时可以从上次暂停的地方继续执行。生成器具有以下特点:生成器函数使用def关键字定义,但是它们的执行方......
  • opencv-python报错:Exception: Not found: 'python/cv2/py.typed'
    报错:self).run_setup(setup_script=setup_script)File"/tmp/pip-build-env-zsqslesq/overlay/lib/python3.6/site-packages/setuptools/build_meta.py",line158,inrun_setupexec(compile(code,__file__,'exec'),locals())File&qu......
  • python+playwright 学习-80 v1.37版本新增--full-page-screenshot 用例失败截长图
    前言--full-page-screenshot参数是pytest-playwright在使用,在失败时是否进行完整页面截图。默认情况下,仅捕获视口。需开启--screenshot开关(默认:off).用例失败截图环境准备:1.安装playwright最新v1.37版本2.安装pytest-playwright0.4.2版本用例示例fromplaywright.......
  • python小知识
    Python小知识浮点数注意事项#浮点数精度问题fromdecimalimportDecimalprint(0.1+0.1)#0.2print(0.1+0.2)#0.30000000000000004print(Decimal("0.1")+Decimal("0.2"))#0.3,注意:参数是字符串jsonpath提取数据#pipinstalljsonpathfromjsonpathimp......