Я хочу автоматизировать процесс регистрации, но не могу установить флажок с помощью Playwright. Каждый раз, когда я нажимаю на флажок, я перенаправляюсь на новую ссылку. В DOM, когда флажок установлен, класс родительского элемента меняется с invalid на valid.
import re
from playwright.sync_api import sync_playwright
def test_example() -> None:
with sync_playwright() as p:
browser = p.chromium.launch(headless=False, slow_mo=2000)
context = browser.new_context()
page = context.new_page()
page.goto("https://www.softr.io/templates/inventory-management")
page.locator('//button[@data-cky-tag = "accept-button"]').click()
page.locator('//span[contains(normalize-space(text()), "Sign up for free")]').click()
page.locator('//input[@placeholder = "Full Name"]').fill("tairtable")
page.locator('//input[@placeholder = "Email"]').fill('[email protected]')
page.locator('//input[@placeholder = "Password"]').fill('Xyz@12345678')
# Click on the checkbox that opens a new window
with context.expect_page() as new_page_info:
page.locator('//div[@class = "sw-checkbox ng-tns-c689136354-0"]//label').click()
new_page = new_page_info.value
# Perform any actions on the new page if needed
new_page.close()
# Return to the original page
page.locator('//button[contains(normalize-space(text()), "Sign up for free")]').click()
test_example()
ожидается, что флажок должен быть установлен






Ваша проблема в том, что флажок скрыт под псевдоэлементом ::before.
Драматург по умолчанию выполняет щелчок по центру элемента, центром вашего элемента является ссылка Условия, которая открывается в новом окне. Чтобы избежать нажатия на ссылку, вы можете использовать щелчок по элементу по смещению.
page.locator(selector).click(position = {'x': offset_x, 'y': offset_y})
Пример (селекторы я не менял, некоторые из них выглядят недостаточно уникальными, но это не имеет отношения к вопросу):
from playwright.sync_api import sync_playwright
def test_example() -> None:
with sync_playwright() as p:
browser = p.chromium.launch(headless=False, slow_mo=2000)
context = browser.new_context()
page = context.new_page()
page.goto("https://www.softr.io/templates/inventory-management")
page.locator('//button[@data-cky-tag = "accept-button"]').click()
page.locator('//span[contains(normalize-space(text()), "Sign up for free")]').click()
page.locator('//input[@placeholder = "Full Name"]').fill("tairtable")
page.locator('//input[@placeholder = "Email"]').fill('[email protected]')
page.locator('//input[@placeholder = "Password"]').fill('Xyz@12345678')
page.locator('//div[@class = "sw-checkbox ng-tns-c689136354-0"]//label').click(position = {'x': 10, 'y': 10})
page.locator('//button[contains(normalize-space(text()), "Sign up for free")]').click()
test_example()