最强自动化测试框架Playwright(32)-定位器

定位器是playwright自动等待和重试能力的核心部分,代表了一种随时在页面上查找元素的方法。

Locator | Playwright Python

方法

all

当locator指向一组元素时,这个方法返回locator对应的数组,指向它们代表的元素

for li in page.get_by_role('listitem').all():
  li.click();

all_text_contents

返回元素的文本内容

 texts = page.get_by_role("link").all_text_contents()

all_inner_texts

返回元素节点的innerText

 texts = page.get_by_role("link").all_inner_texts()

 and_

创建一个与此定位器和参数定位器相匹配的定位器。

button = page.get_by_role("button").and_(page.getByTitle("Subscribe"))

 blur

在 Playwright 中,`blur()` 方法用于将焦点从当前元素移除,即触发元素的 `blur` 事件。它可以用于模拟用户手动离开输入框或其他具有焦点的元素的操作。

以下是 `blur()` 方法的使用示例:

```python
from playwright.sync_api import sync_playwright

with sync_playwright() as playwright:
    # 启动浏览器
    browser = playwright.chromium.launch()
    
    # 创建一个新的上下文
    context = browser.new_context()
    
    # 在上下文中创建一个新的页面
    page = context.new_page()
    
    # 打开一个示例页面
    page.goto('https://example.com')
    
    # 获取目标元素的选择器(locator)
    locator = page.locator('#my-input')
    
    # 聚焦到目标元素
    locator.focus()
    
    # 将焦点从目标元素移除
    locator.blur()
    
    # 关闭浏览器
    browser.close()
```

在上述示例中,首先通过 `page.locator('#my-input')` 获取了目标输入框元素的 locator。然后使用 `focus()` 方法将焦点聚焦到该元素,再使用 `blur()` 方法将焦点从该元素移除,触发 `blur` 事件。

请注意,`blur()` 方法需要目标元素具有焦点,并且在调用此方法之前必须先调用 `focus()` 方法。另外,`blur()` 方法可以触发 `blur` 事件,但并不会模拟用户离开该元素的鼠标操作。

bounding_box

`bounding_box()` 方法是 Playwright 中页面元素(ElementHandle)对象的一个方法,用于获取元素的边界框信息。

`bounding_box()` 方法返回一个表示元素边界框的字典对象,包含以下属性:

- `x`:元素左边缘相对于视口的 x 坐标。
- `y`:元素上边缘相对于视口的 y 坐标。
- `width`:元素的宽度。
- `height`:元素的高度。

以下是一个使用 `bounding_box()` 方法获取元素边界框信息的示例:

```python
from playwright.sync_api import sync_playwright

with sync_playwright() as playwright:
    # 启动浏览器
    browser = playwright.chromium.launch()
    # 创建一个新的上下文
    context = browser.new_context()
    # 在上下文中创建一个新的页面
    page = context.new_page()

    # 跳转到示例页面
    page.goto('https://example.com')

    # 获取元素的选择器(locator)
    locator = page.locator('h1')

    # 获取元素的边界框信息
    bounding_box = locator.bounding_box()

    # 打印边界框信息
    print(bounding_box)

    # 关闭浏览器
    browser.close()
```

在上述示例中,我们使用 `bounding_box()` 方法获取 `h1` 元素的边界框信息,并将其打印出来。在实际使用中,你可以根据需要使用边界框信息进行各种操作,例如确定元素的位置、大小或进行页面截图等。

请注意,如果元素对应的 DOM 节点在文档中不可见(例如在隐藏的区域,如滚动容器里或 `display: none` 的元素),`bounding_box()` 返回的边界框会为空(null)。因此,在调用 `bounding_box()` 方法之前,你可以先确保元素在 DOM 中是可见的。

其他方法

page.get_by_role("checkbox").check() 选中一个checkbox或者radio元素

page.get_by_role("textbox").clear()  清空

page.get_by_role("button").click() 点击元素 

Shift-right-click at a specific position on a canvas:

page.locator("canvas").click(
    button="right", modifiers=["Shift"], position={"x": 23, "y": 32}
)

count

返回定位到的元素个数

count = page.get_by_role("listitem").count()

dblclick

 双击元素

locator.dblclick()
locator.dblclick(**kwargs)

dispatch_event 

locator.dispatch_event("click")

drag_to

将元素拖到目标元素并放下

 source = page.locator("#source")
target = page.locator("#target")

