Selectors
Селекторы могут быть использованы для установки пользовательских движков селекторов. Подробнее см. в разделе расширяемость.
Методы
register
Добавлено до v1.9Селекторы должны быть зарегистрированы до создания страницы.
Использование
Пример регистрации движка селекторов, который запрашивает элементы на основе имени тега:
- Sync
- Async
from playwright.sync_api import sync_playwright, Playwright
def run(playwright: Playwright):
tag_selector = """
{
// Возвращает первый элемент, соответствующий данному селектору в поддереве корня.
query(root, selector) {
return root.querySelector(selector);
},
// Возвращает все элементы, соответствующие данному селектору в поддереве корня.
queryAll(root, selector) {
return Array.from(root.querySelectorAll(selector));
}
}"""
# Зарегистрируйте движок. Селекторы будут иметь префикс "tag=".
playwright.selectors.register("tag", tag_selector)
browser = playwright.chromium.launch()
page = browser.new_page()
page.set_content('<div><button>Click me</button></div>')
# Используйте селектор с префиксом его имени.
button = page.locator('tag=button')
# Комбинируйте его с встроенными локаторами.
page.locator('tag=div').get_by_text('Click me').click()
# Можно использовать в любых методах, поддерживающих селекторы.
button_count = page.locator('tag=button').count()
print(button_count)
browser.close()
with sync_playwright() as playwright:
run(playwright)
import asyncio
from playwright.async_api import async_playwright, Playwright
async def run(playwright: Playwright):
tag_selector = """
{
// Возвращает первый элемент, соответствующий данному селектору в поддереве корня.
query(root, selector) {
return root.querySelector(selector);
},
// Возвращает все элементы, соответствующие данному селектору в поддереве корня.
queryAll(root, selector) {
return Array.from(root.querySelectorAll(selector));
}
}"""
# Зарегистрируйте движок. Селекторы будут иметь префикс "tag=".
await playwright.selectors.register("tag", tag_selector)
browser = await playwright.chromium.launch()
page = await browser.new_page()
await page.set_content('<div><button>Click me</button></div>')
# Используйте селектор с префиксом его имени.
button = await page.query_selector('tag=button')
# Комбинируйте его с встроенными локаторами.
await page.locator('tag=div').get_by_text('Click me').click()
# Можно использовать в любых методах, поддерживающих селекторы.
button_count = await page.locator('tag=button').count()
print(button_count)
await browser.close()
async def main():
async with async_playwright() as playwright:
await run(playwright)
asyncio.run(main())
Аргументы
-
Имя, используемое в селекторах в качестве префикса, например,
{name: 'foo'}
позволяет использовать селекторыfoo=myselectorbody
. Может содержать только символы[a-zA-Z0-9_]
. -
Содержимое скрипта в сыром виде.
-
content_script
bool (опционально)#Указывает, следует ли запускать этот движок селекторов в изолированной среде JavaScript. Эта среда имеет доступ к тому же DOM, но не к каким-либо объектам JavaScript из скриптов фрейма. По умолчанию
false
. Обратите внимание, что запуск в качестве контентного скрипта не гарантируется, если этот движок используется вместе с другими зарегистрированными движками. -
path
Union[str, pathlib.Path] (опционально)#Путь к файлу JavaScript. Если
path
является относительным путем, то он разрешается относительно текущей рабочей директории.
Возвращает
set_test_id_attribute
Добавлено в: v1.27Определяет имя пользовательского атрибута, которое будет использоваться в page.get_by_test_id(). По умолчанию используется data-testid
.
Использование
selectors.set_test_id_attribute(attribute_name)
Аргументы