Tôi đang thử kiểm tra giao diện javascript phức tạp với Selenium (sử dụng giao diện Python và trên nhiều trình duyệt). Tôi có một số nút có dạng:
<div>My Button</div>
Tôi muốn có thể tìm kiếm các nút dựa trên "Nút của tôi" (hoặc không phân biệt chữ hoa chữ thường, khớp một phần, chẳng hạn như "nút của tôi" hoặc "nút")
Tôi đang tìm thấy điều này cực kỳ khó khăn, đến mức tôi cảm thấy như mình đang thiếu thứ gì đó rõ ràng. Điều tốt nhất tôi có cho đến nay là:
driver.find_elements_by_xpath('//div[contains(text(), "' + text + '")]')
Điều này là trường hợp nhạy cảm, tuy nhiên. Một điều khác tôi đã thử là lặp qua tất cả các div trên trang và kiểm tra thuộc tính Element.text. Tuy nhiên, mỗi khi bạn nhận được một tình huống của mẫu:
<div class="outer"><div class="inner">My Button</div></div>
div.outer cũng có "Nút của tôi" làm văn bản. Để khắc phục RATNG, tôi đã cố gắng xem liệu div.outer có phải là cha mẹ của div.inner không, nhưng không thể tìm ra cách làm điều đó (Element.get_element_by_xpath ('..') trả về cha mẹ của một phần tử, nhưng nó kiểm tra không bằng div.outer). Ngoài ra, việc lặp qua tất cả các yếu tố trên trang dường như rất chậm, ít nhất là sử dụng trình duyệt web Chrome.
Ý tưởng?
Chỉnh sửa: Câu hỏi này xuất hiện một chút mơ hồ. Đã hỏi (và trả lời) một phiên bản cụ thể hơn ở đây: Làm cách nào để lấy văn bản của một phần tử trong Selenium WebDriver (thông qua api Python) mà không bao gồm văn bản phần tử con?