2011-01-14 41 views
10

Tôi đang học cách viết các bài kiểm tra bằng dưa chuột/webrat. Một trong các kịch bản thử nghiệm của tôi được đặt để kiểm tra xác thực biểu mẫu (để trống trường). Thật kỳ lạ, các trường mà tôi không điền vào với fill_in được đặt thành thuộc tính name của trường. Điều này chỉ xảy ra khi tôi chạy dưa chuột, khi sử dụng một trình duyệt, điều này không xảy ra.các trường mẫu tự động điền webrat

Bước Tôi đang sử dụng là thẳng về phía trước:

When /^I submit the form$/ do 
    # Not filling in the 'Name' field here 
    fill_in 'Description', :with => 'This is a description' 
    click_button 'Save' 
end 

Sau khi chạy kịch bản sử dụng các bước trên, tôi có thể thấy rằng các trường văn bản "Tên" được đặt thành "tên" thay vì là trống. Đây cũng là trường hợp nếu tôi điền vào trong lĩnh vực đó với một khoảng trống hoặc nil:

fill_in 'Name', :with => '' 

Dạng Tôi đang thử nghiệm trên là đủ đơn giản:

<form action="/item/create" method="post"> 
    <div> 
    <label for="ItemName">Name</label> 
    <input type="text" name="name" id="ItemName" /> 
    </div> 
    <div> 
    <label for="ItemDescription">Description</label> 
    <textarea name="description" id="ItemDescription"></textarea> 
    </div> 
    <input type="submit" value="Save" /> 
</form> 

Bất cứ ý tưởng tại sao điều này đang xảy ra?

+0

+1 Đối với một vấn đề thú vị. Không thể chờ cho đến khi ai đó hình dung ra điều này. – raidfive

+0

Điều gì xảy ra nếu bạn điền vào tên, nhưng không phải là mô tả?Tôi tự hỏi nếu bạn đã nhấn một trường hợp cạnh với nhãn, thuộc tính và giá trị tất cả là "tên" –

+0

@Mark, Nếu tôi điền vào tên nhưng không phải là mô tả, Nó sẽ điền vào trường mô tả bằng chữ " mô tả "đó là giá trị của tên người đăng ký của trường đó. – dmondark

Trả lời

2

Tôi đoán bạn đang sử dụng Webrat với bộ điều hợp Cơ chế, đúng không? Nếu vậy, tôi thấy mình rất thất vọng bởi cùng một vấn đề. Hóa ra đó là một lỗi trong cách Webrat chuyển các giá trị trường biểu mẫu tới Cơ chế hóa. Bạn có thể tìm thấy chi tiết và bản vá tại đây: https://webrat.lighthouseapp.com/projects/10503/tickets/384-webrat-does-not-pass-empty-form-fields-correctly-to-mechanize

Ngoài ra, nếu bạn không muốn sử dụng phiên bản Webrat được vá, một cách giải quyết không tối ưu là thay thế fill_in bằng khoảng trắng ('') và đảm bảo các quy trình xác thực đầu vào của ứng dụng hoặc bỏ qua khoảng trống khi xem xét liệu một trường có được điền chính xác hay không.

Thật không may có vẻ như có một số vấn đề như thế này, đã đóng góp các bản vá chưa được hợp nhất vào "mật mã Webrat" chính thức. Tôi đã gửi thư điện tử cho tác giả khoảng một tháng rưỡi trước để hỏi liệu anh ấy có còn giữ nó hay không, và nếu không, hãy cân nhắc việc gọi điện thoại cho ai đó, vì nhiều người vẫn sử dụng nó. Cho đến nay, tôi chưa nhận được phản hồi.

+0

Miquel, Cảm ơn câu trả lời của bạn và bản vá. Nó khắc phục vấn đề (Yep, tôi đang/đang sử dụng Machanize). Tôi phải đề cập đến rằng chúng tôi đã chuyển sang Capybarra, đó là một cái gì đó hầu hết đã làm nó có vẻ. Capybarra đã được khá ổn định và cách nó xử lý các trình điều khiển là khá gọn gàng. Tôi cũng nghe nói rằng Webrat không còn được duy trì nữa, nhưng tôi không thể xác nhận điều đó. – dmondark

1

Một điều bạn có thể thử là đảm bảo tự động hoàn tất được tắt trên trường đó (autocomplete = "off") để xem điều đó có ảnh hưởng đến kết quả không.

<form action="/item/create" method="post"> 
    <div> 
    <label for="ItemName">Name</label> 
    <input type="text" name="name" id="ItemName" autocomplete="off" /> 
    </div> 
    <div> 
    <label for="ItemDescription">Description</label> 
    <textarea name="description" id="ItemDescription"></textarea> 
    </div> 
    <input type="submit" value="Save" /> 
</form> 
+0

chúng tôi đã phải làm điều đó vì tự động điền trong Firefox đã được điền vào các trường trong bài kiểm tra của chúng tôi. Ngoài ra nếu bạn có một trường mật khẩu, nó sẽ điền vào mật khẩu của bạn trong bộ nhớ cache điền biểu mẫu cũng như điền vào trường văn bản trước mật khẩu, bất kể tên của trường đó là gì, với tên người dùng trong biểu mẫu điền cache – Ben

+0

Dang, có vẻ như rất khó để theo dõi:/Bạn có thể khởi chạy Firefox trong hồ sơ người dùng khác hoặc ẩn danh để ngăn điều này xảy ra không? – raidfive

+0

Đây là trong bộ thử nghiệm của chúng tôi khi nó sử dụng selen. Bạn không chắc chắn cách bảo nó chạy trong một cấu hình khác. Nhưng không cần thiết vì ** autocomplete = "off" ** đã khắc phục sự cố của chúng tôi và đó là trường mà chúng tôi không muốn tự động hoàn thành. – Ben

0

Bạn có thể thử thứ gì đó như thế này trong bước không?

Với% {Tôi điền vào "tên" với ""}

Hoặc thậm chí tốt hơn, trong file tính năng sử dụng

Với tôi điền vào "tên với "".

tôi cũng xin đề nghị chuyển sang Capybara, bạn có thể làm những việc như thế này:

https://github.com/jnicklas/capybara/issues/issue/219

Điều này sẽ cho phép bạn thiết lập cấu hình Firefox cho các bài kiểm tra selen của bạn.

+0

Cảm ơn Tyler. Tôi đã thử vượt qua một chuỗi rỗng (và một nil) nhưng nó vẫn sẽ điền vào nó với tên trường. Tôi chắc chắn sẽ nhìn vào Capybara, nhưng tôi không sử dụng firefox/selenium. Chỉ webrat vào thời điểm này. – dmondark

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