最强自动化测试框架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

定位frame locator = 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("[email protected]").fill("[email protected]")
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

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

inner_text

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

input_value

返回元素的value value = 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

元素执行tap locator.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()方法

 

你可能感兴趣的:(#,playwright,自动化,测试)