source.drag_to(target)
# or specify exact positions relative to the top-left corners of the elements:
source.drag_to(
  target,
  source_position={"x": 34, "y": 7},
  target_position={"x": 10, "y": 20}
)

方    法 作           用                语     法
evaluate在页面执行js方法tweets = page.locator(".tweet .retweets")
assert tweets.evaluate("node => node.innerText") == "10 retweets"
evaluate_all执行js脚本,参数为所有匹配到的元素
evaluate_handle执行js脚本,返回JSHandle
fill为input元素设置value
filter        缩小定位范围row_locator = page.locator("tr")
# ...
row_locator.filter(has_text="text in column 1").filter(
    has=page.get_by_role("button", name="column 2 button")
).screenshot()
focus        聚焦元素        locator.focus()
locator.focus(**kwargs)

frame_locator

定位framelocator = page.frame_locator("iframe").get_by_text("Submit")
locator.click()

get_attribute

获取属性值locator.get_attribute(name)
locator.get_attribute(name, **kwargs)

get_by_alt_text

通过alt的文本进行定位page.get_by_alt_text("Playwright logo").click()

get_by_label

通过label定位page.get_by_label("Username").fill("john")
page.get_by_label("Password").fill("secret")

get_by_placeholder

通过占位符定位page.get_by_placeholder("name@example.com").fill("playwright@microsoft.com")
get_by_role        通过角色定位元素expect(page.get_by_role("heading", name="Sign up")).to_be_visible()

get_by_test_id

通过测试id定位page.get_by_test_id("directions").click()

get_by_text

通过text定位page.get_by_text("world")

get_by_title

通过text定位        expect(page.get_by_title("Issues count")).to_have_text("25 issues")

highlight

高亮元素locator.highlight()

hover

模拟鼠标在元素上悬停page.get_by_role("link").hover()

inner_html

返回元素的内在htmllocator.inner_html()
locator.inner_html(**kwargs)

inner_text

返回元素的内部textlocator.inner_text()
locator.inner_text(**kwargs)

input_value

返回元素的valuevalue = page.get_by_role("textbox").input_value()

press

按键方法page.get_by_role("textbox").press("Backspace")

screenshot

对元素进行截屏page.get_by_role("link").screenshot()

scroll_into_view_if_needed

此方法等待可操作性检查,然后尝试将元素滚动到视图中,除非它按照IntersectionObserver的定义完全可见locator.scroll_into_view_if_needed()
locator.scroll_into_view_if_needed(**kwargs)

select_option

选择option# single selection matching the value or label
element.select_option("blue")
# single selection matching the label
element.select_option(label="blue")
# multiple selection for blue, red and second option
element.select_option(value=["red", "green", "blue"])

or_

创建一个与两个定位器中的任何一个匹配的定位器。
nth返回第 n 个匹配元素的定位器。它是从零开始的,nth(0)选择第一个元素。banana = page.get_by_role("listitem").nth(2)

select_text

选择文本locator.select_text()
locator.select_text(**kwargs)

set_checked

设置checkbox和radio为选中状态page.get_by_role("checkbox").set_checked(True)

set_input_files

上传文件page.get_by_label("Upload file").set_input_files('myfile.pdf')

tap

元素执行taplocator.tap()
locator.tap(**kwargs)

text_content

返回元素的text内容locator.text_content()
locator.text_content(**kwargs)

type

元素输入element.type("hello") # types instantly
element.type("world", delay=100) # types slower, like a user

uncheck

确保checkbox和radio元素是未选中的page.get_by_role("checkbox").uncheck()

wait_for

当定位器指定的元素满足state选项时返回。

如果目标元素已经满足条件,该方法立即返回。否则,最多等待几timeout毫秒,直到满足条件。

order_sent = page.locator("#order-sent")
order_sent.wait_for()

断言方法

方法作用用法

is_checked

判断checkbox/radio是否被选中checked = page.get_by_role("checkbox").is_checked()

is_disabled

判断元素是否可用disabled = page.get_by_role("button").is_disabled()

is_editable

返回元素是否可编辑editable = page.get_by_role("textbox").is_editable()

is_enabled

返回元素是否启用enabled = page.get_by_role("button").is_enabled()

is_hidden

返回元素是否隐藏hidden = page.get_by_role("button").is_hidden()

is_visible

返回元素是否可见visible = page.get_by_role("button").is_visible()

locator

该方法在定位器的子树中查找与指定选择器匹配的元素。它还接受过滤器选项,类似于locator.filter()方法

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值