《最新出炉》系列初窥篇-Python+Playwright自动化测试-62 - 判断元素是否可操作

news2025/1/16 17:06:00

软件测试微信群:https://bbs.csdn.net/topics/618423372 有兴趣的可以扫码加入

1.简介

有些页面元素的生命周期如同流星一闪,昙花一现。我们也不知道这个元素在没在页面中出现过,为了捕获这一美好瞬间,让其成为永恒。我们就来判断元素是否显示出现过。

在操作元素之前,可以先判断元素的状态。判断元素操作状态也可以用于断言。

2.常用的元素判断方法

2.1page对象调用的判断方法

page对象调用的判断方法, 传一个selector 定位参数

  • page.is_checked(selector: str) # checkbox or radio 是否选中
  • page.is_disabled(selector: str) # 元素是否可以点击或编辑
  • page.is_editable(selector: str) # 元素是否可以编辑
  • page.is_enabled(selector: str) # 是否可以操作
  • page.is_hidden(selector: str) # 是否隐藏
  • page.is_visible(selector: str) # 是否可见
2.2locator对象调用的判断方法

locator对象调用的判断方法

  • locator.is_checked()
  • locator.is_disabled()
  • locator.is_editable()
  • locator.is_enabled()
  • locator.is_hidden()
  • locator.is_visible()
2.3元素句柄的判断方法

元素句柄的判断方法

  • element_handle.is_checked()
  • element_handle.is_disabled()
  • element_handle.is_editable()
  • element_handle.is_enabled()
  • element_handle.is_hidden()
  • element_handle.is_visible()

元素句柄(element_handle)是通过page.query_selector()方法调用返回的ElementHandle ,这种一般不常用。也不推荐使用。

3.项目实战

 宏哥这里用度娘的首页搜索输入框举例,判断这个搜索输入框是否可以输入内容,然后利用JavaScript加上属性readonly后,再次判断是否可以输入内容,对你没看错就是这么玩。

3.1测试用例(思路)

1.访问度娘首页

2.定位搜索输入框,判断其是否可以操作(输入搜索内容)

3.给搜索输入框通过JavaScript添加readonly属性

4.再次判断搜索输入框是否可以操作(输入搜索内容)

3.2代码设计

3.3参考代码
# coding=utf-8🔥

# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行

# 2.注释:包括记录创建时间,创建人,项目名称。
'''
Created on 2024-05-17
@author: 北京-宏哥
公众号:北京宏哥(微信搜索:北京宏哥,关注宏哥,提前解锁更多测试干货!)
Project:《最新出炉》系列初窥篇-Python+Playwright自动化测试-62 - 判断元素是否可操作
'''

# 3.导入模块

from playwright.sync_api import Playwright, sync_playwright, expect
def run(playwright: Playwright) -> None:
    browser = playwright.chromium.launch(headless=False)
    context = browser.new_context()
    page = context.new_page()
    page.goto("https://www.baidu.com/")
    page.wait_for_timeout(1000)
    searchInputBox = page.locator("#kw")
    if searchInputBox.is_enabled():
        print("百度首页的搜索输入框可以输入内容!")
    # 给搜索输入框通过JavaScript添加disable属性
    js = "document.getElementById('kw').setAttribute('disabled', '')";
    page.evaluate(js)
    searchInputBox1 = page.locator("//*[@id='kw']")
    # 再次判断搜索输入框是否可以操作(输入搜索内容)
    if ~searchInputBox1.is_enabled():
        print("百度首页的搜索输入框不可以输入内容!")
    page.wait_for_timeout(1000)
    print("browser will be close")
    page.close()
    context.close()
    browser.close()
with sync_playwright() as playwright:
    run(playwright)
3.4运行代码

1.运行代码,右键Run'Test',就可以看到控制台输出,如下图所示:

2.运行代码后电脑端的浏览器的动作。如下图所示:

3.可能小伙伴后者童鞋们没有注意宏哥在录屏中点击输入框,通过JavaScript给输入框加入不可操作属性,宏哥在这里演示一下,仍然给输入框输入内容就会报如下错误:element not interactable(元素不可交互)。如下图所示:

4.当然了你也可以通过F12查看元素已经加上了不可以操作的属性,如下图所示:

4.小结

  好了,今天时间也不早了,宏哥就分享到这里,感谢您耐心地阅读。

5.拓展

如果你不想用或者觉得selenium自带的API不能满足你的要求,你也可以根据自己的需要定义一个API,然后进行调用使用。

