软件测试|web自动化测试神器playwright教程(三十五)

举报
霍格沃兹测试开发 发表于 2023/08/08 18:43:58 2023/08/08
【摘要】 playwright判断元素是否存在 前言我们在进行web自动化测试的过程中,有时候我们需要判断元素是否存在,才可以进行下一步的点击操作或断言,如果我们使用的是selenium,可以使用显式等待方式,或者使用find_elements判断列表长度,但是playwright有另外一个判断方式,直接计算元素数量来判断元素是否存在,比起selenium来说,步骤更为简单,本文就为大家介绍play...

playwright判断元素是否存在

前言

我们在进行web自动化测试的过程中,有时候我们需要判断元素是否存在,才可以进行下一步的点击操作或断言,如果我们使用的是selenium,可以使用显式等待方式,或者使用find_elements判断列表长度,但是playwright有另外一个判断方式,直接计算元素数量来判断元素是否存在,比起selenium来说,步骤更为简单,本文就为大家介绍playwright判断元素是否存在的方法。

locator 定位元素

我们使用locator定位元素时,不论元素存不存在,都会返回一个locator 对象,所以我们可以使用count来计数,如果count不为0,则元素就存在,如果count为0,那元素就不存在。示例如下:

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")
    # 元素存在
    loc1 = page.locator("id=kw")
    print(loc1)
    print(loc1.count())
    # 元素不存在
    loc2 = page.locator('id=muller')
    print(loc2)
    print(loc2.count())

with sync_playwright() as playwright:
    run(playwright)

----------------------------------
输出结果如下:
<Locator frame=<Frame name= url='https://www.baidu.com/'> selector='id=kw'>
1
<Locator frame=<Frame name= url='https://www.baidu.com/'> selector='id=muller'>
0

注:locator 是定位当前页面上的元素,不会自动等待,如果用click等方法结合使用,会自动去等待元素处于可点击状态

query_selector 定位

ElementHandle 表示页内 DOM 元素。ElementHandles 可以使用page.query_selector()方法创建。
Locator和ElementHandle之间的区别在于后者指向特定元素,而 Locator 捕获如何检索该元素的逻辑。

元素存在返回元素句柄,元素不存在返回None,示例如下:

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")
    # 元素存在
    loc1 = page.query_selector('#kw')
    print(loc1)
    # 元素不存在
    loc2 = page.query_selector('#muller')
    print(loc2)

with sync_playwright() as playwright:
    run(playwright)


-------------------------------------------------
输出结果如下:

JSHandle@node
None

selenium可以使用find_elements来返回一个元素列表,playwright也可以使用query_selector_all 复数定位方式返回一个列表,示例如下:

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")
    # 元素存在
    loc1 = page.query_selector_all('#kw')
    print(loc1)  

    # 元素不存在
    loc2 = page.query_selector_all('#muller')
    print(loc2) 

with sync_playwright() as playwright:
    run(playwright)

----------------------------------------
输出结果如下:
[<JSHandle preview=JSHandle@node>]
[]

总结

本文主要介绍了playwright判断元素是否存在的方法,playwright对于元素是否存在的判断相比selenium更为直接。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。