2011-11-23 27 views
21

Tôi rất mới với Selenium, vì vậy xin lỗi nếu đó là một câu hỏi ngớ ngẩn. Tôi đã kết nối thành công IntelliJ (Play! Framework) với Selenium và tạo một số thử nghiệm bằng firefoxDrivers.Làm thế nào để kiểm tra xem dom có ​​một lớp bằng cách sử dụng WebDriver (Selenium 2)?

Tôi đang cố gắng kiểm tra xem trang đã được xác thực chưa.

câu chuyện dài ngắn, tôi chọn một yếu tố như thế này:

WebElement smallDecel = firefoxDriver.findElement(By.cssSelector("#configTable tr:nth-child(2) td .playerDecelInput")); 

tôi làm một số hoạt động hơn nữa (làm sạch và thay đổi giá trị, nộp 'form'), và sau đó tôi muốn kiểm tra xem đầu vào TD nằm trong một lớp khác.

Vì vậy, câu hỏi đặt ra là - có một kỹ thuật đơn giản mà tôi có thể sử dụng để tìm hiểu xem một WebElement/DOM có một lớp được chỉ định không?

Trả lời

8

Bạn có thể sử dụng FindElement(By.ClassName(//name of your class)); Tôi khuyên bạn nên lặp lại và tìm kiếm DOM trong một khoảng thời gian hoặc đặt Thread.sleep (xxxx) và sau đó tìm lớp được thêm vào.

+0

Selenium có thể chăm sóc chờ đợi để có tên lớp. Xem [Tài liệu Đợi Rõ ràng của Selen] (http://seleniumhq.org/docs/04_webdriver_advanced.jsp#explicit-waits) –

+0

+1 cho nhận xét của @ Julian. Ngoài ra câu hỏi là về việc kiểm tra lớp của một phần tử mà anh ta đã tìm thấy. Giải pháp của bạn có thể tìm các phần tử khác nhau với cùng một lớp và không nhất thiết phải là phần tử bạn đã tìm thấy. –

25

Khi bạn tìm thấy phần tử, bạn chỉ có thể gọi myElement.GetAttribute ("class"). Sau đó, bạn có thể phân tích cú pháp chuỗi được trả về và xem chuỗi có chứa hay không chứa tên lớp mà bạn quan tâm.

27

Để mở rộng Sam Woods' câu trả lời, tôi sử dụng một phương pháp mở rộng đơn giản (này là dành cho C#) để kiểm tra có hay không một phần tử có một lớp học cụ thể:

public static bool HasClass(this IWebElement el, string className) { 
    return el.GetAttribute("class").Split(' ').Contains(className); 
} 
+0

chỉ cần chỉnh sửa nhanh, Nó phải là '.split ('')' và không phải '.Split ('')' – avk

+3

Câu trả lời của mình là chính xác, là .Split ('') vì đây là C#, cũng tính đến bạn cần phải bao gồm System.Linq trong các chỉ thị sử dụng để cho .Contains hoạt động. – euther

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