2015-08-17 13 views
10

Tôi nhận được lỗi :tên lớp Compound không được phép lỗi Webdriver

"tên lớp Compound không được phép"

trong khi cố gắng truy cập vào yếu tố web nơi-in tên lớp của phần tử có không gian ở giữa. Nguồn trang cho phần tử web như sau.

driver.findElement(By.className("alert alert-success")); 

<div class="alert alert-success" alert-dismissable"="" id="58417" style="display: none;"> 
 
    <button type="button" class="close hide-panel close-icon-58417" data-dismiss="alert" aria-hidden="true" style="display: inline-block;">×</button><span id="caret-58417" class="notification-caret caret-58417"></span> 
 
    <div class="hide-panel close-icon-58417" id="58417" style="display: block;"> 
 
     <span class="glyphicon glyphicon-ok-sign"></span><strong>Success</strong> KeyLinks Updated Successfully 
 
     <div class="notification-panel-body panel-body-58417">REST Invocation Success</div> 
 
    </div> 
 
</div>

Tôi cố gắng để tìm ra phần tử bằng con đường CSS như dưới đây. Nhưng phần tử không thể tìm kiếm được với điều này.

driver.findElement(By.cssSelector(".alert alert-success")); 

Đây là cách giải quyết given in the Link nhưng vẫn không thành công . giúp đỡ của bạn sẽ được nhiều đánh giá cao.

+0

Bản sao có thể có của [Cách tránh lỗi tên lớp tổng hợp trong đối tượng trang?] (Http://stackoverflow.com/questions/17808521/how-to-avoid-compound-class-name-error-in-page- đối tượng) – Liam

Trả lời

20

Bạn có thể truy cập vào các phần tử nếu nó có nhiều lớp như dưới đây:

driver.findElement(By.cssSelector(".alert.alert-success"); 
4

Bạn có thể sử dụng

driver.findElement(By.className("alert-success")); 

hoặc

driver.findElement(By.className("alert")); 

Như ngay bây giờ selen không hỗ trợ nhiều lớp bạn.Nếu tên lớp của bạn bao gồm một không gian, WebDriver sẽ xem nó như là một "hợp chất bộ chọn". Bạn có thể sử dụng cssSelector hoặc id để chọn webelement.

+1

Giải pháp này phù hợp với tôi. Cảm ơn rất nhiều. Điều gì có thể là lý do khiến driver.findElement (By.cssSelector ("cảnh báo cảnh báo thành công")); không thể tìm thấy phần tử? –

+0

bạn phải sử dụng như thế này: '.alert.alert-success' – ldevp

1

Vấn đề là do cách thức tìm kiếm theo tên lớp hoạt động.

trong tên lớp mã của bạn là class="alert alert-success"

Nếu tên lớp có không gian bạn sẽ nhận được lỗi trên. Bạn chỉ có thể loại bỏ vấn đề bằng cách sử dụng Id, CSS, Xpath, biểu thức chính quy hoặc bất kỳ phương thức tìm phần tử nào khác.

Bạn có cần sử dụng Tên lớp hoặc bạn có thể sử dụng phương pháp khác không? Hãy cho tôi biết nếu bạn cần sử dụng tên lớp.

+0

Nó không phải là phải cho tôi để sử dụng ClassName Identifer. Điều gì sẽ là giải pháp nếu sử dụng ClassName là một PHẢI? –

2

Nếu sử dụng tên lớp là bạn phải có thể sử dụng các cách sau:

1) css selectors:

driver.findElement(By.cssSelector(".alert.alert-success"); 

2) sử dụng xpath

driver.findElement(By.xpath("//div[@class='alert alert-success']")) 

Hãy thử tránh xpath và sử dụng bộ chọn css thay thế.

0

Hầu hết thuộc tính tên lớp thời gian của bất kỳ phần tử nào đều có các nhóm tên lớp. như class = 'cảnh báo cảnh báo thành công một tên lớp'

nếu bạn đang sử dụng selector css, sau đó chỉ cần loại bỏ khoảng trống giữa tên lớp và tạo bạn Clas tên như dưới đây: driver.findElement (By.cssSelector (" .alert.alert-success.another.class.name ")

. => đại diện cho lớp

=> đại diện cho ID

cho selector CSS.

0

Nó cũng có thể được thực hiện bằng tên lớp như:

driver.find_element_by_class_name("alert") 

hoặc

driver.find_element_by_class_name("alert-success") 

bạn có thể chọn tên lớp bất cứ ai từ hai hay nhiều tên lớp cách nhau bằng dấu nó sẽ chỉ làm việc tốt.

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