2016-06-12 14 views
8

Tôi có đoạn code dưới đây mà nhấp vào một yếu tố để bật lên một màn hình và sao chép văn bản trong đóSelenium tên lớp Compound không được phép

el1 = driver.find_element_by_id("keyDev-A") 
el1.click() 
el2 = driver.find_element_by_class_name("content") 
print(el2.text) 

Tuy nhiên, khi tôi đã cố gắng để có được selenium bấm vào nút trong đó popup với

el3 = driver.find_element(By.CLASS_NAME, "action-btn cancel alert-display") 
el3.click() 

Nó tạo ra một thông báo lỗi: invalid selector: Compound class names not permitted

Đây là HTML mà tôi đang cố gắng để có được selenium để nhấp vào. Nút Close.

<div class="nav"> 
    <span class="action-btn confirm prompt-display">Confirm</span> 
    <span class="action-btn cancel prompt-display">Cancel</span> 
    <span class="action-btn cancel alert-display">Close</span> 
</div> 

Tôi nên viết el3 để nhấp vào nút đóng?

+2

Bạn đã thấy http://stackoverflow.com/questions/10658907/selenium-python-find-element-by -class-name-stopped-working-from-v-2-2-to-2-21? Nó sẽ giúp. – Leon

+0

Selenium không hỗ trợ 'BY.CLASS_NAME' với ** lớp phức hợp ** .. bạn cần phải sử dụng' cssSelector' hoặc 'XPath' để tìm' el3' ở đây ... –

+0

Có thể trùng lặp của [Cách tránh tên nhóm hợp chất lỗi trong Page Object?] (http://stackoverflow.com/questions/17808521/how-to-avoid-compound-class-name-error-in-page-object) – Liam

Trả lời

15

Leon's comment dẫn đến thông tin chính xác mà tên lớp kết hợp không còn được hỗ trợ. Những gì bạn có thể làm thay vào đó là thử sử dụng bộ chọn css. Trong trường hợp của bạn, dòng mã sau đây sẽ giúp bạn nhận được phần tử bạn muốn:

el3 = driver.find_element_by_css_selector(".action-btn.cancel.alert-display") 

Tìm phần tử với cả ba lớp (hành động-btn, hủy và cảnh báo) trong thuộc tính lớp. Lưu ý rằng thứ tự của các lớp không quan trọng ở đây và bất kỳ lớp nào có thể xuất hiện ở bất kỳ đâu trong thuộc tính lớp. Miễn là phần tử có cả ba lớp, nó sẽ được chọn. Nếu bạn muốn thứ tự của các lớp học để được cố định, bạn có thể dùng xpath sau:

el3 = driver.find_element_by_xpath("//*[@class='action-btn cancel alert-display']") 
+1

Cảm ơn! điều này giải quyết vấn đề của tôi. Tôi không biết các lớp ghép không được hỗ trợ .. –

Các vấn đề liên quan