首页 星云 工具 资源 星选 资讯 热门工具
:

PDF转图片 完全免费 小红书视频下载 无水印 抖音视频下载 无水印 数字星空

《最新出炉》系列初窥篇-Python+Playwright自动化测试-59 - 判断元素是否显示 - 上篇

编程知识
2024年07月31日 08:24

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.项目实战

在自动化测试中,我们经常需要进行判断的一个场景。例如,有些操作,我们做了之后,会触发一些提醒,有些是正确的提醒,有些是红色字体显示的错误提示。我们自动化里面如何去捕获这些字段,如果进行测试自动化判断呢。这里就要用到今天所学习的方法了。宏哥这里用度娘的首页登录举例,判断“请填写验证码”这个字段是否出现。

3.1测试用例(思路)

1.访问度娘首页

2.定位首页的登录按钮,然后点击

3.弹出登录框定位短信登录按钮,然后点击

4.定位手机号输入框,然后输入手机号

5.定位协议,然后点击

6.定位登录框的登录按钮,然后点击

7.定位出现的“请填写验证码”,然后判断。

3.2代码设计

按照宏哥在Selenium教程中的代码思路:

3.3参考代码

# coding=utf-8🔥

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

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

# 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.locator("//*[@id='u1']/a[1]").click()
    page.wait_for_timeout(300)
    # 弹出登录框定位短信登录按钮,然后点击
    page.locator("#TANGRAM__PSP_11__changeSmsCodeItem").click()
    # 定位手机号输入框,然后输入手机号
    page.locator("#TANGRAM__PSP_11__smsPhone").type("13734294156")
    # 定位同意协议点击
    page.locator("#TANGRAM__PSP_11__smsIsAgree").click()
    # 定位登录框的登录按钮,然后点击
    page.locator("#TANGRAM__PSP_11__smsSubmit").click()
    error_message = page.locator("//*[@id='TANGRAM__PSP_11__smsError' and text()='请填写验证码']")
    if error_message.is_visible():
        print("宏哥!元素存在")
    else:
        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.运行代码后电脑端的浏览器的动作。如下图所示:

4.方法二

第二个方法,就是先得到这个字符串用String变量保存下来,然后对两个字符串进行比较。其实这种方法前边已经用过,只不过是宏哥没有指出,就像前边文章中的toast元素,直接定位存储在变量里,然后将其的文本打印出,是不是啊各位小伙伴们或者童鞋们。

4.1代码设计

4.2参考代码

# coding=utf-8🔥

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

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

# 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.locator("//*[@id='u1']/a[1]").click()
    page.wait_for_timeout(300)
    # 弹出登录框定位短信登录按钮,然后点击
    page.locator("#TANGRAM__PSP_11__changeSmsCodeItem").click()
    # 定位手机号输入框,然后输入手机号
    page.locator("#TANGRAM__PSP_11__smsPhone").type("13734294156")
    # 定位同意协议点击
    page.locator("#TANGRAM__PSP_11__smsIsAgree").click()
    # 定位登录框的登录按钮,然后点击
    page.locator("#TANGRAM__PSP_11__smsSubmit").click()
    error_message = page.locator("//*[@id='TANGRAM__PSP_11__smsError' and text()='请填写验证码']").inner_text()
    if error_message=="请填写验证码":
        print("宏哥!元素存在")
    else:
        print("宏哥!元素不存在")
    page.wait_for_timeout(1000)
    print("browser will be close");
    page.close()
    context.close()
    browser.close()
with sync_playwright() as playwright:
    run(playwright)

4.3运行代码

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

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

5.小结

 好了,今天时间也不早了,关于判断元素是否显示就介绍到这里,感谢您耐心的阅读!!!

