Найти прямых дочерних элементов после тега «get_by_test_id»Python

Программы на Python
Ответить
Anonymous
 Найти прямых дочерних элементов после тега «get_by_test_id»

Сообщение Anonymous »

Я использую Playwright для тестирования веб-страниц. Когда я использую тег id в качестве локатора, я могу найти прямых дочерних элементов тегированного div:

Код: Выделить всё

page.locator('#id_tag > div').all()
Теперь я пытаюсь использовать тег test_id, и мне нужно найти прямых дочерних элементов:

Код: Выделить всё

page.get_by_test_id("test_id_tag").locator("div").all()
Но это эквивалентно:

Код: Выделить всё

locator('#test_id_tag >> div').all()
Таким образом, Playwright возвращает прямых дочерних элементов, а также дочерних элементов, дочерних элементов и т. д.
Минимальный пример:
html :

Код: Выделить всё




Title



level_1
level_1_1
[i]i1_1_1[/i]
[i]i1_1_2[/i]
[i]i1_1_3[/i]

level_1_2
level_1_2_1
[i]level_1_2_1_1[/i]

[i] level_1_2_2[/i]
level_1_2_3 


level_2
level_2_1
[i]i2_1_1[/i]
[i]i2_1_2[/i]
[i]i2_1_3[/i]

level_2_2
level_2_2_1
[i]level_2_2_1_1[/i]

[i] level_2_2_2[/i]
level_2_2_3 


level_3
level_3_1
[i]i3_1_1[/i]
[i]i3_1_2[/i]
[i]i3_1_3[/i]

level_3_2
level_3_2_1
[i]level_3_2_1_1[/i]

[i] level_3_2_2[/i]
level_3_2_3 







Код Python с атрибутом «id» и ожидаемым результатом:

Код: Выделить всё

with sync_playwright() as p:
browser = p.chromium.launch()
page = browser.new_page()
page.set_content(html)
divs = page.locator('#id_tag > div').all()
for el in divs:
inner_txt = el.locator(div).inner_text()
print(f'{inner_txt=}')
# =>  expected result
#     level_1
#     level_2
#     level 3
browser.close()
Есть ли способ найти только прямые дочерние элементы, используя get_by_test_id("test_id_tag")?

Подробнее здесь: https://stackoverflow.com/questions/787 ... by-test-id
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»