5.1自定义的API
# 自定义方法来判断页面元素是否存在
def is_element_present(page, selector):
    """
    判断指定选择器的元素是否存在于页面上
    :param page: Playwright的Page对象
    :param selector: 用于选择元素的CSS选择器
    :return: 如果元素存在返回True,否则返回False
    """
    try:
        # 尝试获取元素
        page.wait_for_selector(selector, timeout=5000)  # 等待元素出现,超时时间为5秒
        return True
    except Exception as e:
        # 如果在等待元素或获取元素时发生异常,说明元素不存在
        return False
5.2测试方法及参考代码
# coding=utf-8🔥

# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行

# 2.注释:包括记录创建时间,创建人,项目名称。
'''
Created on 2024-05-17
@author: 北京-宏哥
公众号:北京宏哥(微信搜索:北京宏哥,关注宏哥,提前解锁更多测试干货!)
Project:《最新出炉》系列初窥篇-Python+Playwright自动化测试-63 - 判断元素是否可操作
'''

# 3.导入模块

from playwright.sync_api import Playwright, sync_playwright, expect

# 自定义方法来判断页面元素是否存在
def is_element_present(page, selector):
    """
    判断指定选择器的元素是否存在于页面上
    :param page: Playwright的Page对象
    :param selector: 用于选择元素的CSS选择器
    :return: 如果元素存在返回True,否则返回False
    """
    try:
        # 尝试获取元素
        page.wait_for_selector(selector, timeout=5000)  # 等待元素出现,超时时间为5秒
        return True
    except Exception as e:
        # 如果在等待元素或获取元素时发生异常,说明元素不存在
        return False

def run(playwright: Playwright) -> None:
    browser = playwright.chromium.launch(headless=False)
    page = browser.new_page()
    page.goto("https://www.baidu.com/")
    page.wait_for_timeout(1000)
    if is_element_present(page,"input#kw"):
        searchInputBox = page.locator("#kw")
        '''判断searchInputBox变量对象是否处于可用状态。如果处于可用状态,则输入“百度首页的搜索输入框被成功找到!” '''
        if searchInputBox.is_enabled():
            searchInputBox.type("百度首页的搜索输入框被成功找到!")
    else:
        print("页面上的输入框元素未被找到!")
    page.wait_for_timeout(1000)
    print("browser will be close")
    page.close()
    browser.close()
with sync_playwright() as playwright:
    run(playwright)
5.3运行代码

1.运行代码,右键Run'Test',就可以看到控制台输出,如下图所示:

2.运行代码后电脑端的浏览器的动作。如下图所示:

 每天学习一点,今后必成大神-

往期推荐(由于跳转参数丢失了,所有建议选中要访问的右键,在新标签页中打开链接即可访问)或者微信搜索: 北京宏哥  公众号提前解锁更多干货。

Appium自动化系列,耗时80天打造的从搭建环境到实际应用精品教程测试

Python接口自动化测试教程,熬夜87天整理出这一份上万字的超全学习指南

Python+Selenium自动化系列,通宵700天从无到有搭建一个自动化测试框架

Java+Selenium自动化系列,仿照Python趁热打铁呕心沥血317天搭建价值好几K的自动化测试框架

Jmeter工具从基础->进阶->高级,费时2年多整理出这一份全网超详细的入门到精通教程

Fiddler工具从基础->进阶->高级,费时100多天吐血整理出这一份全网超详细的入门到精通教程

Pycharm工具基础使用教程

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

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

相关文章

HiFi桌搭的新选择,更符合发烧友使用习惯的飞傲K19

飞傲的便携设备很多人都用过,性价比很高,设计也很精致,并且功能上针对不同的需求也有丰富的选择,而在针对耳机的台式设备方面,飞傲同样非常有实力,我最近用了一款飞傲K19,这台设备不仅功能完备&…

