Locator

Duy Văn | 10/02/2025


Để bắt một element trong Playwright thì các phương pháp sẽ có chút phong phú hơn so với Selenium

Nếu ở phía Selenium có 8 cách:

  • ID
  • Class
  • Tag
  • Name
  • Link Text
  • Partial Link Text
  • XPath
  • CSS Selector

Thì phía Playwright lại cung cấp một nhóm các phương pháp có tích hợp auto-wait

Dev của Playwright gợi ý một số locator như sau:

Locate get_by_

get_by_role_

Nó sẽ tìm kiếm element dựa trên role của nó, ví dụ như button, link, textbox, checkbox, radio, … đồng thời đưa vào tên chính xác của role để xác định đúng element cần tìm

locator = page.get_by_role('button', {'name': 'Submit'})

get_by_label

Trong tình huống element có cấu trúc DOM dạng

<label>Password <input type="password" /></label>

Việc sử dụng thẻ label rất tiện cho việc tương tác với form, vì thế ở đây có thể áp dụng get_by_label để tìm kiếm element dựa trên label của nó

locator = page.get_by_label('Password')
locator.fill('123456')

get_by_placeholder

Tìm kiếm element dựa trên placeholder của nó. Vì placeholder sinh ra chủ yếu là để gợi ý người dùng về nội dung input, nên thường nó rất cụ thể và có thể xác định chính xác chỉ bằng mình placeholder

locator = page.get_by_placeholder('Enter Item')

get_by_text

Đơn giản là xác định element theo text mà nó hiển thị

locator = page.get_by_text('Submit')

get_by_title

Tìm kiếm element dựa trên title của nó

locator = page.get_by_title('Submit')

Ngoài ra, các method này cũng có thể nhận vào RegEx chứ không chỉ là text, ví dụ với get_by_text:

locator = page.get_by_text(re.compile(r'^Submit$'))

Nó có nghĩa là tìm kiếm element có text bắt đầu và kết thúc bằng Submit

Nth

Trong tình huống get_by trả ra nhiều kết quả, có thể bắt theo index

locator = page.get_by_text('Submit')
locator.nth(1).click()

Tuy nhiên sử dụng phương pháp này rất mạo hiểm do page có thể thay đổi và làm cho index của nó trỏ đến một element khác

Locate XPath CSS

Đây là phương pháp tester quen thuộc với Selenium, sử dụng XPath

locator = page.locator('//button[text()="Submit"]')

hoặc CSS

locator = page.locator('button.submit')

Ngoài ra, Playwright cho phép hỗ trợ một số pseudo-class để bắt CSS Selector theo text, khá mạnh

locator = page.locator('button:has-text("Submit")')

Sử dụng CSS cũng hỗ trợ pseudo-class để bắt element nhìn thấy

locator = page.locator('button:visible')