From:https://www.cnblogs.com/du-hong/p/18155641
本文地址: http://www.shuzixingkong.net/article/617
0评论
提交 加载更多评论
其他文章 一款基于Fluent设计风格、现代化的WPF UI控件库
前言 今天大姚给大家分享一款基于Fluent设计风格、开源(MIT License)、现代化的WPF UI控件库,它提供直观的设计、主题、导航和全新的沉浸式控件,全部都是原生且无缝地集成在一起:WPF UI。 WPF介绍 WPF 是一个强大的桌面应用程序框架,用于构建具有丰富用户界面的 Window
一款基于Fluent设计风格、现代化的WPF UI控件库 一款基于Fluent设计风格、现代化的WPF UI控件库 一款基于Fluent设计风格、现代化的WPF UI控件库
我用Awesome-Graphs看论文:解读X-Stream
这次向大家分享发表在SOSP 2013上的另一篇经典图计算框架论文X-Stream,构建了单机上基于外存的Scatter-Gather图处理框架。
我用Awesome-Graphs看论文:解读X-Stream 我用Awesome-Graphs看论文:解读X-Stream 我用Awesome-Graphs看论文:解读X-Stream
认识netty的基本组件
Java NIO VS Netty 有了 Java NIO,而且 Netty 也是基于 Java NIO 实现,那么为什么不能直接用 Java NIO 来实现网络通信模块呢? 接下来我解释一下原因。 如果我们用 Java NIO 来开发网络通信组件,势必会直接面对很多网络通信的问题。比如,
认识netty的基本组件
如何自动实现本地AD中禁用的用户从地址列表中隐藏掉?
我的博客园:https://www.cnblogs.com/CQman/ 如何自动实现本地AD中禁用的用户从地址列表中隐藏掉? 需求信息: 用户本地AD用户通过ADConnect同步到O365,用户想实现在本地已做同步的OU中禁用某一用户后,其可以自动实现把该用户从地址列表中隐藏掉。 用户的ADCo
如何自动实现本地AD中禁用的用户从地址列表中隐藏掉? 如何自动实现本地AD中禁用的用户从地址列表中隐藏掉? 如何自动实现本地AD中禁用的用户从地址列表中隐藏掉?
一文带你了解CAP的全部特性,你学会了吗?
目录前言消息发布携带消息头设置消息前缀原生支持的延迟消息并行发布消息事务消息事务消息发送事务消息消费事务补偿消息处理序列化过滤器消息重试多线程处理自动恢复/重连分布式存储锁消息版本隔离优化的雪花算法消息自动清理消费者特性Attribute 订阅多Attribute 订阅通配符订阅异步订阅多程序集订阅
一文带你了解CAP的全部特性,你学会了吗? 一文带你了解CAP的全部特性,你学会了吗?
golang对遍历目录操作的优化
一转眼go1.23都快发布了,时间过得真快。 不过今天我们把时间倒流回三年半之前,来关注一个在go1.16引入的关于处理目录时的优化。 对于go1.16的新变化,大家印象最深的可能是io包的大规模重构,但这个重构实际上还引进了一个优化,这篇文章要说的就是这个优化。 本文默认Linux环境,不过这个优
golang对遍历目录操作的优化 golang对遍历目录操作的优化
.NET 开源快捷的数据库文档查询和生成工具
前言 在实际项目开发中,需求变更和项目迭代是常态。要求我们能够迅速响应,对数据库结构进行相应的调整,如添加新表、更新现有表结构或增加字段等。 为了确保团队成员之间的信息同步,实时更新和维护数据库文档变得至关重要。这不仅提升了数据库的可读性,也极大提高了开发效率和团队协作的流畅性。 SmartSQL,
.NET 开源快捷的数据库文档查询和生成工具 .NET 开源快捷的数据库文档查询和生成工具 .NET 开源快捷的数据库文档查询和生成工具
关于计算机图形学的一些介绍(一)基本要素与空间变换
写在前面 笔者前段时间开启了一个新的系列《Wgpu图文详解》,在编写的过程中,发现使用wgpu只是应用层面的内容。要想很好的介绍wgpu,不得不将图形学中的一些理论知识进行讲解。但是放在《Wgpu图文详解》这个系列里又有点喧宾夺主之意,所以决定单独用另一个系列来放置关于图形学的一些内容。另外,本系列
关于计算机图形学的一些介绍(一)基本要素与空间变换 关于计算机图形学的一些介绍(一)基本要素与空间变换 关于计算机图形学的一些介绍(一)基本要素与空间变换