ZYNQ SDK/Vitis undefined reference to `sin‘ wave.c

问题 ZYNQ SDK或者VItis在使用到sin函数时编译报错: undefined reference to sin wave.c问题解决: 右键点开C/C Build Settings 选项 在Settings 选项的Libraries 添加 m,点击OK

用Java手写jvm之模拟运行时数据区的虚拟机栈,局部变量表,操作数栈等

写在前面 下图是jvm的运行时数据区内存图: ,本文要模拟的是虚拟机栈的相关内存结构的交互过程。 1:正文 因为我们这里模拟的是线程执行方法调用的过程,所以这里先来定义一个线程对象: public class Thread {// 程…

卸载Windows软件的正确姿势,你做对了吗?

前言 今天有小伙伴突然问我:她把软件都卸载了,但是怎么软件都还在运行? 这个问题估计很多小伙伴都是遇到过的,对于电脑小白来说,卸载Windows软件真的真的真的是一件很难的事情。所以,今天咱们就来讲讲&am…

springboot贫困生认定和资助管理系统-计算机毕业设计源码71367

摘要 本文介绍了一个基于Java的贫困生认定和资助管理系统的设计与实现。该系统旨在通过自动化、智能化的管理方式,提高贫困生认定和资助工作的效率与准确性。系统采用Java作为主要开发语言,结合了数据库技术和Web开发技术,实现了贫困生信息的…

运维之路----计算机基础

目录 ​编辑 一,计算机的组成 1,硬件 2,软件 二,计算机中的一些概念 冯诺依曼体系 二进制 摩尔定律 计算机的分类 1,按照规模分 2,按照功能分 拓扑 存储器的层次结构 并行与并发 缓存 操作系…

实例分割-Yolact/Yolact++训练自己数据集

前言 本文主要用于记录实例分割模型yolact和yolact的环境配置,以及成功训练自己数据集的整个过程~ 注意:这里要重点提醒一下,DCNv2对RTX系列不友好,我第一次使用4090服务器,编译持续有问题,被迫放弃&#…

C++|设计模式(八)|⭐️工厂模式?错!是工厂模式群!

本文内容全部来源于B站,仅做个人学习使用: 【工厂模式?错!是工厂模式群!】 在此之前,笔者曾经发过两篇关于工厂模式的博客: C|设计模式(二)|简单…

软件测试---Jmeter

一、简介 二、安装与启动 (1)安装 安装包:通过百度网盘分享的文件:jmeter环境.rar 链接:https://pan.baidu.com/s/1OB0IP3W7hqUjAGj_5F56sQ

vue3 自定义指令 自动获取节点的width 和 height

想写一个依赖库, 但是需要监听组件的width和height这些数据, 就找到了ResizeObserver这个方法,不想每次使用的时候都要创建和销毁 ResizeObserver, 索性就直接封装成为一个指令用来获取想要的信息, ResizeObserver对象上能够获取的信息还是非常多的, 除了width, height 还有 to…

一篇文章讲明白Ldraw(乐高模型)的格式文件说明

最好将文章内容保存下来 https://ldraw.org/article/218.html 乐高模型是非常有意思的模型,弄明白了它的模型构造,也就懂了三维模型的构造,原理都是相通的。

如何在行空板上运行 YOLOv10n?

YOLOv10介绍 YOLO(You Only Look Once)系列是当前最主流的端侧目标检测算法,由Joseph Redmon等人首次提出,并随着时间发展,已经推出了多个版本,每个版本“似乎”都在性能和速度上有所提升。 本文为大家介绍…

【前端编程小白】的HTML从零入门到实战

之前有高中毕业生读了博客,想让我帮他找一些前端入门的内容,他们报的计算机专业,想利用开学前夕学习一下,我给他推荐了一些菜鸟教程呀什么的。后来想,看来还是很多人需要一些更加入门的可成的,而且很多教程…

24年电赛——自动行驶小车(H题)基于 CCS Theia -陀螺仪 JY60 代码移植到 MSPM0G3507(附代码)

前言 只要搞懂 M0 的代码结构和 CCS 的图形化配置方法,代码移植就会变的很简单。因为本次电赛的需要,正好陀螺仪部分代码的移植是我完成的。(末尾附全部代码) 一、JY60 陀螺仪 JY60特点 1.模块集成高精度的陀螺仪、加速度计&…

APACHE安装与应用

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:Linux运维老纪的首页…

24澳中博览会|2025非洲水协年会暨展览|2025山西水展

2024澳中博览会 2025非洲水协年会暨展览 2025年山西国际水展暨水利工程设计与施工、水处理技术设备、泵管阀、智慧水务及环保展 承办单位:山西泽嘉国际展览有限公司 上海泽嘉展览服务有限公司 战略合作伙伴 : 美国迈阿密水展 欧 洲 海 水 脱 盐 淡 化…

SD原班人马发布FLUX.1:打开AI绘画新世界

​ Black Forest Labs 旗下产品 AI 绘画工具如雨后春笋般涌现,让我们对创作的理解不断刷新。就在大家以为已经见识了 AI 绘画的天花板时,FLUX.1 出现了!这款由 Black Forest Labs 推出的 AI 绘画工具,不仅在性能上远超竞品&#x…

不好用你打我!2024你必须要会的AI神器

这篇文章,除了干货就是干货~ 今天给大家介绍一款2024年你必须要掌握的AI神器。 我可以肯定的说他是目前市面上第一款在这个领域出现的AI工具。 现在的AI工具,可以用来生成文字、图片、视频甚至音乐, 但是你听说过直接用AI生成APP的吗&…

【Spring】Spring框架的概念,以及Spring框架的简单使用。

目录 1. 概念 2. Spring的体系结构介绍(了解) 3. Spring框架的使用 3.1 环境准备 3.2 代码编写 1. 概念 总的来说就是一句话,Spring框架是一个轻量级的控制反转(IoC)和面向切面(AOP)编程的容…