2010-05-13 29 views
5

Tôi đang sử dụng đường ray 2.3.5 và đây là những gì tôi đã làm. Tôi có dưa chuột mới nhất, dưa chuột-đường ray và capybara cài đặt.capybara selenium và JavaScript Destroy

rails demo 
cd demo 
ruby script/generate cucumber --rspec --capybara 
ruby script/generate feature post title:string body:text published:boolean 
ruby script/generate scaffold post title:string body:text published:boolean 
rake db:migrate 
rake cucumber 

Tất cả các thử nghiệm đều được chuyển. Bây giờ tôi muốn thử nghiệm bằng cách sử dụng Javascript.

Tại thời điểm này đây là cách kịch bản trông giống như

Scenario: Delete post 
    Given the following posts: 
     |title|body|published| 
     |title 1|body 1|false| 
     |title 2|body 2|true| 
     |title 3|body 3|false| 
     |title 4|body 4|true| 
    When I delete the 3rd post 
    Then I should see the following posts: 
     |Title|Body|Published| 
     |title 1|body 1|false| 
     |title 2|body 2|true| 
     |title 4|body 4|true| 

tôi thêm @javascript ở đầu trang.

Bây giờ khi tôi chạy cào dưa chuột thì tôi thấy một trang xác nhận. Nhưng không có gì xảy ra cho đến khi tôi nhấp vào.

Tôi cần làm gì để OK được nhấp tự động và thử nghiệm số tiền thu được trước.

Trả lời

8

Vâng loại hình này của một hack, nhưng tôi nghĩ rằng ngay bây giờ cách duy nhất của nó:

When /^I confirm a js popup on the next step$/ do 
    page.evaluate_script("window.alert = function(msg) { return true; }") 
    page.evaluate_script("window.confirm = function(msg) { return true; }") 
end 

Bạn phải đặt bước này ngay trước mặt một trong đó gây nên xác nhận popup (sau liên kết) . Nó sẽ sửa đổi cảnh báo chuẩn và xác nhận hành vi để luôn trả về đúng sự thật. Vì vậy, bạn không phải bấm vào nút "OK" cho mình.

+0

Ghét phải làm điều này, nhưng nó hoạt động! –

0

Nhờ Steven cho giải pháp của mình, dưới đây là cách tôi sửa đổi nó để nó đọc tốt hơn một chút:

When /^I follow "([^"]*)" and click OK$/ do |text| 
    page.evaluate_script("window.alert = function(msg) { return true; }") 
    page.evaluate_script("window.confirm = function(msg) { return true; }") 
    When %{I follow "#{text}"} 
end 
2

Tôi đã thực hiện một sự thay đổi về giải pháp Tobias của.

tôi muốn có các bước như When I follow the "Delete" link for customer "Alice Angry", vì vậy tôi đã điều sau đây:

When /^(.*) and (?:|I)click "OK"$/ do |step| 
    click_ok_after { When step } 
end 

module JavascriptHelpers 
    def click_ok_after 
    begin 
     page.evaluate_script("window.alert = function(msg) { return true; }") 
     page.evaluate_script("window.confirm = function(msg) { return true; }") 
    rescue Capybara::NotSupportedByDriverError 
     # do nothing: we're not testing javascript 
    ensure 
     yield 
    end 
    end 
end 
World(JavascriptHelpers) 

Lời giải thích đầy đủ có thể được tìm thấy trong các bài viết trên blog, tôi đã viết về nó ở đây http://davidsulc.com/blog/2011/07/10/cucumber-tweaks/ (bao gồm cả một định nghĩa bước hữu ích cho nội dung thử nghiệm trong vùng chứa HTML).

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