2012-12-06 13 views
14

Tôi đang sử dụng Capybara để viết test trong ứng dụng của mình, nhưng bây giờ tôi có một tình huống mà tôi cần đọc id của một phần tử trong capybara nhưLàm thế nào để lấy id của một phần tử khi sử dụng Capybara để kiểm tra (Rails)

myid = page.find("#parentNode").first(".childClass").id

Cân nhắc tôi có cấu trúc bên dưới HTML

<div id="parentNode"> 
<div id="childNode1" class="childClass">1</div> 
<div id="childNode2" class="childClass">2</div> 
</div> 

Xin lưu ý: tôi không cố gắng để đọc nội dung của nút con, nhưng id. Ví dụ ở trên là ví dụ.

Dự kiến ​​Output:. childNode1 (id của phần tử đầu tiên với lớp ChildClass

Trả lời

25

Bạn đang gần như gần câu trả lời. Thay đổi duy nhất thay vì gọi id là phương thức, bạn phải gọi đó là thuộc tính như sau

page.find("#parentNode").first(".childClass")[:id] 
+0

Câu trả lời hay. Chỉ muốn thêm rằng nếu bạn muốn lưu trữ id trong một biến, bạn nên làm một cái gì đó như thế này 'myid =" # "+ page.find (" # parentNode "). Đầu tiên (". ChildClass ") [: id]' –

1

tôi sẽ sử dụng một số xpath thay vì css trong trường hợp này Lưu ý tôi không phải là kỹ năng trong xpathing vì vậy tôi sử dụng css đầu tiên để tìm parentNode.

find(#parentNode).find(:xpath, div[1]).id 

Hãy thử điều đó và xem nếu nó hoạt động.

bắt buộc, bạn có thể sử dụng css trong lần thứ hai tìm thấy là tốt và sử dụng lớp như tiêu chí kể từ khi nó tìm thấy s yếu tố đầu tiên anyway.

0

Có câu trả lời .. !!

Chúng tôi có thể sử dụng page.evaluate_script để đạt được điều này. Tôi đã sử dụng mã dưới đây

page.evaluate_script('$("#parentNode .childNode").first().attr("id")')

Hy vọng điều này sẽ giúp một số một :)