2012-02-09 28 views
5

Tôi đang thử nghiệm tiện ích mở rộng của Chrome bằng cách sử dụng Dưa chuột kết hợp với Capybara và Selenium-Webdriver.Cách khởi động lại trình duyệt sau mỗi trường hợp thử nghiệm

thử nghiệm của tôi rất đơn giản:

@chrome_extension 
    @javascript 
     Scenario: Test1 
     Given I open a browser 
     And I close the browser 
     When I do nothing 
     Then nothing happens 

đâu các bước được định nghĩa là:

require 'selenium-webdriver' 

Given /^I open a browser$/ do 
    visit 'http://google.com' 
    STDERR.puts self 
end 

Given /^I close the browser$/ do 
    page.driver.browser.quit 
end 

Given /^I do nothing$/ do 

end 

Given /^nothing happens$/ do 

end 

Khi tôi gọi page.driver.browser.quit, nó bỏ ra khỏi phiên trình duyệt . Nhưng sau đó lỗi sau xảy ra:

Connection refused - connect(2) (Errno::ECONNREFUSED) 
     /Users/rui/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/net/http.rb:644:in `initialize' 
     /Users/rui/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/net/http.rb:644:in `open' 
     /Users/rui/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/net/http.rb:644:in `block in connect' 
     /Users/rui/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/timeout.rb:44:in `timeout' 
     /Users/rui/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/timeout.rb:87:in `timeout' 
     /Users/rui/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/net/http.rb:644:in `connect' 
     /Users/rui/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/net/http.rb:637:in `do_start' 
     /Users/rui/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/net/http.rb:626:in `start' 
     /Users/rui/.rvm/gems/[email protected]/gems/webmock-1.7.8/lib/webmock/http_lib_adapters/net_http.rb:90:in `request_with_webmock' 
     /Users/rui/.rvm/gems/[email protected]/gems/selenium-webdriver-2.3.2/lib/selenium/webdriver/remote/http/default.rb:73:in `response_for' 
     /Users/rui/.rvm/gems/[email protected]/gems/selenium-webdriver-2.3.2/lib/selenium/webdriver/remote/http/default.rb:41:in `request' 
     /Users/rui/.rvm/gems/[email protected]/gems/selenium-webdriver-2.3.2/lib/selenium/webdriver/remote/http/common.rb:34:in `call' 
     /Users/rui/.rvm/gems/[email protected]/gems/selenium-webdriver-2.3.2/lib/selenium/webdriver/remote/bridge.rb:406:in `raw_execute' 
     /Users/rui/.rvm/gems/[email protected]/gems/selenium-webdriver-2.3.2/lib/selenium/webdriver/remote/bridge.rb:384:in `execute' 
     /Users/rui/.rvm/gems/[email protected]/gems/selenium-webdriver-2.3.2/lib/selenium/webdriver/remote/bridge.rb:228:in `deleteAllCookies' 
     /Users/rui/.rvm/gems/[email protected]/gems/selenium-webdriver-2.3.2/lib/selenium/webdriver/common/options.rb:67:in `delete_all_cookies' 
     /Users/rui/.rvm/gems/[email protected]/gems/capybara-1.1.2/lib/capybara/selenium/driver.rb:81:in `reset!' 
     /Users/rui/.rvm/gems/[email protected]/gems/capybara-1.1.2/lib/capybara/session.rb:70:in `reset!' 
     /Users/rui/.rvm/gems/[email protected]/gems/capybara-1.1.2/lib/capybara/dsl.rb:87:in `block in reset_sessions!' 
     /Users/rui/.rvm/gems/[email protected]/gems/capybara-1.1.2/lib/capybara/dsl.rb:87:in `each' 
     /Users/rui/.rvm/gems/[email protected]/gems/capybara-1.1.2/lib/capybara/dsl.rb:87:in `reset_sessions!' 
     /Users/rui/.rvm/gems/[email protected]/gems/capybara-1.1.2/lib/capybara/cucumber.rb:10:in `After' 

Cách thích hợp để khởi động lại trình duyệt sau mỗi trường hợp là gì? Tôi cần mọi thử nghiệm để trở thành quốc tịch nhất có thể.

Cảm ơn trước!

+0

Tôi đã thêm câu trả lời bên dưới. Điều quan trọng là khi bạn thiết lập điều này, bạn chỉ cần chắc chắn rằng @After hook của bạn phá hủy triệt để trình điều khiển WebDriver mỗi lần. – MikeJRamsey56

Trả lời

0

Có thể có một cách thanh lịch hơn để làm điều này, nhưng tôi sẽ xem xét có mỗi kịch bản trong nhiệm vụ cào riêng của mình và sử dụng thẻ trong dưa chuột, như vậy:

desc "Run scenario 1" 
task :scenario_1 do 
cmd = "cucumber --tags @1" 
`#{cmd}` 
end` 

Việc làm này sẽ thực hiện chính xác những gì bạn sau khi dưa chuột hỗ trợ này ra khỏi hộp với đối số --tags.

1

Sử dụng Watir-webdriver, rất giống với selen.

Bạn có thể thực hiện việc này bằng cách sử dụng móc. Thực hiện một số nghiên cứu về móc để hiểu rõ hơn, nhưng trong thư mục hỗ trợ cho dự án của bạn, bạn sẽ muốn tạo một tệp móc. Tôi đang sử dụng ruby ​​và rubymine để chạy thử nghiệm của tôi, vì vậy trong môi trường của bạn nó có thể khác nhau.

Tệp móc của bạn có thể trông giống như thế này.

require 'watir-webdriver' 



Before do 
    @browser = Watir::Browser.new :chrome 
end 


After do 
    @browser.close 
end 

Sau đó, trước mỗi kịch bản được chạy, nó sẽ mở một phiên bản trình duyệt và đóng trình duyệt khi hoàn thành kịch bản.

0

Xóa cookie và làm mới trình duyệt trong móc sau. Ví dụ: tôi sử dụng điều này trong Watir-Webdriver

After do |scenario| 
    browser.cookies.clear 
    browser.refresh 
end 
0

Ví dụ đã xóa java.

Capybara đang cố gắng giúp bạn tiết kiệm công việc bằng cách dự đoán những gì bạn muốn làm. Capybara đóng phiên sau mỗi bước. Nếu bạn đóng phiên trình duyệt một cách rõ ràng sau đó khi capybara cố gắng để làm sạch cookie không có phiên làm sạch.

Nếu bạn không muốn capybara xử lý những thứ này thì hãy tự mình làm mà không có capybara.

+0

Bạn có thể xem chi tiết ở trên trên trang GitHub của tôi [ở đây] (https://github.com/mikejramsey56/cuc_jav_webdriver.git). – MikeJRamsey56

+0

Từ giao diện của thông báo lỗi của anh ta, anh ta sử dụng Ruby. Không chắc chắn việc thực hiện Java sẽ giúp anh ta trong trường hợp này. –

+0

@JarodAdair Điểm tốt. – MikeJRamsey56

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